@coco-vexel/coco-office-editor 0.0.0-stage → 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 (57) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +510 -2
  3. package/THIRD_PARTY_NOTICES.md +212 -0
  4. package/dist/index.cjs +26401 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.d.cts +12 -0
  7. package/dist/index.d.ts +12 -0
  8. package/dist/index.js +26192 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/model-DB6aN6uJ.d.cts +321 -0
  11. package/dist/model-DB6aN6uJ.d.ts +321 -0
  12. package/dist/native-B6B649CC.d.ts +1111 -0
  13. package/dist/native-Ct9nN06K.d.cts +1111 -0
  14. package/dist/ppt-native.cjs +5334 -0
  15. package/dist/ppt-native.cjs.map +1 -0
  16. package/dist/ppt-native.d.cts +2 -0
  17. package/dist/ppt-native.d.ts +2 -0
  18. package/dist/ppt-native.js +5332 -0
  19. package/dist/ppt-native.js.map +1 -0
  20. package/dist/ppt.cjs +5426 -0
  21. package/dist/ppt.cjs.map +1 -0
  22. package/dist/ppt.d.cts +306 -0
  23. package/dist/ppt.d.ts +306 -0
  24. package/dist/ppt.js +5410 -0
  25. package/dist/ppt.js.map +1 -0
  26. package/dist/spreadsheet.cjs +4276 -0
  27. package/dist/spreadsheet.cjs.map +1 -0
  28. package/dist/spreadsheet.d.cts +676 -0
  29. package/dist/spreadsheet.d.ts +676 -0
  30. package/dist/spreadsheet.js +4213 -0
  31. package/dist/spreadsheet.js.map +1 -0
  32. package/dist/word-editing.cjs +812 -0
  33. package/dist/word-editing.cjs.map +1 -0
  34. package/dist/word-editing.d.cts +149 -0
  35. package/dist/word-editing.d.ts +149 -0
  36. package/dist/word-editing.js +803 -0
  37. package/dist/word-editing.js.map +1 -0
  38. package/dist/word-native.cjs +13400 -0
  39. package/dist/word-native.cjs.map +1 -0
  40. package/dist/word-native.d.cts +4 -0
  41. package/dist/word-native.d.ts +4 -0
  42. package/dist/word-native.js +13293 -0
  43. package/dist/word-native.js.map +1 -0
  44. package/dist/word-prosemirror.cjs +489 -0
  45. package/dist/word-prosemirror.cjs.map +1 -0
  46. package/dist/word-prosemirror.d.cts +21 -0
  47. package/dist/word-prosemirror.d.ts +21 -0
  48. package/dist/word-prosemirror.js +483 -0
  49. package/dist/word-prosemirror.js.map +1 -0
  50. package/dist/word.cjs +16764 -0
  51. package/dist/word.cjs.map +1 -0
  52. package/dist/word.d.cts +84 -0
  53. package/dist/word.d.ts +84 -0
  54. package/dist/word.js +16632 -0
  55. package/dist/word.js.map +1 -0
  56. package/package.json +106 -3
  57. package/src/styles/editor.css +1507 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ppt/scene.ts","../src/ppt/session.ts","../src/ppt/native.ts"],"names":["_a","editableTextShape","Presentation","_b","_c","_d","bounds","isResizeWrappingTextShape","text","left","right","top","bottom","ratio","_e","_f"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwHO,IAAM,sBAAA,GAAuC;AAAA,EAClD,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,kBAAA,uBAAyB,GAAA,CAAkB;AAAA,EAC/C,aAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,qBAAA,uBAA4B,OAAA,EAA6C;AAExE,SAAS,0BAA0B,KAAA,EAAmD;AArI7F,EAAA,IAAA,EAAA;AAsIE,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,CAAM,SAAA,KAAN,IAAA,GAAA,EAAA,GAAmB,sBAAA;AAChC,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,MAAA,EAAQ,MAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,kBAAA,CAAmB,KAAA,EAAO,IAAI,CAAC;AAAA,GACrE;AACF;AANgB,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAQT,SAAS,kBAAA,CACd,OACA,YAAA,EACe;AAhJjB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiJE,EAAA,MAAM,gBAAe,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,MAAA,KAAd,YAAwB,EAAC;AAC9C,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,GAAA,CAAA,CAAI,uBAAM,MAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,WAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,MAAA,KAAtB,IAAA,GAAA,EAAA,GAAgC,EAAC,EAAG,GAAA;AAAA,MAAI,CAAC,KAAA,KAC3C,uBAAA,CAAwB,KAAA,EAAO,QAAQ;AAAA,KACzC;AAAA,IACA,GAAG,aAAa,GAAA,CAAI,CAAC,UAAU,uBAAA,CAAwB,KAAA,EAAO,QAAQ,CAAC;AAAA,GACzE,CAAE,OAAO,0BAA0B,CAAA;AACnC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,eAAA;AAAA,IACH,GAAG,MAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,2BAAA,CAA4B,KAAA,EAAO,YAAY,CAAC;AAAA,GACjF;AACA,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,sBAAsB,CAAA;AAC1D,EAAA,MAAM,UAAA,GAAA,CACJ,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,EAAA,GAAA,CAAoB,EAAA,GAAA,KAAA,CAAM,MAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,UAAA,KAAlC,IAAA,GAAA,EAAA,GAAA,CAAgD,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,WAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,UAAA;AACxE,EAAA,MAAM,cAAA,GAAiB,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,+BAAA,CAAgC,MAAA,EAAQ,YAAY,CAAA;AACzF,EAAA,OAAO,aAAA,CAAA,cAAA,CAAA;AAAA,IACL,IAAI,KAAA,CAAM,EAAA;AAAA,IACV,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,IAAA,EAAM;AAAA,GAAA,EACF,UAAA,GAAa,EAAE,UAAA,EAAW,GAAI,EAAC,CAAA,EAN9B;AAAA,IAOL,OAAO,YAAA,CAAa,GAAA;AAAA,MAAI,CAAC,KAAA,EAAO,KAAA,KAC9B,iBAAA,CAAkB,KAAA,EAAO,EAAE,SAAA,EAAW,YAAA,EAAc,KAAA,EAAO,UAAA,EAAY,cAAA,EAAgB;AAAA,KACzF;AAAA,IACA,QAAQ,MAAA,CAAO,OAAA;AAAA,MAAQ,CAAC,KAAA,KACtB,sBAAA,CAAuB,OAAO,EAAE,UAAA,EAAY,gBAAgB;AAAA,KAC9D;AAAA,IACA,MAAA,EAAQ;AAAA,GACV,CAAA;AACF;AAlCgB,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAoChB,SAAS,+BAAA,CACP,QACA,SAAA,EACqC;AApLvC,EAAA,IAAA,EAAA;AAqLE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU;AArLzC,IAAA,IAAAA,GAAAA;AAsLI,IAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,KAAA,CAAM,QAAQ,CAAA;AAClD,IAAA,OACE,KAAA,CAAM,IAAA,KAAS,SAAA,IACf,CAAC,EAAA,CAACA,GAAAA,GAAA,KAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAa,UAAA,CAAA,IACf,MAAA,CAAO,IAAA,IAAQ,SAAA,CAAU,KAAA,GAAQ,IAAA,IACjC,MAAA,CAAO,GAAA,IAAO,SAAA,CAAU,MAAA,GAAS,IAAA,IACjC,MAAA,CAAO,KAAA,IAAS,SAAA,CAAU,KAAA,GAAQ,IAAA,IAClC,MAAA,CAAO,MAAA,IAAU,UAAU,MAAA,GAAS,IAAA;AAAA,EAExC,CAAC,CAAA;AACD,EAAA,OAAA,CAAA,CAAO,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,UAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,UAAA,IAAa,EAAE,SAAA,EAAW,OAAA,CAAQ,KAAA,CAAM,UAAA,EAAW,GAAI,MAAA;AAChF;AAhBS,MAAA,CAAA,+BAAA,EAAA,iCAAA,CAAA;AAkBT,SAAS,uBAAA,CAAwB,OAAsB,MAAA,EAA4C;AAnMnG,EAAA,IAAA,EAAA;AAoME,EAAA,OAAO,iCACF,KAAA,CAAA,EADE;AAAA,IAEL,EAAA,EAAI,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,EAAE,CAAA,CAAA;AAAA,IACzB,QAAA,EAAA,CAAU,WAAM,QAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,IAAI,CAAC,KAAA,KAAU,uBAAA,CAAwB,KAAA,EAAO,MAAM,CAAA;AAAA,GAChF,CAAA;AACF;AANS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAQT,SAAS,2BAA2B,KAAA,EAA+B;AACjE,EAAA,IAAI,KAAA,CAAM,aAAa,OAAO,KAAA;AAC9B,EAAA,OACE,KAAA,CAAM,IAAA,KAAS,OAAA,IACf,KAAA,CAAM,IAAA,KAAS,SAAA,IACf,KAAA,CAAM,IAAA,KAAS,gBAAA,IACf,KAAA,CAAM,IAAA,KAAS,MAAA,IACf,MAAM,IAAA,KAAS,SAAA;AAEnB;AATS,MAAA,CAAA,0BAAA,EAAA,4BAAA,CAAA;AAWT,SAAS,uBAAuB,KAAA,EAAuC;AAtNvE,EAAA,IAAA,EAAA;AAuNE,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS,OAAO,CAAC,KAAK,CAAA;AACzC,EAAA,OAAA,CAAA,CAAQ,EAAA,GAAA,KAAA,CAAM,QAAA,KAAN,IAAA,GAAA,EAAA,GAAkB,EAAC,EAAG,OAAA;AAAA,IAAQ,CAAC,KAAA,KACrC,sBAAA,CAAuB,mBAAA,CAAoB,KAAA,EAAO,KAAK,CAAC;AAAA,GAC1D;AACF;AALS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAOT,SAAS,sBAAA,CACP,KAAA,EACA,OAAA,GAA8F,EAAC,EAC/E;AAhOlB,EAAA,IAAA,EAAA;AAiOE,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS,OAAO,EAAC;AACpC,EAAA,OAAO;AAAA,IACL,kBAAkB,KAAA,EAAO;AAAA,MACvB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AAAA,IACD,GAAA,CAAA,CAAI,WAAM,QAAA,KAAN,IAAA,GAAA,EAAA,GAAkB,EAAC,EACpB,GAAA,CAAI,CAAC,KAAA,KAAU,mBAAA,CAAoB,OAAO,KAAK,CAAC,EAChD,OAAA,CAAQ,CAAC,UAAU,sBAAA,CAAuB,KAAA,EAAO,OAAO,CAAC;AAAA,GAC9D;AACF;AAdS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAgBT,SAAS,mBAAA,CAAoB,OAAsB,KAAA,EAAqC;AA7OxF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8OE,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,KAAA,CAAM,QAAQ,CAAA;AACvD,EAAA,MAAM,cAAA,GAAA,CAAiB,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,cAAA;AAClC,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,KAAA,CAAM,QAAQ,CAAA;AACvD,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB,SAAA,KAAhB,IAAA,GAAA,EAAA,GAA6B,WAAA,CAAY,IAAA;AAC3D,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB,QAAA,KAAhB,IAAA,GAAA,EAAA,GAA4B,WAAA,CAAY,GAAA;AACzD,EAAA,MAAM,UAAA,GAAA,CAAa,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB,UAAA,KAAc,WAAA,CAAY,KAAA,IAAS,CAAA;AACtE,EAAA,MAAM,WAAA,GAAA,CAAc,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB,WAAA,KAAe,WAAA,CAAY,MAAA,IAAU,CAAA;AACzE,EAAA,MAAM,MAAA,GAAS,YAAY,KAAA,GAAQ,UAAA;AACnC,EAAA,MAAM,MAAA,GAAS,YAAY,MAAA,GAAS,WAAA;AACpC,EAAA,MAAM,UAAA,GAAA,CAAc,WAAA,CAAY,IAAA,GAAO,SAAA,IAAa,MAAA;AACpD,EAAA,MAAM,SAAA,GAAA,CAAa,WAAA,CAAY,GAAA,GAAM,QAAA,IAAY,MAAA;AACjD,EAAA,MAAM,WAAA,GAAc,YAAY,KAAA,GAAQ,MAAA;AACxC,EAAA,MAAM,YAAA,GAAe,YAAY,MAAA,GAAS,MAAA;AAC1C,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,cAAA,GAC9B,WAAA,CAAY,IAAA,GAAO,YAAY,KAAA,GAAQ,UAAA,GAAa,WAAA,GACpD,WAAA,CAAY,IAAA,GAAO,UAAA;AACvB,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,YAAA,GAC7B,WAAA,CAAY,GAAA,GAAM,YAAY,MAAA,GAAS,SAAA,GAAY,YAAA,GACnD,WAAA,CAAY,GAAA,GAAM,SAAA;AACtB,EAAA,MAAM,aAAA,GAAgB,sBAAA;AAAA,IACpB;AAAA,MACE,IAAA,EAAM,aAAA;AAAA,MACN,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAW,oBAAmB,EAAA,GAAA,WAAA,CAAY,QAAA,KAAZ,YAAwB,CAAA,KAAA,CAAM,EAAA,GAAA,WAAA,CAAY,QAAA,KAAZ,IAAA,GAAA,EAAA,GAAwB,CAAA,CAAE,CAAA;AAC5F,EAAA,MAAM,WAAA,GAA6B,iCAC9B,KAAA,CAAA,EAD8B;AAAA,IAEjC,IAAI,CAAA,EAAG,KAAA,CAAM,EAAE,CAAA,CAAA,EAAI,MAAM,EAAE,CAAA,CAAA;AAAA,IAC3B,QAAA,EAAU,aAAA,CAAA,cAAA,CAAA,EAAA,EACL,KAAA,CAAM,QAAA,CAAA,EADD;AAAA,MAER,MAAM,aAAA,CAAc,IAAA;AAAA,MACpB,KAAK,aAAA,CAAc,GAAA;AAAA,MACnB,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ,YAAA;AAAA,MACR,QAAA;AAAA,MACA,gBAAgB,OAAA,CAAQ,WAAA,CAAY,cAAc,CAAA,KAAM,OAAA,CAAQ,YAAY,cAAc,CAAA;AAAA,MAC1F,cAAc,OAAA,CAAQ,WAAA,CAAY,YAAY,CAAA,KAAM,OAAA,CAAQ,YAAY,YAAY;AAAA,KACtF,CAAA;AAAA,IACA,UAAU,KAAA,CAAM;AAAA,GAClB,CAAA;AACA,EAAA,qBAAA,CAAsB,IAAI,WAAA,EAAa;AAAA,IACrC,UAAU,KAAA,CAAM,EAAA;AAAA,IAChB,YAAY,KAAA,CAAM,IAAA;AAAA,IAClB,YAAA,EAAc,WAAA;AAAA,IACd,eAAA,EAAiB;AAAA,MACf,SAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA;AACF,GACD,CAAA;AACD,EAAA,OAAO,WAAA;AACT;AAzDS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AA2DT,SAAS,sBAAA,CAAuB,OAAqB,KAAA,EAAmC;AACtF,EAAA,IAAI,CAAC,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA;AAC5B,EAAA,MAAM,KAAA,GAAS,KAAA,CAAM,QAAA,GAAW,IAAA,CAAK,EAAA,GAAM,GAAA;AAC3C,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,GAAO,KAAA,CAAM,KAAA,GAAQ,CAAA;AAChD,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAChD,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,GAAO,KAAA,CAAM,KAAA,GAAQ,CAAA;AAChD,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAChD,EAAA,MAAM,KAAK,YAAA,GAAe,YAAA;AAC1B,EAAA,MAAM,KAAK,YAAA,GAAe,YAAA;AAC1B,EAAA,MAAM,cAAA,GAAiB,YAAA,GAAe,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAChF,EAAA,MAAM,cAAA,GAAiB,YAAA,GAAe,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAChF,EAAA,OAAO,iCACF,KAAA,CAAA,EADE;AAAA,IAEL,IAAA,EAAM,cAAA,GAAiB,KAAA,CAAM,KAAA,GAAQ,CAAA;AAAA,IACrC,GAAA,EAAK,cAAA,GAAiB,KAAA,CAAM,MAAA,GAAS;AAAA,GACvC,CAAA;AACF;AAhBS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAkBT,SAAS,kBAAkB,QAAA,EAAsC;AAC/D,EAAA,MAAM,UAAA,GAAA,CAAe,QAAA,GAAW,GAAA,GAAO,GAAA,IAAO,GAAA;AAC9C,EAAA,OAAO,UAAA,KAAe,IAAI,MAAA,GAAY,UAAA;AACxC;AAHS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAKT,SAAS,2BAAA,CACP,OACA,YAAA,EACe;AAlUjB,EAAA,IAAA,EAAA;AAmUE,EAAA,IAAI,CAAC,KAAA,CAAM,WAAA,IAAe,CAAC,KAAA,CAAM,MAAM,OAAO,KAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,aAAa,IAAA,CAAK,CAAC,cAAc,eAAA,CAAgB,KAAA,EAAO,SAAS,CAAC,CAAA;AACtF,EAAA,MAAM,cAAA,GAAA,CAAiB,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,IAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,KAAA;AAC1C,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,WAAA,EAAa,OAAO,KAAA;AAC5C,EAAA,OAAO,iCACF,KAAA,CAAA,EADE;AAAA,IAEL,QAAA,EAAU,cAAA,CAAA,cAAA,CAAA,EAAA,EACL,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,QAAA,CAAA,EACb,KAAA,CAAM,QAAA,CAAA;AAAA,IAEX,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,KAAA,CAAM,IAAA,CAAA,EADL;AAAA,MAEJ,KAAA,EAAO,cAAA,CAAA,cAAA,CAAA,EAAA,EACF,cAAA,CAAA,EACA,KAAA,CAAM,IAAA,CAAK,KAAA;AAAA,KAElB;AAAA,GACF,CAAA;AACF;AAtBS,MAAA,CAAA,2BAAA,EAAA,6BAAA,CAAA;AAwBT,SAAS,eAAA,CAAgB,OAAsB,SAAA,EAAmC;AAvVlF,EAAA,IAAA,EAAA,EAAA,EAAA;AAwVE,EAAA,IAAI,CAAC,SAAA,CAAU,WAAA,EAAa,OAAO,KAAA;AACnC,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,KAAA,CAAM,gBAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,KAAA,KAAS,UAAU,WAAA,CAAY,KAAA,KAAU,MAAM,WAAA,CAAY,KAAA;AAChF,IAAA,OAAO,IAAA;AACT,EAAA,OAAO,OAAA,CAAA,CAAA,CAAQ,EAAA,GAAA,KAAA,CAAM,WAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,IAAA,KAAQ,UAAU,WAAA,CAAY,IAAA,KAAS,KAAA,CAAM,WAAA,CAAY,IAAI,CAAA;AACjG;AALS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAOF,SAAS,iBAAA,CACd,KAAA,EACA,OAAA,GAKI,EAAC,EACS;AAtWhB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuWE,EAAA,MAAM,YAAA,GAAe,yBAAyB,KAAK,CAAA;AACnD,EAAA,MAAM,QAAA,GACJ,aAAa,QAAA,IACb,YAAA,CAAa,iBACb,YAAA,CAAa,cAAA,IACb,YAAA,CAAa,YAAA,IACb,YAAA,CAAa,cAAA;AACf,EAAA,MAAM,aAAa,KAAA,CAAM,KAAA;AACzB,EAAA,MAAM,kBAAA,GAAA,CAAA,CAAqB,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,iBAAA,MAAsB,IAAA;AAC5D,EAAA,MAAM,SAAA,GAAY,kBAAA,GACd,MAAA,GAAA,CACC,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAA,KAAN,mBAAa,SAAA,KAAb,IAAA,GAAA,EAAA,GAA0B,sBAAA,CAAuB,KAAA,EAAO,OAAO,CAAA;AACpE,EAAA,MAAM,SAAA,GAAY,sBAAA,CAAA,CAAuB,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,mBAAY,KAAA,EAAO;AAAA,IAC1D,SAAA;AAAA,IACA,YAAY,OAAA,CAAQ;AAAA,GACrB,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,KAAA,CAAM,QAAQ,CAAA;AAClD,EAAA,OAAO,aAAA,CAAA,cAAA,CAAA;AAAA,IACL,IAAI,KAAA,CAAM,EAAA;AAAA,IACV,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,MAAA,EAAQ,iBAAA,CAAkB,KAAA,EAAO,MAAM,CAAA;AAAA,IACvC,OAAM,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,mBAAY,IAAA,KAAZ,IAAA,GAAA,EAAA,GAAoB,iBAAiB,KAAK,CAAA;AAAA,IAChD,SAAA;AAAA,IACA,cAAA,EAAA,CAAgB,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,UAAA;AAAA,IAC5B,QAAA,EAAA,CAAU,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA;AAAA,IACtB,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,UAAA;AAAA,IACxB,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,IAAA;AAAA,IACxB,aAAA,EAAA,CAAe,EAAA,GAAA,KAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAA;AAAA,IAC5B,YAAA,EAAA,CAAc,EAAA,GAAA,KAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,OAAA;AAAA,IAC3B,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,SAAA;AAAA,IACA,YAAA,EAAc,kBAAA,GAAqB,MAAA,GAAY,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,YAAA;AAAA,IAC3D,SAAS,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,OAAA;AAAA,IACrB,WAAW,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,SAAA;AAAA,IACvB,cAAc,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,YAAA;AAAA,IAC1B,aAAa,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,WAAA;AAAA,IACzB,WAAW,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,SAAA;AAAA,IACvB,SAAS,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,OAAA;AAAA,IACrB,UAAU,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,QAAA;AAAA,IACtB,aAAa,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,WAAA;AAAA,IACzB,aAAa,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,WAAA;AAAA,IACzB,QAAQ,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,MAAA;AAAA,IACpB,cAAA,EAAA,CAAgB,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,cAAA;AAAA,IAC3B,iBAAA,EAAA,CAAmB,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,iBAAA;AAAA,IAC9B,cAAA,EAAA,CAAgB,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,cAAA;AAAA,IAC3B,MAAA,EAAA,CAAQ,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,MAAA;AAAA,IACnB;AAAA,GAAA,EACI,kBAAA,IAAsB,QAAQ,cAAA,GAC9B,EAAE,gBAAgB,OAAA,CAAQ,cAAA,EAAe,GACzC,EAAC,CAAA,EAlCA;AAAA,IAmCL,QAAQ,CAAC,QAAA;AAAA,IACT,QAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA,EAAc,eAAe,KAAK,CAAA;AAAA,IAClC,MAAA,EAAQ,KAAA;AAAA,IACR,QAAA,EAAA,CAAA,CAAW,EAAA,GAAA,KAAA,CAAM,QAAA,KAAN,IAAA,GAAA,EAAA,GAAkB,EAAC,EAAG,GAAA;AAAA,MAAI,CAAC,KAAA,KACpC,iBAAA,CAAkB,KAAA,EAAO;AAAA,QACvB,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,gBAAgB,OAAA,CAAQ;AAAA,OACzB;AAAA;AACH,GACF,CAAA;AACF;AAzEgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AA2EhB,SAAS,iBAAiB,KAAA,EAA0C;AAClE,EAAA,IAAI,CAAC,KAAA,CAAM,KAAA,EAAO,OAAO,MAAA;AACzB,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAClE;AAHS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAKT,SAAS,iBAAA,CAAkB,OAAsB,MAAA,EAAoC;AACnF,EAAA,IAAI,CAAC,KAAA,CAAM,KAAA,EAAO,OAAO,MAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA;AACzD,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,KAAA,CAAM,KAAA,CAAM,UAAU,CAAA;AACxD,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,MAAA,KAAW,MAAA,EAAW,OAAO,MAAA;AACxD,EAAA,OAAO,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EACF,SACC,wBAAA,CAAyB,MAAA,CAAO,OAAO,KAAK,CAAA,GAAI,EAAE,KAAA,EAAM,GAAI,EAAC,CAAA,EAC7D,wBAAA,CAAyB,OAAO,MAAA,EAAQ,MAAM,IAAI,EAAE,MAAA,KAAW,EAAC,CAAA;AAExE;AAVS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAYT,SAAS,mBAAmB,MAAA,EAAkD;AAC5E,EAAA,IAAI,EAAC,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,MAAA,CAAA,EAAQ,OAAO,MAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,OAAO,MAAA,CAAO,CAAC,OAAO,KAAA,KAAU,KAAA,GAAQ,OAAO,CAAC,CAAA;AAC5D,EAAA,OAAO,OAAO,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,GAAM,IAAI,GAAA,GAAM,MAAA;AACjD;AAJS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAMT,SAAS,wBAAA,CAAyB,aAAqB,UAAA,EAAyC;AAC9F,EAAA,IAAI,UAAA,KAAe,QAAW,OAAO,KAAA;AACrC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,IAAK,WAAA,IAAe,GAAG,OAAO,IAAA;AAC9D,EAAA,MAAM,QAAQ,UAAA,GAAa,WAAA;AAC3B,EAAA,OAAO,KAAA,GAAQ,IAAA;AACjB;AALS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAOT,SAAS,sBAAA,CACP,OACA,OAAA,EACoB;AA1ctB,EAAA,IAAA,EAAA;AA2cE,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,KAAA,CAAM,QAAQ,CAAA;AAClD,EAAA,MAAM,OAAO,OAAA,CAAQ,SAAA;AACrB,EAAA,IACE,OAAA,CAAQ,KAAA,KAAU,CAAA,IAClB,KAAA,CAAM,IAAA,KAAS,gBAAA,IACf,EAAA,CAAC,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA,CAAA,IACb,IAAA,IACA,MAAA,CAAO,IAAA,IAAQ,CAAA,IACf,MAAA,CAAO,GAAA,IAAO,CAAA,IACd,MAAA,CAAO,KAAA,IAAS,IAAA,CAAK,KAAA,GAAQ,IAAA,IAC7B,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,MAAA,GAAS,IAAA,EAC/B;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAnBS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAqBT,SAAS,sBAAA,CACP,OACA,OAAA,EAC0B;AA/d5B,EAAA,IAAA,EAAA,EAAA,EAAA;AAgeE,EAAA,IAAI,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO,OAAO,KAAA;AACzB,EAAA,MAAM,kBAAiB,EAAA,GAAA,OAAA,CAAQ,SAAA,KAAR,IAAA,GAAA,EAAA,GAAA,CAAqB,EAAA,GAAA,OAAA,CAAQ,eAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,SAAA;AAChE,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,WAAA,CAAY,cAAc,GAAG,OAAO,KAAA;AAC5D,EAAA,OAAO,iCACF,KAAA,CAAA,EADE;AAAA,IAEL,KAAA,EAAO;AAAA,GACT,CAAA;AACF;AAXS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAaT,SAAS,YAAY,KAAA,EAAwB;AAC3C,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,KAAK,GAAA,GAAM,IAAA;AACxD;AARS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAqBF,SAAS,yBAAyB,KAAA,EAAgD;AACvF,EAAA,IAAI,mBAAA,CAAoB,KAAK,CAAA,EAAG;AAC9B,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,QAAA,EAAU,KAAA;AAAA,MACV,aAAA,EAAe,KAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,KAAA;AAAA,MACd,cAAA,EAAgB,KAAA;AAAA,MAChB,MAAA,EAAQ,8BAAA;AAAA,MACR,OAAA,EAAS,qBAAqB,6FAAkB;AAAA,KAClD;AAAA,EACF;AACA,EAAA,IAAI,qBAAA,CAAsB,KAAK,CAAA,EAAG;AAChC,IAAA,MAAMC,kBAAAA,GAAoB,QAAQ,KAAA,CAAM,IAAI,KAAK,kBAAA,CAAmB,GAAA,CAAI,MAAM,IAAI,CAAA;AAClF,IAAA,MAAM,gBAAgB,KAAA,CAAM,IAAA,KAAS,OAAA,IAAW,OAAA,CAAQ,MAAM,KAAK,CAAA;AACnE,IAAA,MAAM,UAAA,GAAa,4FAAA;AACnB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,QAAA,EAAUA,kBAAAA;AAAA,MACV,aAAA,EAAeA,kBAAAA;AAAA,MACf,cAAA,EAAgB,aAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB,KAAA;AAAA,MAChB,MAAA,EAAQ,uBAAA;AAAA,MACR,SAAS,yBAAA,CAA0B;AAAA,QACjC,QAAA,EAAUA,kBAAAA,GAAoB,MAAA,GAAY,oBAAA,CAAqB,KAAK,CAAA;AAAA,QACpE,aAAA,EAAeA,kBAAAA,GAAoB,MAAA,GAAY,oBAAA,CAAqB,KAAK,CAAA;AAAA,QACzE,cAAA,EAAgB,gBAAgB,MAAA,GAAY,kDAAA;AAAA,QAC5C,cAAA,EAAgB;AAAA,OACjB;AAAA,KACH;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,QAAA,EAAU,KAAA;AAAA,MACV,aAAA,EAAe,KAAA;AAAA,MACf,cAAA,EAAgB,IAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB,IAAA;AAAA,MAChB,SAAS,yBAAA,CAA0B;AAAA,QACjC,QAAA,EAAU,0EAAA;AAAA,QACV,aAAA,EAAe;AAAA,OAChB;AAAA,KACH;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,QAAA,EAAU,KAAA;AAAA,MACV,aAAA,EAAe,KAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB,IAAA;AAAA,MAChB,SAAS,yBAAA,CAA0B;AAAA,QACjC,QAAA,EAAU,oEAAA;AAAA,QACV,aAAA,EAAe,gFAAA;AAAA,QACf,cAAA,EAAgB;AAAA,OACjB;AAAA,KACH;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,OAAA,IAAW,KAAA,CAAM,SAAS,UAAA,IAAc,KAAA,CAAM,SAAS,OAAA,EAAS;AACjF,IAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,KAAA,CAAM,IAAI,CAAA;AACjD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,QAAA,EAAU,KAAA;AAAA,MACV,aAAA,EAAe,KAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB,KAAA;AAAA,MAChB,MAAA,EAAQ,6CAAA;AAAA,MACR,SAAS,yBAAA,CAA0B;AAAA,QACjC,UAAU,MAAA,CAAO,IAAA;AAAA,QACjB,eAAe,MAAA,CAAO,SAAA;AAAA,QACtB,cAAA,EAAgB,kDAAA;AAAA,QAChB,gBAAgB,MAAA,CAAO;AAAA,OACxB;AAAA,KACH;AAAA,EACF;AACA,EAAA,MAAM,iBAAA,GAAoB,QAAQ,KAAA,CAAM,IAAI,KAAK,kBAAA,CAAmB,GAAA,CAAI,MAAM,IAAI,CAAA;AAClF,EAAA,IAAI,kBAAA,CAAmB,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AACtC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,QAAA,EAAU,iBAAA;AAAA,MACV,aAAA,EAAe,iBAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB,IAAA;AAAA,MAChB,SAAS,yBAAA,CAA0B;AAAA,QACjC,QAAA,EAAU,iBAAA,GAAoB,MAAA,GAAY,oBAAA,CAAqB,KAAK,CAAA;AAAA,QACpE,aAAA,EAAe,iBAAA,GAAoB,MAAA,GAAY,oBAAA,CAAqB,KAAK,CAAA;AAAA,QACzE,cAAA,EAAgB;AAAA,OACjB;AAAA,KACH;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,IAAA;AAAA,IACR,QAAA,EAAU,KAAA;AAAA,IACV,aAAA,EAAe,KAAA;AAAA,IACf,cAAA,EAAgB,KAAA;AAAA,IAChB,YAAA,EAAc,KAAA;AAAA,IACd,cAAA,EAAgB,KAAA;AAAA,IAChB,MAAA,EAAQ,yBAAA;AAAA,IACR,OAAA,EAAS,qBAAqB,sFAAgB;AAAA,GAChD;AACF;AA1GgB,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AA4GhB,SAAS,0BACP,OAAA,EACiD;AACjD,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,MAAA;AAAA,MAAO,CAAC,KAAA,KAC9B,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC;AAAA;AAClB,GACF;AACF;AARS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAUT,SAAS,qBAAqB,MAAA,EAAiE;AAC7F,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,aAAA,EAAe,MAAA;AAAA,IACf,cAAA,EAAgB,MAAA;AAAA,IAChB,YAAA,EAAc,MAAA;AAAA,IACd,cAAA,EAAgB;AAAA,GAClB;AACF;AARS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAUT,SAAS,qBAAqB,KAAA,EAA8B;AAC1D,EAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAM,OAAO,gFAAA;AACxB,EAAA,IAAI,CAAC,kBAAA,CAAmB,GAAA,CAAI,KAAA,CAAM,IAAI,GAAG,OAAO,sFAAA;AAChD,EAAA,OAAO,0EAAA;AACT;AAJS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAMT,SAAS,wBAAwB,IAAA,EAI/B;AACA,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,kJAAA;AAAA,MACN,SAAA,EAAW,0EAAA;AAAA,MACX,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AACA,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,uEAAA;AAAA,MACN,SAAA,EAAW,uEAAA;AAAA,MACX,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,oHAAA;AAAA,IACN,SAAA,EAAW,0HAAA;AAAA,IACX,UAAA,EAAY;AAAA,GACd;AACF;AAxBS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AA0BT,SAAS,oBAAoB,KAAA,EAA+B;AAC1D,EAAA,OAAO,KAAA,CAAM,GAAG,UAAA,CAAW,SAAS,KAAK,KAAA,CAAM,EAAA,CAAG,WAAW,SAAS,CAAA;AACxE;AAFS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAIT,SAAS,sBAAsB,KAAA,EAA+B;AAC5D,EAAA,OAAO,KAAA,CAAM,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA;AAC9B;AAFS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAIF,SAAS,gCAAA,CACd,MACA,QAAA,EAC2B;AAzqB7B,EAAA,IAAA,EAAA;AA0qBE,EAAA,IAAI,CAAC,IAAA,CAAK,YAAA,EAAc,OAAO,QAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,KAAK,YAAA,CAAa,YAAA;AACjC,EAAA,MAAM,SAAA,GAAY,KAAK,YAAA,CAAa,eAAA;AACpC,EAAA,MAAM,UAAA,GAAa,cAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,MAAA,CAAA,EAAW,QAAA,CAAA;AACxC,EAAA,MAAM,SAAS,MAAA,CAAO,KAAA,IAAS,SAAA,CAAU,UAAA,IAAc,OAAO,KAAA,IAAS,CAAA,CAAA;AACvE,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA,IAAU,SAAA,CAAU,WAAA,IAAe,OAAO,MAAA,IAAU,CAAA,CAAA;AAC1E,EAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,IACb,UAAA,CAAW,IAAA,GAAO,UAAA,CAAW,KAAA,GAAQ,CAAA;AAAA,IACrC,UAAA,CAAW,GAAA,GAAM,UAAA,CAAW,MAAA,GAAS,CAAA;AAAA,IACrC;AAAA,GACF;AACA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,CAAA,GAAI,UAAA,CAAW,KAAA,GAAQ,CAAA;AACpD,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,CAAA,GAAI,UAAA,CAAW,MAAA,GAAS,CAAA;AACpD,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,cAAA,GACtB,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,KAAA,GAAQ,aAAA,GAAgB,UAAA,CAAW,KAAA,GACxD,aAAA,GAAgB,MAAA,CAAO,IAAA;AAC3B,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,YAAA,GACrB,MAAA,CAAO,GAAA,GAAM,MAAA,CAAO,MAAA,GAAS,YAAA,GAAe,UAAA,CAAW,MAAA,GACvD,YAAA,GAAe,MAAA,CAAO,GAAA;AAC1B,EAAA,MAAM,SAAoC,EAAC;AAC3C,EAAA,IAAI,SAAS,IAAA,KAAS,MAAA,SAAkB,IAAA,GAAO,UAAA,GAAa,SAAS,SAAA,CAAU,SAAA;AAC/E,EAAA,IAAI,SAAS,GAAA,KAAQ,MAAA,SAAkB,GAAA,GAAM,SAAA,GAAY,SAAS,SAAA,CAAU,QAAA;AAC5E,EAAA,IAAI,SAAS,KAAA,KAAU,MAAA,EAAW,MAAA,CAAO,KAAA,GAAQ,WAAW,KAAA,GAAQ,MAAA;AACpE,EAAA,IAAI,SAAS,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,MAAA,GAAS,WAAW,MAAA,GAAS,MAAA;AACvE,EAAA,IAAI,SAAS,QAAA,KAAa,MAAA;AACxB,IAAA,MAAA,CAAO,WAAW,iBAAA,CAAkB,QAAA,CAAS,aAAY,EAAA,GAAA,MAAA,CAAO,QAAA,KAAP,YAAmB,CAAA,CAAE,CAAA;AAChF,EAAA,IAAI,SAAS,cAAA,KAAmB,MAAA;AAC9B,IAAA,MAAA,CAAO,iBAAiB,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,KAAM,OAAA,CAAQ,SAAS,cAAc,CAAA;AAC5F,EAAA,IAAI,SAAS,YAAA,KAAiB,MAAA;AAC5B,IAAA,MAAA,CAAO,eAAe,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,KAAM,OAAA,CAAQ,SAAS,YAAY,CAAA;AACtF,EAAA,OAAO,MAAA;AACT;AAnCgB,MAAA,CAAA,gCAAA,EAAA,kCAAA,CAAA;AAqChB,SAAS,eAAe,KAAA,EAAwD;AAC9E,EAAA,OAAO,qBAAA,CAAsB,IAAI,KAAK,CAAA;AACxC;AAFS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAIT,SAAS,kBAAA,CAAmB,CAAA,EAAW,CAAA,EAAW,KAAA,EAA+C;AAC/F,EAAA,IAAI,CAAC,KAAA,CAAM,QAAA,EAAU,OAAO,EAAE,GAAG,CAAA,EAAE;AACnC,EAAA,MAAM,KAAA,GAAS,CAAC,KAAA,CAAM,QAAA,GAAW,KAAK,EAAA,GAAM,GAAA;AAC5C,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,GAAO,KAAA,CAAM,KAAA,GAAQ,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAC3C,EAAA,MAAM,KAAK,CAAA,GAAI,OAAA;AACf,EAAA,MAAM,KAAK,CAAA,GAAI,OAAA;AACf,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,OAAA,GAAU,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAAA,IACvD,CAAA,EAAG,OAAA,GAAU,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAK;AAAA,GACzD;AACF;AAXS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAaF,SAAS,oBAAA,CAAqB,QAAA,GAA6B,EAAC,EAAiB;AA5tBpF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6tBE,EAAA,OAAO;AAAA,IACL,IAAA,EAAA,CAAM,EAAA,GAAA,QAAA,CAAS,IAAA,KAAT,IAAA,GAAA,EAAA,GAAiB,CAAA;AAAA,IACvB,GAAA,EAAA,CAAK,EAAA,GAAA,QAAA,CAAS,GAAA,KAAT,IAAA,GAAA,EAAA,GAAgB,CAAA;AAAA,IACrB,KAAA,EAAA,CAAO,EAAA,GAAA,QAAA,CAAS,KAAA,KAAT,IAAA,GAAA,EAAA,GAAkB,CAAA;AAAA,IACzB,MAAA,EAAA,CAAQ,EAAA,GAAA,QAAA,CAAS,MAAA,KAAT,IAAA,GAAA,EAAA,GAAmB,CAAA;AAAA,IAC3B,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,gBAAgB,QAAA,CAAS,cAAA;AAAA,IACzB,cAAc,QAAA,CAAS;AAAA,GACzB;AACF;AAVgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAYT,SAAS,iBAAA,CACd,OACA,cAAA,EACsB;AA3uBxB,EAAA,IAAA,EAAA,EAAA,EAAA;AA4uBE,EAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,IAAA,OAAA,CAAO,EAAA,GAAA,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,KAAA,KAAU,cAAc,CAAA,KAA3D,IAAA,GAAA,EAAA,GAAgE,IAAA;AAAA,EACzE;AACA,EAAA,OAAA,CACE,EAAA,GAAA,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,EAAA,KAAO,cAAA,IAAkB,KAAA,CAAM,IAAA,KAAS,cAAc,CAAA,KAAzF,IAAA,GAAA,EAAA,GACA,IAAA;AAEJ;AAXgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAaT,SAAS,gBAAA,CAAiB,OAAsB,aAAA,EAA4C;AACjG,EAAA,MAAM,QAAQ,CAAC,GAAG,MAAM,KAAA,EAAO,GAAG,MAAM,MAAM,CAAA;AAC9C,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,IAAA,GAAO,MAAM,KAAA,EAAM;AACzB,IAAA,IAAI,KAAK,EAAA,KAAO,aAAA,IAAiB,IAAA,CAAK,IAAA,KAAS,eAAe,OAAO,IAAA;AACrE,IAAA,KAAA,CAAM,OAAA,CAAQ,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,IAAA;AACT;AARgB,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;;;ACjpBT,IAAM,iBAAA,GAAN,MAAM,iBAAA,CAAiB;AAAA,EAa5B,WAAA,CAAY,IAAA,EAAqB,OAAA,GAAmC,EAAC,EAAG;AAZxE,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,EAAqC,IAAA,CAAA;AAC7C,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,EAAgB,CAAA,CAAA;AACxB,IAAA,aAAA,CAAA,IAAA,EAAiB,aAAqC,EAAC,CAAA;AACvD,IAAA,aAAA,CAAA,IAAA,EAAiB,aAAqC,EAAC,CAAA;AACvD,IAAA,aAAA,CAAA,IAAA,EAAiB,mBAAA,sBAAwB,GAAA,EAAiC,CAAA;AAC1E,IAAA,aAAA,CAAA,IAAA,EAAiB,YAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,iBAAA,sBAAsB,GAAA,EAAoC,CAAA;AAC3E,IAAA,aAAA,CAAA,IAAA,EAAiB,oBAAA,sBAAyB,GAAA,EAA6C,CAAA;AA/GzF,IAAA,IAAA,EAAA;AAkHI,IAAA,IAAA,CAAK,oBAAoB,IAAA,CAAK,YAAA;AAC9B,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,KAAA;AACvB,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,KAAA;AACvB,IAAA,IAAA,CAAK,UAAA,GAAA,CAAa,EAAA,GAAA,OAAA,CAAQ,UAAA,KAAR,IAAA,GAAA,EAAA,GAAsB,EAAA;AACxC,IAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAC,IACrC,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,KAAK,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,CAAE,IAAG,GAClD,IAAA;AAAA,EACN;AAAA,EAEA,YAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,EACd;AAAA,EAEA,KAAA,GAA8B;AAC5B,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEA,KAAA,GAA8B;AAC5B,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEA,SAAA,GAAgC;AAC9B,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,UAAU,MAAA,GAAS,CAAA;AAAA,EACjC;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,UAAU,MAAA,GAAS,CAAA;AAAA,EACjC;AAAA,EAEA,SAAA,CACE,OACA,QAAA,EACY;AACZ,IAAA,MAAM,SAAA,GAAY,KAAA,KAAU,QAAA,GAAW,IAAA,CAAK,kBAAkB,IAAA,CAAK,kBAAA;AACnE,IAAA,SAAA,CAAU,GAAA;AAAA,MACR;AAAA,KACF;AACA,IAAA,OAAO,MACL,SAAA,CAAU,MAAA;AAAA,MACR;AAAA,KACF;AAAA,EACJ;AAAA,EAEA,MAAM,SAAS,OAAA,EAA0C;AACvD,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,cAAA,IAAkB,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACtE,MAAA,MAAM,IAAA,CAAK,sBAAsB,OAAO,CAAA;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAM;AAClD,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,OAAO,CAAA;AACzD,IAAA,IAAA,CAAK,SAAS,MAAM,CAAA;AACpB,IAAA,IAAA,CAAK,UAAU,MAAA,GAAS,CAAA;AACxB,IAAA,MAAM,IAAA,CAAK,mBAAmB,OAAO,CAAA;AACrC,IAAA,IAAI,aAAA,KAAkB,MAAA,EAAW,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA;AAAA,EAClE;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,GAAA,EAAI;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,YAAY,IAAA,CAAK,cAAA;AACvB,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,IAAA,CAAK,YAAA,CAAa,MAAM,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,CAAC,CAAA;AAC3E,IAAA,IAAA,CAAK,wBAAA,CAAyB,MAAM,iBAAiB,CAAA;AACrD,IAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,KAAA,CAAM,KAAA,EAAO,SAAS,CAAA;AAAA,EACvD;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,GAAA,EAAI;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,YAAY,IAAA,CAAK,cAAA;AACvB,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,IAAA,CAAK,YAAA,CAAa,MAAM,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,CAAC,CAAA;AAC3E,IAAA,IAAA,CAAK,wBAAA,CAAyB,MAAM,iBAAiB,CAAA;AACrD,IAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,KAAA,CAAM,KAAA,EAAO,SAAS,CAAA;AAAA,EACvD;AAAA,EAEA,MAAM,iBAAiB,KAAA,EAAgD;AACrE,IAAA,IAAA,CAAK,UAAU,MAAA,GAAS,CAAA;AACxB,IAAA,IAAA,CAAK,UAAU,MAAA,GAAS,CAAA;AACxB,IAAA,IAAA,CAAK,kBAAkB,KAAA,EAAM;AAC7B,IAAA,MAAM,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,MAAA,GAA8B;AAClC,IAAA,OAAO,IAAA,CAAK,kBAAkB,KAAA,EAAM;AAAA,EACtC;AAAA,EAEA,MAAM,YAAA,GAA8C;AAClD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,MAAA,EAAO;AAChC,IAAA,MAAM,QAAA,GAAW,MAAMC,gBAAA,CAAa,OAAA,CAAQ,OAAO,EAAE,IAAA,EAAM,UAAU,CAAA;AACrE,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,SAAS,OAAA,EAAQ;AAAA,IAChC,CAAA,SAAE;AACA,MAAA,MAAM,SAAS,OAAA,EAAQ;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,MAAM,IAAA,CAAK,kBAAkB,OAAA,EAAQ;AACrC,IAAA,IAAA,CAAK,UAAU,MAAA,GAAS,CAAA;AACxB,IAAA,IAAA,CAAK,UAAU,MAAA,GAAS,CAAA;AACxB,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,mBAAmB,KAAA,EAAM;AAAA,EAChC;AAAA,EAEA,MAAc,sBACZ,OAAA,EACe;AACf,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,IAAA,CAAK,UAAA,EAAY,QAAQ,cAAc,CAAA;AACvE,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,wBAAwB,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAC,CAAA,CAAE,CAAA;AACpF,IAAA,IAAI,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACnC,MAAA,IAAA,CAAK,aAAa,EAAE,IAAA,EAAM,SAAS,OAAA,EAAS,KAAA,CAAM,IAAI,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,KAAA,EAAO,OAAA,CAAQ,aAAa,CAAA;AAC3D,IAAA,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,CAAA,qBAAA,EAAwB,OAAA,CAAQ,aAAa,CAAA,CAAE,CAAA;AAC3E,IAAA,IAAA,CAAK,YAAA,CAAa,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,MAAM,EAAA,EAAI,OAAA,EAAS,KAAA,CAAM,EAAA,EAAI,CAAA;AAAA,EAC3E;AAAA,EAEA,MAAc,iBACZ,OAAA,EACyC;AAlP7C,IAAA,IAAA,EAAA,EAAA,EAAA;AAmPI,IAAA,IACE,OAAA,CAAQ,IAAA,KAAS,cAAA,IACjB,OAAA,CAAQ,SAAS,iBAAA,IACjB,OAAA,CAAQ,IAAA,KAAS,aAAA,IACjB,OAAA,CAAQ,IAAA,KAAS,sBAAA,IACjB,OAAA,CAAQ,SAAS,oBAAA,EACjB;AACA,MAAA,OAAO,IAAA,CAAK,4BAA4B,OAAO,CAAA;AAAA,IACjD;AACA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,iCAAA,CAAkC,OAAO,CAAA;AAChE,IAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,IAAA,CAAK,UAAA,EAAY,QAAQ,cAAc,CAAA;AAC5E,IAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,KAAA,CAAM,wBAAwB,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAC,CAAA,CAAE,CAAA;AACzF,IAAA,MAAM,QAAQ,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,OAAA,CAAQ,QAAQ,cAAc,CAAA;AAC1E,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,MAAA,EAAQ,QAAQ,aAAa,CAAA;AACxE,IAAA,IAAI,OAAA,CAAQ,SAAS,gBAAA,EAAkB;AACrC,MAAA,MAAM,KAAA,CAAM,KAAK,OAAA,CAAQ,OAAA,CAAQ,MAAM,EAAE,qBAAA,EAAuB,MAAM,CAAA;AACtE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,sBAAA,EAAwB;AAC3C,MAAA,MAAM,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAC3C,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,qBAAA,EAAuB;AAC1C,MAAA,MAAM,KAAA,CAAM,MAAM,WAAA,CAAY,OAAA,CAAQ,KAAK,OAAA,CAAQ,MAAA,EAAQ,QAAQ,IAAI,CAAA;AACvE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,oBAAA,EAAsB;AACzC,MAAA,IAAI,OAAA,CAAQ,wBAAA,IAA4B,gCAAA,CAAiC,SAAS,CAAA,EAAG;AACnF,QAAA,MAAM,IAAA,GAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACR,SAAA,CAAU,QAAA,CAAA,EADF;AAAA,UAEX,OAAA,EAAS,MAAA;AAAA,UACT,IAAA,EAAA,CAAM,EAAA,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,QAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,SAApB,IAAA,GAAA,EAAA,GAA6B;AAAA,SACrC,CAAA;AACA,QAAA,MAAM,KAAA,CAAM,IAAA,CAAK,iBAAA,CAAkB,IAAI,CAAA;AACvC,QAAA,IAAA,CAAK,iBAAA,CAAkB,IAAI,mBAAA,CAAoB,UAAA,CAAW,IAAI,SAAA,CAAU,EAAE,GAAG,IAAI,CAAA;AAAA,MACnF;AACA,MAAA,MAAM,MAAM,WAAA,CAAY,gCAAA,CAAiC,SAAA,EAAW,OAAA,CAAQ,QAAQ,CAAC,CAAA;AACrF,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA;AAClC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,kCAAkC,OAAA,EAAgD;AA9R5F,IAAA,IAAA,EAAA;AA+RI,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,IAAA,CAAK,UAAA,EAAY,QAAQ,cAAc,CAAA;AACvE,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,wBAAwB,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAC,CAAA,CAAE,CAAA;AACpF,IAAA,MAAM,KAAA,GAAA,CACJ,EAAA,GAAA,gBAAA,CAAiB,KAAA,EAAO,OAAA,CAAQ,aAAa,MAA7C,IAAA,GAAA,EAAA,GACA,yBAAA,CAA0B,KAAA,EAAO,OAAA,CAAQ,aAAa,CAAA;AACxD,IAAA,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,CAAA,qBAAA,EAAwB,OAAA,CAAQ,aAAa,CAAA,CAAE,CAAA;AAC3E,IAAA,IACE,wBAAA,CAAyB,OAAO,CAAA,KAC/B,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,KAAA,CAAM,QAAA,CAAA,EAClD;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gDAAA,EAAmD,KAAA,CAAM,EAAE,CAAA,CAAE,CAAA;AAAA,IAC/E;AACA,IAAA,IAAI,QAAQ,IAAA,KAAS,gBAAA,IAAoB,CAAC,KAAA,CAAM,aAAa,QAAA,EAAU;AACrE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,KAAA,CAAM,EAAE,CAAA,CAAE,CAAA;AAAA,IAC/D;AACA,IAAA,IAAI,QAAQ,IAAA,KAAS,sBAAA,IAA0B,CAAC,KAAA,CAAM,aAAa,aAAA,EAAe;AAChF,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,KAAA,CAAM,EAAE,CAAA,CAAE,CAAA;AAAA,IACrE;AACA,IAAA,IAAI,QAAQ,IAAA,KAAS,qBAAA,IAAyB,CAAC,KAAA,CAAM,aAAa,cAAA,EAAgB;AAChF,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA2C,KAAA,CAAM,EAAE,CAAA,CAAE,CAAA;AAAA,IACvE;AACA,IAAA,IAAI,QAAQ,IAAA,KAAS,oBAAA,IAAwB,CAAC,KAAA,CAAM,aAAa,YAAA,EAAc;AAC7E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,KAAA,CAAM,EAAE,CAAA,CAAE,CAAA;AAAA,IACnE;AACA,IAAA,IAAI,QAAQ,IAAA,KAAS,iBAAA,IAAqB,CAAC,KAAA,CAAM,aAAa,cAAA,EAAgB;AAC5E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,KAAA,CAAM,EAAE,CAAA,CAAE,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAc,4BACZ,OAAA,EAW6B;AAzUjC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0UI,IAAA,IAAA,CAAK,kCAAkC,OAAO,CAAA;AAC9C,IAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,IAAA,CAAK,UAAA,EAAY,QAAQ,cAAc,CAAA;AAC5E,IAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,KAAA,CAAM,wBAAwB,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAC,CAAA,CAAE,CAAA;AACzF,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,UAAA,EAAY,OAAA,CAAQ,aAAa,CAAA;AACpE,IAAA,IAAI,CAAC,WAAW,MAAM,IAAI,MAAM,CAAA,qBAAA,EAAwB,OAAA,CAAQ,aAAa,CAAA,CAAE,CAAA;AAC/E,IAAA,MAAM,QAAQ,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,OAAA,CAAQ,QAAQ,cAAc,CAAA;AAC1E,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,QAAQ,aAAa,CAAA;AACxD,IAAA,IAAI,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACnC,MAAA,MAAM,MAAM,MAAA,EAAO;AACnB,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,WAAW,EAAA,EAAG;AAAA,IACjD;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,sBAAA,EAAwB;AAC3C,MAAA,MAAM,MAAM,YAAA,EAAa;AACzB,MAAA,OAAO,EAAE,MAAM,OAAA,EAAS,OAAA,EAAS,WAAW,EAAA,EAAI,OAAA,EAAS,UAAU,EAAA,EAAG;AAAA,IACxE;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,oBAAA,EAAsB;AACzC,MAAA,MAAM,MAAM,UAAA,EAAW;AACvB,MAAA,OAAO,EAAE,MAAM,OAAA,EAAS,OAAA,EAAS,WAAW,EAAA,EAAI,OAAA,EAAS,UAAU,EAAA,EAAG;AAAA,IACxE;AAEA,IAAA,MAAM,iBAAA,GAAoB;AAAA,MACxB,MACE,OAAO,SAAA,CAAU,MAAA,CAAO,IAAA,KAAS,WAC7B,SAAA,CAAU,MAAA,CAAO,IAAA,IAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,WAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,IAAA,KAAhB,IAAA,GAAA,EAAA,GAAwB,IAAA,CAAA,GACjD,UAAU,MAAA,CAAO,IAAA;AAAA,MACvB,KACE,OAAO,SAAA,CAAU,MAAA,CAAO,GAAA,KAAQ,WAC5B,SAAA,CAAU,MAAA,CAAO,GAAA,IAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,WAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,GAAA,KAAhB,IAAA,GAAA,EAAA,GAAuB,IAAA,CAAA,GAC/C,UAAU,MAAA,CAAO,GAAA;AAAA,MACvB,QAAO,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,MAAA,KAAR,mBAAgB,KAAA,KAAhB,IAAA,GAAA,EAAA,GAAyB,UAAU,MAAA,CAAO,KAAA;AAAA,MACjD,SAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,MAAA,KAAR,mBAAgB,MAAA,KAAhB,IAAA,GAAA,EAAA,GAA0B,UAAU,MAAA,CAAO;AAAA,KACrD;AACA,IAAA,MAAM,aAAa,MAAM,KAAA,CAAM,UAAU,EAAE,QAAA,EAAU,mBAAmB,CAAA;AACxE,IAAA,MAAM,eAAA,GAAkB,MAAM,UAAA,CAAW,OAAA,EAAQ;AACjD,IAAA,OAAO,EAAE,MAAM,OAAA,EAAS,OAAA,EAAS,WAAW,EAAA,EAAI,OAAA,EAAS,gBAAgB,EAAA,EAAG;AAAA,EAC9E;AAAA,EAEA,MAAc,mBAAmB,OAAA,EAA0C;AACzE,IAAA,IAAA,CAAK,UAAA,GAAa,MAAM,IAAA,CAAK,iBAAA,CAAkB,OAAA,EAAQ;AACvD,IAAA,IAAA,CAAK,UAAA,GAAa,yBAAA,CAA0B,IAAA,CAAK,UAAU,CAAA;AAC3D,IAAA,IAAA,CAAK,sBAAA,EAAuB;AAC5B,IAAA,IAAA,CAAK,aAAA,IAAiB,CAAA;AACtB,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAA;AAAA,MAAQ,CAAC,aAC5B,QAAA,CAAS;AAAA,QACP,UAAU,IAAA,CAAK,aAAA;AAAA,QACf,OAAA;AAAA,QACA,OAAO,IAAA,CAAK,UAAA;AAAA,QACZ,OAAO,IAAA,CAAK;AAAA,OACb;AAAA,KACH;AAAA,EACF;AAAA,EAEA,MAAc,mBAAA,CACZ,KAAA,EACA,kBAAA,GAAyC,IAAA,EAC1B;AACf,IAAA,MAAM,IAAA,GAAO,MAAMA,gBAAA,CAAa,OAAA,CAAQ,OAAO,EAAE,IAAA,EAAM,UAAU,CAAA;AACjE,IAAA,MAAM,IAAA,CAAK,kBAAkB,OAAA,EAAQ;AACrC,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AACzB,IAAA,IAAA,CAAK,UAAA,GAAa,MAAM,IAAA,CAAK,OAAA,EAAQ;AACrC,IAAA,IAAA,CAAK,UAAA,GAAa,yBAAA,CAA0B,IAAA,CAAK,UAAU,CAAA;AAC3D,IAAA,IAAA,CAAK,sBAAA,EAAuB;AAC5B,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,kBAAA,CAAmB,OAAO,CAAA;AAC1F,MAAA,IAAI,kBAAA,CAAmB,IAAA,KAAS,OAAA,IAAW,KAAA,EAAO;AAChD,QAAA,IAAA,CAAK,aAAa,EAAE,IAAA,EAAM,SAAS,OAAA,EAAS,KAAA,CAAM,IAAI,CAAA;AACtD,QAAA;AAAA,MACF;AACA,MAAA,IACE,kBAAA,CAAmB,IAAA,KAAS,OAAA,KAC5B,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,kBAAA,CAAmB,OAAA,CAAA,CAAA,EAC3D;AACA,QAAA,IAAA,CAAK,YAAA,CAAa;AAAA,UAChB,IAAA,EAAM,OAAA;AAAA,UACN,SAAS,KAAA,CAAM,EAAA;AAAA,UACf,SAAS,kBAAA,CAAmB;AAAA,SAC7B,CAAA;AACD,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA;AAC3C,IAAA,IAAA,CAAK,YAAA,CAAa,aAAa,EAAE,IAAA,EAAM,SAAS,OAAA,EAAS,UAAA,CAAW,EAAA,EAAG,GAAI,IAAI,CAAA;AAAA,EACjF;AAAA,EAEQ,aAAa,SAAA,EAAqC;AACxD,IAAA,IAAA,CAAK,cAAA,GAAiB,SAAA;AACtB,IAAA,IAAA,CAAK,kBAAA,CAAmB,QAAQ,CAAC,QAAA,KAAa,SAAS,EAAE,SAAA,EAAW,CAAC,CAAA;AAAA,EACvE;AAAA,EAEQ,SAAS,KAAA,EAAyB;AACxC,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,KAAK,CAAC,CAAA;AAC5C,IAAA,IAAI,KAAK,SAAA,CAAU,MAAA,GAAS,KAAK,UAAA,EAAY,IAAA,CAAK,UAAU,KAAA,EAAM;AAAA,EACpE;AAAA,EAEQ,aAAa,KAAA,EAA0C;AAC7D,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,iBAAA,EAAmB,IAAI,GAAA,CAAI,IAAA,CAAK,iBAAiB;AAAA,KACnD;AAAA,EACF;AAAA,EAEQ,yBAAyB,SAAA,EAAmD;AAClF,IAAA,IAAA,CAAK,kBAAkB,KAAA,EAAM;AAC7B,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,IAAA,EAAM,GAAA,KAAQ,IAAA,CAAK,kBAAkB,GAAA,CAAI,GAAA,EAAK,cAAA,CAAA,EAAA,EAAK,IAAA,CAAM,CAAC,CAAA;AAAA,EAC/E;AAAA,EAEQ,sBAAA,GAA+B;AApbzC,IAAA,IAAA,EAAA;AAqbI,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,CAAA,IAAK,KAAK,iBAAA,EAAmB;AAChD,MAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,GAAA,CAAI,MAAM,IAAQ,CAAA;AAC7C,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AAC1B,MAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,IAAA,CAAK,UAAA,EAAY,OAAO,CAAA;AACxD,MAAA,MAAM,IAAA,GAAO,KAAA,GAAQ,gBAAA,CAAiB,KAAA,EAAO,OAAO,CAAA,GAAI,IAAA;AACxD,MAAA,IAAI,CAAC,QAAS,CAAC,IAAA,CAAK,QAAQ,EAAA,CAAC,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,MAAA,CAAA,EAAS;AAC3D,MAAA,IAAA,CAAK,QAAA,GAAW,cAAA,CAAA,cAAA,CAAA,EAAA,EACX,IAAA,CAAK,QAAA,CAAA,EACL,IAAA,CAAA;AAAA,IAEP;AAAA,EACF;AACF,CAAA;AA7V8B,MAAA,CAAA,iBAAA,EAAA,kBAAA,CAAA;AAAvB,IAAM,gBAAA,GAAN,iBAAA;AA+VP,SAAS,mBAAA,CAAoB,SAAiB,OAAA,EAAyB;AACrE,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAA,EAAS,OAAO,CAAA,CAAA;AACnC;AAFS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAIT,SAAS,iCAAiC,IAAA,EAA6B;AAvcvE,EAAA,IAAA,EAAA;AAwcE,EAAA,OAAO,OAAA;AAAA,IACL,IAAA,CAAK,YAAA,CAAa,YAAA,IAChB,yBAAA,CAA0B,IAAI,MAC7B,IAAA,CAAK,IAAA,KAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,MAAA,CAAA;AAAA,GACvC;AACF;AANS,MAAA,CAAA,gCAAA,EAAA,kCAAA,CAAA;AAQT,SAAS,0BAA0B,IAAA,EAA6B;AAC9D,EAAA,OAAO,KAAK,IAAA,KAAS,aAAA,IAAiB,KAAK,IAAA,KAAS,SAAA,IAAa,KAAK,IAAA,KAAS,gBAAA;AACjF;AAFS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAIT,SAAS,yBAAA,CACP,OACA,QAAA,EACqB;AACrB,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,IAAA;AAAA,IACjC,CAAC,KAAA,KAAU,KAAA,CAAM,EAAA,KAAO,QAAA,IAAY,MAAM,IAAA,KAAS;AAAA,GACrD;AACA,EAAA,OAAO,MAAA,GACH,iBAAA,CAAkB,MAAA,EAAQ,EAAE,SAAA,EAAW,KAAA,CAAM,IAAA,EAAM,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,CAAA,GACjF,IAAA;AACN;AAVS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAYT,SAAS,sBAAA,CAAuB,QAAyB,QAAA,EAAyB;AAChF,EAAA,MAAM,OAAO,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAC/C,EAAA,IAAI,KAAK,MAAA,IAAU,CAAA,EAAG,OAAO,MAAA,CAAO,QAAQ,QAAQ,CAAA;AACpD,EAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,EAAA,KAAA,MAAW,EAAA,IAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AAC9B,IAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA;AACT;AARS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAUT,SAAS,yBAAyB,OAAA,EAUhC;AACA,EAAA,OACE,OAAA,CAAQ,IAAA,KAAS,cAAA,IACjB,OAAA,CAAQ,IAAA,KAAS,iBAAA,IACjB,OAAA,CAAQ,IAAA,KAAS,aAAA,IACjB,OAAA,CAAQ,IAAA,KAAS,sBAAA,IACjB,QAAQ,IAAA,KAAS,oBAAA;AAErB;AAlBS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;;;ACzcT,IAAM,wBAAA,GAA2B,IAAA;AACjC,IAAM,uBAAA,GAA0B,KAAA;AAChC,IAAM,sBAAA,GAAyB,KAAA;AAC/B,IAAM,2BAAA,GAA8B,CAAA;AACpC,IAAM,0BAAA,GAA6B,CAAA;AACnC,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,0BAAA,GAA6B,CAAA;AACnC,IAAM,kBAAA,GAAqB,CAAA;AAC3B,IAAM,sBAAA,GAAyB,CAAA;AA6ExB,SAAS,qBAAA,CACd,IAAA,EACA,IAAA,EACA,OAAA,GAAkC,EAAC,EAClB;AACjB,EAAA,OAAO,IAAI,yBAAA,CAA0B,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAC1D;AANgB,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAQhB,SAAS,uBAAuB,IAAA,EAA6B;AAC3D,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ,OAAO,KAAA;AACjC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,gBAAA,EAAkB,OAAO,KAAA;AAC3C,EAAA,IAAI,IAAA,CAAK,gBAAgB,OAAO,KAAA;AAChC,EAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,cAAA,KAAmB,WAAW,OAAO,KAAA;AACrE,EAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,CAAC,IAAA,CAAK,WAAW,OAAO,KAAA;AACzC,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1D,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1D,EAAA,IAAI,GAAA,IAAO,GAAG,OAAO,KAAA;AACrB,EAAA,OAAO,MAAM,GAAA,GAAM,GAAA;AACrB;AAVS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAYT,SAAS,oBAAA,CACP,OAAA,EACA,SAAA,EACA,IAAA,EACwB;AA7I1B,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8IE,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,uBAAA,EAAA,CAAyB,UAAK,KAAA,KAAL,IAAA,GAAA,EAAA,GAAc,QAAQ,KAAK,CAAA;AAC3E,EAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,uBAAA,EAAA,CAAyB,UAAK,MAAA,KAAL,IAAA,GAAA,EAAA,GAAe,QAAQ,MAAM,CAAA;AAC9E,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,wBAAA,EAA0B,KAAK,CAAA;AACzD,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,wBAAA,EAA0B,MAAM,CAAA;AAC1D,EAAA,MAAM,IAAA,GAAO,WAAA;AAAA,IAAA,CACX,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,EAAA,GAAa,OAAA,CAAQ,IAAA;AAAA,IACrB,CAAC,KAAA,GAAQ,QAAA;AAAA,IACT,UAAU,KAAA,GAAQ;AAAA,GACpB;AACA,EAAA,MAAM,GAAA,GAAM,WAAA,CAAA,CAAY,EAAA,GAAA,IAAA,CAAK,GAAA,KAAL,IAAA,GAAA,EAAA,GAAY,OAAA,CAAQ,GAAA,EAAK,CAAC,MAAA,GAAS,QAAA,EAAU,SAAA,CAAU,MAAA,GAAS,QAAQ,CAAA;AAChG,EAAA,OAAO,iCACF,OAAA,CAAA,EADE;AAAA,IAEL,IAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,CAAA;AACF;AAtBS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAwBT,SAAS,WAAA,CAAY,KAAA,EAAe,GAAA,EAAa,GAAA,EAAqB;AACpE,EAAA,OAAO,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAC3C;AAFS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAIT,SAAS,qBAAA,CACP,KAAA,EACA,OAAA,EACA,IAAA,EAMC;AACD,EAAA,MAAM,YAAY,IAAA,KAAS,GAAA,GAAM,MAAM,IAAA,CAAK,KAAA,GAAQ,MAAM,IAAA,CAAK,MAAA;AAC/D,EAAA,MAAM,OAAA,GAKD;AAAA,IACH,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,IACzC,EAAE,KAAA,EAAO,SAAA,GAAY,GAAG,IAAA,EAAM,OAAA,EAAS,MAAM,QAAA,EAAS;AAAA,IACtD,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,MAAM,KAAA;AAAM,GACjD;AACA,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,IAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,EAAM,OAAO,CAAA,EAAG;AAC5C,IAAA,MAAM,QAAQ,IAAA,KAAS,GAAA,GAAM,KAAK,MAAA,CAAO,IAAA,GAAO,KAAK,MAAA,CAAO,GAAA;AAC5D,IAAA,MAAM,SAAS,IAAA,KAAS,GAAA,GAAM,KAAK,MAAA,CAAO,KAAA,GAAQ,KAAK,MAAA,CAAO,MAAA;AAC9D,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,EAAE,OAAO,KAAA,EAAO,IAAA,EAAM,SAAS,IAAA,EAAM,OAAA,EAAS,gBAAA,EAAkB,IAAA,CAAK,EAAA,EAAG;AAAA,MACxE,EAAE,KAAA,EAAO,KAAA,GAAQ,MAAA,GAAS,CAAA,EAAG,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,gBAAA,EAAkB,IAAA,CAAK,EAAA,EAAG;AAAA,MACtF,EAAE,KAAA,EAAO,KAAA,GAAQ,MAAA,EAAQ,IAAA,EAAM,SAAS,IAAA,EAAM,KAAA,EAAO,gBAAA,EAAkB,IAAA,CAAK,EAAA;AAAG,KACjF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAhCS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAkCT,SAAS,sBAAA,CAAuB,MAAoB,aAAA,EAAgC;AAClF,EAAA,OACE,IAAA,CAAK,EAAA,KAAO,aAAA,IACZ,IAAA,CAAK,IAAA,KAAS,MAAA,IACd,CAAC,IAAA,CAAK,MAAA,IACN,CAAC,IAAA,CAAK,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,IACrB,IAAA,CAAK,YAAA,CAAa,MAAA,IAClB,IAAA,CAAK,YAAA,CAAa,YAAA,IAClB,IAAA,CAAK,MAAA,CAAO,KAAA,GAAQ,uBAAA,IACpB,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,uBAAA;AAEzB;AAXS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAaT,SAAS,eACP,OAAA,EACA,OAAA,EAMA,SAAA,EACA,OAAA,GAAmC,EAAC,EAU7B;AACP,EAAA,IAAI,OAAA,GASO,IAAA;AACX,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,QAAQ,SAAA,KAAc,KAAA,IAAS,MAAA,CAAO,IAAA,KAAS,OAAO,IAAA,EAAM;AAChE,MAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,KAAA,GAAQ,OAAO,KAAK,CAAA;AACrD,MAAA,IAAI,WAAW,SAAA,EAAW;AAC1B,MAAA,IAAI,CAAC,OAAA,IAAW,QAAA,GAAW,OAAA,CAAQ,QAAA,EAAU;AAC3C,QAAA,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAzCS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AA2CT,SAAS,mBAAA,CACP,MAAA,EACA,aAAA,EACA,MAAA,EACA,WAAA,EACQ;AACR,EAAA,MAAM,eAAe,aAAA,GAAgB,CAAA;AACrC,EAAA,MAAM,IAAA,GACJ,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,MAAA,GAAS,YAAY,CAAA,GAAI,CAAA,GAAA,CAAK,WAAA,GAAc,MAAA,IAAU,CAAA,GAAI,WAAA,GAAc,MAAA;AAC1F,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,uBAAA,EAAyB,IAAI,CAAA;AAC/C;AAVS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAYT,SAAS,0BAA0B,IAAA,EAA6B;AAC9D,EAAA,OACE,CAAC,IAAA,CAAK,MAAA,IACN,CAAC,IAAA,CAAK,EAAA,CAAG,SAAS,GAAG,CAAA,KACpB,KAAK,YAAA,CAAa,YAAA,IACjB,KAAK,YAAA,CAAa,QAAA,IAClB,KAAK,YAAA,CAAa,cAAA,IAClB,KAAK,YAAA,CAAa,cAAA,CAAA;AAExB;AATS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAWT,SAAS,oBAAoB,IAAA,EAAkC;AAC7D,EAAA,MAAM,UAAU,IAAA,CAAK,YAAA;AACrB,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,SAAA,GAA0B,iCAC3B,IAAA,CAAA,EAD2B;AAAA,IAE9B,IAAI,OAAA,CAAQ,QAAA;AAAA,IACZ,MAAM,OAAA,CAAQ,UAAA;AAAA,IACd,IAAA,EAAM,OAAA;AAAA,IACN,QAAQ,OAAA,CAAQ,YAAA;AAAA,IAChB,IAAA,EAAM,MAAA;AAAA,IACN,SAAA,EAAW,MAAA;AAAA,IACX,cAAA,EAAgB,MAAA;AAAA,IAChB,QAAA,EAAU,MAAA;AAAA,IACV,YAAA,EAAc,MAAA;AAAA,IACd,MAAA,EAAQ,KAAA;AAAA,IACR,QAAA,EAAU,IAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,MAAA,EAAQ,IAAA;AAAA,MACR,QAAA,EAAU,KAAA;AAAA,MACV,aAAA,EAAe,KAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB,KAAA;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,UAAU;AAAC,GACb,CAAA;AACA,EAAA,OAAO,SAAA;AACT;AA5BS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AA8BT,SAAS,8BAA8B,IAAA,EAA6B;AApTpE,EAAA,IAAA,EAAA,EAAA,EAAA;AAqTE,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,IAAa,CAAC,KAAK,cAAA,IAAkB,IAAA,CAAK,cAAA,CAAe,KAAA,CAAM,MAAA,KAAW,CAAA;AAC1F,IAAA,OAAO,KAAA;AACT,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1D,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1D,EAAA,IAAI,GAAA,IAAO,CAAA,IAAK,GAAA,GAAM,GAAA,GAAM,MAAM,OAAO,KAAA;AACzC,EAAA,MAAM,QAAA,GAAA,CAAW,gBAAK,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA,KAA3B,IAAA,GAAA,MAAA,GAAA,EAAA,CAA8B,QAAA,KAA9B,IAAA,GAAA,EAAA,GAA0C,EAAC;AAC5D,EAAA,MAAM,aAAa,QAAA,CAAS,MAAA;AAAA,IAC1B,CAAC,OAAA,KAAsC,OAAA,CAAQ,IAAA,KAAS;AAAA,GAC1D,CAAE,MAAA;AACF,EAAA,OACE,UAAA,IAAc,KACd,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAsC,OAAA,CAAQ,SAAS,OAAO,CAAA;AAEjF;AAdS,MAAA,CAAA,6BAAA,EAAA,+BAAA,CAAA;AAgBT,IAAM,0BAAA,GAAN,MAAM,0BAAA,CAAqD;AAAA,EA4BzD,WAAA,CAAY,IAAA,EAAmB,IAAA,EAAqB,OAAA,EAAiC;AA3BrF,IAAA,aAAA,CAAA,IAAA,EAAiB,MAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,cAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,gBAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,eAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,wBAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,WAAA,EAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAAA;AACzD,IAAA,aAAA,CAAA,IAAA,EAAiB,QAAA,EAAS,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAAA;AACtD,IAAA,aAAA,CAAA,IAAA,EAAiB,aAAA,EAAc,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAAA;AAC3D,IAAA,aAAA,CAAA,IAAA,EAAiB,YAAA,EAAa,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAAA;AAC1D,IAAA,aAAA,CAAA,IAAA,EAAiB,SAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,mBAAA,kBAAoB,MAAA,CAAA,MAAM,KAAK,IAAA,CAAK,+BAA8B,EAA9C,mBAAA,CAAA,CAAA;AACrC,IAAA,aAAA,CAAA,IAAA,EAAiB,yCAAwB,MAAA,CAAA,CAAC,KAAA,KAAsB,KAAK,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EAAjD,uBAAA,CAAA,CAAA;AACzC,IAAA,aAAA,CAAA,IAAA,EAAiB,uCAAsB,MAAA,CAAA,CAAC,KAAA,KAAsB,KAAK,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EAAjD,qBAAA,CAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAiB,uCAAsB,MAAA,CAAA,CAAC,KAAA,KAAyB,KAAK,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA,EAAvD,qBAAA,CAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAiB,2CAA0B,MAAA,CAAA,CAAC,KAAA,KAC1C,KAAK,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA,EADO,yBAAA,CAAA,CAAA;AAE3C,IAAA,aAAA,CAAA,IAAA,EAAiB,oBAAA,kBAAqB,MAAA,CAAA,MAAM,IAAA,CAAK,eAAA,EAAgB,EAA3B,oBAAA,CAAA,CAAA;AACtC,IAAA,aAAA,CAAA,IAAA,EAAiB,2CAA0B,MAAA,CAAA,CAAC,KAAA,KAAiB,IAAA,CAAK,iBAAA,CAAkB,KAAK,CAAA,EAA9C,yBAAA,CAAA,CAAA;AAC3C,IAAA,aAAA,CAAA,IAAA,EAAiB,uBAAA,kBAAwB,MAAA,CAAA,MAAM,IAAA,CAAK,uBAAA,EAAwB,EAAnC,uBAAA,CAAA,CAAA;AACzC,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,EAAuC,IAAA,CAAA;AAC/C,IAAA,aAAA,CAAA,IAAA,EAAQ,wBAAA,EAAyB,KAAA,CAAA;AACjC,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,EAA8D,IAAA,CAAA;AACtE,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,EAAiB,CAAA,CAAA;AACzB,IAAA,aAAA,CAAA,IAAA,EAAQ,sBAAA,EAAuB,CAAA,CAAA;AAC/B,IAAA,aAAA,CAAA,IAAA,EAAiB,sBAAA,sBAA2B,GAAA,EAA0C,CAAA;AACtF,IAAA,aAAA,CAAA,IAAA,EAAiB,iBAAA,sBAAsB,GAAA,EAAmB,CAAA;AAGxD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,OAAA,CAAQ,cAAA,KAAmB,MAAA,GAAS,IAAA,GAAO,KAAK,YAAA,CAAa,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AACzF,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,gBAAA,CAAiB,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,MAAA;AAC3B,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,KAAA;AAC1B,IAAA,IAAA,CAAK,sBAAA,GAAyB,uBAAuB,IAAI,CAAA;AACzD,IAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,IAAA,CAAK,aAAA,EAAe,KAAK,sBAAsB,CAAA;AAC5F,IAAA,wBAAA,CAAyB,IAAA,CAAK,yBAAA,CAA0B,cAAc,CAAC,CAAA;AACvE,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,QAAA,EAAU,OAAO,KAAA,KAAU;AA1W3D,MAAA,IAAA,EAAA,EAAA,EAAA;AA2WM,MAAA,IAAA,CAAK,oBAAA,EAAA;AACL,MAAA,IAAA,CAAK,MAAA,EAAO;AACZ,MAAA,OAAA,CAAM,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,QAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAwB;AAAA,QAC5B,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,KAAA,EAAO,MAAM,IAAA,CAAK,YAAA,CAAa,MAAA;AAAO,OACxC,CAAA,CAAA;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,aAAa,SAAA,CAAU,iBAAA,EAAmB,MAAM,IAAA,CAAK,iBAAiB,CAAA;AAC3E,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEA,OAAA,GAA4B;AAC1B,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,SAAA,GAAgC;AAC9B,IAAA,OAAO,IAAA,CAAK,aAAa,SAAA,EAAU;AAAA,EACrC;AAAA,EAEA,MAAM,SAAS,OAAA,EAA0C;AACvD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,OAAO,CAAA;AAChC,IAAA,IAAI;AACF,MAAA,MAAM,OAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,OAAO,CAAA;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAc,kBAAkB,OAAA,EAA0C;AAxY5E,IAAA,IAAA,EAAA,EAAA,EAAA;AAyYI,IAAA,MAAM,eAAA,GAAA,CAAkB,EAAA,GAAA,IAAA,CAAK,YAAA,EAAa,KAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,EAAA;AAC7C,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,cAAA,IAAkB,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACtE,MAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,YAAA,EAAa,KAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,QAAO,eAAA,EAAiB;AAC/C,QAAA,IAAA,CAAK,MAAA,EAAO;AACZ,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEA,MAAM,iBAAiB,KAAA,EAAgD;AACrE,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,KAAK,CAAA;AAC9C,IAAA,IAAA,CAAK,qBAAqB,KAAA,EAAM;AAChC,IAAA,IAAA,CAAK,oBAAA,EAAA;AACL,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEA,MAAM,MAAA,GAA8B;AA7ZtC,IAAA,IAAA,EAAA;AAgaI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,IAAA,CACF,cAA2B,0BAA0B,CAAA,KADxD,mBAEI,aAAA,CAAc,IAAI,WAAW,MAAM,CAAA,CAAA;AACvC,IAAA,MAAM,QAAQ,GAAA,CAAI,CAAC,GAAG,IAAA,CAAK,eAAe,CAAC,CAAA;AAC3C,IAAA,OAAO,IAAA,CAAK,aAAa,MAAA,EAAO;AAAA,EAClC;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,aAAa,OAAA,EAAQ;AAAA,EACnC;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,aAAa,OAAA,EAAQ;AAAA,EACnC;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,MAAM,IAAA,CAAK,aAAa,IAAA,EAAK;AAC7B,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,MAAM,IAAA,CAAK,aAAa,IAAA,EAAK;AAC7B,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,IAAA,CAAK,iBAAiB,CAAA;AAC/D,IAAA,IAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,aAAA,EAAe,IAAA,CAAK,uBAAuB,CAAA;AAC3E,IAAA,IAAA,CAAK,SAAA,CAAU,mBAAA,CAAoB,QAAA,EAAU,IAAA,CAAK,qBAAqB,CAAA;AACvE,IAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,oBAAA,CAAqB,IAAA,CAAK,cAAc,CAAA;AACjE,IAAA,IAAA,CAAK,oBAAA,EAAA;AACL,IAAA,MAAA,CAAO,mBAAA,CAAoB,WAAA,EAAa,IAAA,CAAK,qBAAqB,CAAA;AAClE,IAAA,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,IAAA,CAAK,mBAAmB,CAAA;AAC9D,IAAA,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,IAAA,CAAK,mBAAmB,CAAA;AAC9D,IAAA,MAAA,CAAO,mBAAA,CAAoB,aAAA,EAAe,IAAA,CAAK,uBAAuB,CAAA;AACtE,IAAA,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,IAAA,CAAK,kBAAA,EAAoB,IAAI,CAAA;AAClE,IAAA,MAAM,IAAA,CAAK,aAAa,OAAA,EAAQ;AAChC,IAAA,OAAO,IAAA,CAAK,KAAK,UAAA,EAAY,IAAA,CAAK,KAAK,WAAA,CAAY,IAAA,CAAK,KAAK,UAAU,CAAA;AAAA,EACzE;AAAA,EAEQ,KAAA,GAAc;AACpB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,IAAA,KAAA,CAAM,WAAA,GAAc;AAAA,MAAA,EAChB,WAAA,CAAY,IAAA,CAAK,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAkEnC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,KAAA,CAAM,SAAA,GAAY,iBAAA;AAClB,IAAA,IAAA,CAAK,UAAU,SAAA,GAAY,iBAAA;AAC3B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,KAAA,CAAM,SAAA,GAAY,gBAAA;AAClB,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,iBAAA;AACxB,IAAA,IAAA,CAAK,YAAY,SAAA,GAAY,uBAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,SAAA,GAAY,sBAAA;AAC5B,IAAA,KAAA,CAAM,MAAA,CAAO,KAAK,MAAM,CAAA;AACxB,IAAA,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,KAAK,CAAA;AAClC,IAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,KAAA,EAAO,KAAK,WAAW,CAAA;AAC/C,IAAA,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,iBAAiB,CAAA;AAC5D,IAAA,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,aAAA,EAAe,IAAA,CAAK,uBAAuB,CAAA;AACxE,IAAA,IAAA,CAAK,SAAA,CAAU,iBAAiB,QAAA,EAAU,IAAA,CAAK,uBAAuB,EAAE,OAAA,EAAS,MAAM,CAAA;AACvF,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAA,EAAa,IAAA,CAAK,qBAAqB,CAAA;AAC/D,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,IAAA,CAAK,mBAAmB,CAAA;AAC3D,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,IAAA,CAAK,mBAAmB,CAAA;AAC3D,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAA,EAAe,IAAA,CAAK,uBAAuB,CAAA;AACnE,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,IAAA,CAAK,kBAAA,EAAoB,IAAI,CAAA;AAAA,EACjE;AAAA,EAEQ,0BAA0B,cAAA,EAA8C;AAC9E,IAAA,IAAI,OAAO,aAAa,WAAA,IAAe,CAAC,SAAS,KAAA,EAAO,OAAO,QAAQ,OAAA,EAAQ;AAC/E,IAAA,OAAO,cAAA,CACJ,IAAA;AAAA,MAAK,MACJ,OAAA,CAAQ,GAAA;AAAA,QACN,CAAC,GAAG,IAAI,GAAA,CAAI,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAAE,GAAA;AAAA,UAAI,CAAC,WAC/D,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,KAAA,EAAQ,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAE;AAAA;AAC1D;AACF,KACF,CACC,IAAA;AAAA,MAAK,MACJ,OAAA,CAAQ,GAAA;AAAA,QACN,KAAK,sBAAA,CAAuB,GAAA;AAAA,UAAI,CAAC,WAC/B,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,KAAA,EAAQ,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAE;AAAA;AAC1D;AACF,KACF,CACC,KAAK,MAAM,QAAA,CAAS,MAAM,KAAK,CAAA,CAC/B,KAAK,MAAM;AACV,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IACd,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACnB;AAAA,EAEQ,MAAA,GAAe;AACrB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM;AACtC,IAAA,IAAA,CAAK,SAAA,CAAU,eAAA;AAAA,MACb,GAAG,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AA7jBrC,QAAA,IAAA,EAAA;AA8jBQ,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC7C,QAAA,KAAA,CAAM,SAAA,GAAY,gBAAA;AAClB,QAAA,KAAA,CAAM,IAAA,GAAO,QAAA;AACb,QAAA,KAAA,CAAM,OAAA,CAAQ,UAAU,KAAA,CAAM,EAAA;AAC9B,QAAA,KAAA,CAAM,OAAA,CAAQ,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAC7C,QAAA,KAAA,CAAM,OAAA,CAAQ,QAAA,GAAA,CAAA,CACZ,EAAA,GAAA,IAAA,CAAK,YAAA,CAAa,SAAA,OAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA+B,OAAA,MAAY,KAAA,CAAM,EAAA,GAAK,MAAA,GAAS,OAAA;AACjE,QAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5C,QAAA,OAAA,CAAQ,SAAA,GAAY,wBAAA;AACpB,QAAA,MAAM,WAAA,GAAc,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAChD,QAAA,WAAA,CAAY,SAAA,GAAY,4BAAA;AACxB,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC5C,QAAA,MAAA,CAAO,SAAA,GAAY,uBAAA;AACnB,QAAA,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAC3C,QAAA,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,WAAA,EAAa,MAAM,CAAA;AACzC,QAAA,KAAA,CAAM,gBAAA;AAAA,UACJ,OAAA;AAAA,UACA,MAAM,KAAK,IAAA,CAAK,QAAA,CAAS,EAAE,MAAM,cAAA,EAAgB,cAAA,EAAgB,KAAA,CAAM,EAAA,EAAI;AAAA,SAC7E;AACA,QAAA,OAAO,KAAA;AAAA,MACT,CAAC;AAAA,KACH;AACA,IAAA,IAAA,CAAK,uBAAA,CAAwB,MAAM,MAAM,CAAA;AACzC,IAAA,MAAM,QAAA,GAAW,KAAK,YAAA,EAAa;AACnC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,IAAA,CAAK,OAAO,eAAA,EAAgB;AAC5B,MAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA;AACxC,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,KAAA,GAAQ,GAAG,QAAA,CAAS,IAAA,CAAK,QAAQ,KAAK,CAAA,EAAA,CAAA;AACxD,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,MAAA,GAAS,GAAG,QAAA,CAAS,IAAA,CAAK,SAAS,KAAK,CAAA,EAAA,CAAA;AAC1D,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,UAAA,GAAa,cAAc,QAAA,CAAS,UAAA,EAAY,KAAK,cAAc,CAAA;AACrF,IAAA,IAAA,CAAK,MAAA,CAAO,eAAA;AAAA,MACV,GAAG,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,MACtE,IAAA,CAAK;AAAA,KACP;AACA,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEQ,wBAAwB,MAAA,EAA+B;AAC7D,IAAA,MAAM,SAAS,KAAA,CAAM,IAAA;AAAA,MACnB,IAAA,CAAK,SAAA,CAAU,gBAAA,CAAoC,iBAAiB;AAAA,KACtE;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,qBAAA,CAAsB,MAAA,CAAO,MAAM,CAAA;AACtD,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AAC/B,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,aAAA,CAA2B,yBAAyB,CAAA;AAC1E,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,aAAA,CAA2B,6BAA6B,CAAA;AAClF,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,WAAA,EAAa;AAC9B,MAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS,KAAA,IAAS,MAAM,GAAA,EAAK;AAC7C,QAAA,OAAA,CAAQ,eAAA,EAAgB;AACxB,QAAA,OAAO,MAAM,OAAA,CAAQ,eAAA;AACrB,QAAA,OAAO,MAAM,OAAA,CAAQ,WAAA;AACrB,QAAA,WAAA,CAAY,MAAA,GAAS,KAAA;AACrB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,eAAA,KAAoB,MAAA,EAAQ;AAC9C,MAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAM,WAAA,GAAc,qBAAqB,KAAK,CAAA;AAC9C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,oBAAA,CAAqB,GAAA,CAAI,MAAM,EAAE,CAAA;AACrD,MAAA,IAAA,CAAI,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,iBAAgB,WAAA,EAAa;AACvC,QAAA,OAAA,CAAQ,eAAA,CAAgB,oBAAA,CAAqB,MAAA,CAAO,MAAM,CAAC,CAAA;AAC3D,QAAA,KAAA,CAAM,QAAQ,WAAA,GAAc,QAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,eAAA,CAAgB,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAC,CAAA;AACxD,QAAA,KAAA,CAAM,QAAQ,WAAA,GAAc,KAAA;AAC5B,QAAA,KAAK,IAAA,CAAK,kBAAA,CAAmB,KAAA,EAAO,KAAK,CAAA;AAAA,MAC3C;AACA,MAAA,KAAA,CAAM,QAAQ,eAAA,GAAkB,MAAA;AAChC,MAAA,WAAA,CAAY,MAAA,GAAS,IAAA;AAAA,IACvB,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,sBAAsB,KAAA,EAA+C;AAC3E,IAAA,MAAM,UAAA,GAAa,kBAAA,IAAsB,CAAA,GAAI,EAAA,CAAA,GAAM,0BAAA;AACnD,IAAA,MAAM,cAAA,GAAiB,KAAK,SAAA,CAAU,YAAA,IAAgB,aAAa,IAAA,CAAK,GAAA,CAAI,OAAO,CAAC,CAAA;AACpF,IAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,MACjB,CAAA;AAAA,MACA,KAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,SAAA,GAAY,UAAU,CAAA,GAAI;AAAA,KACtD;AACA,IAAA,MAAM,UAAU,IAAA,CAAK,IAAA,CAAK,cAAA,GAAiB,UAAU,IAAI,kBAAA,GAAqB,CAAA;AAC9E,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,SAAA,EAAU;AAC9C,IAAA,MAAM,iBACJ,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAA,MAAY,MAAA,GACnB,IAAA,CAAK,aAAa,KAAA,EAAM,CAAE,MAAA,CAAO,SAAA,CAAU,CAAC,KAAA,KAAU,KAAA,CAAM,EAAA,KAAO,SAAA,CAAU,OAAO,CAAA,GACpF,EAAA;AACN,IAAA,MAAM,KAAA,GACJ,aAAA,IAAiB,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,aAAA,GAAgB,kBAAkB,CAAC,CAAA,GAAI,KAAA;AAC1F,IAAA,MAAM,GAAA,GACJ,aAAA,IAAiB,CAAA,GACb,IAAA,CAAK,IAAI,KAAA,GAAQ,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,OAAO,aAAA,GAAgB,kBAAA,GAAqB,CAAC,CAAC,IACjF,KAAA,GAAQ,OAAA;AACd,IAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,KAAK,GAAA,CAAI,KAAA,EAAO,GAAG,CAAA,EAAE;AAAA,EAC5C;AAAA,EAEQ,qBAAqB,KAAA,EAAmC;AAC9D,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5C,IAAA,OAAA,CAAQ,SAAA,GAAY,sBAAA;AACpB,IAAA,MAAM,KAAA,GAAQ,kBAAA,GAAqB,KAAA,CAAM,IAAA,CAAK,KAAA;AAC9C,IAAA,OAAA,CAAQ,MAAM,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,QAAQ,KAAK,CAAA,EAAA,CAAA;AACjD,IAAA,OAAA,CAAQ,MAAM,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,SAAS,KAAK,CAAA,EAAA,CAAA;AACnD,IAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,UAAA,EAAY,KAAK,cAAc,CAAA;AAC9E,IAAA,OAAA,CAAQ,eAAA;AAAA,MACN,GAAG,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAK,CAAC;AAAA,KACzE;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAc,kBAAA,CAAmB,KAAA,EAA0B,KAAA,EAAqC;AA7qBlG,IAAA,IAAA,EAAA,EAAA,EAAA;AA8qBI,IAAA,MAAM,QAAQ,IAAA,CAAK,oBAAA;AACnB,IAAA,MAAM,WAAA,GAAc,qBAAqB,KAAK,CAAA;AAC9C,IAAA,MAAM,kBAAA,EAAmB;AACzB,IAAA,MAAM,kBAAA,EAAmB;AACzB,IAAA,IAAI,KAAA,KAAU,IAAA,CAAK,oBAAA,IAAwB,CAAC,MAAM,WAAA,EAAa;AAC/D,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,aAAA,CAA2B,yBAAyB,CAAA;AAC1E,IAAA,MAAM,YAAA,GAAe,mCAAS,aAAA,CAA2B,uBAAA,CAAA;AACzD,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,EAAc;AAC/B,IAAA,MAAM,SAAS,MAAM,yBAAA;AAAA,MACnB,YAAA;AAAA,MACA,kBAAA;AAAA,MACA,kBAAA,IAAsB,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAA;AAAA,MACrD,sBAAA;AAAA,MAAA,CACA,gBAAK,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA,KAA/B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkC,gBAAlC,IAAA,GAAA,EAAA,GAAiD;AAAA,KACnD;AACA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,IAAI,KAAA,KAAU,IAAA,CAAK,oBAAA,IAAwB,CAAC,MAAM,WAAA,EAAa;AAC/D,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,KAAA,CAAM,EAAE,CAAA;AACzF,IAAA,IAAI,CAAC,YAAA,IAAgB,oBAAA,CAAqB,YAAY,MAAM,WAAA,EAAa;AACzE,IAAA,IAAA,CAAK,qBAAqB,GAAA,CAAI,KAAA,CAAM,IAAI,EAAE,WAAA,EAAa,QAAQ,CAAA;AAC/D,IAAA,OAAA,CAAQ,eAAA,CAAgB,oBAAA,CAAqB,MAAM,CAAC,CAAA;AACpD,IAAA,KAAA,CAAM,QAAQ,WAAA,GAAc,QAAA;AAAA,EAC9B;AAAA,EAEQ,uBAAA,GAAgC;AACtC,IAAA,IAAI,KAAK,cAAA,EAAgB;AACzB,IAAA,IAAA,CAAK,cAAA,GAAiB,sBAAsB,MAAM;AAChD,MAAA,IAAA,CAAK,cAAA,GAAiB,CAAA;AACtB,MAAA,IAAA,CAAK,uBAAA,CAAwB,IAAA,CAAK,YAAA,CAAa,KAAA,GAAQ,MAAM,CAAA;AAAA,IAC/D,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,UAAA,CACN,IAAA,EACA,KAAA,EACA,KAAA,EACA,cAAc,IAAA,EACD;AAntBjB,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAotBI,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,WAAW,IAAI,CAAA;AAChC,IAAA,MAAM,SAAA,GAAY,KAAK,cAAA,KAAmB,OAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,QAAA,GAAW,YAAA,CAAa,IAAI,CAAA,GAAI,YAAA;AACjD,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA;AAAA,MACrB,QAAA,IAAY,QAAA,KAAa,UAAA,GAAa,EAAA,GAAK,CAAA;AAAA,MAC3C,IAAA,CAAK,OAAO,KAAA,GAAQ;AAAA,KACtB;AACA,IAAA,MAAM,aAAa,IAAA,CAAK,GAAA;AAAA,MACtB,QAAA,IAAY,QAAA,KAAa,YAAA,GAAe,EAAA,GAAK,CAAA;AAAA,MAC7C,IAAA,CAAK,OAAO,MAAA,GAAS;AAAA,KACvB;AACA,IAAA,OAAA,CAAQ,SAAA,GAAY,cAAc,eAAA,GAAkB,qBAAA;AACpD,IAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,IAAA,CAAK,IAAA;AAC5B,IAAA,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAC3C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAA,CAAQ,OAAA,CAAQ,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,aAAa,YAAY,CAAA;AACjE,MAAA,OAAA,CAAQ,OAAA,CAAQ,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,aAAa,YAAY,CAAA;AACjE,MAAA,OAAA,CAAQ,OAAA,CAAQ,UAAU,IAAA,CAAK,EAAA;AAAA,IACjC;AACA,IAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,IAAA,GAAO,KAAA,IAAS,QAAA,IAAY,QAAA,KAAa,UAAA,GAAa,SAAA,GAAY,CAAA,GAAI,CAAA,CAAE,CAAA,EAAA,CAAA;AAC5G,IAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,KAAA,IAAS,QAAA,IAAY,QAAA,KAAa,YAAA,GAAe,UAAA,GAAa,CAAA,GAAI,CAAA,CAAE,CAAA,EAAA,CAAA;AAC7G,IAAA,OAAA,CAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,SAAS,CAAA,EAAA,CAAA;AAClC,IAAA,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,UAAU,CAAA,EAAA,CAAA;AACpC,IAAA,MAAM,aAAuB,EAAC;AAC9B,IAAA,IAAI,IAAA,CAAK,OAAO,QAAA,EAAU,UAAA,CAAW,KAAK,CAAA,OAAA,EAAU,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,IAAA,CAAM,CAAA;AAC9E,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,cAAA,EAAgB,UAAA,CAAW,KAAK,YAAY,CAAA;AAC5D,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,YAAA,EAAc,UAAA,CAAW,KAAK,YAAY,CAAA;AAC1D,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG,OAAA,CAAQ,MAAM,SAAA,GAAY,UAAA,CAAW,KAAK,GAAG,CAAA;AACxE,IAAA,MAAM,aAAA,GAAgB,qBAAqB,IAAI,CAAA;AAC/C,IAAA,MAAM,QAAA,GAAW,4BAAA,CAA6B,IAAA,CAAK,cAAc,CAAA;AACjE,IAAA,MAAM,iBAAA,GAAoB,OAAA;AAAA,MACxB,YAAY,IAAA,CAAK,IAAA,IAAQ,CAAC,IAAA,CAAK,kBAAkB,CAAC;AAAA,KACpD;AACA,IAAA,IAAI,IAAA,CAAK,kBAAA,IAAsB,IAAA,CAAK,cAAA,EAAgB;AAClD,MAAA,mBAAA,CAAoB,SAAS,IAAA,CAAK,cAAA,EAAgB,MAAM,KAAA,EAAO,KAAA,EAAO,KAAK,cAAc,CAAA;AAAA,IAC3F,CAAA,MAAA,IACE,KAAK,cAAA,IACL,aAAA,IACA,qBACA,IAAA,CAAK,IAAA,KAAS,OAAA,IACd,QAAA,IACA,SAAA,EACA;AACA,MAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,aAAA;AAAA,IAC7B,WAAW,IAAA,CAAK,YAAA,IAAgB,KAAK,YAAA,CAAa,MAAA,CAAO,SAAS,CAAA,EAAG;AACnE,MAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAK,YAAA,EAAc,oBAAA,CAAqB,IAAI,CAAC,CAAA;AAAA,IAC5F,CAAA,MAAA,IAAW,KAAK,SAAA,EAAW;AACzB,MAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,mBAAA,CAAoB,KAAK,SAAA,EAAW,oBAAA,CAAqB,IAAI,CAAC,CAAA;AAAA,IAC3F;AACA,IAAA,IAAI,uBAAA,CAAwB,IAAI,CAAA,EAAG,OAAA,CAAQ,MAAM,QAAA,GAAW,SAAA;AAC5D,IAAA,IAAI,IAAA,CAAK,cAAA,KAAmB,WAAA,IAAe,IAAA,CAAK,cAAA,KAAmB,YAAA;AACjE,MAAA,OAAA,CAAQ,MAAM,YAAA,GAAe,CAAA,EAAG,eAAA,CAAgB,IAAI,IAAI,KAAK,CAAA,EAAA,CAAA;AAC/D,IAAA,IAAI,IAAA,CAAK,mBAAmB,gBAAA,EAAkB;AAC5C,MAAA,MAAM,MAAA,GAAS,CAAA,EAAG,eAAA,CAAgB,IAAI,IAAI,KAAK,CAAA,EAAA,CAAA;AAC/C,MAAA,OAAA,CAAQ,KAAA,CAAM,YAAA,GAAe,CAAA,EAAG,MAAM,MAAM,MAAM,CAAA,EAAA,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,IAAA,CAAK,mBAAmB,gBAAA,EAAkB;AAC5C,MAAA,MAAM,MAAA,GAAS,CAAA,EAAG,eAAA,CAAgB,IAAI,IAAI,KAAK,CAAA,EAAA,CAAA;AAC/C,MAAA,OAAA,CAAQ,KAAA,CAAM,YAAA,GAAe,CAAA,EAAG,MAAM,IAAI,MAAM,CAAA,IAAA,CAAA;AAAA,IAClD;AACA,IAAA,IACE,KAAK,cAAA,KAAmB,SAAA,IACxB,uBAAuB,IAAI,CAAA,IAC3B,8BAA8B,IAAI,CAAA;AAElC,MAAA,OAAA,CAAQ,MAAM,YAAA,GAAe,QAAA;AAC/B,IAAA,IAAI,YAAY,CAAC,iBAAA,IAAqB,CAAC,aAAA,EAAe,OAAA,CAAQ,MAAM,QAAA,GAAW,QAAA;AAC/E,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAA,CAAQ,MAAM,WAAA,GAAc,OAAA;AAC5B,MAAA,OAAA,CAAQ,MAAM,WAAA,GAAc,CAAA,EAAG,gBAAA,CAAiB,IAAA,EAAM,KAAK,CAAC,CAAA,EAAA,CAAA;AAC5D,MAAA,IAAI,KAAK,YAAA,IAAgB,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,SAAS,CAAA,EAAG;AAC5D,QAAA,OAAA,CAAQ,KAAA,CAAM,iBAAA,GAAoB,iBAAA,CAAkB,IAAA,CAAK,YAAY,CAAA;AACrE,QAAA,OAAA,CAAQ,MAAM,gBAAA,GAAmB,GAAA;AAAA,MACnC,CAAA,MAAA,IAAW,KAAK,SAAA,EAAW;AACzB,QAAA,OAAA,CAAQ,KAAA,CAAM,cAAc,IAAA,CAAK,SAAA;AAAA,MACnC;AAAA,IACF,CAAA,MAAA,IACE,CAAC,IAAA,CAAK,cAAA,IACN,CAAC,aAAA,IACD,CAAC,iBAAA,IACD,CAAC,QAAA,IACD,IAAA,CAAK,IAAA,KAAS,SAAA,IACd,KAAK,SAAA,EACL;AACA,MAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,GAAc,yBAAA,CAA0B,IAAA,CAAK,QAAQ,CAAA;AACnE,MAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,GAAc,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,IAAA,IAAQ,KAAK,CAAC,CAAA,EAAA,CAAA;AAC5E,MAAA,OAAA,CAAQ,MAAM,WAAA,GAAc,mBAAA,CAAoB,IAAA,CAAK,SAAA,EAAW,KAAK,WAAW,CAAA;AAAA,IAClF;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA,CAAM,YAAY,YAAA,CAAa,IAAA,CAAK,QAAQ,KAAK,CAAA;AAC1E,IAAA,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,IAAA,EAAM,KAAK,CAAA;AACxC,IAAA,uBAAA,CAAwB,OAAA,EAAS,MAAM,KAAK,CAAA;AAC5C,IAAA,IAAI,iBAAA,IAAqB,QAAA;AACvB,MAAA,OAAA,CAAQ,MAAA,CAAO,uBAAA,CAAwB,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAC,CAAA;AAC/D,IAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,IAAA,KAAS,SAAA;AACvC,MAAA,OAAA,CAAQ,MAAA,CAAO,oBAAA,CAAqB,IAAW,CAAC,CAAA;AAClD,IAAA,IAAI,eAAe,OAAA,CAAQ,MAAA,CAAO,oBAAA,CAAqB,IAAA,EAAM,KAAK,CAAC,CAAA;AACnE,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAA,CAAQ,MAAA,CAAO,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,IAChD,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;AAChC,MAAA,OAAA,CAAQ,MAAA,CAAO,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAAA,IACzC,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;AAChC,MAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,IAAA,EAAM,KAAA,EAAO,WAAW,CAAA;AACzD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,KAAA,CAAM,gBAAA,CAAiB,OAAA,EAAS,CAAC,KAAA,KAAU;AACzC,UAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,UAAA,IAAI,IAAA,CAAK,wBAAuB,EAAG;AACnC,UAAA,IAAA,CAAK,wBAAA,CAAyB,KAAA,EAAO,IAAA,EAAM,KAAK,CAAA;AAChD,UAAA,KAAK,KAAK,QAAA,CAAS;AAAA,YACjB,IAAA,EAAM,cAAA;AAAA,YACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,YACtB,eAAe,IAAA,CAAK;AAAA,WACrB,CAAA;AAAA,QACH,CAAC,CAAA;AACD,QAAA,KAAA,CAAM,gBAAA,CAAiB,UAAA,EAAY,CAAC,KAAA,KAAU;AAC5C,UAAA,MAAM,IAAA,GAAO,mBAAmB,KAAK,CAAA;AACrC,UAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,CAAK,aAAa,cAAA,EAAgB;AAChD,UAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,UAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACnC,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AACzC,UAAA,IAAI,CAAC,OAAO,SAAA,CAAU,GAAG,KAAK,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG;AACzD,UAAA,IAAA,CAAK,kBAAA,CAAmB,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAK,MAAM,CAAA;AAAA,QACxD,CAAC,CAAA;AAAA,MACH;AACA,MAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IACtB,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,SAAA,EAAW;AAClC,MAAA,MAAM,WAAW,IAAA,CAAK,SAAA,GAAY,KAAK,cAAA,CAAe,IAAA,CAAK,SAAS,CAAA,GAAI,MAAA;AACxE,MAAA,MAAM,MAAM,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,GAAA;AACtB,MAAA,IAAI,OAAO,wBAAA,CAAyB,QAAA,CAAS,WAAA,EAAa,IAAA,CAAK,SAAS,CAAA,EAAG;AACzE,QAAA,IAAI,+BAAA,CAAgC,IAAA,EAAM,KAAK,CAAA,EAAG;AAChD,UAAA,OAAA,CAAQ,MAAA,CAAO,2BAAA,CAA4B,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,QACvD,CAAA,MAAO;AACL,UAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC1C,UAAA,KAAA,CAAM,GAAA,GAAM,GAAA;AACZ,UAAA,KAAA,CAAM,GAAA,GAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,EAAA,GAAa,EAAA;AACzB,UAAA,mBAAA,CAAoB,OAAO,IAAI,CAAA;AAC/B,UAAA,IAAI,KAAK,YAAA,KAAiB,MAAA;AACxB,YAAA,KAAA,CAAM,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,YAAY,CAAC,CAAC,CAAA;AAC1E,UAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,QACtB;AACA,QAAA,IAAI,KAAK,SAAA,EAAW,OAAA,CAAQ,OAAO,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,MACpE,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,OAAA,CAAQ,gBAAA,GAAmB,IAAA,CAAK,SAAA,GAAY,MAAA,GAAS,SAAA;AAC7D,QAAA,IAAI,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,WAAA,EAAa,OAAA,CAAQ,OAAA,CAAQ,mBAAmB,QAAA,CAAS,WAAA;AACvE,QAAA,IAAI,IAAA,CAAK,SAAA,EAAW,OAAA,CAAQ,OAAA,CAAQ,YAAY,IAAA,CAAK,SAAA;AACrD,QAAA,OAAA,CAAQ,MAAA,CAAO,iCAAA,CAAkC,IAAA,EAAM,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,WAAW,CAAC,CAAA;AAAA,MAC/E;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,EAAA,GAAa,EAAA;AAC1B,MAAA,IACE,KAAK,cAAA,IACL,aAAA,IACA,iBAAA,IACA,qBAAA,CAAsB,IAAI,CAAA,EAC1B;AACA,QAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC9C,QAAA,SAAA,CAAU,SAAA,GAAY,qBAAA;AACtB,QAAA,oBAAA,CAAqB,WAAW,IAAI,CAAA;AACpC,QAAA,iBAAA,CAAkB,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AAC9C,QAAA,OAAA,CAAQ,OAAO,SAAS,CAAA;AACxB,QAAA,iBAAA,CAAkB,WAAW,IAAI,CAAA;AACjC,QAAA,gBAAA,CAAiB,WAAW,IAAI,CAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAA,iBAAA,CAAkB,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AAC5C,QAAA,iBAAA,CAAkB,SAAS,IAAI,CAAA;AAC/B,QAAA,gBAAA,CAAiB,SAAS,IAAI,CAAA;AAAA,MAChC;AAAA,IACF;AACA,IAAA,IAAI,2BAAA,CAA4B,IAAI,CAAA,EAAG,OAAA,CAAQ,OAAO,qBAAA,CAAsB,IAAA,EAAM,KAAK,CAAC,CAAA;AACxF,IAAA,IAAI,CAAC,aAAa,OAAO,OAAA;AACzB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC3C,IAAA,MAAA,CAAO,SAAA,GAAY,wBAAA;AACnB,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAA,EAAa,CAAC,KAAA,KAAU;AAC9C,MAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,YAAA,EAAc;AACrC,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,IAAA,CAAK,UAAU,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,IAAA,EAAM,OAAO,OAAO,CAAA;AAAA,IAC7D,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,OAAO,MAAM,CAAA;AACrB,IAAA,OAAA,CAAQ,gBAAA,CAAiB,OAAA,EAAS,CAAC,KAAA,KAAU;AAv4BjD,MAAA,IAAAF,GAAAA,EAAAG,GAAAA;AAw4BM,MAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,IAAI,IAAA,CAAK,wBAAuB,EAAG;AACnC,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,MAAM,SAAA,GAAY,KAAK,SAAA,EAAU;AACjC,QAAA,MAAM,UAAA,GAAa,mBAAA;AAAA,UACjB,KAAA;AAAA,UACA,KAAA;AAAA,UACA,KAAA;AAAA,UAAA,CACA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,IAAA,MAAS,OAAA,GAAU,SAAA,CAAU,UAAU,IAAA,CAAK;AAAA,SACzD;AACA,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,KAAK,KAAK,QAAA,CAAS;AAAA,YACjB,IAAA,EAAM,cAAA;AAAA,YACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,YACtB,aAAA,EAAe,WAAW,IAAA,CAAK;AAAA,WAChC,CAAA;AACD,UAAA,CAAAA,GAAAA,GAAAA,CAAAH,MAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAAG,GAAAA,CAAA,KAAAH,GAAAA,EAA8B;AAAA,YAC5B,MAAA,EAAQ,iBAAA;AAAA,YACR,SAAS,KAAA,CAAM,EAAA;AAAA,YACf,OAAA,EAAS,WAAW,IAAA,CAAK,EAAA;AAAA,YACzB,IAAA,EAAM,WAAW,IAAA,CAAK,IAAA;AAAA,YACtB,IAAA,EAAM,WAAW,IAAA,CAAK,IAAA;AAAA,YACtB,QAAQ,CAAA,iDAAA,EAAY,UAAA,CAAW,QAAQ,CAAC,CAAA,CAAA,EAAI,WAAW,KAAK,CAAA,CAAA;AAAA,YAC5D,gBAAgB,UAAA,CAAW,KAAA;AAAA,YAC3B,gBAAgB,UAAA,CAAW;AAAA,WAC7B,CAAA;AACA,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAM,iBAAiB,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,IAAA,EAAM,OAAO,KAAK,CAAA;AAC1E,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,KAAK,KAAK,QAAA,CAAS;AAAA,UACjB,IAAA,EAAM,cAAA;AAAA,UACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,UACtB,eAAe,cAAA,CAAe;AAAA,SAC/B,CAAA;AACD,QAAA;AAAA,MACF;AACA,MAAA,KAAK,KAAK,QAAA,CAAS;AAAA,QACjB,IAAA,EAAM,cAAA;AAAA,QACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,QACtB,eAAe,IAAA,CAAK;AAAA,OACrB,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,gBAAA,CAAiB,aAAA,EAAe,CAAC,KAAA,KAAU;AAr7BvD,MAAA,IAAAA,GAAAA;AAs7BM,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,MAAM,UAAA,GAAA,CAAaA,GAAAA,GAAA,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,MAAM,KAAA,EAAO,KAAK,CAAA,KAAnD,IAAA,GAAAA,GAAAA,GAAwD,IAAA;AAC3E,MAAA,KAAK,KAAK,QAAA,CAAS;AAAA,QACjB,IAAA,EAAM,cAAA;AAAA,QACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,QACtB,eAAe,UAAA,CAAW;AAAA,OAC3B,EAAE,IAAA,CAAK,MAAM,KAAK,eAAA,CAAgB,KAAA,EAAO,KAAA,EAAO,UAAU,CAAC,CAAA;AAAA,IAC9D,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAA,EAAa,CAAC,KAAA,KAAU;AA/7BrD,MAAA,IAAAA,GAAAA,EAAAG,GAAAA;AAg8BM,MAAA,MAAM,UAAA,GAAA,CAAaH,GAAAA,GAAA,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,MAAM,KAAA,EAAO,KAAK,CAAA,KAAnD,IAAA,GAAAA,GAAAA,GAAwD,IAAA;AAC3E,MAAA,MAAM,aAAA,GAAA,CAAgBG,MAAA,eAAA,CAAgB,IAAA,CAAK,QAAQ,UAAA,CAAW,EAAE,CAAA,KAA1C,IAAA,GAAAA,GAAAA,GAA+C,OAAA;AACrE,MAAA,IACE,aAAA,CAAc,aAAA,EAAe,KAAA,CAAM,MAAM,CAAA,IACzC,MAAM,MAAA,KAAW,CAAA,IACjB,CAAC,UAAA,CAAW,YAAA,CAAa,YAAA;AAEzB,QAAA;AACF,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,IAAA,CAAK,UAAU,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,UAAA,EAAY,OAAO,aAAa,CAAA;AAAA,IACvE,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,gBAAA,CAAiB,UAAA,EAAY,CAAC,KAAA,KAAU;AA58BpD,MAAA,IAAAH,KAAAG,GAAAA,EAAAC,GAAAA;AA68BM,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,KAAA,EAAO,IAAA,EAAM,OAAO,KAAK,CAAA;AAC1E,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,IAAA,CAAK,aAAA;AAAA,UAAA,CACHJ,GAAAA,GAAA,gBAAgB,IAAA,CAAK,MAAA,EAAQ,eAAe,EAAE,CAAA,KAA9C,OAAAA,GAAAA,GAAmD,OAAA;AAAA,UACnD,KAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,QAAA,EAAU;AAC/B,QAAA,KAAK,KAAK,YAAA,CACP,QAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,gBAAgB,KAAA,CAAM,EAAA,EAAI,aAAA,EAAe,IAAA,CAAK,IAAI,CAAA,CACnF,KAAK,MAAM,IAAA,CAAK,iBAAiB,CAAA;AACpC,QAAA,CAAAI,GAAAA,GAAAA,CAAAD,MAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAAC,GAAAA,CAAA,KAAAD,GAAAA,EAA8B;AAAA,UAC5B,MAAA,EAAQ,mBAAA;AAAA,UACR,SAAS,KAAA,CAAM,EAAA;AAAA,UACf,SAAS,IAAA,CAAK,EAAA;AAAA,UACd,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,MAAA,EAAQ,kBAAkB,IAAI;AAAA,SAChC,CAAA;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA;AAAA,IACzC,CAAC,CAAA;AACD,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,oBAAA,CACN,KAAA,EACA,OAAA,EACA,KAAA,EACA,KAAA,EACqB;AACrB,IAAA,MAAM,SAAA,GAAY,KAAK,SAAA,EAAU;AACjC,IAAA,IAAA,CACE,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,IAAA,MAAS,OAAA,IACpB,SAAA,CAAU,OAAA,KAAY,MAAM,EAAA,IAC5B,SAAA,CAAU,OAAA,KAAY,OAAA,CAAQ,EAAA,EAC9B;AACA,MAAA,OAAO,OAAA;AAAA,IACT;AACA,IAAA,OAAO,yBAAA,CAA0B,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,KAAK,CAAA;AAAA,EAC/D;AAAA,EAEQ,wBAAA,CAAyB,KAAA,EAAsB,IAAA,EAAoB,KAAA,EAAoB;AA3/BjG,IAAA,IAAA,EAAA,EAAA,EAAA;AA4/BI,IAAA,MAAM,IAAA,GAAO,mBAAmB,KAAK,CAAA;AACrC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,CAAK,aAAa,cAAA,EAAgB;AAChD,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,OAAO,SAAA,CAAU,GAAG,KAAK,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG;AACzD,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,+BAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA0C;AAAA,MACxC,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,SAAS,IAAA,CAAK,EAAA;AAAA,MACd,GAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA,EAAM,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,KAAK,MAAM;AAAA,KAChD,CAAA;AAAA,EACF;AAAA,EAEQ,cAAA,CAAe,OAAA,EAAsB,IAAA,EAAoB,KAAA,EAAqB;AA1gCxF,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2gCI,IAAA,MAAM,QAAQ,IAAA,CAAK,SAAA;AACnB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,uBAAA,CAAwB,OAAA,EAAS,sBAAA,CAAuB,IAAA,EAAM,KAAK,GAAG,KAAK,CAAA;AAC3E,MAAA,IAAI,MAAM,SAAA,EAAW;AACnB,QAAA,kBAAA,CAAmB,OAAA,EAAS,MAAM,SAAS,CAAA;AAC3C,QAAA,IAAI,KAAA,CAAM,SAAA,KAAc,QAAA,EAAU,OAAA,CAAQ,MAAM,cAAA,GAAiB,QAAA;AACjE,QAAA,IAAI,KAAA,CAAM,SAAA,KAAc,OAAA,EAAS,OAAA,CAAQ,MAAM,cAAA,GAAiB,UAAA;AAAA,MAClE;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,KAAS,OAAA,GAAU,SAAY,IAAA,CAAK,QAAA;AACtD,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,KAAA;AAC/B,MAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,EAAA,GAAiB,KAAA;AAC7B,MAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,EAAA,GAAmB,KAAA;AACjC,MAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,IAAA,CAAK,WAAA,KAAL,IAAA,GAAA,EAAA,GAAoB,KAAA;AACnC,MAAA,MAAM,cAAA,GAAiB,wBAAA,CAAyB,IAAA,EAAM,KAAK,CAAA;AAC3D,MAAA,OAAA,CAAQ,KAAA,CAAM,OAAA,GAAU,CAAA,EAAG,GAAA,GAAM,QAAQ,cAAc,CAAA,GAAA,EAAM,KAAA,GAAQ,KAAK,CAAA,GAAA,EAAM,MAAA,GAAS,KAAK,CAAA,GAAA,EAAM,OAAO,KAAK,CAAA,EAAA,CAAA;AAChH,MAAA,IAAI,kBAAA,CAAmB,IAAI,CAAA,EAAG;AAC5B,QAAA,OAAA,CAAQ,MAAM,WAAA,GAAc,aAAA;AAC5B,QAAA,OAAA,CAAQ,MAAM,eAAA,GAAkB,SAAA;AAAA,MAClC;AACA,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,QAAA,EAAU,OAAA,CAAQ,MAAM,UAAA,GAAa,QAAA;AACzD,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,QAAA,EAAU,OAAA,CAAQ,MAAM,UAAA,GAAa,UAAA;AACzD,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,KAAA,EAAO,OAAA,CAAQ,MAAM,UAAA,GAAa,YAAA;AAAA,IACxD;AAAA,EACF;AAAA,EAEQ,aAAA,CAAc,OAAA,EAAsB,KAAA,EAAsB,IAAA,EAA0B;AAtiC9F,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuiCI,IAAA,MAAM,YAAA,GAAA,CAAe,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,EAAA,GAAa,EAAA;AAClC,IAAA,MAAM,cAAA,GAAiB,mBAAmB,OAAO,CAAA;AACjD,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,KAAK,KAAK,YAAA,CACP,QAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,gBAAgB,KAAA,CAAM,EAAA,EAAI,aAAA,EAAe,IAAA,CAAK,IAAI,CAAA,CACnF,KAAK,MAAM,IAAA,CAAK,iBAAiB,CAAA;AACpC,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,0BAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAqC;AAAA,MACnC,KAAA,EAAO,OAAA;AAAA,MACP,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,SAAS,IAAA,CAAK,EAAA;AAAA,MACd,IAAA,EAAM;AAAA,KACR,CAAA;AACA,IAAA,cAAA,CAAe,eAAA,GAAkB,MAAA;AACjC,IAAA,cAAA,CAAe,UAAA,GAAa,KAAA;AAC5B,IAAA,cAAA,CAAe,YAAA,CAAa,QAAQ,SAAS,CAAA;AAC7C,IAAA,cAAA,CAAe,YAAA,CAAa,YAAA,EAAA,CAAc,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,YAAa,UAAU,CAAA;AACjE,IAAA,OAAA,CAAQ,QAAQ,OAAA,GAAU,MAAA;AAC1B,IAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,eAAA,GAAkB,SAAA;AACtC,IAAA,cAAA,CAAe,WAAA,GAAc,YAAA;AAC7B,IAAA,cAAA,CAAe,KAAA,EAAM;AACrB,IAAA,MAAM,SAAA,GAAY,cAAA,CAAe,aAAA,CAAc,YAAA,EAAa;AAC5D,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,aAAA,CAAc,WAAA,EAAY;AACvD,MAAA,KAAA,CAAM,mBAAmB,cAAc,CAAA;AACvC,MAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AACpB,MAAA,SAAA,CAAU,eAAA,EAAgB;AAC1B,MAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAAA,IAC1B;AACA,IAAA,MAAM,MAAA,2BAAU,MAAA,KAAoB;AAnkCxC,MAAA,IAAAH,GAAAA,EAAAG,GAAAA,EAAAC,GAAAA,EAAAC,GAAAA,EAAA,EAAA;AAokCM,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,cAAA,CAAe,eAAA,GAAkB,OAAA;AACjC,MAAA,cAAA,CAAe,gBAAgB,MAAM,CAAA;AACrC,MAAA,cAAA,CAAe,gBAAgB,YAAY,CAAA;AAC3C,MAAA,OAAO,QAAQ,OAAA,CAAQ,OAAA;AACvB,MAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,eAAA;AAC3B,MAAA,cAAA,CAAe,mBAAA,CAAoB,QAAQ,UAAU,CAAA;AACrD,MAAA,cAAA,CAAe,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAC3D,MAAA,cAAA,CAAe,mBAAA,CAAoB,SAAS,WAAW,CAAA;AACvD,MAAA,MAAM,IAAA,GAAA,CAAOL,GAAAA,GAAA,cAAA,CAAe,WAAA,KAAf,OAAAA,GAAAA,GAA8B,EAAA;AAC3C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,cAAA,CAAe,WAAA,GAAc,YAAA;AAC7B,QAAA,CAAAI,GAAAA,GAAAA,CAAAD,MAAA,IAAA,CAAK,OAAA,EAAQ,0BAAb,IAAA,GAAA,MAAA,GAAAC,GAAAA,CAAA,KAAAD,GAAAA,EAAqC;AAAA,UACnC,KAAA,EAAO,QAAA;AAAA,UACP,SAAS,KAAA,CAAM,EAAA;AAAA,UACf,SAAS,IAAA,CAAK,EAAA;AAAA,UACd,IAAA,EAAM;AAAA,SACR,CAAA;AACA,QAAA,IAAA,CAAK,MAAA,EAAO;AACZ,QAAA;AAAA,MACF;AACA,MAAA,CAAA,EAAA,GAAA,CAAAE,GAAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,qBAAA,KAAb,wBAAAA,GAAAA,EAAqC;AAAA,QACnC,KAAA,EAAO,QAAA;AAAA,QACP,SAAS,KAAA,CAAM,EAAA;AAAA,QACf,SAAS,IAAA,CAAK,EAAA;AAAA,QACd;AAAA,OACF,CAAA;AACA,MAAA,IAAI,SAAS,YAAA,EAAc;AACzB,QAAA,KAAK,KAAK,QAAA,CAAS;AAAA,UACjB,IAAA,EAAM,gBAAA;AAAA,UACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,UACtB,eAAe,IAAA,CAAK,EAAA;AAAA,UACpB;AAAA,SACD,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,EAAO;AAAA,MACd;AAAA,IACF,CAAA,EAvCe,QAAA,CAAA;AAwCf,IAAA,MAAM,aAAA,2BAAiB,KAAA,KAAyB;AAC9C,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC1B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,MAAA,CAAO,KAAK,CAAA;AACZ,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,CAAC,MAAM,QAAA,EAAU;AAC5C,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,MAAA,CAAO,IAAI,CAAA;AAAA,MACb;AAAA,IACF,CAAA,EAVsB,eAAA,CAAA;AAWtB,IAAA,MAAM,WAAA,2BAAe,KAAA,KAA0B;AAtnCnD,MAAA,IAAAL,GAAAA;AAunCM,MAAA,MAAM,QAAOA,GAAAA,GAAA,KAAA,CAAM,aAAA,KAAN,IAAA,GAAA,MAAA,GAAAA,IAAqB,OAAA,CAAQ,YAAA,CAAA;AAC1C,MAAA,IAAI,SAAS,MAAA,EAAW;AACxB,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,eAAA,CAAgB,gBAAgB,IAAI,CAAA;AAAA,IACtC,CAAA,EALoB,aAAA,CAAA;AAMpB,IAAA,MAAM,UAAA,mBAAa,MAAA,CAAA,MAAM,MAAA,CAAO,IAAI,CAAA,EAAjB,YAAA,CAAA;AACnB,IAAA,cAAA,CAAe,gBAAA,CAAiB,QAAQ,UAAU,CAAA;AAClD,IAAA,cAAA,CAAe,gBAAA,CAAiB,WAAW,aAAa,CAAA;AACxD,IAAA,cAAA,CAAe,gBAAA,CAAiB,SAAS,WAAW,CAAA;AAAA,EACtD;AAAA,EAEQ,kBAAA,CACN,IAAA,EACA,KAAA,EACA,IAAA,EACA,KACA,MAAA,EACM;AAxoCV,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyoCI,IAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,KAAK,MAAM,CAAA;AAC7D,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,KAAK,KAAK,YAAA,CACP,QAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,gBAAgB,KAAA,CAAM,EAAA,EAAI,aAAA,EAAe,IAAA,CAAK,IAAI,CAAA,CACnF,KAAK,MAAM,IAAA,CAAK,iBAAiB,CAAA;AACpC,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,+BAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA0C;AAAA,MACxC,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,SAAS,IAAA,CAAK,EAAA;AAAA,MACd,GAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACR,CAAA;AACA,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,IAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,eAAA,GAAkB,SAAA;AACtC,IAAA,IAAA,CAAK,YAAA,CAAa,QAAQ,SAAS,CAAA;AACnC,IAAA,IAAA,CAAK,YAAA,CAAa,YAAA,EAAc,CAAA,EAAA,CAAG,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,EAAA,GAAa,WAAW,CAAA,MAAA,EAAS,GAAA,GAAM,CAAC,CAAA,CAAA,EAAI,MAAA,GAAS,CAAC,CAAA,CAAE,CAAA;AAC3F,IAAA,IAAA,CAAK,WAAA,GAAc,YAAA;AACnB,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,YAAA,EAAa;AAClD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,WAAA,EAAY;AAC7C,MAAA,KAAA,CAAM,mBAAmB,IAAI,CAAA;AAC7B,MAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AACpB,MAAA,SAAA,CAAU,eAAA,EAAgB;AAC1B,MAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAAA,IAC1B;AACA,IAAA,MAAM,MAAA,2BAAU,MAAA,KAAoB;AApqCxC,MAAA,IAAAA,GAAAA;AAqqCM,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,IAAA,CAAK,eAAA,GAAkB,OAAA;AACvB,MAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,eAAA;AAC3B,MAAA,IAAA,CAAK,gBAAgB,MAAM,CAAA;AAC3B,MAAA,IAAA,CAAK,gBAAgB,YAAY,CAAA;AACjC,MAAA,IAAA,CAAK,mBAAA,CAAoB,QAAQ,UAAU,CAAA;AAC3C,MAAA,IAAA,CAAK,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACjD,MAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,WAAW,CAAA;AAC7C,MAAA,MAAM,IAAA,GAAA,CAAOA,GAAAA,GAAA,IAAA,CAAK,WAAA,KAAL,OAAAA,GAAAA,GAAoB,EAAA;AACjC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,IAAA,CAAK,WAAA,GAAc,YAAA;AACnB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,YAAA;AACxB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,YAAA,EAAc;AACzB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,IAAA;AACxB,QAAA,KAAK,KAAK,QAAA,CAAS;AAAA,UACjB,IAAA,EAAM,qBAAA;AAAA,UACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,UACtB,eAAe,IAAA,CAAK,EAAA;AAAA,UACpB,GAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,EAAO;AAAA,MACd;AAAA,IACF,CAAA,EA7Be,QAAA,CAAA;AA8Bf,IAAA,MAAM,aAAA,2BAAiB,KAAA,KAAyB;AAC9C,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC1B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,MAAA,CAAO,KAAK,CAAA;AACZ,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,CAAC,MAAM,QAAA,EAAU;AAC5C,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,MAAA,CAAO,IAAI,CAAA;AAAA,MACb;AAAA,IACF,CAAA,EAVsB,eAAA,CAAA;AAWtB,IAAA,MAAM,WAAA,2BAAe,KAAA,KAA0B;AA7sCnD,MAAA,IAAAA,GAAAA;AA8sCM,MAAA,MAAM,QAAOA,GAAAA,GAAA,KAAA,CAAM,aAAA,KAAN,IAAA,GAAA,MAAA,GAAAA,IAAqB,OAAA,CAAQ,YAAA,CAAA;AAC1C,MAAA,IAAI,SAAS,MAAA,EAAW;AACxB,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,eAAA,CAAgB,MAAM,IAAI,CAAA;AAAA,IAC5B,CAAA,EALoB,aAAA,CAAA;AAMpB,IAAA,MAAM,UAAA,mBAAa,MAAA,CAAA,MAAM,MAAA,CAAO,IAAI,CAAA,EAAjB,YAAA,CAAA;AACnB,IAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,UAAU,CAAA;AACxC,IAAA,IAAA,CAAK,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAC9C,IAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,WAAW,CAAA;AAAA,EAC5C;AAAA,EAEQ,UACN,KAAA,EACA,IAAA,EACA,KAAA,EACA,IAAA,EACA,OACA,OAAA,EACM;AACN,IAAA,IAAI,IAAA,KAAS,QAAA,EAAU,wBAAA,CAAyB,OAAA,EAAS,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,SAAA,GAAY;AAAA,MACf,IAAA;AAAA,MACA,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,SAAS,IAAA,CAAK,EAAA;AAAA,MACd,WAAW,KAAA,CAAM,IAAA;AAAA,MACjB,cAAc,KAAA,CAAM,OAAA;AAAA,MACpB,cAAc,KAAA,CAAM,OAAA;AAAA,MACpB,WAAA,EAAa,mBAAK,IAAA,CAAK,MAAA,CAAA;AAAA,MACvB,KAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,KAAK,KAAK,YAAA,CACP,QAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,gBAAgB,KAAA,CAAM,EAAA,EAAI,aAAA,EAAe,IAAA,CAAK,IAAI,CAAA,CACnF,KAAK,MAAM,IAAA,CAAK,iBAAiB,CAAA;AAAA,EACtC;AAAA,EAEQ,WAAW,KAAA,EAAyB;AAC1C,IAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAClB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA;AAAA,MACpB,KAAA,CAAM,UAAU,IAAA,CAAK,YAAA;AAAA,MACrB,KAAA,CAAM,UAAU,IAAA,CAAK;AAAA,KACvB;AACA,IAAA,IAAI,YAAY,2BAAA,EAA6B;AAC3C,MAAA,IAAA,CAAK,yBAAyB,IAAI,CAAA;AAClC,MAAA,IAAA,CAAK,cAAA,EAAe;AACpB,MAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,MAAA,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAC5C,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ,QAAA,GAAW,MAAA;AAChC,IAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,eAAA,GAAkB,UAAA;AACtC,IAAA,MAAM,EAAA,GAAA,CAAM,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,gBAAgB,IAAA,CAAK,KAAA;AACtD,IAAA,MAAM,EAAA,GAAA,CAAM,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,gBAAgB,IAAA,CAAK,KAAA;AACtD,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,MAAM,EAAE,MAAA,EAAAM,OAAAA,EAAO,GAAI,MAAM,MAAA,GACrB;AAAA,QACE,MAAA,EAAQ,oBAAA,CAAqB,IAAA,CAAK,WAAA,EAAa,KAAK,SAAA,EAAW;AAAA,UAC7D,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,IAAA,GAAO,EAAA;AAAA,UAC9B,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,GAAA,GAAM;AAAA,SAC7B;AAAA,OACH,GACA,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM;AAAA,QACxB,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,IAAA,GAAO,EAAA;AAAA,QAC9B,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,GAAA,GAAM;AAAA,OAC7B,CAAA;AACL,MAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,IAAA,CAAK,cAAA,EAAe;AACtC,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA,GAAO,GAAGA,OAAAA,CAAO,IAAA,GAAO,KAAK,KAAK,CAAA,EAAA,CAAA;AACrD,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,GAAA,GAAM,GAAGA,OAAAA,CAAO,GAAA,GAAM,KAAK,KAAK,CAAA,EAAA,CAAA;AACnD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,KAAA,CAAM,MAAA,GACrB;AAAA,MACE,MAAA,EAAQ,oBAAA,CAAqB,IAAA,CAAK,WAAA,EAAa,KAAK,SAAA,EAAW;AAAA,QAC7D,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,KAAA,GAAQ,EAAA;AAAA,QAChC,MAAA,EAAQ,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS;AAAA,OACnC;AAAA,KACH,GACA,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM;AAAA,MAC1B,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,KAAA,GAAQ,EAAA;AAAA,MAChC,MAAA,EAAQ,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS;AAAA,KACnC,CAAA;AACL,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,IAAA,CAAK,cAAA,EAAe;AACtC,IAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,GAAG,MAAA,CAAO,KAAA,GAAQ,KAAK,KAAK,CAAA,EAAA,CAAA;AACvD,IAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,MAAA,GAAS,GAAG,MAAA,CAAO,MAAA,GAAS,KAAK,KAAK,CAAA,EAAA,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAc,WAAW,KAAA,EAAkC;AAvyC7D,IAAA,IAAA,EAAA,EAAA,EAAA;AAwyCI,IAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAClB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,MAAM,EAAA,GAAA,CAAM,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,gBAAgB,IAAA,CAAK,KAAA;AACtD,IAAA,MAAM,EAAA,GAAA,CAAM,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,gBAAgB,IAAA,CAAK,KAAA;AACtD,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA;AAAA,MACpB,KAAA,CAAM,UAAU,IAAA,CAAK,YAAA;AAAA,MACrB,KAAA,CAAM,UAAU,IAAA,CAAK;AAAA,KACvB;AACA,IAAA,IAAI,QAAA,IAAY,2BAAA,IAA+B,CAAC,IAAA,CAAK,MAAA,EAAQ;AAC3D,MAAA,IAAA,CAAK,cAAA,EAAe;AACpB,MAAA,IAAA,CAAK,oBAAA,CAAqB,KAAK,OAAO,CAAA;AACtC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,sBAAA,GACH,IAAA,CAAK,sBAAA,IAA0B,QAAA,GAAW,2BAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,GACf,oBAAA;AAAA,MACE,IAAA,CAAK,WAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAS,MAAA,GACV;AAAA,QACE,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,IAAA,GAAO,EAAA;AAAA,QAC9B,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,GAAA,GAAM;AAAA,OAC9B,GACA;AAAA,QACE,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,KAAA,GAAQ,EAAA;AAAA,QAChC,MAAA,EAAQ,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS;AAAA;AACpC,QAEN,IAAA,CAAK,IAAA,KAAS,MAAA,GACZ,IAAA,CAAK,eAAe,IAAA,EAAM;AAAA,MACxB,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,IAAA,GAAO,EAAA;AAAA,MAC9B,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,GAAA,GAAM;AAAA,KAC7B,CAAA,GACD,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM;AAAA,MAC1B,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,KAAA,GAAQ,EAAA;AAAA,MAChC,MAAA,EAAQ,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS;AAAA,KACnC,CAAA;AACP,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAA,CAAK,oBAAA,CAAqB,KAAK,OAAO,CAAA;AACtC,IAAA,MAAM,KAAK,QAAA,CAAS;AAAA,MAClB,IAAA,EAAM,oBAAA;AAAA,MACN,gBAAgB,IAAA,CAAK,OAAA;AAAA,MACrB,eAAe,IAAA,CAAK,OAAA;AAAA,MACpB,QAAA,EAAU,QAAA,IAAY,IAAA,GAAO,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,MAC3C,wBAAA,EAA0B,KAAK,IAAA,KAAS;AAAA,KACzC,CAAA;AACD,IAAA,IAAI,SAAA,IAAa,IAAA,IAAQ,IAAA,CAAK,OAAA,EAAS;AACrC,MAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,MAAA,MAAM,IAAA,GAAO,+BAAO,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,IAAA,CAAK,OAAA,CAAA;AAC1D,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA8B;AAAA,UAC5B,MAAA,EAAQ,eAAA;AAAA,UACR,SAAS,KAAA,CAAM,EAAA;AAAA,UACf,SAAS,IAAA,CAAK,EAAA;AAAA,UACd,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,MAAA,EAAQ,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,KAAK;AAAA,SAC3C,CAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,gBAAA,CAAiB,MAAqB,KAAA,EAA8B;AAC1E,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,GAAG,IAAI,GAAA;AAAA,QACL,IAAA,CAAK,MAAA,CACF,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,gBAAgB,CAAA,CACrC,MAAA,CAAO,CAAC,EAAA,KAAqB,OAAA,CAAQ,EAAE,CAAC;AAAA;AAC7C,KACF,CACG,GAAA,CAAI,CAAC,OAAA,KAAY,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,OAAO,CAAC,CAAA,CAChE,MAAA,CAAO,CAAC,IAAA,KAA+B,OAAA,CAAQ,IAAI,CAAC,CAAA,CACpD,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,EAAE,CAAA;AACrC,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA,OAAO,CAAA,yBAAA,EAAQ,cAAA,CAAe,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,wDAAA;AAAA,EACT;AAAA,EAEQ,cAAA,CACN,MACA,IAAA,EACe;AACf,IAAA,MAAM,YAAY,oBAAA,CAAqB,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,WAAW,IAAI,CAAA;AAC7E,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,IAAA,CAAK,OAAO,CAAA;AACtF,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,cAAA,EAAe;AACpB,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAQ,EAAC,EAAG,SAAS,KAAA,EAAM;AAAA,IACzD;AACA,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,IAAA,EAAQ,0BAAA,GAA6B,KAAK,KAAK,CAAA;AAC1E,IAAA,MAAM,KAAA,GAAQ,cAAA;AAAA,MACZ;AAAA,QACE,EAAE,MAAA,EAAQ,CAAA,EAAG,OAAO,SAAA,CAAU,IAAA,EAAM,MAAM,OAAA,EAAQ;AAAA,QAClD;AAAA,UACE,MAAA,EAAQ,UAAU,KAAA,GAAQ,CAAA;AAAA,UAC1B,KAAA,EAAO,SAAA,CAAU,IAAA,GAAO,SAAA,CAAU,KAAA,GAAQ,CAAA;AAAA,UAC1C,IAAA,EAAM;AAAA,SACR;AAAA,QACA,EAAE,MAAA,EAAQ,SAAA,CAAU,KAAA,EAAO,KAAA,EAAO,UAAU,IAAA,GAAO,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,KAAA;AAAM,OAClF;AAAA,MACA,qBAAA,CAAsB,KAAA,EAAO,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AAAA,MAC9C;AAAA,KACF;AACA,IAAA,MAAM,KAAA,GAAQ,cAAA;AAAA,MACZ;AAAA,QACE,EAAE,MAAA,EAAQ,CAAA,EAAG,OAAO,SAAA,CAAU,GAAA,EAAK,MAAM,OAAA,EAAQ;AAAA,QACjD;AAAA,UACE,MAAA,EAAQ,UAAU,MAAA,GAAS,CAAA;AAAA,UAC3B,KAAA,EAAO,SAAA,CAAU,GAAA,GAAM,SAAA,CAAU,MAAA,GAAS,CAAA;AAAA,UAC1C,IAAA,EAAM;AAAA,SACR;AAAA,QACA,EAAE,MAAA,EAAQ,SAAA,CAAU,MAAA,EAAQ,KAAA,EAAO,UAAU,GAAA,GAAM,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,KAAA;AAAM,OACnF;AAAA,MACA,qBAAA,CAAsB,KAAA,EAAO,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AAAA,MAC9C;AAAA,KACF;AACA,IAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,IAAA,CAAK,WAAA,EAAa,KAAK,SAAA,EAAW;AAAA,MACpE,IAAA,EAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,QAAQ,KAAA,CAAM,MAAA,CAAO,SAAS,SAAA,CAAU,IAAA;AAAA,MACnE,GAAA,EAAK,QAAQ,KAAA,CAAM,MAAA,CAAO,QAAQ,KAAA,CAAM,MAAA,CAAO,SAAS,SAAA,CAAU;AAAA,KACnE,CAAA;AACD,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,GAAI,KAAA,GACA;AAAA,QACE;AAAA,UACE,IAAA,EAAM,GAAA;AAAA,UACN,KAAA,EAAO,MAAM,MAAA,CAAO,KAAA;AAAA,UACpB,IAAA,EAAM,MAAM,MAAA,CAAO,IAAA;AAAA,UACnB,gBAAA,EAAkB,MAAM,MAAA,CAAO;AAAA;AACjC,UAEF,EAAC;AAAA,MACL,GAAI,KAAA,GACA;AAAA,QACE;AAAA,UACE,IAAA,EAAM,GAAA;AAAA,UACN,KAAA,EAAO,MAAM,MAAA,CAAO,KAAA;AAAA,UACpB,IAAA,EAAM,MAAM,MAAA,CAAO,IAAA;AAAA,UACnB,gBAAA,EAAkB,MAAM,MAAA,CAAO;AAAA;AACjC,UAEF;AAAC,KACP;AACA,IAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAA;AACxC,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,EACtD;AAAA,EAEQ,gBAAA,CACN,MACA,IAAA,EACe;AACf,IAAA,MAAM,YAAY,oBAAA,CAAqB,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,WAAW,IAAI,CAAA;AAC7E,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,IAAA,CAAK,OAAO,CAAA;AACtF,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,cAAA,EAAe;AACpB,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAQ,EAAC,EAAG,SAAS,KAAA,EAAM;AAAA,IACzD;AACA,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,IAAA,EAAQ,0BAAA,GAA6B,KAAK,KAAK,CAAA;AAC1E,IAAA,MAAM,KAAA,GAAQ,cAAA;AAAA,MACZ;AAAA,QACE;AAAA,UACE,MAAA,EAAQ,UAAU,KAAA,GAAQ,CAAA;AAAA,UAC1B,KAAA,EAAO,SAAA,CAAU,IAAA,GAAO,SAAA,CAAU,KAAA,GAAQ,CAAA;AAAA,UAC1C,IAAA,EAAM;AAAA,SACR;AAAA,QACA,EAAE,MAAA,EAAQ,SAAA,CAAU,KAAA,EAAO,KAAA,EAAO,UAAU,IAAA,GAAO,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,KAAA;AAAM,OAClF;AAAA,MACA,qBAAA,CAAsB,KAAA,EAAO,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AAAA,MAC9C,SAAA;AAAA,MACA,EAAE,WAAW,KAAA;AAAM,KACrB;AACA,IAAA,MAAM,KAAA,GAAQ,cAAA;AAAA,MACZ;AAAA,QACE;AAAA,UACE,MAAA,EAAQ,UAAU,MAAA,GAAS,CAAA;AAAA,UAC3B,KAAA,EAAO,SAAA,CAAU,GAAA,GAAM,SAAA,CAAU,MAAA,GAAS,CAAA;AAAA,UAC1C,IAAA,EAAM;AAAA,SACR;AAAA,QACA,EAAE,MAAA,EAAQ,SAAA,CAAU,MAAA,EAAQ,KAAA,EAAO,UAAU,GAAA,GAAM,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,KAAA;AAAM,OACnF;AAAA,MACA,qBAAA,CAAsB,KAAA,EAAO,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AAAA,MAC9C,SAAA;AAAA,MACA,EAAE,WAAW,KAAA;AAAM,KACrB;AACA,IAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,IAAA,CAAK,WAAA,EAAa,KAAK,SAAA,EAAW;AAAA,MACpE,KAAA,EAAO,KAAA,GACH,mBAAA,CAAoB,SAAA,CAAU,IAAA,EAAM,SAAA,CAAU,KAAA,EAAO,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,KAAK,IACrF,SAAA,CAAU,KAAA;AAAA,MACd,MAAA,EAAQ,KAAA,GACJ,mBAAA,CAAoB,SAAA,CAAU,GAAA,EAAK,SAAA,CAAU,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,KAAK,IACrF,SAAA,CAAU;AAAA,KACf,CAAA;AACD,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,GAAI,KAAA,GACA;AAAA,QACE;AAAA,UACE,IAAA,EAAM,GAAA;AAAA,UACN,KAAA,EAAO,MAAM,MAAA,CAAO,KAAA;AAAA,UACpB,IAAA,EAAM,MAAM,MAAA,CAAO,IAAA;AAAA,UACnB,gBAAA,EAAkB,MAAM,MAAA,CAAO;AAAA;AACjC,UAEF,EAAC;AAAA,MACL,GAAI,KAAA,GACA;AAAA,QACE;AAAA,UACE,IAAA,EAAM,GAAA;AAAA,UACN,KAAA,EAAO,MAAM,MAAA,CAAO,KAAA;AAAA,UACpB,IAAA,EAAM,MAAM,MAAA,CAAO,IAAA;AAAA,UACnB,gBAAA,EAAkB,MAAM,MAAA,CAAO;AAAA;AACjC,UAEF;AAAC,KACP;AACA,IAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAA;AACxC,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,EACtD;AAAA,EAEQ,gBAAA,CAAiB,QAAwB,KAAA,EAAqB;AACpE,IAAA,IAAA,CAAK,4BAAA,EAA6B;AAClC,IAAA,MAAM,oBAAoB,IAAI,GAAA;AAAA,MAC5B,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,gBAAgB,CAAA,CAAE,MAAA,CAAO,CAAC,EAAA,KAAqB,OAAA,CAAQ,EAAE,CAAC;AAAA,KACxF;AACA,IAAA,KAAA,MAAW,WAAW,iBAAA,EAAmB;AACvC,MAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,OAAO,CAAA;AACjD,MAAA,IAAI,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,aAAA,GAAgB,MAAA;AAAA,IACzC;AACA,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA;AAAA,MACd,GAAG,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACvB,QAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5C,QAAA,OAAA,CAAQ,SAAA,GAAY,qBAAA;AACpB,QAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,KAAA,CAAM,IAAA;AAC7B,QAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,KAAA,CAAM,IAAA;AAC7B,QAAA,IAAI,KAAA,CAAM,gBAAA,EAAkB,OAAA,CAAQ,OAAA,CAAQ,mBAAmB,KAAA,CAAM,gBAAA;AACrE,QAAA,IAAI,KAAA,CAAM,SAAS,GAAA,EAAK;AACtB,UAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,KAAA,CAAM,QAAQ,KAAK,CAAA,EAAA,CAAA;AAAA,QAC7C,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,KAAA,CAAM,QAAQ,KAAK,CAAA,EAAA,CAAA;AAAA,QAC5C;AACA,QAAA,OAAO,OAAA;AAAA,MACT,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EAEQ,cAAA,GAAuB;AAC7B,IAAA,IAAA,CAAK,4BAAA,EAA6B;AAClC,IAAA,IAAA,CAAK,WAAW,eAAA,EAAgB;AAAA,EAClC;AAAA,EAEQ,oBAAA,CAAqB,OAAA,EAAsB,KAAA,GAAQ,KAAA,EAAa;AACtE,IAAA,OAAO,QAAQ,OAAA,CAAQ,QAAA;AACvB,IAAA,IAAI,SAAS,CAAC,IAAA,CAAK,WAAW,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,eAAA;AAAA,EAC3D;AAAA,EAEQ,yBAAyB,IAAA,EAAgC;AAC/D,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,IAAA,GAAO,CAAA,EAAG,KAAK,WAAA,CAAY,IAAA,GAAO,KAAK,KAAK,CAAA,EAAA,CAAA;AAC/D,MAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAA,GAAM,CAAA,EAAG,KAAK,WAAA,CAAY,GAAA,GAAM,KAAK,KAAK,CAAA,EAAA,CAAA;AAC7D,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,KAAA,GAAQ,CAAA,EAAG,KAAK,WAAA,CAAY,KAAA,GAAQ,KAAK,KAAK,CAAA,EAAA,CAAA;AACjE,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,MAAA,GAAS,CAAA,EAAG,KAAK,WAAA,CAAY,MAAA,GAAS,KAAK,KAAK,CAAA,EAAA,CAAA;AAAA,EACrE;AAAA,EAEQ,4BAAA,GAAqC;AAC3C,IAAA,IAAA,CAAK,OACF,gBAAA,CAA8B,4CAA4C,CAAA,CAC1E,OAAA,CAAQ,CAAC,IAAA,KAAS;AACjB,MAAA,OAAO,KAAK,OAAA,CAAQ,aAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACL;AAAA,EAEQ,cAAc,KAAA,EAA4B;AAChD,IAAA,IACE,KAAA,CAAM,gBAAA,IACN,IAAA,CAAK,SAAA,IACL,cAAA,CAAe,KAAA,CAAM,MAAM,CAAA,IAC3B,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,0BAA0B,CAAC,CAAA;AAE3D,MAAA;AACF,IAAA,MAAM,SAAA,GAAY,KAAK,SAAA,EAAU;AACjC,IAAA,IAAA,CAAI,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,UAAS,OAAA,EAAS;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,SAAA,CAAU,OAAO,CAAA;AAC3F,IAAA,MAAM,IAAA,GAAO,+BAAO,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,SAAA,CAAU,OAAA,CAAA;AAC/D,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,IAAA,EAAM;AACrB,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA;AAC1C,IAAA,IAAI,UAAA,IAAc,KAAA,CAAM,GAAA,CAAI,WAAA,OAAkB,GAAA,EAAK;AACjD,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,IAAA,CAAK,iBAAA,CAAkB,OAAO,IAAI,CAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAA,IAAc,KAAA,CAAM,GAAA,CAAI,WAAA,OAAkB,GAAA,EAAK;AACjD,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,IAAI,CAAA;AACpC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAA,IAAc,KAAA,CAAM,GAAA,CAAI,WAAA,OAAkB,GAAA,EAAK;AACjD,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,IAAA,CAAK,sBAAA,CAAuB,OAAO,IAAI,CAAA;AACvC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAA,IAAc,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAQ,GAAA,EAAK;AACrD,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,IAAA,CAAK,yBAAA,CAA0B,OAAO,IAAI,CAAA;AAC1C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAA,IAAc,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAQ,GAAA,EAAK;AACrD,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,IAAA,CAAK,uBAAA,CAAwB,OAAO,IAAI,CAAA;AACxC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,KAAA,CAAM,QAAQ,WAAA,EAAa;AACvD,MAAA,IAAI,CAAC,yBAAA,CAA0B,IAAI,CAAA,EAAG;AACtC,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,IAAI,CAAA;AACpC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,KAAA,CAAM,GAAG,CAAA;AAC7C,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,YAAA,EAAc;AACrC,IAAA,MAAM,IAAA,GAAO,sBAAA,IAA0B,KAAA,CAAM,QAAA,GAAW,EAAA,GAAK,CAAA,CAAA;AAC7D,IAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAA,EAAM;AAAA,MAC7D,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,IAAA,GAAO,UAAU,EAAA,GAAK,IAAA;AAAA,MACxC,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,UAAU,EAAA,GAAK;AAAA,KACvC,CAAA;AACD,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,KAAK,KAAK,QAAA,CAAS;AAAA,MACjB,IAAA,EAAM,oBAAA;AAAA,MACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,MACtB,eAAe,IAAA,CAAK,EAAA;AAAA,MACpB,UAAU,EAAE,IAAA,EAAM,SAAS,IAAA,EAAM,GAAA,EAAK,SAAS,GAAA;AAAI,KACpD,CAAA,CAAE,IAAA,CAAK,MAAM;AApnDlB,MAAA,IAAA,EAAA,EAAA,EAAA;AAqnDM,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA8B;AAAA,QAC5B,MAAA,EAAQ,gBAAA;AAAA,QACR,SAAS,KAAA,CAAM,EAAA;AAAA,QACf,SAAS,IAAA,CAAK,EAAA;AAAA,QACd,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ,kCAAS,SAAA,CAAU,KAAK,GAAG,KAAA,CAAM,QAAA,GAAW,cAAS,UAAK,CAAA;AAAA,OACpE,CAAA;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,kBAAkB,KAAA,EAAoB;AAC5C,IAAA,IAAI,cAAA,CAAe,KAAA,CAAM,MAAM,CAAA,EAAG;AAClC,IAAA,IAAI,MAAM,MAAA,YAAkB,WAAA,IAAe,KAAA,CAAM,MAAA,CAAO,QAAQ,0BAA0B,CAAA;AACxF,MAAA;AACF,IAAA,KAAA,CAAM,cAAA,EAAe;AAAA,EACvB;AAAA,EAEQ,iBAAA,CAAkB,OAAsB,IAAA,EAA0B;AAvoD5E,IAAA,IAAA,EAAA,EAAA,EAAA;AAwoDI,IAAA,IAAI,CAAC,yBAAA,CAA0B,IAAI,CAAA,EAAG;AACtC,IAAA,IAAA,CAAK,iBAAiB,EAAE,OAAA,EAAS,MAAM,EAAA,EAAI,OAAA,EAAS,KAAK,EAAA,EAAG;AAC5D,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA8B;AAAA,MAC5B,MAAA,EAAQ,YAAA;AAAA,MACR,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,SAAS,IAAA,CAAK,EAAA;AAAA,MACd,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACV,CAAA;AAAA,EACF;AAAA,EAEQ,mBAAA,CAAoB,OAAsB,IAAA,EAA0B;AAC1E,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AAC1B,IAAA,MAAM,SAAS,IAAA,CAAK,cAAA;AACpB,IAAA,KAAK,KAAK,QAAA,CAAS;AAAA,MACjB,IAAA,EAAM,aAAA;AAAA,MACN,gBAAgB,MAAA,CAAO,OAAA;AAAA,MACvB,eAAe,MAAA,CAAO;AAAA,KACvB,CAAA,CAAE,IAAA,CAAK,MAAM;AA3pDlB,MAAA,IAAA,EAAA,EAAA,EAAA;AA4pDM,MAAA,MAAM,SAAA,GAAY,KAAK,SAAA,EAAU;AACjC,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA8B;AAAA,QAC5B,MAAA,EAAQ,aAAA;AAAA,QACR,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,UAAS,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,IAAA,MAAS,OAAA,GAAU,SAAA,CAAU,UAAU,IAAA,CAAK,EAAA;AAAA,QAChE,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACV,CAAA;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,sBAAA,CAAuB,OAAsB,IAAA,EAA0B;AAC7E,IAAA,IAAI,CAAC,yBAAA,CAA0B,IAAI,CAAA,EAAG;AACtC,IAAA,KAAK,KAAK,QAAA,CAAS;AAAA,MACjB,IAAA,EAAM,iBAAA;AAAA,MACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,MACtB,eAAe,IAAA,CAAK;AAAA,KACrB,CAAA,CAAE,IAAA,CAAK,MAAM;AA9qDlB,MAAA,IAAA,EAAA,EAAA,EAAA;AA+qDM,MAAA,MAAM,SAAA,GAAY,KAAK,SAAA,EAAU;AACjC,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA8B;AAAA,QAC5B,MAAA,EAAQ,iBAAA;AAAA,QACR,SAAS,KAAA,CAAM,EAAA;AAAA,QACf,UAAS,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,IAAA,MAAS,OAAA,GAAU,SAAA,CAAU,UAAU,IAAA,CAAK,EAAA;AAAA,QAChE,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACV,CAAA;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,yBAAA,CAA0B,OAAsB,IAAA,EAA0B;AAChF,IAAA,IAAI,CAAC,yBAAA,CAA0B,IAAI,CAAA,EAAG;AACtC,IAAA,KAAK,KAAK,QAAA,CAAS;AAAA,MACjB,IAAA,EAAM,sBAAA;AAAA,MACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,MACtB,eAAe,IAAA,CAAK;AAAA,KACrB,CAAA,CAAE,IAAA,CAAK,MAAM;AAjsDlB,MAAA,IAAA,EAAA,EAAA,EAAA;AAksDM,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA8B;AAAA,QAC5B,MAAA,EAAQ,sBAAA;AAAA,QACR,SAAS,KAAA,CAAM,EAAA;AAAA,QACf,SAAS,IAAA,CAAK,EAAA;AAAA,QACd,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACV,CAAA;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,uBAAA,CAAwB,OAAsB,IAAA,EAA0B;AAC9E,IAAA,IAAI,CAAC,yBAAA,CAA0B,IAAI,CAAA,EAAG;AACtC,IAAA,KAAK,KAAK,QAAA,CAAS;AAAA,MACjB,IAAA,EAAM,oBAAA;AAAA,MACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,MACtB,eAAe,IAAA,CAAK;AAAA,KACrB,CAAA,CAAE,IAAA,CAAK,MAAM;AAntDlB,MAAA,IAAA,EAAA,EAAA,EAAA;AAotDM,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA8B;AAAA,QAC5B,MAAA,EAAQ,oBAAA;AAAA,QACR,SAAS,KAAA,CAAM,EAAA;AAAA,QACf,SAAS,IAAA,CAAK,EAAA;AAAA,QACd,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACV,CAAA;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,eAAA,CAAgB,KAAA,EAAmB,KAAA,EAAsB,IAAA,EAA0B;AACzF,IAAA,MAAM,QAAA,GAAW,0BAA0B,IAAI,CAAA;AAC/C,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA;AAChD,IAAA,MAAM,GAAA,mBAAM,MAAA,CAAA,CAAC,MAAA,KAAuB,MAAM;AACxC,MAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,MAAA,MAAA,EAAO;AAAA,IACT,CAAA,EAHY,KAAA,CAAA;AAIZ,IAAA,IAAA,CAAK,WAAA,CAAY,eAAA;AAAA,MACf,iBAAA;AAAA,QACE,cAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAI,MAAM,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,IAAI,CAAC;AAAA,OAC/C;AAAA,MACA,iBAAA;AAAA,QACE,cAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAA;AAAA,QACA,IAAI,MAAM,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,IAAI,CAAC;AAAA,OACjD;AAAA,MACA,iBAAA;AAAA,QACE,cAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAI,MAAM,IAAA,CAAK,sBAAA,CAAuB,KAAA,EAAO,IAAI,CAAC;AAAA,OACpD;AAAA,MACA,kBAAA,EAAmB;AAAA,MACnB,iBAAA;AAAA,QACE,0BAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAI,MAAM,IAAA,CAAK,yBAAA,CAA0B,KAAA,EAAO,IAAI,CAAC;AAAA,OACvD;AAAA,MACA,iBAAA;AAAA,QACE,0BAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAI,MAAM,IAAA,CAAK,uBAAA,CAAwB,KAAA,EAAO,IAAI,CAAC;AAAA,OACrD;AAAA,MACA,kBAAA,EAAmB;AAAA,MACnB,iBAAA;AAAA,QACE,cAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAI,MAAM,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,IAAI,CAAC;AAAA;AACjD,KACF;AACA,IAAA,MAAM,QAAA,GACJ,IAAA,CAAK,IAAA,YAAgB,UAAA,GACjB,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,qBAAA,EAAsB,GACrC,IAAA,CAAK,IAAA,CAAK,qBAAA,EAAsB;AACtC,IAAA,MAAM,IAAA,GAAO,YAAY,KAAA,CAAM,OAAA,EAAS,SAAS,IAAA,GAAO,CAAA,EAAG,MAAA,CAAO,UAAA,GAAa,GAAG,CAAA;AAClF,IAAA,MAAM,GAAA,GAAM,YAAY,KAAA,CAAM,OAAA,EAAS,SAAS,GAAA,GAAM,CAAA,EAAG,MAAA,CAAO,WAAA,GAAc,GAAG,CAAA;AACjF,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,EAAA,CAAA;AACrC,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,EAAA,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,OAAA,GAAU,IAAA,CAAK,EAAA;AACxC,IAAA,IAAA,CAAK,WAAA,CAAY,QAAQ,IAAA,GAAO,MAAA;AAAA,EAClC;AAAA,EAEQ,mBAAA,CAAoB,OAAsB,IAAA,EAA0B;AAC1E,IAAA,IAAI,CAAC,yBAAA,CAA0B,IAAI,CAAA,EAAG;AACtC,IAAA,KAAK,KAAK,QAAA,CAAS;AAAA,MACjB,IAAA,EAAM,cAAA;AAAA,MACN,gBAAgB,KAAA,CAAM,EAAA;AAAA,MACtB,eAAe,IAAA,CAAK;AAAA,KACrB,CAAA,CAAE,IAAA,CAAK,MAAM;AAhyDlB,MAAA,IAAA,EAAA,EAAA,EAAA;AAiyDM,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,mBAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA8B;AAAA,QAC5B,MAAA,EAAQ,cAAA;AAAA,QACR,SAAS,KAAA,CAAM,EAAA;AAAA,QACf,SAAS,IAAA,CAAK,EAAA;AAAA,QACd,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACV,CAAA;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,6BAAA,GAA+C;AAC3D,IAAA,IAAI,IAAA,CAAK,wBAAuB,EAAG;AACnC,IAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,IAAA,CAAK,SAAS,EAAE,IAAA,EAAM,gBAAgB,cAAA,EAAgB,KAAA,CAAM,IAAI,CAAA;AAAA,EACxE;AAAA,EAEQ,sBAAA,GAAkC;AACxC,IAAA,IAAI,CAAC,IAAA,CAAK,sBAAA,EAAwB,OAAO,KAAA;AACzC,IAAA,IAAA,CAAK,sBAAA,GAAyB,KAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,mBAAmB,KAAA,EAA2B;AACpD,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,YAAA,EAAa,CAAE,CAAC,CAAA;AACrC,IAAA,IAAI,kBAAkB,IAAA,IAAQ,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA,EAAG;AACjE,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,OAAO,IAAA,CAAK,YAAY,OAAA,CAAQ,IAAA;AAChC,IAAA,OAAO,IAAA,CAAK,YAAY,OAAA,CAAQ,OAAA;AAAA,EAClC;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,IAAA,CAAK,MAAA,CACF,iBAA8B,gCAAgC,CAAA,CAC9D,QAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,MAAA,EAAQ,CAAA;AAClC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,SAAA,EAAU;AAC9C,IAAA,IAAA,CAAK,UAAU,gBAAA,CAA8B,iBAAiB,EAAE,OAAA,CAAQ,CAAC,OAAO,KAAA,KAAU;AACxF,MAAA,MAAM,QAAQ,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,OAAO,KAAK,CAAA;AACpD,MAAA,KAAA,CAAM,QAAQ,QAAA,GAAA,CAAW,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAA,OAAY,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAK,MAAA,GAAS,OAAA;AAAA,IACvE,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,OAAO,gBAAA,CAA8B,gBAAgB,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC5E,MAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,GAAA,CACX,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,IAAA,MAAS,OAAA,IAAW,KAAK,OAAA,CAAQ,OAAA,KAAY,SAAA,CAAU,OAAA,GAC9D,MAAA,GACA,OAAA;AAAA,IACR,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,2BAA2B,SAAS,CAAA;AAAA,EAC3C;AAAA,EAEQ,2BAA2B,SAAA,EAAqC;AAt1D1E,IAAA,IAAA,EAAA,EAAA,EAAA;AAu1DI,IAAA,IAAA,CAAI,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,UAAS,OAAA,EAAS;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,SAAA,CAAU,OAAO,CAAA;AAC3F,IAAA,MAAM,gBACJ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,CAAM,KAAK,CAAC,IAAA,KAAS,KAAK,EAAA,KAAO,SAAA,CAAU,OAAA,CAAA,KAAlD,IAAA,GAAA,EAAA,GACA,+BAAO,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,SAAA,CAAU,OAAA,CAAA;AACrD,IAAA,MAAM,aAAY,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,YAAA,IAAA,CAC3B,oCAAO,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAM;AA71DnC,MAAA,IAAAN,GAAAA;AA61DsC,MAAA,OAAA,IAAA,CAAK,EAAA,MAAA,CAAOA,GAAAA,GAAA,YAAA,CAAa,YAAA,KAAb,gBAAAA,GAAAA,CAA2B,QAAA,CAAA;AAAA,IAAA,CAAA,CAAA,KAApE,YACD,mBAAA,CAAoB,YAAY,KAChC,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,IAAA,MAAS,UACrB,YAAA,GACA,IAAA;AACN,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,SAAA,EAAW;AAC1B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA;AACrC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5C,IAAA,OAAA,CAAQ,SAAA,GAAY,+BAAA;AACpB,IAAA,OAAA,CAAQ,OAAA,CAAQ,UAAU,SAAA,CAAU,EAAA;AACpC,IAAA,OAAA,CAAQ,QAAQ,QAAA,GAAW,SAAA,CAAU,OAAA,KAAY,SAAA,CAAU,KAAK,MAAA,GAAS,OAAA;AACzE,IAAA,OAAA,CAAQ,KAAA,GAAQ,CAAA,kBAAA,EAAM,SAAA,CAAU,IAAA,IAAQ,UAAU,EAAE,CAAA,CAAA;AACpD,IAAA,OAAA,CAAQ,MAAM,IAAA,GAAO,CAAA,EAAG,SAAA,CAAU,MAAA,CAAO,OAAO,KAAK,CAAA,EAAA,CAAA;AACrD,IAAA,OAAA,CAAQ,MAAM,GAAA,GAAM,CAAA,EAAG,SAAA,CAAU,MAAA,CAAO,MAAM,KAAK,CAAA,EAAA,CAAA;AACnD,IAAA,OAAA,CAAQ,MAAM,KAAA,GAAQ,CAAA,EAAG,SAAA,CAAU,MAAA,CAAO,QAAQ,KAAK,CAAA,EAAA,CAAA;AACvD,IAAA,OAAA,CAAQ,MAAM,MAAA,GAAS,CAAA,EAAG,SAAA,CAAU,MAAA,CAAO,SAAS,KAAK,CAAA,EAAA,CAAA;AACzD,IAAA,MAAM,oBAAA,2BAAwB,KAAA,KAAsB;AAClD,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,IAAA,CAAK,UAAU,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,OAAO,OAAO,CAAA;AAAA,IAChE,CAAA,EAJ6B,sBAAA,CAAA;AAK7B,IAAC,CAAC,OAAO,OAAA,EAAS,QAAA,EAAU,MAAM,CAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC9D,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAChD,MAAA,WAAA,CAAY,SAAA,GAAY,4BAAA;AACxB,MAAA,WAAA,CAAY,QAAQ,IAAA,GAAO,IAAA;AAC3B,MAAA,WAAA,CAAY,KAAA,GAAQ,0BAAA;AACpB,MAAA,WAAA,CAAY,gBAAA,CAAiB,aAAa,oBAAoB,CAAA;AAC9D,MAAA,OAAA,CAAQ,OAAO,WAAW,CAAA;AAAA,IAC5B,CAAC,CAAA;AACD,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC3C,IAAA,MAAA,CAAO,SAAA,GAAY,8BAAA;AACnB,IAAA,MAAA,CAAO,KAAA,GAAQ,0BAAA;AACf,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,oBAAoB,CAAA;AACzD,IAAA,OAAA,CAAQ,OAAO,MAAM,CAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,OAAO,CAAA;AAAA,EAC5B;AAAA,EAEQ,YAAA,GAAqC;AAl4D/C,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAm4DI,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM;AACtC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,SAAA,EAAU;AAC9C,IAAA,IAAA,CAAI,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,IAAA,MAAS,OAAA,IAAA,CAAW,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,UAAS,OAAA,EAAS;AAC9D,MAAA,OAAA,CACE,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,EAAA,KAAO,SAAA,CAAU,OAAO,MAA3D,IAAA,GAAA,EAAA,GAAgE,KAAA,CAAM,MAAA,CAAO,CAAC,MAA9E,IAAA,GAAA,EAAA,GAAmF,IAAA;AAAA,IAEvF;AACA,IAAA,OAAA,CAAO,EAAA,GAAA,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAd,IAAA,GAAA,EAAA,GAAmB,IAAA;AAAA,EAC5B;AAAA,EAEQ,aAAa,KAAA,EAA8B;AACjD,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,aAAA;AAC1B,IAAA,MAAM,cAAA,GAAiB,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,WAAA,GAAc,EAAE,CAAA,GAAI,GAAA;AACrE,IAAA,MAAM,eAAA,GAAkB,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,YAAA,GAAe,EAAE,CAAA,GAAI,GAAA;AACvE,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,MACV,GAAA,GAAM,MAAM,IAAA,CAAK,KAAA;AAAA,MACjB,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA;AAAA,MACjB,cAAA,GAAiB,MAAM,IAAA,CAAK,KAAA;AAAA,MAC5B,eAAA,GAAkB,MAAM,IAAA,CAAK;AAAA,KAC/B;AAAA,EACF;AACF,CAAA;AAplD2D,MAAA,CAAA,0BAAA,EAAA,2BAAA,CAAA;AAA3D,IAAM,yBAAA,GAAN,0BAAA;AAslDA,SAAS,wBAAA,CAAyB,SAAsB,IAAA,EAA0B;AA15DlF,EAAA,IAAA,EAAA,EAAA,EAAA;AA25DE,EAAA,IAAI,CAAC,8BAAA,CAA+B,IAAI,CAAA,EAAG;AAC3C,EAAA,MAAM,MAAA,GAAA,CACJ,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,aAAA,CAA2B,iDAAiD,CAAA,KAApF,YACA,OAAA,CAAQ,aAAA,CAA2B,sBAAsB,CAAA,KADzD,IAAA,GAAA,EAAA,GAEA,OAAA;AACF,EAAA,OAAA,CAAQ,QAAQ,iBAAA,GAAoB,MAAA;AACpC,EAAA,MAAA,CAAO,QAAQ,iBAAA,GAAoB,MAAA;AACnC,EAAA,MAAA,CAAO,MAAM,SAAA,GAAY,EAAA;AACzB,EAAA,MAAA,CAAO,MAAM,eAAA,GAAkB,EAAA;AAC/B,EAAA,MAAA,CAAO,MAAM,KAAA,GAAQ,EAAA;AACrB,EAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,UAAA;AAC3B,EAAA,OAAA,CAAQ,MAAM,YAAA,GAAe,UAAA;AAC7B,EAAA,OAAA,CAAQ,gBAAA,CAA8B,0CAA0C,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AAClG,IAAA,IAAA,CAAK,MAAM,UAAA,GAAa,UAAA;AACxB,IAAA,IAAA,CAAK,MAAM,YAAA,GAAe,UAAA;AAAA,EAC5B,CAAC,CAAA;AACH;AAjBS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAmBT,SAAS,+BAA+B,IAAA,EAA6B;AA76DrE,EAAA,IAAA,EAAA;AA86DE,EAAA,OAAO,OAAA;AAAA,IACL,IAAA,CAAK,YAAA,CAAa,YAAA,IAChBO,0BAAAA,CAA0B,IAAI,MAC7B,IAAA,CAAK,IAAA,KAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,MAAA,CAAA;AAAA,GACvC;AACF;AANS,MAAA,CAAA,8BAAA,EAAA,gCAAA,CAAA;AAQT,SAASA,2BAA0B,IAAA,EAA6B;AAC9D,EAAA,OAAO,KAAK,IAAA,KAAS,aAAA,IAAiB,KAAK,IAAA,KAAS,SAAA,IAAa,KAAK,IAAA,KAAS,gBAAA;AACjF;AAFS,MAAA,CAAAA,0BAAAA,EAAA,2BAAA,CAAA;AAIT,SAAS,kBAAA,GAAoC;AAC3C,EAAA,OAAO,IAAI,QAAQ,CAAC,OAAA,KAAY,sBAAsB,MAAM,OAAA,EAAS,CAAC,CAAA;AACxE;AAFS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAIT,eAAe,yBAAA,CACb,OAAA,EACA,KAAA,EACA,MAAA,EACA,OACA,OAAA,EACmC;AACnC,EAAA,IACE,OAAO,aAAA,KAAkB,WAAA,IACzB,OAAO,IAAA,KAAS,WAAA,IAChB,OAAO,GAAA,KAAQ,WAAA,IACf,OAAO,GAAA,CAAI,eAAA,KAAoB,UAAA;AAE/B,IAAA,OAAO,IAAA;AACT,EAAA,MAAM,uBAAuB,OAAO,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,EAAA,MAAA,CAAO,KAAA,GAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpD,EAAA,MAAA,CAAO,MAAA,GAAS,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,MAAA,GAAS,KAAK,CAAC,CAAA;AACtD,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AACtC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5C,EAAA,OAAA,CAAQ,YAAA,CAAa,SAAS,8BAA8B,CAAA;AAC5D,EAAA,OAAA,CAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AAC9B,EAAA,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA;AAChC,EAAA,OAAA,CAAQ,MAAM,QAAA,GAAW,UAAA;AACzB,EAAA,OAAA,CAAQ,MAAM,QAAA,GAAW,QAAA;AACzB,EAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,MAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,WAAA,GAAc,OAAA;AACpB,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,CAAU,IAAI,CAAA;AACpC,EAAA,MAAM,sBAAsB,KAAK,CAAA;AACjC,EAAA,KAAA,CAAM,MAAM,QAAA,GAAW,UAAA;AACvB,EAAA,KAAA,CAAM,MAAM,IAAA,GAAO,GAAA;AACnB,EAAA,KAAA,CAAM,MAAM,GAAA,GAAM,GAAA;AAClB,EAAA,OAAA,CAAQ,MAAA,CAAO,OAAO,KAAK,CAAA;AAC3B,EAAA,MAAM,UAAA,GAAa,IAAI,aAAA,EAAc,CAAE,kBAAkB,OAAO,CAAA;AAChE,EAAA,MAAM,GAAA,GAAM,CAAA,+CAAA,EAAkD,MAAA,CAAO,KAAK,CAAA,UAAA,EAAa,MAAA,CAAO,MAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,4CAAA,EAA+C,UAAU,CAAA,sBAAA,CAAA;AAC9L,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,IAAA,CAAK,CAAC,GAAG,CAAA,EAAG,EAAE,IAAA,EAAM,6BAAA,EAA+B,CAAC,CAAA;AACxF,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAM,eAAA,CAAgB,GAAG,CAAA;AACvC,IAAA,OAAA,CAAQ,UAAU,KAAA,EAAO,CAAA,EAAG,GAAG,MAAA,CAAO,KAAA,EAAO,OAAO,MAAM,CAAA;AAC1D,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,CAAA,OAAQ,CAAA,EAAA;AACN,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AAAA,EACzB;AACF;AA/Ce,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAiDf,SAAS,qBAAqB,MAAA,EAA8C;AAC1E,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,EAAA,MAAA,CAAO,SAAA,GAAY,uBAAA;AACnB,EAAA,MAAA,CAAO,QAAQ,MAAA,CAAO,KAAA;AACtB,EAAA,MAAA,CAAO,SAAS,MAAA,CAAO,MAAA;AACvB,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AACtC,EAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,SAAA,CAAU,MAAA,EAAQ,GAAG,CAAC,CAAA;AAC3C,EAAA,OAAO,MAAA;AACT;AARS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAUT,SAAS,qBAAqB,KAAA,EAA8B;AAC1D,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IACpB,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,KAAA,EAAO,MAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,wBAAA,CAAyB,IAAI,CAAC;AAAA,GAChE,CAAA;AACH;AANS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAQT,SAAS,yBAAyB,IAAA,EAA6B;AAC7D,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB,mBAAmB,IAAA,CAAK,iBAAA;AAAA,IACxB,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,QAAA,EAAU,KAAK,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU,wBAAA,CAAyB,KAAK,CAAC;AAAA,GACxE;AACF;AA7BS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AA+BT,eAAe,uBAAuB,OAAA,EAAqC;AACzE,EAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAmC,KAAK,CAAC,CAAA;AAC3E,EAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,IACZ,MAAA,CAAO,GAAA,CAAI,OAAO,KAAA,KAAU;AAC1B,MAAA,IAAI,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,YAAA,GAAe,CAAA,EAAG;AAC9C,MAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,UAAA,EAAY;AACtC,QAAA,MAAM,KAAA,CAAM,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AACnC,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACnC,QAAA,MAAM,IAAA,mBAAO,MAAA,CAAA,MAAM,OAAA,EAAQ,EAAd,MAAA,CAAA;AACb,QAAA,KAAA,CAAM,iBAAiB,MAAA,EAAQ,IAAA,EAAM,EAAE,IAAA,EAAM,MAAM,CAAA;AACnD,QAAA,KAAA,CAAM,iBAAiB,OAAA,EAAS,IAAA,EAAM,EAAE,IAAA,EAAM,MAAM,CAAA;AACpD,QAAA,UAAA,CAAW,MAAM,GAAG,CAAA;AAAA,MACtB,CAAC,CAAA;AAAA,IACH,CAAC;AAAA,GACH;AACF;AAjBe,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAmBf,eAAe,sBAAsB,OAAA,EAAqC;AACxE,EAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAmC,KAAK,CAAC,CAAA;AAC3E,EAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,IACZ,MAAA,CAAO,GAAA,CAAI,OAAO,KAAA,KAAU;AAC1B,MAAA,KAAA,CAAM,GAAA,GAAM,EAAA;AACZ,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,YAAA,CAAa,KAAK,CAAA;AACpC,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACrC,MAAA,MAAM,UAAU,MAAM,iBAAA,CAAkB,GAAG,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAClE,MAAA,IAAI,OAAA,EAAS,KAAA,CAAM,YAAA,CAAa,KAAA,EAAO,OAAO,CAAA;AAAA,IAChD,CAAC;AAAA,GACH;AACF;AAXe,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAaf,eAAe,kBAAkB,GAAA,EAA8B;AAC7D,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACxF,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,EAAA,OAAO,cAAc,IAAI,CAAA;AAC3B;AALe,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAOf,SAAS,cAAc,IAAA,EAA6B;AAClD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,IAAI,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,WACvD,MAAA,CAAO,IAAI,KAAA,CAAM,sCAAsC,CAAC,CAAA;AAAA,IAC/D,CAAA;AACA,IAAA,MAAA,CAAO,UAAU,MAAG;AA7kExB,MAAA,IAAA,EAAA;AA8kEM,MAAA,OAAA,MAAA,CAAA,CAAO,YAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,IAAI,KAAA,CAAM,sCAAsC,CAAC,CAAA;AAAA,IAAA,CAAA;AAC1E,IAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,EAC3B,CAAC,CAAA;AACH;AAXS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAaT,SAAS,gBAAgB,GAAA,EAAwC;AAC/D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM;AACxB,IAAA,KAAA,CAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAClC,IAAA,KAAA,CAAM,UAAU,MAAM,MAAA,CAAO,IAAI,KAAA,CAAM,oCAAoC,CAAC,CAAA;AAC5E,IAAA,KAAA,CAAM,GAAA,GAAM,GAAA;AAAA,EACd,CAAC,CAAA;AACH;AAPS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAST,SAAS,YAAY,KAAA,EAAuC;AAC1D,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,2BAA2B,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AA7lExE,IAAA,IAAA,EAAA,EAAA,EAAA;AA8lEI,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA;AACpC,IAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,EAAA,GAAe,GAAA;AAC9B,IAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,EAAA,GAAc,QAAA;AAC5B,IAAA,OAAO,CAAA,0BAAA,EAA6B,MAAM,CAAA,WAAA,EAAc,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,cAAA,EAAiB,KAAK,CAAA,GAAA,CAAA;AAAA,EACzH,CAAC,CAAA;AACD,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AARS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAUT,SAAS,4BAA4B,IAAA,EAA+C;AAClF,EAAA,OAAO,iEAAA,CAAkE,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA;AAChG;AAFS,MAAA,CAAA,2BAAA,EAAA,6BAAA,CAAA;AAIT,SAAS,qBAAA,CACP,KAAA,EACA,kBAAA,GAAuC,EAAC,EACzB;AACf,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,QAAQ,OAAA,EAAQ;AAC5D,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,MAAM,CAAC,CAAA;AACzD,EAAA,KAAA,MAAW,MAAA,IAAU,kBAAA,EAAoB,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AAC5D,EAAA,MAAM,UAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,GAAA,GAAM,iBAAiB,MAAM,CAAA;AACnC,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,MAAM,KAAK,CAAA,qBAAA,EAAwB,MAAA,CAAO,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA;AACzE,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA;AAC3C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAA,CAAQ,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAC,CAAA;AACxC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,GAAA,GAAM,YAAA;AACX,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,OAAA,CAAQ,IAAA,CAAK,iBAAA,CAAkB,IAAI,CAAC,CAAA;AACpC,IAAA,QAAA,CAAS,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAE,KAAK,MAAM;AAAA,EAAC,CAAC,CAAA;AAC3C;AAzBS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AA2BT,SAAS,uBAAuB,IAAA,EAA+B;AAC7D,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,EAAA,MAAM,GAAA,2BAAO,MAAA,KAA+B;AAC1C,IAAA,IAAI,iCAAQ,IAAA,EAAA,EAAQ,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA;AAAA,EAChD,CAAA,EAFY,KAAA,CAAA;AAGZ,EAAA,MAAM,SAAA,2BAAa,IAAA,KAAuB;AA1oE5C,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2oEI,IAAA,GAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,UAAU,CAAA;AAC9B,IAAA,KAAA,MAAW,SAAA,IAAA,CAAa,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,EAAA,GAAuB,EAAC,EAAG;AACjD,MAAA,GAAA,CAAA,CAAI,EAAA,GAAA,SAAA,CAAU,KAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,gBAAgB,CAAA;AACrC,MAAA,KAAA,MAAW,GAAA,IAAA,CAAO,EAAA,GAAA,SAAA,CAAU,IAAA,KAAV,IAAA,GAAA,EAAA,GAAkB,IAAI,GAAA,CAAA,CAAI,EAAA,GAAA,GAAA,CAAI,KAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,UAAU,CAAA;AAAA,IACnE;AACA,IAAA,KAAA,MAAW,QAAO,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,mBAAY,UAAA,KAAZ,IAAA,GAAA,EAAA,GAA0B,EAAC,EAAG;AAC9C,MAAA,KAAA,MAAW,QAAQ,GAAA,EAAK,GAAA,CAAA,CAAI,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,SAAA,KAAN,mBAAiB,UAAU,CAAA;AAAA,IACzD;AACA,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,EAAU,SAAA,CAAU,KAAK,CAAA;AAAA,EACpD,CAAA,EAVkB,WAAA,CAAA;AAWlB,EAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;AACrC,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,EAAO,SAAA,CAAU,IAAI,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,CAAC,GAAG,QAAQ,CAAA;AACrB;AApBS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAsBT,SAAS,yBAAyB,KAAA,EAA4B;AAC5D,EAAC,WAAuE,wBAAA,GACtE,KAAA;AACJ;AAHS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAKT,SAAS,kBAAkB,IAAA,EAAsC;AAC/D,EAAA,IAAI,IAAA,CAAK,KAAA,EAAO,OAAO,OAAA,CAAQ,OAAA,EAAQ;AACvC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,MAAA,mBAAS,MAAA,CAAA,MAAM,OAAA,EAAQ,EAAd,QAAA,CAAA;AACf,IAAA,IAAA,CAAK,iBAAiB,MAAA,EAAQ,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAM,CAAA;AACpD,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAS,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAM,CAAA;AACrD,IAAA,MAAA,CAAO,UAAA,CAAW,QAAQ,GAAI,CAAA;AAAA,EAChC,CAAC,CAAA;AACH;AARS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAUT,SAAS,mBAAmB,OAAA,EAAmC;AA1qE/D,EAAA,IAAA,EAAA;AA2qEE,EAAA,OAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,aAAA,CAA2B,sBAAsB,CAAA,KAAzD,IAAA,GAAA,EAAA,GAA8D,OAAA;AACvE;AAFS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAIT,SAAS,mBAAmB,KAAA,EAAkC;AAC5D,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,IAAI,EAAE,MAAA,YAAkB,WAAA,CAAA,EAAc,OAAO,IAAA;AAC7C,EAAA,OAAO,MAAA,CAAO,QAAqB,2BAA2B,CAAA;AAChE;AAJS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAMT,SAAS,iBAAA,CACP,KAAA,EACA,QAAA,EACA,OAAA,EACA,MAAA,EACmB;AACnB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,EAAA,MAAA,CAAO,IAAA,GAAO,QAAA;AACd,EAAA,MAAA,CAAO,WAAW,CAAC,OAAA;AACnB,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC5C,EAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AACnB,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC1C,EAAA,IAAA,CAAK,WAAA,GAAc,QAAA;AACnB,EAAA,MAAA,CAAO,MAAA,CAAO,MAAM,IAAI,CAAA;AACxB,EAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,MAAM;AACrC,IAAA,IAAI,OAAO,QAAA,EAAU;AACrB,IAAA,MAAA,EAAO;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAnBS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAqBT,SAAS,kBAAA,GAAoC;AAC3C,EAAA,OAAO,QAAA,CAAS,cAAc,IAAI,CAAA;AACpC;AAFS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAIT,SAAS,kBAAkB,GAAA,EAA+D;AACxF,EAAA,IAAI,GAAA,KAAQ,aAAa,OAAO,EAAE,IAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,KAAA,EAAO,QAAA,EAAI;AAC5D,EAAA,IAAI,GAAA,KAAQ,cAAc,OAAO,EAAE,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,KAAA,EAAO,QAAA,EAAI;AAC5D,EAAA,IAAI,GAAA,KAAQ,WAAW,OAAO,EAAE,IAAI,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,KAAA,EAAO,QAAA,EAAI;AAC1D,EAAA,IAAI,GAAA,KAAQ,aAAa,OAAO,EAAE,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,KAAA,EAAO,QAAA,EAAI;AAC3D,EAAA,OAAO,IAAA;AACT;AANS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAQT,SAAS,eAAe,MAAA,EAAqC;AAC3D,EAAA,IAAI,EAAE,MAAA,YAAkB,WAAA,CAAA,EAAc,OAAO,KAAA;AAC7C,EAAA,IAAI,MAAA,CAAO,mBAAmB,OAAO,IAAA;AACrC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,WAAA,EAAY;AAC3C,EAAA,OAAO,OAAA,KAAY,OAAA,IAAW,OAAA,KAAY,UAAA,IAAc,OAAA,KAAY,QAAA;AACtE;AALS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAOT,SAAS,aAAA,CAAc,SAAsB,MAAA,EAAqC;AAChF,EAAA,IAAI,OAAA,CAAQ,mBAAmB,OAAO,IAAA;AACtC,EAAA,IAAI,MAAA,YAAkB,WAAA,IAAe,MAAA,CAAO,iBAAA,EAAmB,OAAO,IAAA;AACtE,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,aAAA,CAA2B,0BAA0B,CAAC,CAAA;AAC/E;AAJS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAMT,SAAS,sBAAA,CACP,MACA,KAAA,EACwC;AAruE1C,EAAA,IAAA,EAAA;AAsuEE,EAAA,MAAM,UAAA,GAAA,CAAa,UAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,OAAO,CAAC,SAAA,KAAc,SAAA,CAAU,IAAA,CAAK,MAAA,GAAS,CAAA,CAAA;AACtF,EAAA,IAAI,EAAC,yCAAY,MAAA,CAAA,IAAU,CAAC,qBAAqB,IAAA,EAAM,UAAU,GAAG,OAAO,KAAA;AAC3E,EAAA,MAAmE,EAAA,GAAA,KAAA,EAA3D,EAAA,YAAA,EAAc,QAAA,EAAU,gBAAA,EAxuElC,GAwuEqE,IAAd,SAAA,GAAA,SAAA,CAAc,EAAA,EAAd,CAA7C,cAAA,EAAc,UAAA,EAAU,kBAAA,CAAA,CAAA;AAIhC,EAAA,OAAO,SAAA;AACT;AAXS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAaT,SAAS,yBAAA,CACP,KAAA,EACA,OAAA,EACA,KAAA,EACA,KAAA,EACqB;AACrB,EAAA,IAAI,QAAQ,YAAA,CAAa,QAAA,IAAY,wBAAA,CAAyB,OAAO,GAAG,OAAO,IAAA;AAC/E,EAAA,MAAM,KAAA,GAAQ,wBAAA,CAAyB,KAAA,EAAO,KAAK,CAAA;AACnD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,YAAA,GAAe,MAAM,KAAA,CAAM,SAAA,CAAU,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,OAAA,CAAQ,EAAE,CAAA;AAC3E,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,eAAe,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,YAAY,CAAA;AAC5F,EAAA,KAAA,IAAS,QAAQ,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,KAAA,IAAS,GAAG,KAAA,EAAA,EAAS;AAC3D,IAAA,MAAM,SAAA,GAAY,WAAW,KAAK,CAAA;AAClC,IAAA,IAAI,CAAC,SAAA,CAAU,YAAA,CAAa,QAAA,EAAU;AACtC,IAAA,IAAI,cAAA,CAAe,MAAM,CAAA,EAAG,KAAA,CAAM,GAAG,SAAA,CAAU,MAAM,GAAG,OAAO,SAAA;AAAA,EACjE;AACA,EAAA,OAAO,IAAA;AACT;AAjBS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAmBT,SAAS,mBAAA,CACP,KAAA,EACA,KAAA,EACA,KAAA,EACA,cAAA,EAC6D;AAC7D,EAAA,MAAM,UAAA,GAAa,qBAAA,CAAsB,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA;AAC5D,EAAA,IAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAClC,EAAA,MAAM,eAAe,IAAA,CAAK,GAAA;AAAA,IACxB,CAAA;AAAA,IACA,WAAW,SAAA,CAAU,CAAC,SAAA,KAAc,SAAA,CAAU,OAAO,cAAc;AAAA,GACrE;AACA,EAAA,MAAM,KAAA,GAAA,CAAS,YAAA,GAAe,CAAA,IAAK,UAAA,CAAW,MAAA;AAC9C,EAAA,OAAO,EAAE,MAAM,UAAA,CAAW,KAAK,GAAI,KAAA,EAAO,KAAA,EAAO,WAAW,MAAA,EAAO;AACrE;AAdS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAgBT,SAAS,qBAAA,CACP,KAAA,EACA,KAAA,EACA,KAAA,EACgB;AAChB,EAAA,MAAM,KAAA,GAAQ,wBAAA,CAAyB,KAAA,EAAO,KAAK,CAAA;AACnD,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,MAAM,OAAuB,EAAC;AAC9B,EAAA,KAAA,IAAS,QAAQ,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,EAAG,KAAA,IAAS,GAAG,KAAA,EAAA,EAAS;AAC5D,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAC/B,IAAA,IAAI,cAAA,CAAe,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,KAAK,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,IAAA;AACT;AAdS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAgBT,SAAS,yBAAyB,IAAA,EAA6B;AAC7D,EAAA,OAAO,KAAK,IAAA,KAAS,OAAA,IAAW,KAAK,IAAA,KAAS,OAAA,IAAW,KAAK,IAAA,KAAS,UAAA;AACzE;AAFS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAIT,SAAS,wBAAA,CACP,OACA,KAAA,EACiC;AAzyEnC,EAAA,IAAA,EAAA;AA0yEE,EAAA,MAAM,MAAA,GACJ,KAAA,CAAM,aAAA,IACN,OAAQ,KAAA,CAAM,aAAA,CAA8C,aAAA,KAAkB,QAAA,GAAA,CACxE,EAAA,GAAA,KAAA,CAAM,aAAA,CAAyD,aAAA,KAA/D,IAAA,GAAA,EAAA,GAAgF,IAAA,GAClF,IAAA;AACN,EAAA,MAAM,OAAO,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,qBAAA,EAAA;AACrB,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,OAAO;AAAA,IACL,CAAA,EAAA,CAAI,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,IAAA,IAAQ,KAAA;AAAA,IACjC,CAAA,EAAA,CAAI,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,GAAA,IAAO;AAAA,GAClC;AACF;AAfS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAiBT,SAAS,cAAA,CAAe,CAAA,EAAW,CAAA,EAAW,IAAA,EAAuC;AACnF,EAAA,OACE,CAAA,IAAK,IAAA,CAAK,IAAA,IAAQ,CAAA,IAAK,KAAK,IAAA,GAAO,IAAA,CAAK,KAAA,IAAS,CAAA,IAAK,IAAA,CAAK,GAAA,IAAO,CAAA,IAAK,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA;AAE3F;AAJS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAMT,SAAS,eAAA,CAAgB,QAAqB,OAAA,EAAqC;AACjF,EAAA,KAAA,MAAW,WAAW,KAAA,CAAM,IAAA,CAAK,OAAO,gBAAA,CAA8B,gBAAgB,CAAC,CAAA,EAAG;AACxF,IAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,OAAA,KAAY,OAAA,EAAS,OAAO,OAAA;AAAA,EAClD;AACA,EAAA,OAAO,IAAA;AACT;AALS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAOT,SAAS,eAAA,CAAgB,QAAqB,IAAA,EAAoB;AAp0ElE,EAAA,IAAA,EAAA,EAAA,EAAA;AAq0EE,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,aAAA,CAAc,YAAA,EAAa;AACpD,EAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,UAAA,KAAe,CAAA,EAAG;AAC5C,IAAA,MAAA,CAAO,cAAc,CAAA,EAAA,CAAG,EAAA,GAAA,MAAA,CAAO,gBAAP,IAAA,GAAA,EAAA,GAAsB,EAAE,GAAG,IAAI,CAAA,CAAA;AACvD,IAAA;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,UAAA,CAAW,CAAC,CAAA;AACpC,EAAA,MAAM,uBACJ,MAAA,KAAW,KAAA,CAAM,2BAA2B,MAAA,CAAO,QAAA,CAAS,MAAM,uBAAuB,CAAA;AAC3F,EAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,IAAA,MAAA,CAAO,cAAc,CAAA,EAAA,CAAG,EAAA,GAAA,MAAA,CAAO,gBAAP,IAAA,GAAA,EAAA,GAAsB,EAAE,GAAG,IAAI,CAAA,CAAA;AACvD,IAAA;AAAA,EACF;AACA,EAAA,KAAA,CAAM,cAAA,EAAe;AACrB,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,aAAA,CAAc,cAAA,CAAe,IAAI,CAAA;AACzD,EAAA,KAAA,CAAM,WAAW,QAAQ,CAAA;AACzB,EAAA,KAAA,CAAM,cAAc,QAAQ,CAAA;AAC5B,EAAA,KAAA,CAAM,YAAY,QAAQ,CAAA;AAC1B,EAAA,SAAA,CAAU,eAAA,EAAgB;AAC1B,EAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAC1B;AApBS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAsBT,SAAS,kBAAkB,IAAA,EAA4B;AA11EvD,EAAA,IAAA,EAAA;AA21EE,EAAA,IAAA,CAAI,EAAA,GAAA,IAAA,CAAK,aAAa,OAAA,KAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,UAAU,OAAO,IAAA,CAAK,aAAa,OAAA,CAAQ,QAAA;AAC1E,EAAA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,OAAO,KAAK,YAAA,CAAa,MAAA;AACvD,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS,OAAO,8DAAA;AAClC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,SAAA,EAAW,OAAO,oEAAA;AACpC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS,OAAO,sFAAA;AAClC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,UAAA,EAAY,OAAO,mFAAA;AACrC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS,OAAO,kGAAA;AAClC,EAAA,OAAO,8DAAA;AACT;AATS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAWT,SAAS,iBAAiB,MAAA,EAAoC;AAC5D,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,MAAA,EACE,gGAAA;AAAA,IACF,OAAA,EAAS,4EAAA;AAAA,IACT,MAAA,EACE;AAAA,GACJ;AACA,EAAA,OAAO,KAAK,MAAM,CAAA;AACpB;AATS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAWT,SAAS,mBAAmB,MAAA,EAAwB;AAClD,EAAA,OAAO;AAAA,IACL,UAAU,MAAM,CAAA;AAAA,IAChB,WAAA;AAAA,IACA,mBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACb;AARS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAUT,SAAS,UAAU,KAAA,EAAuB;AACxC,EAAA,OAAO,CAAA,CAAA,EAAI,MAAM,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA,CAAA;AAC9D;AAFS,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AAIT,SAAS,OAAO,KAAA,EAAuB;AACrC,EAAA,OAAO,CAAA,CAAA,EAAI,MAAM,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA,CAAA;AAC9D;AAFS,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA;AAIT,SAAS,mBAAA,CAAoB,OAAe,OAAA,EAAqC;AAl4EjF,EAAA,IAAA,EAAA;AAm4EE,EAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,IAAW,CAAA,EAAG,OAAO,KAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAC,CAAA;AAC9C,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,KAAA,CAAM,KAAA,CAAM,qBAAqB,MAAjC,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqC,CAAA,CAAA;AACjD,EAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AACjB,EAAA,MAAM,GAAA,GAAM,OAAO,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,OAAO,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAChD,EAAA,OAAO,QAAQ,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,EAAA,EAAK,IAAI,KAAK,KAAK,CAAA,CAAA,CAAA;AACjD;AATS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAWT,SAAS,qBAAqB,IAAA,EAAwC;AA74EtE,EAAA,IAAA,EAAA;AA84EE,EAAA,IAAI,IAAA,CAAK,OAAA,KAAY,MAAA,EAAW,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,OAAO,CAAC,CAAA;AAC5E,EAAA,OAAA,CAAA,CAAO,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAA,MAAa,sBAAsB,IAAA,GAAO,MAAA;AAChE;AAHS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAKT,SAAS,mBAAA,CAAoB,OAAyB,IAAA,EAA0B;AAC9E,EAAA,IAAI,KAAK,aAAA,EAAe;AACtB,IAAA,kBAAA,CAAmB,OAAO,IAAI,CAAA;AAC9B,IAAA;AAAA,EACF;AACA,EAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAC5B;AANS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAQT,SAAS,cAAA,CAAe,OAAyB,IAAA,EAA0B;AA15E3E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA25EE,EAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAClB,EAAA,IAAI,CAAC,IAAA,EAAM;AACX,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,EAAA,GAAa,CAAA;AAC1B,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,EAAA,GAAc,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,IAAA,CAAK,GAAA,KAAL,IAAA,GAAA,EAAA,GAAY,CAAA;AACxB,EAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,EAAA,GAAe,CAAA;AAC9B,EAAA,MAAM,eAAe,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACpD,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,MAAM,MAAM,CAAA;AACrD,EAAA,KAAA,CAAM,MAAM,QAAA,GAAW,UAAA;AACvB,EAAA,KAAA,CAAM,MAAM,IAAA,GAAO,CAAA,EAAI,CAAC,IAAA,GAAO,eAAgB,GAAG,CAAA,CAAA,CAAA;AAClD,EAAA,KAAA,CAAM,MAAM,GAAA,GAAM,CAAA,EAAI,CAAC,GAAA,GAAM,gBAAiB,GAAG,CAAA,CAAA,CAAA;AACjD,EAAA,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAI,CAAA,GAAI,eAAgB,GAAG,CAAA,CAAA,CAAA;AAC/C,EAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA,EAAI,CAAA,GAAI,gBAAiB,GAAG,CAAA,CAAA,CAAA;AACnD;AAdS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAgBT,SAAS,kBAAA,CAAmB,OAAyB,IAAA,EAA0B;AA16E/E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA26EE,EAAA,MAAM,WAAW,IAAA,CAAK,aAAA;AACtB,EAAA,IAAI,CAAC,QAAA,EAAU;AACf,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,QAAA,CAAS,IAAA,KAAT,IAAA,GAAA,EAAA,GAAiB,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,QAAA,CAAS,KAAA,KAAT,IAAA,GAAA,EAAA,GAAkB,CAAA;AAChC,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,QAAA,CAAS,GAAA,KAAT,IAAA,GAAA,EAAA,GAAgB,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,QAAA,CAAS,MAAA,KAAT,IAAA,GAAA,EAAA,GAAmB,CAAA;AAClC,EAAA,KAAA,CAAM,MAAM,QAAA,GAAW,UAAA;AACvB,EAAA,KAAA,CAAM,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,GAAG,CAAA,CAAA,CAAA;AAChC,EAAA,KAAA,CAAM,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAG,CAAA,CAAA,CAAA;AAC9B,EAAA,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,IAAA,GAAO,KAAK,CAAA,GAAI,GAAG,CAAA,CAAA,CAAA;AAC7D,EAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,GAAA,GAAM,MAAM,CAAA,GAAI,GAAG,CAAA,CAAA,CAAA;AAChE;AAZS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAcT,SAAS,iCAAA,CACP,MACA,WAAA,EACgB;AA37ElB,EAAA,IAAA,EAAA,EAAA,EAAA;AA47EE,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAChD,EAAA,WAAA,CAAY,SAAA,GAAY,4BAAA;AACxB,EAAA,MAAM,aAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,mBAAgB,KAAA,CAAM,GAAA,CAAA,CAAK,UAA3B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkC,WAAA,EAAA;AACpD,EAAA,WAAA,CAAY,WAAA,GAAc,SAAA,IAAa,gBAAA,CAAiB,WAAW,CAAA,IAAK,OAAA;AACxE,EAAA,WAAA,CAAY,QAAQ,IAAA,CAAK,SAAA,GACrB,CAAA,mBAAA,EAAsB,IAAA,CAAK,SAAS,CAAA,CAAA,GACpC,wBAAA;AACJ,EAAA,OAAO,WAAA;AACT;AAZS,MAAA,CAAA,iCAAA,EAAA,mCAAA,CAAA;AAcT,SAAS,iBAAiB,WAAA,EAAqD;AAC7E,EAAA,IAAI,CAAC,aAAa,OAAO,MAAA;AACzB,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AACxC,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AACxC,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AACxC,EAAA,OAAO,OAAA;AACT;AANS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAQT,SAAS,iBAAA,CACP,SAAA,EACA,IAAA,EACA,KAAA,EACA,YAAA,EACM;AAn9ER,EAAA,IAAA,EAAA,EAAA,EAAA;AAo9EE,EAAA,MAAM,UAAA,GAAA,CAAa,UAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,OAAO,CAAC,SAAA,KAAc,SAAA,CAAU,IAAA,CAAK,MAAA,GAAS,CAAA,CAAA;AACtF,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,IAAA,CAAK,QAAQ,CAAA;AACrD,EAAA,IAAI,EAAC,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,MAAA,CAAA,IAAU,CAAC,oBAAA,CAAqB,IAAA,EAAM,UAAU,CAAA,EAAG;AAClE,IAAA,IACE,CAAC,YAAA,IAAA,CAAA,CACD,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,SAAA,MAAc,aAAA,IAC9B,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA,CAAE,MAAA,GAAS,CAAA,EAClC;AACA,MAAA,6BAAA,CAA8B,WAAW,YAAY,CAAA;AAAA,IACvD,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,WAAA,GAAc,YAAA;AAAA,IAC1B;AACA,IAAA;AAAA,EACF;AACA,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5C,EAAA,OAAA,CAAQ,SAAA,GAAY,oBAAA;AACpB,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,KAAc;AAp+EpC,IAAA,IAAAP,KAAAG,GAAAA,EAAA,EAAA,EAAA,EAAA;AAq+EI,IAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACrD,IAAA,gBAAA,CAAiB,SAAA,GAAY,oBAAA;AAC7B,IAAA,IAAA,CAAIH,GAAAA,GAAA,SAAA,CAAU,KAAA,KAAV,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAiB,WAAW,kBAAA,CAAmB,gBAAA,EAAkB,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA;AAC9F,IAAA,mBAAA,CAAoB,kBAAkB,SAAA,CAAU,KAAA,EAAO,KAAA,EAAO,EAAE,cAAc,CAAA;AAC9E,IAAA,MAAM,oBAAA,GACJ,CAAC,YAAA,IAAA,CAAA,CAAgBG,GAAAA,GAAA,SAAA,CAAU,KAAA,KAAV,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAiB,SAAA,MAAc,aAAA,IAAiB,EAAA,CAAC,EAAA,GAAA,SAAA,CAAU,UAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAA;AACrF,IAAA,IAAI,oBAAA,EAAsB;AACxB,MAAA,gBAAA,CAAiB,MAAM,OAAA,GAAU,MAAA;AACjC,MAAA,gBAAA,CAAiB,MAAM,cAAA,GAAiB,eAAA;AACxC,MAAA,gBAAA,CAAiB,MAAM,UAAA,GAAa,UAAA;AACpC,MAAA,gBAAA,CAAiB,MAAM,KAAA,GAAQ,MAAA;AAAA,IACjC;AACA,IAAA,IAAA,CAAI,EAAA,GAAA,SAAA,CAAU,KAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,EAAQ;AAC3B,MAAA,gBAAA,CAAiB,QAAQ,MAAA,GAAS,MAAA;AAClC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC5C,MAAA,MAAA,CAAO,SAAA,GAAY,iBAAA;AACnB,MAAA,MAAA,CAAO,WAAA,GAAc,UAAU,KAAA,CAAM,MAAA;AACrC,MAAA,IAAI,UAAU,KAAA,CAAM,WAAA,SAAoB,KAAA,CAAM,KAAA,GAAQ,UAAU,KAAA,CAAM,WAAA;AACtE,MAAA,qBAAA,CAAsB,MAAA,EAAQ,SAAA,CAAU,KAAA,EAAO,KAAA,EAAO,UAAU,IAAI,CAAA;AACpE,MAAA,gBAAA,CAAiB,OAAO,MAAM,CAAA;AAAA,IAChC;AACA,IAAA,SAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK,QAAA,KAAa;AACxC,MAAA,MAAM,KAAA,GAAQ,uBAAuB,KAAA,CAAM,IAAA,CAAK,IAAI,IAAI,CAAA,GAAI,CAAC,GAAA,CAAI,IAAI,CAAA;AACrE,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC1C,QAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,QAAA,MAAM,QAAA,GAAW,yBAAA,CAA0B,IAAA,EAAM,SAAA,EAAW,KAAK,QAAQ,CAAA;AACzE,QAAA,IAAI,QAAA,EAAU,uBAAA,CAAwB,IAAA,EAAM,QAAA,EAAU,KAAK,CAAA;AAC3D,QAAA,gBAAA,CAAiB,OAAO,IAAI,CAAA;AAAA,MAC9B,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,OAAO,gBAAgB,CAAA;AAAA,EACjC,CAAC,CAAA;AACD,EAAA,SAAA,CAAU,OAAO,OAAO,CAAA;AAC1B;AAzDS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AA2DT,SAAS,mBAAmB,IAAA,EAAyC;AACnE,EAAA,OAAA,CAAO,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,QAAA,MAAa,WAAA,IAAA,CAAe,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,QAAA,MAAa,UAAA;AAC9D;AAFS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAIT,SAAS,iBAAA,CAAkB,WAAwB,IAAA,EAA0B;AA7gF7E,EAAA,IAAA,EAAA;AA8gFE,EAAA,IAAA,CAAA,CAAI,UAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAA,MAAS,MAAA,uBAA6B,SAAS,CAAA;AACpE;AAFS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAIT,SAAS,gBAAA,CAAiB,WAAwB,IAAA,EAA0B;AAjhF5E,EAAA,IAAA,EAAA,EAAA,EAAA;AAkhFE,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,OAAA,MAAY,QAAA,EAAU;AACzC,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,GAAC,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,mBAAqB,MAAA,CAAA,EAAQ;AAChD,EAAA,IAAI,wBAAwB,IAAI,CAAA,IAAK,CAAC,qCAAA,CAAsC,IAAI,CAAA,EAAG;AACjF,IAAA,oBAAA,CAAqB,SAAS,CAAA;AAAA,EAChC;AACA,EAAA,qBAAA,CAAsB,MAAM;AAvhF9B,IAAA,IAAAH,GAAAA;AAwhFI,IAAA,IAAI,SAAA,CAAU,OAAA,CAAQ,iBAAA,KAAsB,MAAA,EAAQ;AACpD,IAAA,MAAM,iBAAiB,SAAA,CAAU,WAAA;AACjC,IAAA,MAAM,kBAAkB,SAAA,CAAU,YAAA;AAClC,IAAA,IAAI,cAAA,IAAkB,CAAA,IAAK,eAAA,IAAmB,CAAA,EAAG;AACjD,IAAA,MAAM,eAAe,SAAA,CAAU,WAAA;AAC/B,IAAA,MAAM,gBAAgB,SAAA,CAAU,YAAA;AAChC,IAAA,MAAM,UAAA,GAAa,YAAA,GAAe,cAAA,GAAiB,cAAA,GAAiB,YAAA,GAAe,CAAA;AACnF,IAAA,MAAM,WAAA,GAAc,aAAA,GAAgB,eAAA,GAAkB,eAAA,GAAkB,aAAA,GAAgB,CAAA;AACxF,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,IAAA,EAAM,KAAK,GAAA,CAAI,CAAA,EAAG,UAAA,EAAY,WAAW,CAAC,CAAA;AACjE,IAAA,IAAI,SAAS,KAAA,EAAO;AACpB,IAAA,MAAM,UACJA,GAAAA,GAAA,SAAA,CAAU,cAA2B,iDAAiD,CAAA,KAAtF,OAAAA,GAAAA,GACA,SAAA;AACF,IAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,iBAAA,KAAsB,MAAA,EAAQ;AACjD,IAAA,MAAA,CAAO,KAAA,CAAM,eAAA,GAAkB,iBAAA,CAAkB,IAAI,CAAA;AACrD,IAAA,MAAA,CAAO,KAAA,CAAM,SAAA,GAAY,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAA;AACvC,IAAA,MAAA,CAAO,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,GAAA,GAAM,KAAK,CAAA,CAAA,CAAA;AAAA,EACrC,CAAC,CAAA;AACH;AAzBS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AA2BT,SAAS,sBAAsB,IAAA,EAA6B;AA5iF5D,EAAA,IAAA,EAAA;AA6iFE,EAAA,OAAO,OAAA;AAAA,IAAA,CACJ,IAAA,CAAK,IAAA,KAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,aAClC,IAAA,CAAK,MAAA,CAAO,cAAA,IAAkB,IAAA,CAAK,MAAA,CAAO,YAAA;AAAA,GAC7C;AACF;AALS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAOT,SAAS,oBAAA,CAAqB,SAAsB,IAAA,EAA0B;AAC5E,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,IAAI,IAAA,CAAK,MAAA,CAAO,cAAA,EAAgB,UAAA,CAAW,KAAK,YAAY,CAAA;AAC5D,EAAA,IAAI,IAAA,CAAK,MAAA,CAAO,YAAA,EAAc,UAAA,CAAW,KAAK,YAAY,CAAA;AAC1D,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC7B,EAAA,OAAA,CAAQ,KAAA,CAAM,SAAA,GAAY,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAC7C,EAAA,OAAA,CAAQ,MAAM,eAAA,GAAkB,QAAA;AAClC;AAPS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAST,SAAS,qBAAqB,SAAA,EAA8B;AAC1D,EAAA,SAAA,CAAU,MAAM,UAAA,GAAa,QAAA;AAC7B,EAAA,SAAA,CACG,gBAAA,CAA8B,0CAA0C,CAAA,CACxE,OAAA,CAAQ,CAAC,OAAA,KAAY;AACpB,IAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,QAAA;AAAA,EAC7B,CAAC,CAAA;AACL;AAPS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAST,SAAS,uBAAA,CAAwB,OAAA,EAAsB,IAAA,EAAoB,KAAA,EAAqB;AArkFhG,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAskFE,EAAA,IAAI,CAAC,4BAAA,CAA6B,IAAA,EAAM,KAAK,CAAA,EAAG;AAChD,EAAA,MAAM,MAAA,GAAA,CAAA,CAAU,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,QAAA,KAAhB,IAAA,GAAA,EAAA,GAA4B,oBAAA,CAAqB,IAAI,CAAA,KAArD,IAAA,GAAA,EAAA,GAA0D,EAAA,IAAM,KAAA,GAAQ,KAAA;AACxF,EAAA,OAAA,CAAQ,KAAA,CAAM,aAAA,GAAgB,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,GAAS,KAAK,CAAC,CAAC,CAAA,EAAA,CAAA;AAC7E;AAJS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAMT,SAAS,wBAAA,CAAyB,MAAoB,KAAA,EAAuB;AA3kF7E,EAAA,IAAA,EAAA,EAAA,EAAA;AA4kFE,EAAA,IAAI,CAAC,6BAAA,CAA8B,IAAI,CAAA,EAAG,OAAO,CAAA;AACjD,EAAA,MAAM,YAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,mBAAgB,QAAA,KAAhB,IAAA,GAAA,EAAA,GAA4B,qBAAqB,IAAI,CAAA;AACtE,EAAA,IAAI,CAAC,UAAU,OAAO,CAAA;AACtB,EAAA,OAAO,QAAA,GAAW,QAAQ,KAAA,GAAQ,IAAA;AACpC;AALS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAOT,SAAS,8BAA8B,IAAA,EAA6B;AAllFpE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmlFE,EAAA,IAAI,KAAK,IAAA,KAAS,SAAA,IAAa,IAAA,CAAK,IAAA,KAAS,eAAe,OAAO,KAAA;AACnE,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,aAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,MAAA,MAAW,SAAS,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,QAAA,EAAU,OAAO,KAAA;AAC/E,EAAA,IAAI,IAAA,CAAK,aAAa,IAAA,CAAK,YAAA,IAAgB,KAAK,SAAA,IAAa,IAAA,CAAK,cAAc,OAAO,KAAA;AACvF,EAAA,MAAM,UAAS,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,mBAAgB,UAAA,KAAhB,IAAA,GAAA,EAAA,GAA8B,uBAAuB,IAAI,CAAA;AACxE,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,cAAc,IAAA,CAAK,MAAM,GAAG,OAAO,KAAA;AACnD,EAAA,MAAM,YAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,mBAAgB,QAAA,KAAhB,IAAA,GAAA,EAAA,GAA4B,qBAAqB,IAAI,CAAA;AACtE,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,GAAW,EAAA,EAAI,OAAO,KAAA;AACvC,EAAA,MAAM,cAAa,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,MAAA,CAAO,CAAC,SAAA,KAAc;AA1lFhE,IAAA,IAAAA,GAAAA;AA2lFI,IAAA,MAAMQ,KAAAA,GAAAA,CAAOR,GAAAA,GAAA,SAAA,CAAU,IAAA,KAAV,OAAAA,GAAAA,GAAkB,SAAA,CAAU,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAI,CAAA,CAAE,KAAK,EAAE,CAAA;AAC5E,IAAA,OAAOQ,KAAAA,CAAK,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA;AAAA,EAC9B,CAAA,CAAA;AACA,EAAA,IAAI,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAClD,EAAA,MAAM,IAAA,GAAA,CAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAa,CAAA,CAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,IAAA,KAAjB,YAAyB,IAAA,CAAK,IAAA,KAA9B,IAAA,GAAA,EAAA,GAAsC,EAAA,EAAI,IAAA,EAAK;AAC7D,EAAA,OAAO,KAAK,MAAA,IAAU,EAAA,IAAM,CAAC,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC1D;AAfS,MAAA,CAAA,6BAAA,EAAA,+BAAA,CAAA;AAiBT,SAAS,4BAAA,CAA6B,MAAoB,KAAA,EAAwB;AAnmFlF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAomFE,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAA,MAAS,UAAU,OAAO,KAAA;AAC7C,EAAA,IAAI,2BAAA,CAA4B,IAAI,CAAA,EAAG,OAAO,KAAA;AAC9C,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,SAAA,KAAhB,IAAA,GAAA,EAAA,GAAA,CAA6B,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,CAAA,CAAA,KAAtB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,KAAA,KAA1B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiC,SAAA;AAChF,EAAA,IAAI,SAAA,KAAc,UAAU,OAAO,KAAA;AACnC,EAAA,MAAM,UAAS,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,mBAAgB,UAAA,KAAhB,IAAA,GAAA,EAAA,GAA8B,uBAAuB,IAAI,CAAA;AACxE,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,oBAAoB,IAAA,CAAK,MAAM,GAAG,OAAO,KAAA;AACzD,EAAA,MAAM,SAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,CAAA,CAAA,KAAtB,mBAA0B,IAAA,KAA1B,IAAA,GAAA,EAAA,GAAkC,IAAA,CAAK,IAAA,KAAvC,YAA+C,EAAA,EAAI,OAAA,CAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AAC3F,EAAA,IAAI,KAAK,MAAA,GAAS,EAAA,IAAM,qBAAqB,IAAA,CAAK,IAAI,GAAG,OAAO,KAAA;AAChE,EAAA,IAAI,CAAC,qCAAA,CAAsC,IAAA,CAAK,IAAI,GAAG,OAAO,KAAA;AAC9D,EAAA,MAAM,YAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,mBAAgB,QAAA,KAAhB,IAAA,GAAA,EAAA,GAA4B,qBAAqB,IAAI,CAAA;AACtE,EAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,EAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,eAAhB,IAAA,GAAA,EAAA,GAAA,CAA8B,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,CAAA,CAAA,KAAtB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,KAAA,KAA1B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiC,eAA/D,IAAA,GAAA,EAAA,GAA6E,GAAA;AAChG,EAAA,MAAM,YAAA,GAAe,QAAA,GAAW,KAAA,GAAQ,KAAA,GAAQ,UAAA;AAChD,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,KAAA,IAAS,YAAA,GAAe,IAAA;AACtD;AAfS,MAAA,CAAA,4BAAA,EAAA,8BAAA,CAAA;AAiBT,SAAS,4BAA4B,IAAA,EAA6B;AApnFlE,EAAA,IAAA,EAAA,EAAA,EAAA;AAqnFE,EAAA,OAAO,OAAA;AAAA,IAAA,CAAA,CACL,UAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,sBAAqB,MAAA,KAAA,CACnC,EAAA,GAAA,IAAA,CAAK,mBAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,IAAA;AAAA,MACnB,CAAC,SAAA,KACC,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAK;AAznFpC,QAAA,IAAAR,GAAAA;AAynFuC,QAAA,OAAA,CAAA,CAAAA,GAAAA,GAAA,GAAA,CAAI,KAAA,KAAJ,IAAA,GAAA,MAAA,GAAAA,IAAW,gBAAA,MAAqB,MAAA;AAAA,MAAA,CAAS;AAAA,KAAA;AAAA,GAE9E;AACF;AARS,MAAA,CAAA,2BAAA,EAAA,6BAAA,CAAA;AAUT,SAAS,qBAAqB,IAAA,EAAwC;AA9nFtE,EAAA,IAAA,EAAA,EAAA,EAAA;AA+nFE,EAAA,KAAA,MAAW,SAAA,IAAA,CAAa,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,EAAA,GAAuB,EAAC,EAAG;AACjD,IAAA,KAAA,MAAW,GAAA,IAAO,UAAU,IAAA,EAAM;AAChC,MAAA,IAAA,CAAA,CAAI,SAAI,KAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,cAAa,MAAA,EAAW,OAAO,IAAI,KAAA,CAAM,QAAA;AAAA,IAC1D;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAPS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAST,SAAS,uBAAuB,IAAA,EAAwC;AAvoFxE,EAAA,IAAA,EAAA,EAAA,EAAA;AAwoFE,EAAA,KAAA,MAAW,SAAA,IAAA,CAAa,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,EAAA,GAAuB,EAAC,EAAG;AACjD,IAAA,KAAA,MAAW,GAAA,IAAO,UAAU,IAAA,EAAM;AAChC,MAAA,IAAA,CAAI,SAAI,KAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,UAAA,EAAY,OAAO,IAAI,KAAA,CAAM,UAAA;AAAA,IAC9C;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAPS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAST,SAAS,wBAAwB,IAAA,EAA6B;AAhpF9D,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAipFE,EAAA,MAAM,UAAA,GAAA,CAAa,UAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,OAAO,CAAC,SAAA,KAAc,SAAA,CAAU,IAAA,CAAK,MAAA,GAAS,CAAA,CAAA;AACtF,EAAA,IAAI,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAClD,EAAA,IAAA,CAAI,oDAAa,CAAA,CAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,KAAA,KAAjB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,QAAQ,OAAO,KAAA;AAC3C,EAAA,MAAM,IAAA,GAAA,CAAO,0DAAa,CAAA,CAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,SAAjB,IAAA,GAAA,EAAA,GAAyB,IAAA,CAAK,SAA9B,IAAA,GAAA,EAAA,GAAsC,EAAA;AACnD,EAAA,OAAO,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AACvE;AANS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAQT,SAAS,4BAA4B,IAAA,EAA6B;AAxpFlE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAypFE,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAA,MAAS,UAAU,OAAO,KAAA;AAC7C,EAAA,IAAA,CAAA,CAAK,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,SAAA,KAAhB,IAAA,GAAA,EAAA,GAAA,CAA6B,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,CAAA,CAAA,KAAtB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,KAAA,KAA1B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiC,SAAA,MAAe,QAAA;AAChF,IAAA,OAAO,KAAA;AACT,EAAA,MAAM,IAAA,GAAA,CAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,CAAA,CAAA,KAAtB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,IAAA,KAA1B,IAAA,GAAA,EAAA,GAAkC,IAAA,CAAK,IAAA,KAAvC,IAAA,GAAA,EAAA,GAA+C,EAAA,EAAI,IAAA,EAAK;AACtE,EAAA,IAAI,CAAC,wBAAA,CAAyB,IAAA,CAAK,IAAI,GAAG,OAAO,KAAA;AACjD,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1D,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1D,EAAA,OAAO,GAAA,GAAM,CAAA,IAAK,GAAA,IAAO,IAAA,IAAW,MAAM,GAAA,GAAM,IAAA;AAClD;AATS,MAAA,CAAA,2BAAA,EAAA,6BAAA,CAAA;AAWT,SAAS,sCAAsC,IAAA,EAA6B;AAnqF5E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAoqFE,EAAA,IAAI,2BAAA,CAA4B,IAAI,CAAA,EAAG,OAAO,IAAA;AAC9C,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAA,MAAS,UAAU,OAAO,KAAA;AAC7C,EAAA,MAAM,IAAA,GAAA,CAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,CAAA,CAAA,KAAtB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,IAAA,KAA1B,IAAA,GAAA,EAAA,GAAkC,IAAA,CAAK,IAAA,KAAvC,IAAA,GAAA,EAAA,GAA+C,EAAA,EAAI,IAAA,EAAK;AACtE,EAAA,IAAI,IAAA,CAAK,MAAA,GAAS,EAAA,EAAI,OAAO,KAAA;AAC7B,EAAA,MAAM,iBAAgB,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,CAAA,KAA7B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgC,WAAhC,IAAA,GAAA,EAAA,GAA0C,CAAA;AAChE,EAAA,IAAI,aAAA,IAAiB,IAAI,OAAO,IAAA;AAChC,EAAA,OAAO,YAAA,CAAa,KAAK,IAAI,CAAA;AAC/B;AARS,MAAA,CAAA,qCAAA,EAAA,uCAAA,CAAA;AAUT,SAAS,kBAAkB,IAAA,EAA4B;AA7qFvD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8qFE,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,SAAA,KAAhB,IAAA,GAAA,EAAA,GAAA,CAA6B,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,CAAA,CAAA,KAAtB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,KAAA,KAA1B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiC,SAAA;AAChF,EAAA,IAAI,SAAA,KAAc,SAAS,OAAO,WAAA;AAClC,EAAA,IAAI,SAAA,KAAc,UAAU,OAAO,YAAA;AACnC,EAAA,OAAO,UAAA;AACT;AALS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAOT,SAAS,wBAAwB,IAAA,EAA6B;AAprF9D,EAAA,IAAA,EAAA;AAqrFE,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,SAAA,EAAW,OAAO,KAAA;AACpC,EAAA,IAAI,CAAC,KAAK,IAAA,IAAQ,EAAA,CAAC,UAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,SAAQ,OAAO,KAAA;AACvD,EAAA,IAAI,IAAA,CAAK,kBAAkB,oBAAA,CAAqB,IAAI,KAAK,UAAA,CAAW,IAAI,GAAG,OAAO,KAAA;AAClF,EAAA,OAAO,CAAC,cAAA,CAAe,IAAI,CAAA,IAAK,CAAC,eAAe,IAAI,CAAA;AACtD;AALS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAOT,SAAS,eAAe,IAAA,EAA6B;AA3rFrD,EAAA,IAAA,EAAA,EAAA,EAAA;AA4rFE,EAAA,IAAA,CAAI,EAAA,GAAA,IAAA,CAAK,YAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,MAAA,CAAO,MAAA,EAAQ;AACpC,IAAA,OAAA,CAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,YAAA,CAAa,SAAA,KAAlB,IAAA,GAAA,EAAA,GAA+B,EAAC,EAAG,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,GAAU,CAAC,CAAA,IAAK,CAAC,KAAK,YAAA,CAAa,SAAA;AAAA,EAClG;AACA,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,YAAY,CAAC,CAAA;AACrD;AALS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAOT,SAAS,eAAe,IAAA,EAA6B;AAlsFrD,EAAA,IAAA,EAAA,EAAA,EAAA;AAmsFE,EAAA,IAAI,CAAC,KAAK,SAAA,IAAa,EAAA,CAAC,UAAK,YAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,MAAA,CAAO,MAAA,CAAA,EAAQ,OAAO,KAAA;AACjE,EAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,CAAA,EAAG,OAAO,KAAA;AACnC,EAAA,OAAA,CAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,IAAA,IAAQ,CAAA;AACpC;AAJS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAMT,SAAS,6BAAA,CAA8B,WAAwB,IAAA,EAAoB;AACjF,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5C,EAAA,OAAA,CAAQ,SAAA,GAAY,2BAAA;AACpB,EAAA,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AACjC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,EACrB,CAAC,CAAA;AACD,EAAA,SAAA,CAAU,OAAO,OAAO,CAAA;AAC1B;AATS,MAAA,CAAA,6BAAA,EAAA,+BAAA,CAAA;AAWT,SAAS,oBAAA,CACP,MACA,UAAA,EACS;AACT,EAAA,OAAO,UAAA,CAAW,IAAA;AAAA,IAChB,CAAC,SAAA,KAAW;AAxtFhB,MAAA,IAAA,EAAA;AAytFM,MAAA,OAAA,OAAA,CAAA,CAAQ,EAAA,GAAA,SAAA,CAAU,KAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAM,CAAA,IAC/B,wBAAwB,SAAA,CAAU,KAAK,CAAA,IACvC,SAAA,CAAU,IAAA,CAAK,IAAA;AAAA,QACb,CAAC,GAAA,KACC,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,IACpB,GAAA,CAAI,KAAA,KAAU,MAAA,IAAa,oBAAA,CAAqB,GAAA,CAAI,KAAA,EAAO,KAAK,SAAS;AAAA,OAC9E;AAAA,IAAA;AAAA,GACJ;AACF;AAdS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAgBT,SAAS,wBAAwB,KAAA,EAAmC;AAClE,EAAA,OAAO,OAAA;AAAA,IAAA,CACL,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,MAAe,MAAA,IAAA,CACtB,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,MAAe,MAAA,IAAA,CACtB,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,MAAe,MAAA,IAAA,CACtB,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,WAAA,MAAgB,MAAA,IAAA,CACvB,+BAAO,UAAA,MAAe;AAAA,GACxB;AACF;AARS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAUT,SAAS,oBACP,OAAA,EACA,KAAA,EACA,KAAA,EACA,OAAA,GAAsC,EAAC,EACjC;AACN,EAAA,IAAI,CAAC,KAAA,EAAO;AACZ,EAAA,IAAI,MAAM,UAAA,KAAe,MAAA;AACvB,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,GAAa,MAAA,CAAO,sBAAA,CAAuB,KAAK,CAAC,CAAA;AACjE,EAAA,IAAI,KAAA,CAAM,eAAe,MAAA,EAAW;AAClC,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,GAAc,CAAA,EAAG,KAAA,CAAM,aAAa,KAAK,CAAA,EAAA,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,KAAA,CAAM,eAAe,MAAA,EAAW,OAAA,CAAQ,MAAM,UAAA,GAAa,CAAA,EAAG,KAAA,CAAM,UAAA,GAAa,KAAK,CAAA,EAAA,CAAA;AAC1F,EAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,IAAA,IAAI,MAAM,WAAA,KAAgB,MAAA;AACxB,MAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,GAAc,qBAAA,CAAsB,KAAA,CAAM,aAAa,KAAK,CAAA;AAC5E,IAAA,IAAI,MAAM,UAAA,KAAe,MAAA;AACvB,MAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,GAAa,qBAAA,CAAsB,KAAA,CAAM,YAAY,KAAK,CAAA;AAC1E,IAAA;AAAA,EACF;AACA,EAAA,IAAI,MAAM,WAAA,KAAgB,MAAA;AACxB,IAAA,OAAA,CAAQ,KAAA,CAAM,SAAA,GAAY,qBAAA,CAAsB,KAAA,CAAM,aAAa,KAAK,CAAA;AAC1E,EAAA,IAAI,MAAM,UAAA,KAAe,MAAA;AACvB,IAAA,OAAA,CAAQ,KAAA,CAAM,YAAA,GAAe,qBAAA,CAAsB,KAAA,CAAM,YAAY,KAAK,CAAA;AAC9E;AAxBS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AA0BT,SAAS,uBAAuB,KAAA,EAA+C;AAvwF/E,EAAA,IAAA,EAAA;AAwwFE,EAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,EAAA,GAAoB,GAAA;AACvC,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,EAAQ,OAAO,UAAA;AAC1B,EAAA,OAAO,UAAA,GAAa,IAAA;AACtB;AAJS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAMT,SAAS,qBAAA,CACP,OAAA,EACA,KAAA,EACA,KAAA,EACA,gBAAgB,EAAA,EACV;AACN,EAAA,IAAA,CAAI,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,gBAAe,MAAA,EAAW;AACnC,IAAA,IAAI,KAAA,CAAM,aAAa,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,MAAM,QAAA,GAAW,CAAA,EAAG,KAAA,CAAM,UAAA,GAAa,QAAQ,KAAK,CAAA,EAAA,CAAA;AAAA,IAC9D,CAAA,MAAA,IAAW,KAAA,CAAM,UAAA,GAAa,CAAA,EAAG;AAC/B,MAAA,OAAA,CAAQ,KAAA,CAAM,QAAA,GAAW,CAAA,EAAG,KAAA,CAAM,UAAU,CAAA,EAAA,CAAA;AAAA,IAC9C;AAAA,EACF;AACA,EAAA,IAAI,CAAC,wCAAA,CAAyC,KAAA,EAAO,aAAa,CAAA,EAAG;AACrE,EAAA,OAAA,CAAQ,MAAM,KAAA,GAAQ,OAAA;AACtB,EAAA,OAAA,CAAQ,MAAM,WAAA,GAAc,QAAA;AAC5B,EAAA,OAAA,CAAQ,MAAM,SAAA,GAAY,aAAA;AAC1B,EAAA,OAAA,CAAQ,MAAM,eAAA,GAAkB,QAAA;AAChC,EAAA,OAAA,CAAQ,MAAM,aAAA,GAAgB,QAAA;AAChC;AAnBS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAqBT,SAAS,wCAAA,CACP,KAAA,EACA,aAAA,GAAgB,EAAA,EACP;AAryFX,EAAA,IAAA,EAAA,EAAA,EAAA;AAsyFE,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,gBAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,kBAAxB,IAAA,GAAA,EAAA,GAAyC,EAAA;AACtD,EAAA,MAAM,qBAAqB,KAAA,CAAM,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,CAAA,CAAE,MAAA;AAC5D,EAAA,OACE,KAAA,CAAM,MAAA,KAAW,QAAA,IACjB,KAAA,CAAM,cAAc,QAAA,IACpB,kBAAA,GAAqB,CAAA,IACrB,kBAAA,IAAsB,CAAA,KACrB,IAAA,CAAK,QAAA,CAAS,WAAW,KAAK,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAA,IACvD,KAAA,CAAM,UAAA,KAAe,MAAA,IACrB,KAAA,CAAM,aAAa,CAAA,IACnB,KAAA,CAAM,UAAA,KAAe,MAAA,IACrB,MAAM,UAAA,IAAc,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,UAAU,CAAA,GAAI,IAAA;AAErD;AAlBS,MAAA,CAAA,wCAAA,EAAA,0CAAA,CAAA;AAoBT,SAAS,qBAAA,CAAsB,OAAe,KAAA,EAAuB;AACnE,EAAA,OAAO,QAAQ,EAAA,GAAK,CAAA,EAAG,QAAQ,KAAK,CAAA,EAAA,CAAA,GAAO,GAAG,KAAK,CAAA,EAAA,CAAA;AACrD;AAFS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAIT,SAAS,oBAAA,CACP,UAGA,SAAA,EACS;AACT,EAAA,MAAM,cAAA,GAAiB,QAAA;AACvB,EAAA,MAAM,eAAA,GAAkB,SAAA;AACxB,EAAA,IAAI,SAAS,QAAA,KAAa,MAAA,IAAa,SAAS,QAAA,MAAa,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,WAAU,OAAO,IAAA;AACzF,EAAA,IAAI,QAAA,CAAS,UAAA,KAAe,MAAA,IAAa,QAAA,CAAS,gBAAe,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,UAAA,CAAA;AAC1E,IAAA,OAAO,IAAA;AACT,EAAA,IAAI,SAAS,KAAA,KAAU,MAAA,IAAa,SAAS,KAAA,MAAU,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,QAAO,OAAO,IAAA;AAChF,EAAA,IACE,cAAA,CAAe,QAAA,KAAa,MAAA,IAC5B,cAAA,CAAe,cAAa,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAiB,QAAA,CAAA;AAE7C,IAAA,OAAO,IAAA;AACT,EAAA,IACE,cAAA,CAAe,YAAA,KAAiB,MAAA,IAChC,cAAA,CAAe,kBAAiB,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAiB,YAAA,CAAA;AAEjD,IAAA,OAAO,IAAA;AACT,EAAA,IACE,cAAA,CAAe,gBAAA,KAAqB,MAAA,IACpC,cAAA,CAAe,sBAAqB,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAiB,gBAAA,CAAA;AAErD,IAAA,OAAO,IAAA;AACT,EAAA,IACE,cAAA,CAAe,UAAA,KAAe,MAAA,IAC9B,cAAA,CAAe,gBAAe,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAiB,UAAA,CAAA;AAE/C,IAAA,OAAO,IAAA;AACT,EAAA,IAAI,SAAS,IAAA,KAAS,MAAA,IAAa,SAAS,IAAA,MAAS,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAM,OAAO,IAAA;AAC7E,EAAA,IAAI,SAAS,MAAA,KAAW,MAAA,IAAa,SAAS,MAAA,MAAW,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,SAAQ,OAAO,IAAA;AACnF,EAAA,IAAI,SAAS,SAAA,KAAc,MAAA,IAAa,SAAS,SAAA,MAAc,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,YAAW,OAAO,IAAA;AAC5F,EAAA,IACE,QAAA,CAAS,gBAAA,KAAqB,MAAA,IAC9B,QAAA,CAAS,sBAAqB,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,gBAAA,CAAA;AAEzC,IAAA,OAAO,IAAA;AACT,EAAA,OAAO,KAAA;AACT;AAzCS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AA2CT,SAAS,yBAAA,CACP,IAAA,EACA,SAAA,EACA,GAAA,EACA,QAAA,EACgC;AA12FlC,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA22FE,EAAA,IAAI,CAAC,kCAAA,CAAmC,IAAA,EAAM,SAAA,EAAW,GAAA,EAAK,QAAQ,CAAA,EAAG;AACvE,IAAA,OAAO,yBAAA,CAA0B,GAAA,EAAK,GAAA,CAAI,KAAuC,CAAA;AAAA,EACnF;AACA,EAAA,MAAM,aAAa,qBAAA,CAAsB,SAAA,CAAU,KAAK,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAC,CAAA;AAC1E,EAAA,OAAO,yBAAA,CAA0B,GAAA,EAAK,aAAA,CAAA,cAAA,CAAA,EAAA,EAChC,GAAA,CAAI,KAAA,CAAA,EAD4B;AAAA,IAEpC,KAAA,EAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,GAAA,CAAI,KAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,UAAX,IAAA,GAAA,EAAA,GAAoB,SAAA;AAAA,IAC3B,QAAA,EAAA,CAAU,EAAA,GAAA,CAAA,EAAA,GAAA,GAAA,CAAI,KAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,aAAX,IAAA,GAAA,EAAA,GAAuB,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,KAAA,CAAA,CAAO,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,EAAA,IAAM,IAAI,CAAC;AAAA,GACrF,CAAC,CAAA;AACH;AAfS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAiBT,SAAS,yBAAA,CACP,KACA,KAAA,EACgC;AAChC,EAAA,IAAI,CAAC,GAAA,CAAI,SAAA,EAAW,OAAO,KAAA;AAC3B,EAAA,MAAM,IAAA,GAA2B,cAAA,CAAA,EAAA,EAAM,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,EAAC,CAAA;AACjD,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,IAAa,IAAA,CAAK,iBAAiB,MAAA,EAAW;AAClE,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AAAA,EACf;AACA,EAAA,IAAI,IAAA,CAAK,SAAA,KAAc,MAAA,EAAW,IAAA,CAAK,SAAA,GAAY,IAAA;AACnD,EAAA,OAAO,IAAA;AACT;AAXS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAaT,SAAS,kCAAA,CACP,IAAA,EACA,SAAA,EACA,GAAA,EACA,QAAA,EACS;AAx4FX,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAy4FE,EAAA,IAAI,QAAA,IAAY,GAAG,OAAO,KAAA;AAC1B,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,GAAA,CAAI,UAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS,IAAI,KAAA,CAAM,QAAA,KAAa,QAAW,OAAO,KAAA;AACjE,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,OAAA,MAAY,SAAS,OAAO,KAAA;AAC/C,EAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,GAAA,CAAI,IAAI,GAAG,OAAO,KAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,IAAA,CAC1B,KAAA,CAAM,GAAG,QAAQ,CAAA,CACjB,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAA,CACvB,KAAK,EAAE,CAAA;AACV,EAAA,MAAM,WAAA,GAAc,gCAAA,CAAiC,IAAA,CAAK,UAAU,CAAA;AACpE,EAAA,IAAI,CAAC,aAAa,OAAO,KAAA;AACzB,EAAA,MAAM,mBAAA,GAAsB,MAAM,IAAA,CAAA,CAAK,EAAA,GAAA,WAAA,CAAY,CAAC,CAAA,KAAb,IAAA,GAAA,EAAA,GAAkB,EAAE,CAAA,CAAE,MAAA;AAAA,IAAO,CAAC,IAAA,KACnE,iBAAA,CAAkB,IAAA,CAAK,IAAI;AAAA,GAC7B,CAAE,MAAA;AACF,EAAA,IAAI,mBAAA,GAAsB,GAAG,OAAO,KAAA;AACpC,EAAA,OAAO,SAAA,CAAU,KAAK,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AACtD,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,OAAA,CAAO,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,MAAU,MAAA,IAAA,CAAa,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,MAAa,MAAA;AAAA,EAC3D,CAAC,CAAA;AACH;AAxBS,MAAA,CAAA,kCAAA,EAAA,oCAAA,CAAA;AA0BT,SAAS,sBACP,IAAA,EACoB;AA/5FtB,EAAA,IAAA,EAAA;AAg6FE,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAA,CAAA,CAAI,SAAI,KAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,cAAa,MAAA,EAAW,OAAO,IAAI,KAAA,CAAM,QAAA;AAAA,EAC1D;AACA,EAAA,OAAO,MAAA;AACT;AAPS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAST,SAAS,uBAAA,CACP,OAAA,EACA,KAAA,EACA,KAAA,EACM;AA16FR,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA26FE,EAAA,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,CAAQ,KAAA,CAAM,QAAA,GAAW,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,QAAA,GAAW,KAAA,GAAQ,KAAK,CAAC,CAAA,EAAA,CAAA;AAC3F,EAAA,IAAI,KAAA,CAAM,UAAA;AACR,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,GAAa,kBAAA,CAAmB,KAAA,CAAM,UAAU,CAAA;AAChE,EAAA,IAAI,MAAM,UAAA,EAAY,OAAA,CAAQ,MAAM,UAAA,GAAa,MAAA,CAAO,MAAM,UAAU,CAAA;AACxE,EAAA,IAAI,MAAM,gBAAA,KAAqB,MAAA;AAC7B,IAAA,OAAA,CAAQ,MAAM,aAAA,GAAgB,CAAA,EAAG,KAAA,CAAM,gBAAA,GAAmB,QAAQ,KAAK,CAAA,EAAA,CAAA;AACzE,EAAA,IAAI,KAAA,CAAM,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA;AAC7C,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,KAAA,CAAM,iBAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,MAAA,CAAO,WAAU,KAAA,CAAM,YAAA,CAAa,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC7E,IAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,GAAkB,iBAAA,CAAkB,KAAA,CAAM,YAAY,CAAA;AACpE,IAAA,OAAA,CAAQ,MAAM,cAAA,GAAiB,MAAA;AAC/B,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,yBAAA,EAA2B,MAAM,CAAA;AAC3D,IAAA,OAAA,CAAQ,MAAM,KAAA,GAAQ,aAAA;AACtB,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,yBAAA,EAA2B,aAAa,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,KAAA,CAAM,aAAa,MAAA,EAAQ;AAC7B,IAAA,OAAA,CAAQ,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,qBAAN,IAAA,GAAA,EAAA,GAA0B,KAAA,CAAM,UAAhC,IAAA,GAAA,EAAA,GAAyC,aAAA;AAC/D,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,yBAAA,EAA2B,aAAa,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,KAAA,CAAM,gBAAA;AACR,IAAA,OAAA,CAAQ,MAAM,WAAA,CAAY,qBAAA,EAAuB,CAAA,IAAA,EAAO,KAAA,CAAM,gBAAgB,CAAA,CAAE,CAAA;AAClF,EAAA,IAAI,KAAA,CAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,aAAa,YAAA,CAAa,KAAA,CAAM,YAAY,KAAK,CAAA;AACrF,EAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAW,OAAA,CAAQ,MAAM,UAAA,GAAa,KAAA,CAAM,OAAO,KAAA,GAAQ,KAAA;AAC9E,EAAA,IAAI,KAAA,CAAM,WAAW,MAAA,EAAW,OAAA,CAAQ,MAAM,SAAA,GAAY,KAAA,CAAM,SAAS,QAAA,GAAW,QAAA;AACpF,EAAA,IAAI,MAAM,SAAA,KAAc,MAAA;AACtB,IAAA,OAAA,CAAQ,KAAA,CAAM,kBAAA,GAAqB,KAAA,CAAM,SAAA,GAAY,WAAA,GAAc,MAAA;AACvE;AA9BS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAgCT,SAAS,wBAAA,CACP,aACA,IAAA,EACS;AAz8FX,EAAA,IAAA,EAAA;AA08FE,EAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,WAAA,EAAA,KAAb,IAAA,GAAA,EAAA,GAA8B,EAAA;AACjD,EAAA,IACE,UAAA,KAAe,WAAA,IACf,UAAA,KAAe,YAAA,IACf,UAAA,KAAe,WAAA,IACf,UAAA,KAAe,WAAA,IACf,UAAA,KAAe,YAAA,IACf,UAAA,KAAe,eAAA,EACf;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,IAAA,IAAQ,gCAAA,CAAiC,IAAA,CAAK,IAAI,CAAC,CAAA;AACpE;AAhBS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAkBT,SAAS,kBAAA,CAAmB,SAAsB,SAAA,EAAmC;AACnF,EAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,IAAA,OAAA,CAAQ,MAAM,SAAA,GAAY,SAAA;AAC1B,IAAA,OAAA,CAAQ,MAAM,aAAA,GAAgB,SAAA;AAC9B,IAAA;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,SAAA,GAAY,SAAA,KAAc,SAAA,GAAY,SAAA,GAAY,SAAA;AAClE;AAPS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAST,SAAS,WAAW,IAAA,EAA6B;AAC/C,EAAA,IAAI,IAAA,CAAK,gBAAgB,OAAO,KAAA;AAChC,EAAA,MAAM,SAAS,IAAA,CAAK,cAAA;AACpB,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1D,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1D,EAAA,OAAA,CACG,MAAA,KAAW,UAAU,MAAA,KAAW,oBAAA,KACjC,MAAM,CAAA,KACL,GAAA,KAAQ,CAAA,IAAK,GAAA,GAAM,GAAA,GAAM,IAAA,CAAA;AAE9B;AAVS,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAYT,SAAS,aAAa,IAAA,EAA+C;AACnE,EAAA,OAAO,KAAK,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,QAAQ,UAAA,GAAa,YAAA;AAC/D;AAFS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAIT,SAAS,aAAA,CACP,UAAA,EACA,cAAA,GAA0C,EAAC,EACnC;AAp/FV,EAAA,IAAA,EAAA;AAq/FE,EAAA,IAAI,yCAAY,SAAA,EAAW;AACzB,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,UAAA,CAAW,SAAS,CAAA;AACpD,IAAA,MAAM,MAAM,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,GAAA;AACtB,IAAA,IAAI,OAAO,wBAAA,CAAyB,QAAA,CAAS,WAAA,EAAa,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/E,MAAA,OAAO,QAAQ,GAAG,CAAA,2BAAA,CAAA;AAAA,IACpB;AAAA,EACF;AACA,EAAA,IAAA,CAAI,yCAAY,YAAA,KAAgB,UAAA,CAAW,YAAA,CAAa,MAAA,CAAO,SAAS,CAAA,EAAG;AACzE,IAAA,OAAO,iBAAA,CAAkB,WAAW,YAAY,CAAA;AAAA,EAClD;AACA,EAAA,OAAA,CAAO,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,cAAZ,IAAA,GAAA,EAAA,GAAyB,MAAA;AAClC;AAfS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAiBT,SAAS,oBACP,OAAA,EACA,UAAA,EACA,IAAA,EACA,KAAA,EACA,OACA,cAAA,EACM;AACN,EAAA,IAAI,yCAAY,SAAA,EAAW;AACzB,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,UAAA,CAAW,SAAS,CAAA;AACpD,IAAA,MAAM,MAAM,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,GAAA;AACtB,IAAA,IAAI,OAAO,wBAAA,CAAyB,QAAA,CAAS,WAAA,EAAa,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/E,MAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,GAAkB,CAAA,KAAA,EAAQ,GAAG,CAAA,EAAA,CAAA;AAC3C,MAAA,OAAA,CAAQ,MAAM,gBAAA,GAAmB,WAAA;AACjC,MAAA,OAAA,CAAQ,KAAA,CAAM,cAAA,GAAiB,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAA,GAAA,EAAM,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,KAAK,CAAA,EAAA,CAAA;AACzF,MAAA,OAAA,CAAQ,KAAA,CAAM,kBAAA,GAAqB,CAAA,EAAG,CAAC,IAAA,CAAK,MAAA,CAAO,IAAA,GAAO,KAAK,CAAA,GAAA,EAAM,CAAC,IAAA,CAAK,MAAA,CAAO,MAAM,KAAK,CAAA,EAAA,CAAA;AAC7F,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,GAAa,aAAA,CAAc,UAAA,EAAY,cAAc,CAAA;AACrE;AApBS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAsBT,SAAS,gBAAgB,IAAA,EAA4B;AAxhGrD,EAAA,IAAA,EAAA;AAyhGE,EAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,IAAA,CAAK,iBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,GAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,UAAA,KAAe,MAAA,GAAY,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,UAAA,GAAa,GAAM,CAAC,CAAA;AAC9F,EAAA,OAAO,IAAA,CAAK,IAAI,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAAI,KAAA;AAC3D;AAJS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAMT,SAAS,gBAAA,CAAiB,MAAoB,KAAA,EAAuB;AA9hGrE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA+hGE,EAAA,MAAM,aAAA,GAAA,CAAgB,gBAAK,iBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,QAAxB,IAAA,GAAA,EAAA,GAAA,CAA+B,EAAA,GAAA,IAAA,CAAK,sBAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,IAAA;AAC7E,EAAA,MAAM,KAAA,GACJ,aAAA,KAAkB,MAAA,GAAY,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,aAAA,GAAgB,GAAM,CAAC,CAAA;AAC7F,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACpF;AALS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAOT,SAAS,4BAA4B,IAAA,EAA6B;AAChE,EAAA,OACE,CAAC,IAAA,CAAK,cAAA,IACN,IAAA,CAAK,IAAA,KAAS,UACd,CAAC,IAAA,CAAK,SAAA,IACN,CAAC,CAAC,IAAA,CAAK,gBACP,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAA,GAAS,CAAA,KACjC,IAAA,CAAK,cAAA,KAAmB,WAAA,IACvB,IAAA,CAAK,cAAA,KAAmB,YAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,SAAA,CAAA;AAE9B;AAXS,MAAA,CAAA,2BAAA,EAAA,6BAAA,CAAA;AAaT,SAAS,uBAAA,CACP,IAAA,EACA,KAAA,EACA,QAAA,EACgB;AAtjGlB,EAAA,IAAA,EAAA;AAujGE,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC1C,EAAA,KAAA,CAAM,SAAA,GAAY,uBAAA;AAClB,EAAA,KAAA,CAAM,MAAM,QAAA,GAAW,QAAA;AACvB,EAAA,IAAI,KAAK,YAAA,IAAgB,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,SAAS,CAAA,EAAG;AAC5D,IAAA,KAAA,CAAM,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAK,YAAA,EAAc,oBAAA,CAAqB,IAAI,CAAC,CAAA;AAAA,EAC1F,CAAA,MAAA,IAAW,KAAK,SAAA,EAAW;AACzB,IAAA,KAAA,CAAM,MAAM,UAAA,GAAa,mBAAA,CAAoB,KAAK,SAAA,EAAW,oBAAA,CAAqB,IAAI,CAAC,CAAA;AAAA,EACzF;AACA,EAAA,IAAI,KAAK,SAAA,EAAW;AAClB,IAAA,KAAA,CAAM,KAAA,CAAM,WAAA,GAAc,yBAAA,CAA0B,IAAA,CAAK,QAAQ,CAAA;AACjE,IAAA,KAAA,CAAM,KAAA,CAAM,WAAA,GAAc,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,IAAA,IAAQ,KAAK,CAAC,CAAA,EAAA,CAAA;AAC1E,IAAA,KAAA,CAAM,MAAM,WAAA,GAAc,mBAAA,CAAoB,IAAA,CAAK,SAAA,EAAW,KAAK,WAAW,CAAA;AAAA,EAChF;AACA,EAAA,OAAO,KAAA;AACT;AAnBS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAqBT,SAAS,iBAAA,CAAkB,QAAA,EAA4B,iBAAA,GAAoB,CAAA,EAAW;AACpF,EAAA,MAAM,KAAA,GAAQ,uBAAuB,QAAQ,CAAA;AAC7C,EAAA,OAAO,CAAA,gBAAA,EAAmB,KAAK,CAAA,KAAA,EAAQ,gBAAA,CAAiB,UAAU,iBAAiB,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AACjG;AAHS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAKT,SAAS,uBAAuB,QAAA,EAAoC;AAClE,EAAA,OAAO,SAAS,KAAA,KAAU,MAAA,GAAY,MAAM,iBAAA,CAAkB,QAAA,CAAS,QAAQ,EAAE,CAAA;AACnF;AAFS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAIT,SAAS,kBAAkB,KAAA,EAAuB;AAChD,EAAA,OAAA,CAAS,KAAA,GAAQ,MAAO,GAAA,IAAO,GAAA;AACjC;AAFS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAIT,SAAS,gBAAA,CAAiB,QAAA,EAA4B,iBAAA,GAAoB,CAAA,EAAa;AACrF,EAAA,OAAO,uBAAA,CAAwB,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AACrD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,OAAA,GAAU,iBAAiB,CAAC,CAAA;AACzE,IAAA,MAAM,KAAA,GAAQ,UAAU,CAAA,GAAI,iBAAA,CAAkB,KAAK,KAAA,EAAO,OAAO,IAAI,IAAA,CAAK,KAAA;AAC1E,IAAA,OAAO,IAAA,CAAK,aAAa,MAAA,GAAY,KAAA,GAAQ,GAAG,KAAK,CAAA,CAAA,EAAI,KAAK,QAAQ,CAAA,CAAA,CAAA;AAAA,EACxE,CAAC,CAAA;AACH;AANS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAQT,SAAS,wBACP,QAAA,EACoE;AACpE,EAAA,OAAO,QAAA,CAAS,MAAA,CACb,GAAA,CAAI,CAAC,OAAe,KAAA,KAAkB;AAhmG3C,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAimGM,IAAA,MAAM,WAAA,GAAc,kBAAkB,KAAK,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,QAAA,CAAS,SAAA,KAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA,CAAA;AACtC,IAAA,MAAM,UAAU,IAAA,CAAK,GAAA;AAAA,MACnB,CAAA;AAAA,MACA,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAG,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAA,CAAS,SAAA,KAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA,CAAA,KAArB,IAAA,GAAA,EAAA,GAA+B,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,OAAA,KAA5C,IAAA,GAAA,EAAA,GAAuD,CAAC;AAAA,KACtE;AACA,IAAA,OAAO;AAAA,MACL,KAAA,EAAA,CAAO,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,KAAA,KAAb,IAAA,GAAA,EAAA,GAAsB,KAAA;AAAA,MAC7B,QAAA,EAAU,QAAA,KAAa,MAAA,GAAY,MAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,QAAQ,CAAC,CAAA;AAAA,MAClF,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA,CACA,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACd,IAAA,IAAI,CAAA,CAAE,aAAa,MAAA,IAAa,CAAA,CAAE,aAAa,MAAA,EAAW,OAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA;AAC7E,IAAA,IAAI,CAAA,CAAE,QAAA,KAAa,MAAA,EAAW,OAAO,CAAA;AACrC,IAAA,IAAI,CAAA,CAAE,QAAA,KAAa,MAAA,EAAW,OAAO,EAAA;AACrC,IAAA,OAAO,EAAE,QAAA,GAAW,CAAA,CAAE,QAAA,IAAY,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAA;AAAA,EAChD,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAQ,MAAO,EAAE,KAAA,EAAO,QAAA,EAAU,SAAQ,CAAE,CAAA;AACzE;AAzBS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AA2BT,SAAS,iBAAA,CAAkB,OAAe,OAAA,EAAyB;AAvnGnE,EAAA,IAAA,EAAA;AAwnGE,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,KAAA,CAAM,KAAA,CAAM,qBAAqB,MAAjC,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqC,CAAA,CAAA;AACjD,EAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AACjB,EAAA,MAAM,GAAA,GAAM,OAAO,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,OAAO,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAChD,EAAA,OAAO,CAAA,KAAA,EAAQ,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAC,CAAC,CAAA,CAAA,CAAA;AAC7E;AAPS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAST,SAAS,6BAA6B,MAAA,EAAgD;AACpF,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,eAAA;AACH,MAAA,OAAO,0CAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,0CAAA;AAAA,IACT,KAAK,eAAA;AACH,MAAA,OAAO,yDAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,iCAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,mCAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,2CAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,0DAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,oDAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,0DAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,6GAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,iDAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,oDAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,sGAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAnCS,MAAA,CAAA,4BAAA,EAAA,8BAAA,CAAA;AAqCT,SAAS,0BAA0B,IAAA,EAAkC;AACnE,EAAA,IAAI,IAAA,KAAS,KAAA,IAAS,IAAA,KAAS,QAAA,EAAU,OAAO,QAAA;AAChD,EAAA,IAAI,IAAA,IAAQ,IAAA,KAAS,OAAA,EAAS,OAAO,QAAA;AACrC,EAAA,OAAO,OAAA;AACT;AAJS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAMT,SAAS,kBAAA,CAAmB,MAA0B,WAAA,EAAyC;AAC7F,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,KAAS,OAAA,IAAW,WAAA,IAAe,GAAG,OAAO,MAAA;AAC1D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAA;AAC9C,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,GAAA;AACtC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,GAAA;AACvC,IAAA,IAAI,SAAA,GAAY,CAAA,IAAK,UAAA,IAAc,CAAA,EAAG;AACpC,MAAA,OAAO,CAAA,EAAG,IAAA,GAAO,SAAS,CAAA,CAAA,EAAI,OAAO,UAAU,CAAA,CAAA;AAAA,IACjD;AAAA,EACF;AACA,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,KAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAA,GAAO,CAAC,CAAA,CAAA;AAAA,IAC5B,KAAK,MAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,EAAG,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,CAAA,CAAA;AAAA,IAChC,KAAK,SAAA;AAAA,IACL,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,EAAG,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAA,GAAO,CAAC,CAAA,CAAA;AAAA,IACpD,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,EAAG,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,CAAA,CAAA;AAAA,IAChC,KAAK,WAAA;AACH,MAAA,OAAO,CAAA,EAAG,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAA,GAAO,CAAC,CAAA,CAAA;AAAA,IACpD,KAAK,cAAA;AACH,MAAA,OAAO,CAAA,EAAG,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,OAAO,CAAC,CAAA,CAAA;AAAA,IACxE;AACE,MAAA,OAAO,CAAA,EAAG,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,CAAA,CAAA;AAAA;AAEpC;AA9BS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAgCT,SAAS,qBAAqB,IAAA,EAA6B;AACzD,EAAA,OACE,IAAA,CAAK,cAAA,KAAmB,eAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,WACxB,IAAA,CAAK,cAAA,KAAmB,KAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,UAAA,IACxB,KAAK,cAAA,KAAmB,QAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,eAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,WAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,eAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,YAAA,IACxB,KAAK,cAAA,KAAmB,UAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,SAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,UAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,SAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,WAAA,IACxB,KAAK,cAAA,KAAmB,gBAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,SAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,YAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,WAAA,IACxB,IAAA,CAAK,cAAA,KAAmB,WAAA;AAE5B;AAtBS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAwBT,SAAS,oBAAA,CAAqB,MAAoB,KAAA,EAA8B;AAnuGhF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAouGE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,KAAK,CAAA;AACxE,EAAA,GAAA,CAAI,SAAA,CAAU,IAAI,0BAA0B,CAAA;AAC5C,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,MAAA,CAAO,QAAQ,KAAK,CAAA;AACnD,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,MAAA,CAAO,SAAS,KAAK,CAAA;AACrD,EAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,IAAA,EAAM,KAAA,EAAO,OAAO,MAAM,CAAA;AACtE,EAAA,IAAI,KAAK,MAAA,IAAU,cAAA,GAAiB,CAAA,EAAG,GAAA,CAAI,MAAM,QAAA,GAAW,SAAA;AAC5D,EAAA,GAAA,CAAI,YAAA,CAAa,WAAW,aAAa,CAAA;AACzC,EAAA,GAAA,CAAI,YAAA,CAAa,uBAAuB,MAAM,CAAA;AAC9C,EAAA,MAAM,UAAA,GACJ,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,aAAa,MAAA,CAAO,MAAA,GAAS,CAAA,GACnD,CAAA,yBAAA,EAA4B,KAAK,EAAA,CAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA,GACnE,MAAA;AACN,EAAA,MAAM,cAAA,GACJ,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,aAAa,MAAA,CAAO,MAAA,GAAS,CAAA,GACnD,CAAA,8BAAA,EAAiC,KAAK,EAAA,CAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA,GACxE,MAAA;AACN,EAAA,IAAI,cAAc,IAAA,CAAK,YAAA,0BAAsC,GAAA,EAAK,UAAA,EAAY,KAAK,YAAY,CAAA;AAC/F,EAAA,IAAI,kBAAkB,IAAA,CAAK,YAAA;AACzB,IAAA,uBAAA,CAAwB,GAAA,EAAK,cAAA,EAAgB,IAAA,CAAK,YAAY,CAAA;AAChE,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC9E,IAAA,QAAA,CAAS,SAAA,CAAU,IAAI,2BAA2B,CAAA;AAClD,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA,EAAK,sBAAA,CAAuB,IAAI,CAAC,CAAA;AACvD,IAAA,IAAI,IAAA,CAAK,cAAA,KAAmB,OAAA,IAAW,IAAA,CAAK,cAAA,KAAmB,UAAA;AAC7D,MAAA,QAAA,CAAS,YAAA,CAAa,aAAa,SAAS,CAAA;AAC9C,IAAA,QAAA,CAAS,YAAA,CAAa,MAAA,EAAQ,mBAAA,CAAoB,IAAI,CAAC,CAAA;AACvD,IAAA,QAAA,CAAS,YAAA;AAAA,MACP,WAAA;AAAA,MACA,CAAA,UAAA,EAAa,aAAa,cAAA,GAAiB,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,CAAa,cAAc,CAAC,CAAA,CAAA;AAAA,KAClF;AACA,IAAA,QAAA,CAAS,YAAA,CAAa,UAAU,MAAM,CAAA;AACtC,IAAA,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,EACrB;AACA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,EAAA,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,sBAAA,CAAuB,IAAI,CAAC,CAAA;AACnD,EAAA,IAAI,IAAA,CAAK,cAAA,KAAmB,OAAA,IAAW,IAAA,CAAK,cAAA,KAAmB,UAAA;AAC7D,IAAA,IAAA,CAAK,YAAA,CAAa,aAAa,SAAS,CAAA;AAC1C,EAAA,MAAM,cACJ,IAAA,CAAK,SAAA,IAAa,KAAK,YAAA,GACnB,IAAA,CAAK,IAAI,GAAA,EAAA,CAAA,CAAO,EAAA,GAAA,IAAA,CAAK,cAAL,IAAA,GAAA,EAAA,GAAkB,IAAA,IAAQ,QAAQ,GAAA,GAAO,IAAA,CAAK,IAAI,KAAA,EAAO,MAAM,CAAC,CAAA,GAChF,CAAA;AACN,EAAA,IAAA,CAAK,YAAA;AAAA,IACH,MAAA;AAAA,IACA,IAAA,CAAK,cAAA,KAAmB,KAAA,GACpB,MAAA,GACA,UAAA,GACE,QAAQ,UAAU,CAAA,CAAA,CAAA,GAAA,CACjB,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB;AAAA,GAC3B;AACA,EAAA,MAAM,WAAA,GAAc,qBAAqB,IAAI,CAAA;AAC7C,EAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,IAAA,CAAK,cAAA,KAAmB,KAAA;AACvD,IAAA,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAC,CAAA;AACvD,EAAA,IAAA,CAAK,YAAA,CAAa,UAAU,cAAA,GAAiB,CAAA,KAAA,EAAQ,cAAc,CAAA,CAAA,CAAA,GAAA,CAAO,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,MAAO,CAAA;AACnG,EAAA,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAC,CAAA;AACrD,EAAA,IAAI,KAAK,WAAA,KAAgB,MAAA;AACvB,IAAA,IAAA,CAAK,YAAA,CAAa,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,WAAW,CAAC,CAAC,CAAC,CAAA;AACxF,EAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,IAAA,CAAK,QAAA,EAAU,WAAW,CAAA;AAC/D,EAAA,IAAI,SAAA,EAAW,IAAA,CAAK,YAAA,CAAa,kBAAA,EAAoB,SAAS,CAAA;AAC9D,EAAA,IAAA,CAAK,YAAA,CAAa,mBAAmB,OAAO,CAAA;AAC5C,EAAA,IAAI,IAAA,CAAK,mBAAmB,KAAA,EAAO;AACjC,IAAA,IAAA,CAAK,YAAA,CAAa,kBAAkB,OAAO,CAAA;AAC3C,IAAA,oBAAA,CAAqB,GAAA,EAAK,MAAM,IAAI,CAAA;AAAA,EACtC;AACA,EAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AACf,EAAA,OAAO,GAAA;AACT;AAlES,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAoET,SAAS,oBAAA,CACP,IAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACQ;AA5yGV,EAAA,IAAA,EAAA,EAAA,EAAA;AA6yGE,EAAA,MAAM,eAAA,GAAA,CAAkB,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,oBAAb,IAAA,GAAA,EAAA,GAAgC,CAAA;AACxD,EAAA,IAAI,eAAA,IAAmB,CAAA,IAAK,IAAA,CAAK,cAAA,KAAmB,OAAO,OAAO,CAAA;AAClE,EAAA,MAAM,WAAY,eAAA,GAAkB,KAAA,GAAQ,MAAO,IAAA,CAAK,GAAA,CAAI,OAAO,MAAM,CAAA;AACzE,EAAA,OAAO,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAA;AAC5C;AAVS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAYT,SAAS,oBAAoB,IAAA,EAA4B;AAnzGzD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAozGE,EAAA,MAAM,IAAA,GAAA,CAAO,sBAAK,YAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,OAAO,CAAA,CAAA,KAA1B,IAAA,GAAA,EAAA,GAAgC,IAAA,CAAK,SAAA,KAArC,IAAA,GAAA,EAAA,GAAkD,SAAA;AAC/D,EAAA,MAAM,MAAA,GAAS,kBAAkB,IAAI,CAAA;AACrC,EAAA,MAAM,UAAQ,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAA,MAAa,sBAAsB,IAAA,GAAO,IAAA;AACrE,EAAA,OAAO,iBAAA,CAAkB,gBAAe,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,KAAA,KAAR,YAAiB,IAAA,EAAM,GAAG,GAAG,KAAK,CAAA;AAC5E;AALS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAOT,SAAS,cAAA,CAAe,OAAe,KAAA,EAAuB;AAC5D,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,OAAO,CAAA,CAAA,EAAI,SAAA,CAAU,CAAA,GAAI,KAAK,CAAC,CAAA,EAAG,SAAA,CAAU,CAAA,GAAI,KAAK,CAAC,CAAA,EAAG,SAAA,CAAU,CAAA,GAAI,KAAK,CAAC,CAAA,CAAA;AAC/E;AARS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAUT,SAAS,uBAAuB,IAAA,EAA4B;AAC1D,EAAA,QAAQ,KAAK,cAAA;AAAgB,IAC3B,KAAK,eAAA;AACH,MAAA,OAAO;AAAA,QACL,SAAA;AAAA,QACA,mBAAA;AAAA,QACA,mBAAA;AAAA,QACA,SAAA;AAAA,QACA,qBAAA;AAAA,QACA,qBAAA;AAAA,QACA,GAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,IACZ,KAAK,OAAA;AACH,MAAA,OAAO,CAAC,QAAA,EAAU,uBAAA,EAAyB,WAAW,wBAAwB,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,IAC1F,KAAK,UAAA;AACH,MAAA,OAAO,uBAAuB,IAAI,CAAA;AAAA,IACpC,KAAK,QAAA;AACH,MAAA,OAAO,6EAAA;AAAA,IACT,KAAK,eAAA;AACH,MAAA,OAAO,6BAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,6BAAA;AAAA,IACT,KAAK,eAAA;AACH,MAAA,OAAO,qCAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uBAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,wBAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,mCAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,4CAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,6CAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,kCAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6CAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,4CAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,oCAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,kCAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,kBAAkB,IAAI,CAAA;AAAA,IAC/B;AACE,MAAA,OAAO,EAAA;AAAA;AAEb;AAvDS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAyDT,SAAS,uBAAuB,IAAA,EAA4B;AA73G5D,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA83GE,EAAA,MAAM,iBAAgB,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,iBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,IAAA,KAAxB,YAAgC,CAAA,IAAK,GAAA;AAC3D,EAAA,MAAM,kBAAiB,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,iBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,IAAA,KAAxB,YAAgC,IAAA,IAAW,GAAA;AAClE,EAAA,MAAM,YAAA,GAAe,qBAAA,CAAsB,aAAA,GAAgB,YAAY,CAAA;AACvE,EAAA,MAAM,aAAa,YAAA,GAAe,YAAA;AAClC,EAAA,MAAM,WAAA,GAAc,EAAA;AACpB,EAAA,MAAM,iBAAiB,IAAA,CAAK,GAAA;AAAA,IAC1B,IAAA;AAAA,IACA,IAAA,CAAK,IAAI,IAAA,EAAA,CAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,sBAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,IAAA,KAAxB,IAAA,GAAA,EAAA,GAAgC,IAAA,IAAS,GAAM;AAAA,GACjE;AACA,EAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAI,cAAA,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,YAAA,EAAc,WAAW,CAAA;AAC/D,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,UAAA,EAAY,WAAW,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,UAAA,EAAY,WAAW,CAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,YAAA,EAAc,WAAW,CAAA;AAC/D,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,YAAY,CAAA,GAAI,MAAM,CAAA,GAAI,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,YAAA,IAAgB,CAAA,GAAI,CAAA,GAAI,CAAA;AAC1C,EAAA,MAAM,gBAAA,GAAmB,YAAY,CAAA,GAAI,CAAA;AACzC,EAAA,OAAO;AAAA,IACL,CAAA,EAAA,EAAK,UAAA,CAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,UAAA,CAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,IACvD,KAAK,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,GAAA,EAAM,QAAQ,IAAI,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,IAC5G,CAAA,EAAA,EAAK,QAAA,CAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,IACnD,CAAA,EAAA,EAAK,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAC,IAAI,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,QAAQ,IAAI,gBAAgB,CAAA,CAAA,EAAI,UAAA,CAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,UAAA,CAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,IAC7I;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AACZ;AAzBS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AA2BT,SAAS,sBAAsB,KAAA,EAAuB;AACpD,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,KAAU,GAAG,OAAO,EAAA;AACnD,EAAA,IAAI,aAAa,KAAA,GAAQ,GAAA;AACzB,EAAA,IAAI,UAAA,GAAa,KAAK,UAAA,GAAa,GAAA;AACnC,EAAA,IAAI,UAAA,GAAa,MAAM,UAAA,GAAa,IAAA;AACpC,EAAA,IAAI,IAAA,CAAK,IAAI,UAAU,CAAA,GAAI,GAAG,UAAA,GAAa,UAAA,GAAa,IAAI,EAAA,GAAK,CAAA;AACjE,EAAA,OAAO,UAAA;AACT;AAPS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAST,SAAS,kBAAkB,IAAA,EAA4B;AAj6GvD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAk6GE,EAAA,MAAM,QAAQ,YAAA,CAAA,CAAa,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,sBAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,IAAA,KAAxB,YAAgC,IAAQ,CAAA;AACnE,EAAA,MAAM,MAAM,YAAA,CAAA,CAAa,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,sBAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,IAAA,KAAxB,YAAgC,CAAC,CAAA;AAC1D,EAAA,MAAM,iBAAgB,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,iBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,IAAA,KAAxB,YAAgC,IAAA,IAAY,GAAA;AAClE,EAAA,MAAM,eAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,iBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,IAAA,KAAxB,YAAgC,CAAA,IAAK,GAAA;AACzD,EAAA,MAAM,aAAA,GAAA,CAAA,CAAmB,UAAA,GAAa,YAAA,IAAgB,GAAA,GAAO,GAAA,IAAO,GAAA;AACpE,EAAA,MAAM,QAAA,GAAW,aAAA,GAAgB,GAAA,GAAM,CAAA,GAAI,CAAA;AAC3C,EAAA,OAAO,CAAA,EAAA,EAAK,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,cAAc,QAAQ,CAAA,GAAA,EAAM,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACtH;AARS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAUT,SAAS,aAAa,QAAA,EAA4C;AAChE,EAAA,OAAO,kBAAA,CAAmB,QAAA,GAAW,GAAA,EAAO,EAAE,CAAA;AAChD;AAFS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAIT,SAAS,kBAAA,CAAmB,SAAiB,MAAA,EAA0C;AACrF,EAAA,MAAM,OAAA,GAAW,OAAA,GAAU,GAAA,GAAO,IAAA,CAAK,EAAA;AACvC,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,EAAA,GAAK,MAAA,GAAS,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,IACjC,CAAA,EAAG,EAAA,GAAK,MAAA,GAAS,IAAA,CAAK,IAAI,OAAO;AAAA,GACnC;AACF;AANS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAQT,SAAS,oBAAA,CAAqB,GAAA,EAAoB,IAAA,EAAsB,IAAA,EAA0B;AAv7GlG,EAAA,IAAA,EAAA,EAAA,EAAA;AAw7GE,EAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,UAAA,IAAc,IAAA,CAAK,gBAAgB,UAAA,EAAY;AACxE,EAAA,MAAM,WAAW,CAAA,mBAAA,EAAsB,IAAA,CAAK,GAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA;AAC9E,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,QAAQ,CAAA;AAC9E,EAAA,MAAA,CAAO,YAAA,CAAa,MAAM,QAAQ,CAAA;AAClC,EAAA,MAAA,CAAO,YAAA,CAAa,WAAW,WAAW,CAAA;AAC1C,EAAA,MAAA,CAAO,YAAA,CAAa,eAAe,GAAG,CAAA;AACtC,EAAA,MAAA,CAAO,YAAA,CAAa,gBAAgB,GAAG,CAAA;AACvC,EAAA,MAAA,CAAO,YAAA,CAAa,QAAQ,GAAG,CAAA;AAC/B,EAAA,MAAA,CAAO,YAAA,CAAa,QAAQ,GAAG,CAAA;AAC/B,EAAA,MAAA,CAAO,YAAA,CAAa,UAAU,oBAAoB,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC3E,EAAA,KAAA,CAAM,YAAA,CAAa,KAAK,uBAAuB,CAAA;AAC/C,EAAA,KAAA,CAAM,YAAA,CAAa,SAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,YAAkB,IAAA,CAAK,SAAA,KAAvB,YAAoC,SAAS,CAAA;AACxE,EAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AACnB,EAAA,GAAA,CAAI,OAAO,MAAM,CAAA;AACjB,EAAA,IAAI,IAAA,CAAK,gBAAgB,UAAA,EAAY,IAAA,CAAK,aAAa,cAAA,EAAgB,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,CAAG,CAAA;AAC1F,EAAA,IAAI,IAAA,CAAK,gBAAgB,UAAA,EAAY,IAAA,CAAK,aAAa,YAAA,EAAc,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,CAAG,CAAA;AAC1F;AAlBS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAoBT,SAAS,+BAAA,CAAgC,MAAoB,KAAA,EAA+B;AAC1F,EAAA,IAAI,CAAC,IAAA,CAAK,cAAA,EAAgB,OAAO,KAAA;AACjC,EAAA,IAAI,2BAAA,CAA4B,IAAA,CAAK,cAAc,CAAA,EAAG,OAAO,KAAA;AAC7D,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,OAAO,MAAM,CAAA;AAChF,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,MAAM,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAClE,EAAA,MAAM,iBAAA,GAAoB,WAAW,SAAA,GAAY,IAAA;AACjD,EAAA,MAAM,kBACJ,IAAA,CAAK,GAAA,CAAI,KAAK,MAAA,CAAO,IAAI,IAAI,KAAA,CAAM,IAAA,CAAK,QAAQ,IAAA,IAChD,IAAA,CAAK,IAAI,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,MAAA,GAAS,IAAA;AAClD,EAAA,OAAO,EAAE,iBAAA,IAAqB,eAAA,CAAA;AAChC;AAVS,MAAA,CAAA,+BAAA,EAAA,iCAAA,CAAA;AAYT,SAAS,4BAA4B,QAAA,EAAgE;AAv9GrG,EAAA,IAAA,EAAA,EAAA,EAAA;AAw9GE,EAAA,IAAI,QAAA,CAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AACxC,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,EAAA,GAAc,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,EAAA,GAAe,CAAA;AAC9B,EAAA,IAAI,KAAA,IAAS,CAAA,IAAK,MAAA,IAAU,CAAA,EAAG,OAAO,KAAA;AACtC,EAAA,MAAM,SAA0C,EAAC;AACjD,EAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,QAAA,IAAY,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC1D,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,OAAA,EAAS;AACnC,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,qBAAqB,MAAM,CAAA;AAC1C,EAAA,IAAI,OAAO,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,KAAA;AACvD,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AAAA,IACb,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,CAAA,EAAE;AAAA,IACjB,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAO;AAAA,IACtB,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,MAAA;AAAO,GACpB;AACA,EAAA,OAAO,OAAA,CAAQ,KAAA;AAAA,IAAM,CAAC,MAAA,KACpB,MAAA,CAAO,IAAA,CAAK,CAAC,UAAU,iBAAA,CAAkB,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,IAAK,iBAAA,CAAkB,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC;AAAA,GACrG;AACF;AA1BS,MAAA,CAAA,2BAAA,EAAA,6BAAA,CAAA;AA4BT,SAAS,qBAAqB,MAAA,EAA0E;AACtG,EAAA,MAAM,SAA0C,EAAC;AACjD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,QAAA,KAAa,kBAAkB,QAAA,CAAS,CAAA,EAAG,KAAA,CAAM,CAAC,KAAK,iBAAA,CAAkB,QAAA,CAAS,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AAChH,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AARS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAUT,SAAS,iBAAA,CAAkB,QAAgB,QAAA,EAA2B;AACpE,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,GAAS,QAAQ,CAAA,IAAK,CAAA;AACxC;AAFS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAIT,SAAS,2BAAA,CAA4B,MAAoB,GAAA,EAA4B;AAjgHrF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkgHE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,KAAK,CAAA;AACxE,EAAA,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,0BAAA,EAA4B,uBAAuB,CAAA;AACrE,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAG,sBAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA,CAAM,CAAA,CAAA,KAA3B,IAAA,GAAA,MAAA,GAAA,EAAA,CAA+B,KAAA,KAA/B,IAAA,GAAA,EAAA,GAAwC,IAAA,CAAK,OAAO,KAAK,CAAA;AACvF,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAG,sBAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA,CAAM,CAAA,CAAA,KAA3B,IAAA,GAAA,MAAA,GAAA,EAAA,CAA+B,MAAA,KAA/B,IAAA,GAAA,EAAA,GAAyC,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1F,EAAA,GAAA,CAAI,aAAa,SAAA,EAAW,CAAA,IAAA,EAAO,SAAS,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAA;AAC5D,EAAA,GAAA,CAAI,YAAA,CAAa,uBAAuB,MAAM,CAAA;AAC9C,EAAA,MAAM,SAAS,CAAA,sBAAA,EAAyB,IAAA,CAAK,GAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA;AAC/E,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,UAAU,CAAA;AAClF,EAAA,QAAA,CAAS,YAAA,CAAa,MAAM,MAAM,CAAA;AAClC,EAAA,KAAA,MAAW,SAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,mBAAqB,KAAA,KAArB,IAAA,GAAA,EAAA,GAA8B,EAAC,EAAG;AACnD,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC/E,IAAA,SAAA,CAAU,YAAA,CAAa,GAAA,EAAK,sBAAA,CAAuB,IAAA,CAAK,QAAQ,CAAC,CAAA;AACjE,IAAA,IAAI,+BAA+B,IAAA,CAAK,QAAQ,GAAG,SAAA,CAAU,YAAA,CAAa,aAAa,SAAS,CAAA;AAChG,IAAA,QAAA,CAAS,OAAO,SAAS,CAAA;AAAA,EAC3B;AACA,EAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AACpB,EAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AACf,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,OAAO,CAAA;AAC5E,EAAA,KAAA,CAAM,YAAA,CAAa,QAAQ,GAAG,CAAA;AAC9B,EAAA,KAAA,CAAM,cAAA,CAAe,8BAAA,EAAgC,MAAA,EAAQ,GAAG,CAAA;AAChE,EAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,IAAA,EAAM,SAAA,EAAW,UAAU,CAAA;AAChE,EAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,SAAA,CAAU,CAAC,CAAC,CAAA;AAC3C,EAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,SAAA,CAAU,CAAC,CAAC,CAAA;AAC3C,EAAA,KAAA,CAAM,YAAA,CAAa,OAAA,EAAS,MAAA,CAAO,SAAA,CAAU,KAAK,CAAC,CAAA;AACnD,EAAA,KAAA,CAAM,YAAA,CAAa,QAAA,EAAU,MAAA,CAAO,SAAA,CAAU,MAAM,CAAC,CAAA;AACrD,EAAA,KAAA,CAAM,YAAA,CAAa,uBAAuB,MAAM,CAAA;AAChD,EAAA,KAAA,CAAM,YAAA,CAAa,WAAA,EAAa,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAA,CAAG,CAAA;AACjD,EAAA,IAAI,KAAK,YAAA,KAAiB,MAAA;AACxB,IAAA,KAAA,CAAM,YAAA,CAAa,SAAA,EAAW,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,YAAY,CAAC,CAAC,CAAC,CAAA;AACnF,EAAA,GAAA,CAAI,OAAO,KAAK,CAAA;AAChB,EAAA,OAAO,GAAA;AACT;AAjCS,MAAA,CAAA,2BAAA,EAAA,6BAAA,CAAA;AAmCT,SAAS,kBAAA,CACP,IAAA,EACA,KAAA,EACA,MAAA,EACyD;AAxiH3D,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyiHE,EAAA,IAAI,KAAK,aAAA,EAAe;AACtB,IAAA,MAAMS,KAAAA,GAAAA,CAAO,EAAA,GAAA,IAAA,CAAK,aAAA,CAAc,IAAA,KAAnB,IAAA,GAAA,EAAA,GAA2B,CAAA;AACxC,IAAA,MAAMC,MAAAA,GAAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,aAAA,CAAc,KAAA,KAAnB,IAAA,GAAA,EAAA,GAA4B,CAAA;AAC1C,IAAA,MAAMC,IAAAA,GAAAA,CAAM,EAAA,GAAA,IAAA,CAAK,aAAA,CAAc,GAAA,KAAnB,IAAA,GAAA,EAAA,GAA0B,CAAA;AACtC,IAAA,MAAMC,OAAAA,GAAAA,CAAS,EAAA,GAAA,IAAA,CAAK,aAAA,CAAc,MAAA,KAAnB,IAAA,GAAA,EAAA,GAA6B,CAAA;AAC5C,IAAA,OAAO;AAAA,MACL,GAAGH,KAAAA,GAAO,KAAA;AAAA,MACV,GAAGE,IAAAA,GAAM,MAAA;AAAA,MACT,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAIF,KAAAA,GAAOC,MAAK,CAAA,GAAI,KAAA;AAAA,MAC1C,QAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAIC,IAAAA,GAAMC,OAAM,CAAA,GAAI;AAAA,KAC7C;AAAA,EACF;AACA,EAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAClB,EAAA,IAAI,CAAC,MAAM,OAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAC9C,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,EAAA,GAAa,CAAA;AAC1B,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,EAAA,GAAc,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,IAAA,CAAK,GAAA,KAAL,IAAA,GAAA,EAAA,GAAY,CAAA;AACxB,EAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,EAAA,GAAe,CAAA;AAC9B,EAAA,MAAM,eAAe,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACpD,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,MAAM,MAAM,CAAA;AACrD,EAAA,OAAO;AAAA,IACL,CAAA,EAAI,CAAC,IAAA,GAAO,YAAA,GAAgB,KAAA;AAAA,IAC5B,CAAA,EAAI,CAAC,GAAA,GAAM,aAAA,GAAiB,MAAA;AAAA,IAC5B,KAAA,EAAQ,IAAI,YAAA,GAAgB,KAAA;AAAA,IAC5B,MAAA,EAAS,IAAI,aAAA,GAAiB;AAAA,GAChC;AACF;AA/BS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAiCT,SAAS,oBAAA,CAAqB,MAAoB,KAAA,EAA8B;AArkHhF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAskHE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,KAAK,CAAA;AACxE,EAAA,GAAA,CAAI,SAAA,CAAU,IAAI,0BAA0B,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA,CAAM,OAA3B,IAAA,GAAA,MAAA,GAAA,EAAA,CAA+B,KAAA,KAA/B,IAAA,GAAA,EAAA,GAAwC,IAAA,CAAK,MAAA,CAAO,KAAA;AAClE,EAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA,CAAM,OAA3B,IAAA,GAAA,MAAA,GAAA,EAAA,CAA+B,MAAA,KAA/B,IAAA,GAAA,EAAA,GAAyC,IAAA,CAAK,MAAA,CAAO,MAAA;AACpE,EAAA,GAAA,CAAI,YAAA,CAAa,SAAA,EAAW,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,EAAG,KAAK,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAM,CAAC,CAAA,CAAE,CAAA;AAC9E,EAAA,GAAA,CAAI,YAAA,CAAa,uBAAuB,MAAM,CAAA;AAC9C,EAAA,MAAM,UAAA,GACJ,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,aAAa,MAAA,CAAO,MAAA,GAAS,CAAA,GACnD,CAAA,kBAAA,EAAqB,KAAK,EAAA,CAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA,GAC5D,MAAA;AACN,EAAA,MAAM,cAAA,GACJ,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,aAAa,MAAA,CAAO,MAAA,GAAS,CAAA,GACnD,CAAA,8BAAA,EAAiC,KAAK,EAAA,CAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA,GACxE,MAAA;AACN,EAAA,IAAI,cAAc,IAAA,CAAK,YAAA,0BAAsC,GAAA,EAAK,UAAA,EAAY,KAAK,YAAY,CAAA;AAC/F,EAAA,IAAI,kBAAkB,IAAA,CAAK,YAAA;AACzB,IAAA,uBAAA,CAAwB,GAAA,EAAK,cAAA,EAAgB,IAAA,CAAK,YAAY,CAAA;AAChE,EAAA,KAAA,MAAW,SAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAA,KAAL,mBAAqB,KAAA,KAArB,IAAA,GAAA,EAAA,GAA8B,EAAC,EAAG;AACnD,IAAA,MAAM,WAAA,GAAc,yBAAA,CAA0B,IAAA,EAAM,IAAI,CAAA;AACxD,IAAA,MAAM,OAAA,GAAU,sBAAsB,IAAI,CAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,OAAA,GACV,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,SAAS,CAAA,GAChE,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AACjE,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAC,CAAA;AAC3C,MAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAC,CAAA;AAC3C,MAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAC,CAAA;AAC3C,MAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC7C,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,sBAAA,CAAuB,IAAA,CAAK,QAAQ,CAAC,CAAA;AAC7D,MAAA,IAAI,+BAA+B,IAAA,CAAK,QAAQ,GAAG,KAAA,CAAM,YAAA,CAAa,aAAa,SAAS,CAAA;AAAA,IAC9F;AACA,IAAA,MAAM,OAAA,GAAU,EAAE,IAAA,CAAK,IAAA,KAAS,UAAU,IAAA,CAAK,QAAA,CAAA;AAC/C,IAAA,KAAA,CAAM,YAAA;AAAA,MACJ,MAAA;AAAA,MACA,OAAA,GAAW,aAAa,CAAA,KAAA,EAAQ,UAAU,OAAO,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,YAAkB,MAAA,GAAW;AAAA,KAChF;AACA,IAAA,MAAM,WAAA,GAAc,qBAAqB,IAAI,CAAA;AAC7C,IAAA,IAAI,WAAW,WAAA,KAAgB,MAAA;AAC7B,MAAA,KAAA,CAAM,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAC,CAAA;AACxD,IAAA,KAAA,CAAM,YAAA,CAAa,UAAU,cAAA,GAAiB,CAAA,KAAA,EAAQ,cAAc,CAAA,CAAA,CAAA,GAAA,CAAO,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,MAAO,CAAA;AACpG,IAAA,KAAA,CAAM,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAC,CAAA;AACtD,IAAA,IAAI,KAAK,WAAA,KAAgB,MAAA;AACvB,MAAA,KAAA,CAAM,YAAA,CAAa,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,WAAW,CAAC,CAAC,CAAC,CAAA;AACzF,IAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,IAAA,CAAK,QAAA,EAAU,WAAW,CAAA;AAC/D,IAAA,IAAI,SAAA,EAAW,KAAA,CAAM,YAAA,CAAa,kBAAA,EAAoB,SAAS,CAAA;AAC/D,IAAA,KAAA,CAAM,YAAA,CAAa,mBAAmB,OAAO,CAAA;AAC7C,IAAA,KAAA,CAAM,YAAA,CAAa,kBAAkB,OAAO,CAAA;AAC5C,IAAA,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,GAAA;AACT;AApDS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAsDT,SAAS,sBACP,IAAA,EACgE;AA7nHlE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8nHE,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,EAAA,IAAI,CAAC,SAAS,CAAC,MAAA,IAAU,SAAS,CAAA,IAAK,MAAA,IAAU,GAAG,OAAO,MAAA;AAC3D,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,IACE,SAAS,MAAA,KAAW,CAAA,IAAA,CAAA,CACpB,EAAA,GAAA,QAAA,CAAS,CAAC,MAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,IAAA,MAAS,QAAA,IAAA,CAAA,CACtB,EAAA,GAAA,QAAA,CAAS,CAAC,CAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,UAAS,eAAA,IAAA,CAAA,CACtB,EAAA,GAAA,QAAA,CAAS,CAAC,CAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,IAAA,MAAS,eAAA,IAAA,CAAA,CACtB,cAAS,CAAC,CAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,IAAA,MAAS,qBACtB,EAAA,GAAA,QAAA,CAAS,CAAC,CAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,UAAS,eAAA,IAAA,CAAA,CACtB,EAAA,GAAA,QAAA,CAAS,CAAC,CAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,UAAS,OAAA,EACtB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAK,KAAA,GAAQ,CAAA;AACnB,EAAA,MAAM,KAAK,MAAA,GAAS,CAAA;AACpB,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,SAAS,CAAC,CAAA;AAAA,IACV,SAAS,CAAC,CAAA;AAAA,IACV,SAAS,CAAC,CAAA;AAAA,IACV,SAAS,CAAC,CAAA;AAAA,IACV,SAAS,CAAC;AAAA,GACZ;AACA,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,EAAA,EAAG;AAAA,IAClB,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,MAAA,EAAO;AAAA,IACnB,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAA,EAAG;AAAA,IACd,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,CAAA,EAAE;AAAA,IACd,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,EAAA;AAAG,GACpB;AACA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA,GAAI,IAAA;AAC5C,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,KAAA,CAAM,CAAC,SAAS,KAAA,KAAU;AAC1D,IAAA,IAAI,QAAQ,IAAA,KAAS,QAAA,IAAY,OAAA,CAAQ,IAAA,KAAS,iBAAiB,OAAO,KAAA;AAC1E,IAAA,OACE,KAAK,GAAA,CAAI,OAAA,CAAQ,IAAI,QAAA,CAAS,KAAK,EAAG,CAAC,CAAA,IAAK,SAAA,IAC5C,IAAA,CAAK,IAAI,OAAA,CAAQ,CAAA,GAAI,SAAS,KAAK,CAAA,CAAG,CAAC,CAAA,IAAK,SAAA;AAAA,EAEhD,CAAC,CAAA;AACD,EAAA,OAAO,eAAA,GACH;AAAA,IACE,EAAA;AAAA,IACA,EAAA;AAAA,IACA,IAAI,KAAA,GAAQ,CAAA;AAAA,IACZ,IAAI,MAAA,GAAS;AAAA,GACf,GACA,MAAA;AACN;AAlDS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAoDT,SAAS,+BAA+B,QAAA,EAA+C;AACrF,EAAA,OAAO,QAAA,CAAS,OAAO,CAAC,OAAA,KAAY,QAAQ,IAAA,KAAS,QAAQ,EAAE,MAAA,GAAS,CAAA;AAC1E;AAFS,MAAA,CAAA,8BAAA,EAAA,gCAAA,CAAA;AAIT,SAAS,yBAAA,CAA0B,MAAoB,IAAA,EAAqC;AAC1F,EAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA;AAC5B,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,GAAQ,MAAA;AACtF,EAAA,MAAM,WAAA,GACJ,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,MAAA;AACzE,EAAA,MAAM,MAAA,GAAS,CAAC,UAAA,EAAY,WAAW,CAAA,CAAE,MAAA;AAAA,IACvC,CAACC,WAA2BA,MAAAA,KAAU,MAAA,IAAa,OAAO,QAAA,CAASA,MAAK,KAAKA,MAAAA,GAAQ;AAAA,GACvF;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,MAAM,CAAA,GAAI,CAAA;AACxD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,YAAY,KAAK,CAAA;AAC7C;AAVS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAYT,SAAS,qBAAA,CAAsB,MAAoB,KAAA,EAA8B;AA/rHjF,EAAA,IAAA,EAAA;AAgsHE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,KAAK,CAAA;AACxE,EAAA,GAAA,CAAI,SAAA,CAAU,IAAI,2BAA2B,CAAA;AAC7C,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,MAAA,CAAO,QAAQ,KAAK,CAAA;AACnD,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,MAAA,CAAO,SAAS,KAAK,CAAA;AACrD,EAAA,MAAM,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAA,CAAA,CAAI,UAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,QAAQ,KAAK,CAAA;AAChE,EAAA,MAAM,QAAQ,WAAA,GAAc,CAAA;AAC5B,EAAA,MAAM,aAAa,CAAA,uBAAA,EAA0B,IAAA,CAAK,GAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA;AACpF,EAAA,GAAA,CAAI,aAAa,SAAA,EAAW,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACpD,EAAA,GAAA,CAAI,YAAA,CAAa,uBAAuB,MAAM,CAAA;AAC9C,EAAA,uBAAA,CAAwB,GAAA,EAAK,UAAA,EAAY,IAAA,CAAK,YAAa,CAAA;AAC3D,EAAA,MAAM,KAAA,GACJ,IAAA,CAAK,cAAA,KAAmB,SAAA,GACpB,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,SAAS,CAAA,GAChE,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AACnE,EAAA,IAAI,KAAA,CAAM,YAAY,SAAA,EAAW;AAC/B,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAC,CAAA;AAC1C,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;AAC3C,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,GAAQ,CAAA,GAAI,KAAK,CAAC,CAAC,CAAA;AAC/D,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,GAAS,CAAA,GAAI,KAAK,CAAC,CAAC,CAAA;AAAA,EAClE,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AACrC,IAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AACrC,IAAA,KAAA,CAAM,YAAA,CAAa,SAAS,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,GAAQ,WAAW,CAAC,CAAC,CAAA;AACpE,IAAA,KAAA,CAAM,YAAA,CAAa,UAAU,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,MAAA,GAAS,WAAW,CAAC,CAAC,CAAA;AACtE,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,eAAA,CAAgB,IAAI,CAAA,GAAI,KAAA,GAAQ,KAAK,CAAC,CAAC,CAAA;AACnF,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,eAAA,CAAgB,IAAI,CAAA,GAAI,KAAA,GAAQ,KAAK,CAAC,CAAC,CAAA;AAAA,EACrF;AACA,EAAA,KAAA,CAAM,YAAA,CAAa,QAAQ,MAAM,CAAA;AACjC,EAAA,KAAA,CAAM,YAAA,CAAa,QAAA,EAAU,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAA,CAAG,CAAA;AAClD,EAAA,KAAA,CAAM,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAC,CAAA;AACtD,EAAA,IAAI,KAAK,WAAA,KAAgB,MAAA;AACvB,IAAA,KAAA,CAAM,YAAA,CAAa,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,WAAW,CAAC,CAAC,CAAC,CAAA;AACzF,EAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,IAAA,CAAK,QAAA,EAAU,WAAW,CAAA;AAC/D,EAAA,IAAI,SAAA,EAAW,KAAA,CAAM,YAAA,CAAa,kBAAA,EAAoB,SAAS,CAAA;AAC/D,EAAA,GAAA,CAAI,OAAO,KAAK,CAAA;AAChB,EAAA,OAAO,GAAA;AACT;AArCS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAuCT,SAAS,kBAAA,CAAmB,MAAoB,KAAA,EAA8B;AAtuH9E,EAAA,IAAA,EAAA,EAAA,EAAA;AAuuHE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,KAAK,CAAA;AACxE,EAAA,GAAA,CAAI,SAAA,CAAU,IAAI,wBAAwB,CAAA;AAC1C,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,MAAA,CAAO,QAAQ,KAAK,CAAA;AACnD,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,MAAA,CAAO,SAAS,KAAK,CAAA;AACrD,EAAA,MAAM,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAA,CAAA,CAAI,UAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,QAAQ,KAAK,CAAA;AAChE,EAAA,MAAM,kBAAA,GAAqB,KAAK,IAAA,KAAS,SAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,kBAAA,GAAqB,WAAA,GAAc,CAAA,GAAI,CAAA;AACrD,EAAA,IAAI,CAAC,kBAAA,EAAoB,GAAA,CAAI,KAAA,CAAM,QAAA,GAAW,SAAA;AAC9C,EAAA,GAAA,CAAI,aAAa,SAAA,EAAW,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACpD,EAAA,GAAA,CAAI,YAAA,CAAa,uBAAuB,MAAM,CAAA;AAC9C,EAAA,MAAM,KAAA,GACJ,IAAA,CAAK,cAAA,KAAmB,SAAA,GACpB,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,SAAS,CAAA,GAChE,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AACnE,EAAA,IAAI,KAAA,CAAM,YAAY,SAAA,EAAW;AAC/B,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAC,CAAA;AAC1C,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;AAC3C,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,GAAQ,CAAA,GAAI,KAAK,CAAC,CAAC,CAAA;AAC/D,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,GAAS,CAAA,GAAI,KAAK,CAAC,CAAC,CAAA;AAAA,EAClE,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AACrC,IAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AACrC,IAAA,KAAA,CAAM,YAAA,CAAa,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,GAAQ,KAAA,GAAQ,CAAC,CAAC,CAAC,CAAA;AAClE,IAAA,KAAA,CAAM,YAAA,CAAa,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,GAAS,KAAA,GAAQ,CAAC,CAAC,CAAC,CAAA;AACpE,IAAA,MAAM,MAAA,GACJ,IAAA,CAAK,cAAA,KAAmB,WAAA,IAAe,KAAK,cAAA,KAAmB,YAAA,GAC3D,IAAA,CAAK,GAAA,CAAI,GAAG,eAAA,CAAgB,IAAI,CAAA,GAAI,KAAA,GAAQ,KAAK,CAAA,GACjD,CAAA;AACN,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AACvC,IAAA,KAAA,CAAM,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EACzC;AACA,EAAA,KAAA,CAAM,YAAA,CAAa,QAAQ,MAAM,CAAA;AACjC,EAAA,KAAA,CAAM,YAAA,CAAa,QAAA,EAAA,CAAU,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,YAAkB,MAAM,CAAA;AACrD,EAAA,KAAA,CAAM,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAC,CAAA;AACtD,EAAA,IAAI,KAAK,WAAA,KAAgB,MAAA;AACvB,IAAA,KAAA,CAAM,YAAA,CAAa,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,WAAW,CAAC,CAAC,CAAC,CAAA;AACzF,EAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,IAAA,CAAK,QAAA,EAAU,WAAW,CAAA;AAC/D,EAAA,IAAI,SAAA,EAAW,KAAA,CAAM,YAAA,CAAa,kBAAA,EAAoB,SAAS,CAAA;AAC/D,EAAA,GAAA,CAAI,OAAO,KAAK,CAAA;AAChB,EAAA,OAAO,GAAA;AACT;AAzCS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AA2CT,SAAS,kBAAA,CAAmB,MAAoB,KAAA,EAA8B;AAjxH9E,EAAA,IAAA,EAAA,EAAA,EAAA;AAkxHE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,KAAK,CAAA;AACxE,EAAA,GAAA,CAAI,SAAA,CAAU,IAAI,wBAAwB,CAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,IAAI,CAAA,KAAM,UAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,UAAA,GAAa,KAAK,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAA,GAAQ,KAAK,CAAA;AACrE,EAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,UAAA,GAAa,IAAI,EAAA,EAAI,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,KAAK,CAAA;AACvE,EAAA,GAAA,CAAI,aAAa,SAAA,EAAW,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACpD,EAAA,GAAA,CAAI,YAAA,CAAa,uBAAuB,MAAM,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAA,CAAA,CAAI,UAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,QAAQ,KAAK,CAAA;AAChE,EAAA,MAAM,UAAA,GACJ,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,aAAa,MAAA,CAAO,MAAA,GAAS,CAAA,GACnD,CAAA,4BAAA,EAA+B,KAAK,EAAA,CAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA,GACtE,MAAA;AACN,EAAA,IAAI,cAAc,IAAA,CAAK,YAAA,0BAAsC,GAAA,EAAK,UAAA,EAAY,KAAK,YAAY,CAAA;AAC/F,EAAA,MAAM,KAAA,GAAQ,UAAA,GACV,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAA,CAAA,GAClB,mBAAA,CAAA,CAAoB,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AACrE,EAAA,MAAM,UAAA,GAAa,kBAAkB,WAAW,CAAA;AAChD,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,cAAc,GAAG,CAAA;AACjD,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,cAAc,GAAG,CAAA;AAChD,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,CAAK,WAAW,CAAA;AACnD,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,CAAK,WAAW,CAAA;AACnD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,IAAI,KAAA,GAAQ,CAAA;AAClB,IAAA,MAAM,KAAK,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,WAAW,CAAA,GAAI,CAAA;AACzD,IAAA,MAAM,KAAK,WAAA,GAAc,IAAA,CAAK,IAAI,CAAA,EAAG,MAAA,GAAS,WAAW,CAAA,GAAI,MAAA;AAC7D,IAAA,aAAA,CAAc,GAAA,EAAK,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,OAAO,WAAA,EAAa,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,OAAO,CAAA;AACnF,IAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAQ,eAAA,CAAgB,KAAK,CAAA,EAAG,CAAA,EAAG,YAAY,KAAK,CAAA;AAC7E,IAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAQ,eAAA,CAAgB,KAAK,CAAA,EAAG,MAAA,EAAQ,YAAY,KAAK,CAAA;AAClF,IAAA,IAAI,WAAA;AACF,MAAA,cAAA,CAAe,GAAA,EAAK,GAAG,CAAA,EAAG,IAAA,EAAM,aAAa,UAAA,EAAY,KAAA,EAAO,KAAK,WAAW,CAAA;AAClF,IAAA,IAAI,WAAA;AACF,MAAA,cAAA,CAAe,GAAA,EAAK,GAAG,MAAA,EAAQ,MAAA,EAAQ,aAAa,UAAA,EAAY,KAAA,EAAO,KAAK,WAAW,CAAA;AAAA,EAC3F,CAAA,MAAO;AACL,IAAA,MAAM,IAAI,MAAA,GAAS,CAAA;AACnB,IAAA,MAAM,KAAK,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,WAAW,CAAA,GAAI,CAAA;AACxD,IAAA,MAAM,KAAK,WAAA,GAAc,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,GAAQ,WAAW,CAAA,GAAI,KAAA;AAC5D,IAAA,aAAA,CAAc,GAAA,EAAK,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,OAAO,WAAA,EAAa,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,OAAO,CAAA;AACnF,IAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAQ,eAAA,CAAgB,KAAK,CAAA,EAAG,CAAA,EAAG,YAAY,KAAK,CAAA;AAC7E,IAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAQ,eAAA,CAAgB,KAAK,KAAA,EAAO,CAAA,EAAG,YAAY,KAAK,CAAA;AACjF,IAAA,IAAI,WAAA;AACF,MAAA,cAAA,CAAe,GAAA,EAAK,GAAG,CAAA,EAAG,MAAA,EAAQ,aAAa,UAAA,EAAY,KAAA,EAAO,KAAK,WAAW,CAAA;AACpF,IAAA,IAAI,WAAA;AACF,MAAA,cAAA,CAAe,GAAA,EAAK,OAAO,CAAA,EAAG,OAAA,EAAS,aAAa,UAAA,EAAY,KAAA,EAAO,KAAK,WAAW,CAAA;AAAA,EAC3F;AACA,EAAA,OAAO,GAAA;AACT;AA9CS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAgDT,SAAS,kBAAkB,WAAA,EAA6B;AACtD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAA,GAAc,CAAC,CAAA;AACpC;AAFS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAIT,SAAS,eAAe,KAAA,EAAoC;AAC1D,EAAA,OAAO,KAAA,KAAU,WAAW,KAAA,KAAU,UAAA;AACxC;AAFS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAIT,SAAS,uBAAuB,QAAA,EAA8C;AAC5E,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,OAAA;AACJ,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC7B,MAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAA,CAAE,CAAA;AACxC,MAAA,OAAA,GAAU,EAAE,CAAA,EAAG,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,IACzC,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,QAAA,EAAU;AACpC,MAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAA,CAAE,CAAA;AACxC,MAAA,OAAA,GAAU,EAAE,CAAA,EAAG,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,IACzC,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,eAAA,EAAiB;AAC3C,MAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAA,CAAE,CAAA;AAChG,MAAA,OAAA,GAAU,EAAE,CAAA,EAAG,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,IACzC,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,OAAA,EAAS;AACnC,MAAA,MAAM,GAAA,GAAM,8BAAA,CAA+B,OAAA,EAAS,OAAO,CAAA;AAC3D,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,KAAA,CAAM,IAAA,CAAK,IAAI,IAAI,CAAA;AACnB,QAAA,OAAA,GAAU,GAAA,CAAI,GAAA;AAAA,MAChB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;AAxBS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AA0BT,SAAS,8BAAA,CACP,SACA,OAAA,EAC6D;AAC7D,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,EAAA,IAAM,CAAA,IAAK,OAAA,CAAQ,EAAA,IAAM,CAAA,IAAK,OAAA,CAAQ,KAAA,KAAU,CAAA,EAAG,OAAO,MAAA;AAClF,EAAA,MAAM,YAAA,GAAe,QAAQ,KAAA,GAAQ,GAAA;AACrC,EAAA,MAAM,YAAA,GAAe,QAAQ,KAAA,GAAQ,GAAA;AACrC,EAAA,MAAM,aAAa,YAAA,GAAe,YAAA;AAClC,EAAA,MAAM,cAAc,uBAAA,CAAwB,OAAA,CAAQ,EAAA,EAAI,OAAA,CAAQ,IAAI,YAAY,CAAA;AAChF,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAI,WAAA,CAAY,CAAA;AAAA,IAC3B,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAI,WAAA,CAAY;AAAA,GAC7B;AACA,EAAA,MAAM,YAAY,uBAAA,CAAwB,OAAA,CAAQ,EAAA,EAAI,OAAA,CAAQ,IAAI,UAAU,CAAA;AAC5E,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,SAAA,CAAU,CAAA;AAAA,IACxB,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,SAAA,CAAU;AAAA,GAC1B;AACA,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,YAAY,CAAA,GAAI,MAAM,CAAA,GAAI,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,YAAA,IAAgB,CAAA,GAAI,CAAA,GAAI,CAAA;AAC1C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA,EAAA,EAAK,YAAA,CAAa,OAAA,CAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,YAAA,CAAa,OAAA,CAAQ,EAAE,CAAC,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA,CAAA,EAAI,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA,CAAA;AAAA,IACxI;AAAA,GACF;AACF;AAxBS,MAAA,CAAA,8BAAA,EAAA,gCAAA,CAAA;AA0BT,SAAS,uBAAA,CAAwB,OAAA,EAAiB,OAAA,EAAiB,OAAA,EAGjE;AACA,EAAA,MAAM,OAAA,GAAW,OAAA,GAAU,GAAA,GAAO,IAAA,CAAK,EAAA;AACvC,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAAA,IAC7B,CAAA,EAAG,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,OAAO;AAAA,GAC/B;AACF;AATS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAWT,SAAS,aAAa,KAAA,EAAuB;AAC3C,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE,CAAA;AACxF;AAFS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAIT,SAAS,uBAAA,CACP,GAAA,EACA,EAAA,EACA,aAAA,EACM;AACN,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,EAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,GAAI,gBAAgB,aAAA,CAAc,MAAA;AAC5E,EAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,GAAI,SAAY,aAAA,CAAc,SAAA;AAC3E,EAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,GAAI,SAAY,aAAA,CAAc,SAAA;AAC3E,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,gBAAgB,CAAA;AACxF,EAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,GACzC,EAAE,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAK,EAAA,EAAI,GAAA,KAC7B,0BAAA,CAA2B,sBAAA,CAAuB,aAAa,CAAC,CAAA;AACpE,EAAA,QAAA,CAAS,YAAA,CAAa,MAAM,EAAE,CAAA;AAC9B,EAAA,QAAA,CAAS,YAAA,CAAa,IAAA,EAAM,CAAA,EAAG,SAAA,CAAU,EAAE,CAAA,CAAA,CAAG,CAAA;AAC9C,EAAA,QAAA,CAAS,YAAA,CAAa,IAAA,EAAM,CAAA,EAAG,SAAA,CAAU,EAAE,CAAA,CAAA,CAAG,CAAA;AAC9C,EAAA,QAAA,CAAS,YAAA,CAAa,IAAA,EAAM,CAAA,EAAG,SAAA,CAAU,EAAE,CAAA,CAAA,CAAG,CAAA;AAC9C,EAAA,QAAA,CAAS,YAAA,CAAa,IAAA,EAAM,CAAA,EAAG,SAAA,CAAU,EAAE,CAAA,CAAA,CAAG,CAAA;AAC9C,EAAA,MAAA,CACG,GAAA,CAAI,CAAC,KAAA,EAAe,KAAA,KAAkB;AA/5H3C,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAg6HM,IAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAY,KAAA,CAAA,KAAZ,IAAA,GAAA,EAAA,GAAuB,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAK,GAAA;AAChF,IAAA,MAAM,WAAA,GAAc,kBAAkB,KAAK,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAA,CAAG,EAAA,GAAA,CAAA,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAY,KAAA,CAAA,KAAZ,IAAA,GAAA,EAAA,GAAsB,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,OAAA,KAAnC,IAAA,GAAA,EAAA,GAA8C,CAAC,CAAC,CAAA;AACxF,IAAA,OAAO;AAAA,MACL,KAAA,EAAA,CAAO,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,KAAA,KAAb,IAAA,GAAA,EAAA,GAAsB,KAAA;AAAA,MAC7B,MAAA,EAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,MAAM,CAAC,CAAA;AAAA,MACzC;AAAA,KACF;AAAA,EACF,CAAC,CAAA,CACA,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAM,CAAA,CAClC,OAAA,CAAQ,CAAC,IAAA,KAAS;AACjB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,IAAA,IAAA,CAAK,YAAA,CAAa,QAAA,EAAU,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,CAAA,CAAG,CAAA;AAC7C,IAAA,IAAA,CAAK,YAAA,CAAa,YAAA,EAAc,IAAA,CAAK,KAAK,CAAA;AAC1C,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG,IAAA,CAAK,aAAa,cAAA,EAAgB,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAC5E,IAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,EACtB,CAAC,CAAA;AACH,EAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AACpB,EAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AACjB;AAvCS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAyCT,SAAS,2BAA2B,KAAA,EAKlC;AACA,EAAA,MAAM,OAAA,GAAW,KAAA,GAAQ,IAAA,CAAK,EAAA,GAAM,GAAA;AACpC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAC3B,EAAA,MAAM,EAAA,GAAK,CAAC,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG,IAAM,CAAA;AAC/D,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,uBAAA,CAAwB,EAAA,GAAK,EAAA,GAAK,MAAM,CAAA;AAAA,IAC5C,EAAA,EAAI,uBAAA,CAAwB,EAAA,GAAK,EAAA,GAAK,MAAM,CAAA;AAAA,IAC5C,EAAA,EAAI,uBAAA,CAAwB,EAAA,GAAK,EAAA,GAAK,MAAM,CAAA;AAAA,IAC5C,EAAA,EAAI,uBAAA,CAAwB,EAAA,GAAK,EAAA,GAAK,MAAM;AAAA,GAC9C;AACF;AAhBS,MAAA,CAAA,0BAAA,EAAA,4BAAA,CAAA;AAkBT,SAAS,wBAAwB,KAAA,EAAuB;AACtD,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA,GAAI,GAAI,CAAA,GAAI,GAAA;AAChE;AAFS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAIT,SAAS,kBAAkB,KAAA,EAA+D;AACxF,EAAA,MAAM,KAAA,GACJ,kFAAA,CAAmF,IAAA,CAAK,KAAK,CAAA;AAC/F,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACrD,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACrD,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACrD,EAAA,MAAM,UAAU,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,GAAY,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,MAAA,CAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACtF,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,CAAA,CAAA,EAAI,SAAA,CAAU,CAAC,CAAC,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA;AAAA,IACrD;AAAA,GACF;AACF;AAZS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAcT,SAAS,UAAU,KAAA,EAAuB;AACxC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA,CAAE,WAAA,EAAY;AACrE;AAFS,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AAIT,SAAS,kBAAA,CACP,IAAA,EACA,KAAA,EACA,WAAA,GAAc,IAAA,EACI;AAj+HpB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAk+HE,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,SAAA,GAAY,gBAAA;AAClB,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,MAAM,QAAA,EAAU,KAAA,CAAM,OAAO,MAAM,CAAA;AAC7D,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,aAAa,GAAG,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,MAAM,GAAG,CAAC,CAAA;AAC3F,EAAA,MAAM,gBAAA,GAAA,CAAmB,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,YAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,MAAA,CAAO,CAAC,GAAA,EAAK,KAAA,KAAU,GAAA,GAAM,KAAA,EAAO,CAAA,CAAA,KAAxD,IAAA,GAAA,EAAA,GAA8D,CAAA;AACvF,EAAA,IAAI,mBAAmB,CAAA,EAAG;AACxB,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,IAAA,KAAA,IAAS,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,WAAA,EAAa,WAAA,EAAA,EAAe;AAClE,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACxC,MAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,CAAM,YAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,WAAA,CAAA;AACnC,MAAA,IAAI,OAAO,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA,EAAI,KAAA,GAAQ,mBAAoB,GAAG,CAAA,CAAA,CAAA;AAChE,MAAA,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,IACrB;AACA,IAAA,KAAA,CAAM,OAAO,QAAQ,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,cAAA,GAAA,CAAiB,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,MAAA,CAAO,CAAC,GAAA,EAAK,MAAA,KAAW,GAAA,GAAM,MAAA,EAAQ,CAAA,CAAA,KAAxD,IAAA,GAAA,EAAA,GAA8D,CAAA;AACrF,EAAA,KAAA,IAAS,QAAA,GAAW,CAAA,EAAG,QAAA,GAAW,QAAA,EAAU,QAAA,EAAA,EAAY;AACtD,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA;AACvC,IAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,QAAA,CAAA;AAClC,IAAA,GAAA,CAAI,KAAA,CAAM,MAAA,GACR,cAAA,GAAiB,CAAA,IAAK,MAAA,GAAS,CAAA,EAAI,MAAA,GAAS,cAAA,GAAkB,GAAG,CAAA,CAAA,CAAA,GAAM,CAAA,EAAG,GAAA,GAAM,QAAQ,CAAA,CAAA,CAAA;AAC1F,IAAA,KAAA,IAAS,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,WAAA,EAAa,WAAA,EAAA,EAAe;AAClE,MAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,KAAA,EAAO,QAAA,EAAU,WAAW,CAAA;AAC3D,MAAA,IAAA,CAAI,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAA,MAAU,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAA,CAAA,EAAQ;AACpC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA;AACxC,MAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,cAAnB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA+B,WAAA,CAAA;AAC7C,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,GAAM,MAAA,CAAO,QAAQ,CAAA;AAClC,QAAA,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,MAAA,CAAO,WAAW,CAAA;AAAA,MAC1C;AACA,MAAA,MAAM,QAAO,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,KAArB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyB,iBAAzB,IAAA,GAAA,EAAA,GAAyC,EAAA;AACtD,MAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,IAAA;AACxB,MAAA,mBAAA,CAAoB,MAAM,IAAI,CAAA;AAC9B,MAAA,IAAA,CAAI,+BAAO,UAAA,KAAc,KAAA,CAAM,aAAa,CAAA,EAAG,IAAA,CAAK,UAAU,KAAA,CAAM,UAAA;AACpE,MAAA,IAAA,CAAI,+BAAO,OAAA,KAAW,KAAA,CAAM,UAAU,CAAA,EAAG,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;AAC9D,MAAA,IAAA,CAAI,+BAAO,YAAA,KAAgB,KAAA,CAAM,YAAA,CAAa,MAAA,CAAO,SAAS,CAAA,EAAG;AAC/D,QAAA,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,CAAM,YAAY,CAAA;AAAA,MAC9D,YAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAa,CAAC,sBAAA,CAAuB,KAAA,CAAM,SAAS,CAAA,EAAG;AACvE,QAAA,IAAA,CAAK,KAAA,CAAM,aAAa,KAAA,CAAM,SAAA;AAAA,MAChC;AACA,MAAA,IAAI,+BAAO,IAAA,EAAM;AACf,QAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,QAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,KAAA;AAC/B,QAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,EAAA,GAAiB,KAAA;AAC7B,QAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,EAAA,GAAmB,KAAA;AACjC,QAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,IAAA,CAAK,WAAA,KAAL,IAAA,GAAA,EAAA,GAAoB,KAAA;AACnC,QAAA,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,CAAA,EAAG,GAAA,GAAM,KAAK,CAAA,GAAA,EAAM,KAAA,GAAQ,KAAK,CAAA,GAAA,EAAM,MAAA,GAAS,KAAK,CAAA,GAAA,EAAM,OAAO,KAAK,CAAA,EAAA,CAAA;AAC5F,QAAA,IAAI,IAAA,CAAK,MAAA,KAAW,QAAA,EAAU,IAAA,CAAK,MAAM,aAAA,GAAgB,QAAA;AACzD,QAAA,IAAI,IAAA,CAAK,MAAA,KAAW,QAAA,EAAU,IAAA,CAAK,MAAM,aAAA,GAAgB,QAAA;AACzD,QAAA,IAAI,IAAA,CAAK,MAAA,KAAW,KAAA,EAAO,IAAA,CAAK,MAAM,aAAA,GAAgB,KAAA;AAAA,MACxD;AACA,MAAA,IAAI,+BAAO,SAAA,EAAW,uBAAA,CAAwB,IAAA,EAAM,KAAA,CAAM,WAAW,KAAK,CAAA;AAC1E,MAAA,IAAA,CAAI,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,SAAA,EAAW;AAC/B,QAAA,kBAAA,CAAmB,IAAA,EAAM,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA;AAAA,MACpD;AACA,MAAA,qBAAA,CAAsB,IAAA,EAAM,OAAO,KAAK,CAAA;AACxC,MAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AAAA,IACjB;AACA,IAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,KAAA;AACT;AApES,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAsET,SAAS,qBAAA,CACP,IAAA,EACA,KAAA,EACA,KAAA,EACM;AACN,EAAA,MAAM,UAAU,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA;AACvB,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,wBAAA,CAAyB,IAAA,EAAM,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;AAC1D,EAAA,wBAAA,CAAyB,IAAA,EAAM,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AAC5D,EAAA,wBAAA,CAAyB,IAAA,EAAM,KAAA,EAAO,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AACxD,EAAA,wBAAA,CAAyB,IAAA,EAAM,QAAA,EAAU,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA;AAChE;AAXS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAaT,SAAS,wBAAA,CACP,IAAA,EACA,IAAA,EACA,MAAA,EACA,KAAA,EACM;AArjIR,EAAA,IAAA,EAAA,EAAA,EAAA;AAsjIE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACb,EAAA,MAAM,SAAA,GAAY,SAAS,IAAI,CAAA,KAAA,CAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,SAAS,IAAI,CAAA,KAAA,CAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,SAAS,IAAI,CAAA,KAAA,CAAA;AAC/B,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAAI,MAAA;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAAI,GAAA;AACxB,IAAA;AAAA,EACF;AACA,EAAA,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAAI,yBAAA,CAA0B,OAAO,IAAI,CAAA;AAC7D,EAAA,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAA,CAAI,EAAA,GAAA,MAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,IAAA,IAAQ,KAAK,CAAC,CAAA,EAAA,CAAA;AACtE,EAAA,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAAI,mBAAA,CAAA,CAAoB,YAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,SAAA,EAAW,MAAA,CAAO,OAAO,CAAA;AACvF;AAlBS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAoBT,SAAS,mBAAA,CAAoB,MAAmB,IAAA,EAAoB;AAClE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,EAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AACrB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA;AAAA,EACF;AACA,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC7B,IAAA,IAAI,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,QAAA,CAAS,aAAA,CAAc,IAAI,CAAC,CAAA;AACvD,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,IAAA,CAAK,SAAA,GAAY,oCAAA;AACjB,MAAA,IAAA,CAAK,MAAM,QAAA,GAAW,OAAA;AACtB,MAAA,IAAA,CAAK,MAAM,UAAA,GAAa,KAAA;AAAA,IAC1B;AACA,IAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,EAClB,CAAC,CAAA;AACH;AAjBS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAmBT,SAAS,gBAAA,CACP,IAAA,EACA,IAAA,EACA,GAAA,EACA,MAAA,EACQ;AA5lIV,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6lIE,EAAA,OAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,KAAb,IAAA,GAAA,EAAA,GAAA,CAAyB,gBAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,MAAA,CAAO,GAAA,CAAA,KAAnB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,MAAA,CAAA,KAAnD,IAAA,GAAA,EAAA,GAA8D,IAAA,CAAK,gBAAnE,IAAA,GAAA,EAAA,GAAkF,EAAA;AAC3F;AAPS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAST,SAAS,uBAAuB,KAAA,EAAwB;AACtD,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,KAAK,GAAA,GAAM,GAAA;AACxD;AARS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAUT,SAAS,YAAA,CAAa,QAA6C,KAAA,EAAuB;AA1mI1F,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2mIE,EAAA,MAAM,QAAA,GAAA,CAAA,CAAY,EAAA,GAAA,MAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,CAAA,IAAK,KAAA;AAC1C,EAAA,MAAM,cAAc,EAAA,GAAA,MAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,CAAA,IAAK,KAAK,EAAA,GAAM,GAAA;AACxD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,GAAI,QAAA;AACtC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,GAAI,QAAA;AACtC,EAAA,MAAM,IAAA,GAAA,CAAA,CAAQ,EAAA,GAAA,MAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,CAAA,IAAK,KAAA;AAClC,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,GAAA,EAAM,OAAO,MAAM,IAAI,CAAA,GAAA,EAAM,WAAA,CAAY,MAAM,CAAC,CAAA,CAAA;AACnE;AAPS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAST,SAAS,YAAY,MAAA,EAAqD;AAnnI1E,EAAA,IAAA,EAAA,EAAA,EAAA;AAonIE,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,MAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,SAAA;AAC9B,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,MAAA,CAAO,OAAA,KAAP,IAAA,GAAA,EAAA,GAAkB,IAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,OAAO,CAAA,KAAA,EAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAC,CAAA,CAAA,CAAA;AAClE;AAVS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAYT,SAAS,gBAAA,CACP,KAAA,EACA,GAAA,EACA,MAAA,EAC2B;AAnoI7B,EAAA,IAAA,EAAA;AAooIE,EAAA,OAAA,CAAO,EAAA,GAAA,KAAA,CAAM,WAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,GAAA,KAAQ,GAAA,IAAO,KAAA,CAAM,MAAA,KAAW,MAAA,CAAA;AAClF;AANS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAQT,SAAS,mBAAmB,IAAA,EAAmC;AAvoI/D,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwoIE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,KAAK,CAAA;AACxE,EAAA,GAAA,CAAI,YAAA,CAAa,WAAW,YAAY,CAAA;AACxC,EAAA,GAAA,CAAI,YAAA,CAAa,SAAS,MAAM,CAAA;AAChC,EAAA,GAAA,CAAI,YAAA,CAAa,UAAU,MAAM,CAAA;AACjC,EAAA,GAAA,CAAI,YAAA,CAAa,uBAAuB,MAAM,CAAA;AAC9C,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA;AACzB,EAAA,IAAI,EAAC,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,MAAA,CAAO,MAAA,CAAA,EAAQ;AACxB,IAAA,aAAA,CAAc,GAAA,EAAA,CAAK,UAAK,IAAA,KAAL,IAAA,GAAA,EAAA,GAAa,SAAS,CAAA,EAAG,CAAA,EAAG,GAAG,SAAS,CAAA;AAC3D,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAZ,IAAA,GAAA,EAAA,GAAoB,EAAA;AACtC,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,QAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,IAAA,CAAK,MAAA,EAAQ,WAAW,QAAQ,CAAA;AACrE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAG,aAAa,CAAC,CAAA;AACzC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAG,aAAa,CAAC,CAAA;AACzC,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,KAAA;AACpC,EAAA,MAAM,YAAA,GAAA,CAAe,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,QAAA;AACvC,EAAA,MAAM,OAAM,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,GAAA,KAAX,IAAA,GAAA,EAAA,GAAmB,MAAA,IAAU,IAAI,CAAA,GAAI,MAAA;AACjD,EAAA,MAAM,GAAA,GAAA,CAAM,4CAAW,GAAA,KAAX,IAAA,GAAA,EAAA,GAAmB,UAAU,CAAA,GAAI,YAAA,CAAa,MAAM,CAAA,GAAI,MAAA;AACpE,EAAA,MAAM,IAAA,GAAO,cAAc,IAAI,CAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,GAAA,EAAK,GAAA,EAAK,uCAAW,SAAS,CAAA;AAC/D,EAAA,IAAI,UAAU,QAAA,CAAS,UAAU,KAAK,SAAA,CAAU,QAAA,CAAS,KAAK,CAAA,EAAG;AAC/D,IAAA,mBAAA,CAAoB,GAAA,EAAK,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAC1C,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA,EAAG;AAC/B,IAAA,gBAAA,CAAiB,KAAK,IAAA,CAAK,MAAA,EAAQ,OAAM,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,GAAA,KAAX,YAAkB,MAAM,CAAA;AACjE,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAA,CAAI,uCAAW,cAAA,MAAmB,KAAA;AAChC,IAAA,eAAA,CAAgB,GAAA,EAAK,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,WAAW,YAAY,CAAA;AACrE,EAAA,IAAA,CAAI,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAA,MAAY,IAAA,IAAA,CAAQ,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,iBAAA,MAAsB,MAAA;AAClE,IAAA,qBAAA,CAAsB,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,GAAA,EAAK,SAAS,CAAA;AACtD,EAAA,yBAAA,CAA0B,GAAA,EAAK,MAAM,IAAI,CAAA;AAEzC,EAAA,MAAM,SAAA,GAAY,KAAK,MAAA,CAAO,MAAA;AAAA,IAAO,CAAC,MAAA,KAAQ;AA5qIhD,MAAA,IAAAb,KAAAG,GAAAA,EAAAC,GAAAA;AA6qIK,MAAA,OAAA,CAAA,CAAAA,OAAAD,GAAAA,GAAA,MAAA,CAAO,IAAA,KAAP,IAAA,GAAAA,OAAeH,GAAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAAA,IAAY,IAAA,KAA3B,IAAA,GAAAI,GAAAA,GAAmC,EAAA,EAAI,SAAS,KAAK,CAAA;AAAA,IAAA;AAAA,GACxD;AACA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAC,MAAA,KAAQ;AA/qIjD,IAAA,IAAAJ,GAAAA;AA+qIqD,IAAA,OAAA,CAAA,CAAAA,MAAA,MAAA,CAAO,IAAA,KAAP,OAAAA,GAAAA,GAAe,EAAA,EAAI,SAAS,MAAM,CAAA;AAAA,EAAA,CAAC,CAAA;AACtF,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,eAAA,CAAgB,KAAK,SAAA,EAAW,IAAA,EAAM,GAAA,EAAK,GAAA,EAAK,MAAM,QAAQ,CAAA;AAC9D,IAAA,oBAAA,CAAqB,GAAA,EAAA,CAAK,qBAAU,CAAC,CAAA,KAAX,mBAAc,UAAA,KAAd,IAAA,GAAA,EAAA,GAA4B,EAAC,EAAG,IAAI,CAAA;AAC9D,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,CAAC,MAAA,KAAW,OAAO,eAAe,CAAA;AACnD,MAAA,iBAAA,CAAkB,GAAA,EAAK,SAAA,EAAW,IAAA,EAAM,GAAA,EAAK,GAAG,CAAA;AAClD,IAAA,IAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,gBAAA,CAAiB,GAAA,EAAK,YAAY,IAAA,EAAM,GAAA,EAAK,GAAA,EAAK,MAAA,EAAW,IAAI,CAAA;AAC5F,IAAA,IAAI,UAAA,CAAW,IAAA,CAAK,CAAC,MAAA,KAAW,OAAO,eAAe,CAAA;AACpD,MAAA,qBAAA,CAAsB,GAAA,EAAK,UAAA,EAAY,IAAA,EAAM,GAAA,EAAK,GAAG,CAAA;AAAA,EACzD,CAAA,MAAO;AACL,IAAA,gBAAA;AAAA,MACE,GAAA;AAAA,MACA,IAAA,CAAK,MAAA;AAAA,MACL,IAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,CAAC,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,SAAS,CAAA;AAAA,MAC3C;AAAA,KACF;AACA,IAAA,oBAAA;AAAA,MACE,GAAA;AAAA,MAAA,CACA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAC,MAAA,KAAQ;AApsIhC,QAAA,IAAAA,GAAAA;AAosImC,QAAA,OAAA,CAAAA,GAAAA,GAAA,MAAA,CAAO,UAAA,KAAP,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAmB,MAAA;AAAA,MAAA,CAAM,CAAA,KAAtD,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyD,UAAA,KAAzD,IAAA,GAAA,EAAA,GAAuE,EAAC;AAAA,MACxE;AAAA,KACF;AACA,IAAA,IAAI,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,MAAA,KAAW,OAAO,eAAe,CAAA;AACrD,MAAA,qBAAA,CAAsB,GAAA,EAAK,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,KAAK,GAAG,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,GAAA;AACT;AApES,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAsET,SAAS,gBAAA,CACP,UAAA,EACA,SAAA,EACA,QAAA,EACU;AAjtIZ,EAAA,IAAA,EAAA;AAktIE,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,MAAA,CAAO,CAAC,MAAA,KAAQ;AAltI/C,IAAA,IAAAA,GAAAA;AAktImD,IAAA,OAAA,CAAA,CAAAA,MAAA,MAAA,CAAO,IAAA,KAAP,OAAAA,GAAAA,GAAe,SAAA,EAAW,SAAS,KAAK,CAAA;AAAA,EAAA,CAAC,CAAA;AAC1F,EAAA,IAAI,CAAC,oBAAA,CAAqB,QAAQ,CAAA,IAAK,SAAA,CAAU,UAAU,CAAA,EAAG;AAC5D,IAAA,OAAO,UAAA,CAAW,OAAA,CAAQ,CAAC,MAAA,KAAW,OAAO,MAAM,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,GAAG,SAAA,CAAU,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG,CAAC,CAAA;AAC9E,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,OAAA,EAAS,UAAA,EAAA,EAAc;AAC3D,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,KAAA,MAAW,UAAU,SAAA,EAAW;AAC9B,MAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,MAAA,CAAO,MAAA,CAAO,UAAU,MAAxB,IAAA,GAAA,EAAA,GAA6B,CAAA;AAC3C,MAAA,IAAI,KAAA,IAAS,GAAG,QAAA,IAAY,KAAA;AAAA,WACvB,QAAA,IAAY,KAAA;AAAA,IACnB;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,UAAU,QAAQ,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,MAAA;AACT;AAtBS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAwBT,SAAS,cAAc,IAAA,EAKrB;AA1uIF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2uIE,EAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,UAAA;AAC3B,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAZ,IAAA,GAAA,EAAA,GAAoB,EAAA;AACtC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,IAAI,sBAAA,CAAA,CAAuB,sBAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,MAAA,KAAlB,IAAA,GAAA,EAAA,GAA4B,EAAE,CAAA;AACvD,MAAA,OAAO,EAAE,MAAM,CAAA,EAAG,GAAA,EAAK,GAAG,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA,EAAG;AAClD,IAAA,IAAI,yBAAA,CAA0B,IAAI,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAG;AACtF,IAAA,OAAA,CAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA,KAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,KAAA,KAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyB,OAAA,MAAY,IAAA,GACxC,EAAE,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAG,GACzC,EAAE,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAG;AAAA,EAChD;AACA,EAAA,MAAM,mBAAA,GAAA,CAAA,CACJ,sBAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,KAAA,KAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyB,OAAA,MAAY,IAAA,IACrC,CAAC,UAAU,QAAA,CAAS,UAAU,CAAA,IAC9B,CAAC,SAAA,CAAU,QAAA,CAAS,KAAK,CAAA,IACzB,CAAC,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,sBAAsB,EAAA,GAAK,CAAA;AAC3C,EAAA,MAAM,IAAA,GAAA,CAAA,CAAQ,EAAA,GAAA,MAAA,CAAO,CAAA,KAAP,IAAA,GAAA,EAAA,GAAY,IAAA,IAAQ,GAAA;AAClC,EAAA,MAAM,GAAA,GAAA,CAAA,CAAO,EAAA,GAAA,MAAA,CAAO,CAAA,KAAP,IAAA,GAAA,EAAA,GAAY,IAAA,IAAQ,EAAA;AACjC,EAAA,MAAM,KAAA,GAAA,CAAA,CAAS,EAAA,GAAA,MAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,IAAA,IAAQ,GAAA;AACvC,EAAA,MAAM,MAAA,GAAA,CAAA,CAAU,EAAA,GAAA,MAAA,CAAO,MAAA,KAAP,IAAA,GAAA,EAAA,GAAiB,IAAA,IAAQ,EAAA;AACzC,EAAA,MAAM,WAAA,GAAc,KAAK,GAAA,CAAI,OAAA,EAAS,KAAK,GAAA,CAAI,EAAA,EAAI,IAAI,CAAC,CAAA;AACxD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,EAAA,EAAI,GAAG,CAAC,CAAA;AAAA,IAClC,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,EAAA,GAAK,WAAW,CAAC,CAAC,CAAA;AAAA,IACnE,MAAA,EAAQ,KAAK,GAAA,CAAI,EAAA,EAAI,KAAK,GAAA,CAAI,EAAA,EAAI,MAAM,CAAC;AAAA,GAC3C;AACF;AAjCS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAmCT,SAAS,0BAA0B,IAAA,EAA6B;AAxwIhE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAywIE,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,EAAA;AACjC,EAAA,IAAI,CAAC,SAAS,CAAC,SAAA,CAAU,SAAS,KAAK,CAAA,IAAK,KAAA,CAAM,UAAA,EAAY,OAAO,KAAA;AACrE,EAAA,MAAM,UAAS,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,MAAA,KAAZ,YAAsB,EAAC;AACtC,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAChC,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAA,CAAI,wBAAO,CAAC,CAAA,KAAR,mBAAW,UAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,WAAvB,IAAA,GAAA,EAAA,GAAiC,CAAA,EAAA,CAAG,kBAAO,CAAC,CAAA,KAAR,mBAAW,MAAA,CAAO,MAAA,KAAlB,YAA4B,CAAC,CAAA;AAChG,EAAA,OAAO,aAAA,GAAgB,KAAK,aAAA,IAAiB,CAAA;AAC/C;AARS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAUT,SAAS,aAAa,KAAA,EAAuB;AAC3C,EAAA,IAAI,KAAA,IAAS,GAAG,OAAO,CAAA;AACvB,EAAA,IAAI,KAAA,IAAS,IAAI,OAAO,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,KAAK,CAAC,CAAA;AACpD,EAAA,MAAM,SAAS,KAAA,GAAQ,GAAA;AACvB,EAAA,MAAM,YAAY,EAAA,IAAM,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AACrD,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,SAAS,CAAA,GAAI,SAAA;AACzC;AANS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAQT,SAAS,cAAA,CAAe,GAAA,EAAa,GAAA,EAAa,SAAA,EAA4B;AAC5E,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,GAAG,CAAA;AAChC,EAAA,IAAI,SAAA,IAAa,SAAA,GAAY,CAAA,EAAG,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,SAAS,CAAC,CAAC,CAAA;AAC7F,EAAA,IAAI,MAAA,CAAO,UAAU,KAAK,CAAA,IAAK,QAAQ,CAAA,IAAK,KAAA,IAAS,GAAG,OAAO,KAAA;AAC/D,EAAA,OAAO,CAAA;AACT;AALS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAOT,SAAS,yBAAA,CACP,GAAA,EACA,IAAA,EACA,IAAA,EACM;AAryIR,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsyIE,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA,KAAZ,aAAqB,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA,KAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,KAAA;AACrD,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,aAAA;AAAA,MACE,GAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,GAAA;AAAA,MACzB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,MAC1B,GAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAA,CAAS,sBAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,MAAA,KAAlB,YAA4B,EAAC;AAC5C,EAAA,MAAM,QAAQ,MAAA,CACX,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,IAAI,CAAA,CACvB,MAAA,CAAO,CAAC,UAA2B,OAAA,CAAQ,KAAK,CAAC,CAAA,CACjD,KAAA,CAAM,GAAG,CAAC,CAAA;AACb,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,EAAA,MAAM,MAAA,GAAS,CAAC,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AAC1D,EAAA,IAAI,CAAA,GAAI,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,IAAA;AACjC,EAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,MAAM,GAAG,CAAA;AACpC,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AA3zIjC,IAAA,IAAAA,GAAAA,EAAAG,GAAAA,EAAAC,GAAAA,EAAAC,GAAAA,EAAAS,GAAAA,EAAAC,GAAAA;AA4zII,IAAA,MAAM,UAAA,GAAA,CAAaf,GAAAA,GAAA,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,KAAS,IAAI,CAAA,KAAxC,IAAA,GAAAA,GAAAA,GAA6C,OAAO,KAAK,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAO,aAAa,gBAAA,CAAiB,GAAA,EAAK,YAAY,KAAA,EAAO,MAAM,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AACzF,IAAA,IAAI,UAAA,IAAA,CAAA,CAAeG,MAAA,UAAA,CAAW,IAAA,KAAX,OAAAA,GAAAA,GAAmB,EAAA,EAAI,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1D,MAAA,aAAA,CAAc,GAAA,EAAK,GAAG,CAAA,GAAI,GAAA,EAAK,IAAI,GAAA,EAAK,CAAA,GAAI,GAAA,EAAK,IAAA,EAAM,IAAI,CAAA;AAC3D,MAAA,eAAA;AAAA,QACE,GAAA;AAAA,QACA,CAAA,GAAI,IAAA;AAAA,QACJ,CAAA,GAAI,GAAA;AAAA,QACJ,IAAA;AAAA,QAAA,CACAE,GAAAA,GAAAA,CAAAD,MAAA,UAAA,CAAW,MAAA,KAAX,gBAAAA,GAAAA,CAAmB,SAAA,KAAnB,OAAAC,GAAAA,GAAgC,SAAA;AAAA,QAAA,CAChCU,GAAAA,GAAAA,CAAAD,MAAA,UAAA,CAAW,MAAA,KAAX,gBAAAA,GAAAA,CAAmB,SAAA,KAAnB,OAAAC,GAAAA,GAAgC,IAAA;AAAA,QAChC;AAAA,OACF;AACA,MAAA,aAAA,CAAc,KAAK,IAAA,EAAM,CAAA,GAAI,KAAK,CAAA,GAAI,IAAA,EAAM,KAAK,SAAS,CAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAA,aAAA,CAAc,KAAK,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,GAAA,EAAK,KAAK,IAAI,CAAA;AAC7C,MAAA,aAAA,CAAc,KAAK,IAAA,EAAM,CAAA,GAAI,GAAG,CAAA,GAAI,IAAA,EAAM,KAAK,SAAS,CAAA;AAAA,IAC1D;AACA,IAAA,CAAA,IAAK,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,IAAI,CAAA,CAAE,MAAA,GAAS,GAAA,GAAM,GAAG,CAAA;AAAA,EACtD,CAAC,CAAA;AACH;AA/CS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAiDT,SAAS,gBAAA,CACP,GAAA,EACA,MAAA,EACA,KAAA,EACA,cAAA,EACQ;AAv1IV,EAAA,IAAA,EAAA,EAAA,EAAA;AAw1IE,EAAA,IAAA,CAAA,CAAK,EAAA,GAAA,MAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,EAAA,EAAI,QAAA,CAAS,MAAM,CAAA,EAAG,OAAA,CAAO,EAAA,GAAA,MAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,cAAA,CAAe,KAAK,CAAA;AACzF,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,cAAc,CAAA;AAC3D;AARS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAUT,SAAS,gBACP,GAAA,EACA,IAAA,EACA,SAAA,EACA,IAAA,EACA,WACA,YAAA,EACM;AAn2IR,EAAA,IAAA,EAAA,EAAA,EAAA;AAo2IE,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,aAAA,KAAX,IAAA,GAAA,EAAA,GAA4B,SAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,aAAA,EAAe,MAAM,IAAI,CAAA;AAC3E,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,SAAA,EAAW,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,GAAO,IAAA,CAAK,SAAS,SAAA,GAAa,CAAA;AACjD,IAAA,aAAA,CAAc,GAAA,EAAK,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,SAAS,CAAA;AAAA,EAClF;AACA,EAAA,aAAA;AAAA,IACE,GAAA;AAAA,IACA,IAAA,CAAK,IAAA;AAAA,IACL,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA;AAAA,IAChB,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA;AAAA,IACjB,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA;AAAA,IAAA,CAChB,EAAA,GAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,cAAd,IAAA,GAAA,EAAA,GAA2B,SAAA;AAAA,IAC3B,oBAAA,CAAqB,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,SAAA,EAAW,IAAA,EAAM,IAAI;AAAA,GAC1D;AACF;AAvBS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAyBT,SAAS,qBAAA,CACP,GAAA,EACA,IAAA,EACA,GAAA,EACA,KACA,SAAA,EACM;AACN,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,SAAA,EAAW,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,KAAA,GAAQ,GAAA,GAAA,CAAQ,GAAA,GAAM,GAAA,IAAO,SAAA,GAAa,CAAA;AAChD,IAAA,MAAM,IAAI,IAAA,CAAK,GAAA,GAAO,IAAA,CAAK,MAAA,GAAS,YAAa,CAAA,GAAI,CAAA;AACrD,IAAA,aAAA,CAAc,GAAA,EAAK,eAAA,CAAgB,KAAK,CAAA,EAAG,IAAA,CAAK,OAAO,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,SAAA,EAAW,KAAK,CAAA;AAAA,EACpF;AACF;AAZS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAcT,SAAS,gBAAgB,KAAA,EAAuB;AAC9C,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACtF;AAFS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAIT,SAAS,gBAAA,CACP,GAAA,EACA,UAAA,EACA,IAAA,EACA,GAAA,EACA,GAAA,EACA,cAAA,GAA2B,CAAC,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,SAAS,GACtE,IAAA,EACM;AACN,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAA,KAAU;AAh5IxC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAi5II,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAChC,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,UAAA,KAAe;AACtD,MAAA,MAAM,CAAA,GACJ,IAAA,CAAK,IAAA,IACJ,MAAA,CAAO,OAAO,MAAA,KAAW,CAAA,GACtB,IAAA,CAAK,KAAA,GAAQ,IACZ,IAAA,CAAK,KAAA,GAAQ,UAAA,IAAe,MAAA,CAAO,OAAO,MAAA,GAAS,CAAA,CAAA,CAAA;AAC1D,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,GAAA,CAAW,KAAA,GAAQ,GAAA,IAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAA,GAAM,GAAG,IAAK,IAAA,CAAK,MAAA;AACnF,MAAA,OAAO,EAAE,GAAG,CAAA,EAAE;AAAA,IAChB,CAAC,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,MAAA,EAAQ,MAAA,CAAO,WAAW,IAAI,CAAA;AACzD,IAAA,MAAM,SAAQ,EAAA,GAAA,MAAA,CAAO,SAAA,KAAP,YAAoB,cAAA,CAAe,KAAA,GAAQ,eAAe,MAAM,CAAA;AAC9E,IAAA,aAAA,CAAc,KAAK,IAAA,EAAM,KAAA,EAAO,oBAAA,CAAqB,MAAA,EAAQ,IAAI,CAAC,CAAA;AAClE,IAAA,IAAA,CAAA,CAAI,EAAA,GAAA,MAAA,CAAO,MAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,MAAA,MAAW,MAAA,EAAQ;AACpC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA,EAAA,CAAA,CAAM,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,MAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAA,KAAf,IAAA,GAAA,EAAA,GAAuB,CAAA,IAAK,IAAI,CAAC,CAAA;AAC7E,MAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,MAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,cAAf,IAAA,GAAA,EAAA,GAA4B,KAAA;AACzC,MAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,MAAA,CAAO,MAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,SAAA;AAC9B,MAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,MAAA,EAAQ,IAAI,CAAA;AACvD,MAAA,MAAA,CAAO,OAAA;AAAA,QAAQ,CAAC,KAAA,KACd,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,WAAW;AAAA,OAC1E;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH;AAjCS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAmCT,SAAS,sBAAA,CACP,QACA,IAAA,EACoB;AA76ItB,EAAA,IAAA,EAAA;AA86IE,EAAA,IAAI,EAAA,CAAC,YAAO,MAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,cAAa,EAAC,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,MAAA,CAAO,KAAA,CAAA,EAAO,OAAO,MAAA;AAC7D,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAI,MAAA,CAAO,MAAA,CAAO,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,KAAA,GAAS,GAAG,CAAC,CAAA;AACxF;AANS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAQT,SAAS,oBAAA,CAAqB,QAAwB,IAAA,EAAwC;AAC5F,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,EAAC,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,MAAA,CAAO,QAAO,OAAO,GAAA;AACrD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAM,MAAA,CAAO,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,KAAA,GAAS,GAAG,CAAC,CAAA;AAClF;AAHS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAKT,SAAS,aAAA,CAAc,QAAoC,MAAA,EAAyB;AAClF,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAChC,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAChC,IAAA,OAAO,OACJ,GAAA,CAAI,CAAC,OAAO,UAAA,KAAe,CAAA,EAAG,eAAe,CAAA,GAAI,GAAA,GAAM,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAA,CAAE,CAAA,CAClF,KAAK,GAAG,CAAA;AAAA,EACb;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,CAAC,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AACrD,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AAC1C,IAAA,MAAM,WAAW,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,OAAO,CAAC,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA;AACzB,IAAA,MAAM,SAAA,GAAY,OAAO,IAAA,CAAK,GAAA,CAAI,OAAO,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAC3D,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,GAAG,OAAA,CAAQ,CAAA,GAAA,CAAK,IAAA,CAAK,CAAA,GAAI,SAAS,CAAA,IAAK,CAAA;AAAA,MACvC,GAAG,OAAA,CAAQ,CAAA,GAAA,CAAK,IAAA,CAAK,CAAA,GAAI,SAAS,CAAA,IAAK;AAAA,KACzC;AACA,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,GAAG,IAAA,CAAK,CAAA,GAAA,CAAK,SAAA,CAAU,CAAA,GAAI,QAAQ,CAAA,IAAK,CAAA;AAAA,MACxC,GAAG,IAAA,CAAK,CAAA,GAAA,CAAK,SAAA,CAAU,CAAA,GAAI,QAAQ,CAAA,IAAK;AAAA,KAC1C;AACA,IAAA,QAAA,CAAS,KAAK,CAAA,EAAA,EAAK,QAAA,CAAS,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/F;AACA,EAAA,OAAO,QAAA,CAAS,KAAK,GAAG,CAAA;AAC1B;AAxBS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AA0BT,SAAS,gBACP,GAAA,EACA,UAAA,EACA,MACA,GAAA,EACA,GAAA,EACA,MACA,QAAA,EACM;AACN,EAAA,IAAI,oBAAA,CAAqB,QAAQ,CAAA,IAAK,UAAA,CAAW,SAAS,CAAA,EAAG;AAC3D,IAAA,sBAAA,CAAuB,GAAA,EAAK,UAAA,EAAY,IAAA,EAAM,GAAA,EAAK,KAAK,IAAI,CAAA;AAC5D,IAAA;AAAA,EACF;AACA,EAAA,IAAI,sBAAA,CAAuB,UAAU,CAAA,EAAG;AACtC,IAAA,sBAAA,CAAuB,GAAA,EAAK,UAAA,EAAY,IAAA,EAAM,GAAA,EAAK,KAAK,IAAI,CAAA;AAC5D,IAAA;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,CAAC,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG,CAAC,CAAA;AAC/E,EAAA,MAAM,UAAA,GAAa,KAAK,KAAA,GAAQ,OAAA;AAChC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAI,UAAA,GAAa,IAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,MAAA,EAAQ,CAAC,CAAC,CAAA;AACjF,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,MAAA,EAAQ,WAAA,KAAgB;AAC1C,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,EAAK,MAAA,EAAQ,aAAa,MAAM,CAAA;AAC7D,IAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,UAAA,KAAe;AAx+IjD,MAAA,IAAA,EAAA,EAAA,EAAA;AAy+IM,MAAA,MAAM,MAAA,GAAA,CAAW,QAAQ,GAAA,IAAO,IAAA,CAAK,IAAI,CAAA,EAAG,GAAA,GAAM,GAAG,CAAA,GAAK,IAAA,CAAK,MAAA;AAC/D,MAAA,MAAM,CAAA,GACJ,IAAA,CAAK,IAAA,GACL,UAAA,GAAa,UAAA,GAAA,CACZ,aAAa,QAAA,GAAW,UAAA,CAAW,MAAA,IAAU,CAAA,GAC9C,WAAA,GAAc,QAAA;AAChB,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,GAAS,MAAA;AACnC,MAAA,aAAA;AAAA,QACE,GAAA;AAAA,QACA,CAAA;AAAA,QACA,CAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QAAA,CACA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,UAAA,CAAA,KAArB,IAAA,GAAA,EAAA,GAAoC,IAAA;AAAA,QACpC,MAAA,CAAO,WAAA;AAAA,QACP,sBAAA,CAAuB,QAAQ,IAAI;AAAA,OACrC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AA3CS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AA6CT,SAAS,uBACP,GAAA,EACA,UAAA,EACA,IAAA,EACA,GAAA,EACA,KACA,IAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,CAAC,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG,CAAC,CAAA;AAC/E,EAAA,MAAM,UAAA,GAAa,KAAK,KAAA,GAAQ,OAAA;AAChC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,aAAa,IAAI,CAAA;AAC9C,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,MAAA,EAAQ,WAAA,KAAgB;AAC1C,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,EAAK,MAAA,EAAQ,aAAa,MAAM,CAAA;AAC7D,IAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,UAAA,KAAe;AA5gJjD,MAAA,IAAA,EAAA,EAAA,EAAA;AA6gJM,MAAA,MAAM,CAAA,GAAI,aAAA,CAAc,KAAA,EAAO,IAAA,EAAM,KAAK,GAAG,CAAA;AAC7C,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,CAAA,EAAG,IAAA,EAAM,KAAK,GAAG,CAAA;AAChD,MAAA,MAAM,IAAI,IAAA,CAAK,IAAA,GAAO,UAAA,GAAa,UAAA,GAAA,CAAc,aAAa,QAAA,IAAY,CAAA;AAC1E,MAAA,aAAA;AAAA,QACE,GAAA;AAAA,QACA,CAAA;AAAA,QACA,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA;AAAA,QACpB,QAAA;AAAA,QACA,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,QAAA,GAAW,CAAC,CAAC,CAAA;AAAA,QAAA,CACpC,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,UAAA,CAAA,KAArB,IAAA,GAAA,EAAA,GAAoC,IAAA;AAAA,QACpC,MAAA,CAAO,WAAA;AAAA,QACP,sBAAA,CAAuB,QAAQ,IAAI;AAAA,OACrC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AA9BS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAgCT,SAAS,uBACP,GAAA,EACA,UAAA,EACA,IAAA,EACA,GAAA,EACA,KACA,IAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,CAAC,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG,CAAC,CAAA;AAC/E,EAAA,MAAM,UAAA,GAAa,KAAK,KAAA,GAAQ,OAAA;AAChC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,aAAa,IAAI,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,IAAI,KAAA,CAAc,OAAO,CAAA,CAAE,KAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAClE,EAAA,MAAM,SAAA,GAAY,IAAI,KAAA,CAAc,OAAO,CAAA,CAAE,KAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAClE,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,MAAA,EAAQ,WAAA,KAAgB;AAC1C,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,EAAK,MAAA,EAAQ,aAAa,MAAM,CAAA;AAC7D,IAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,UAAA,KAAe;AA9iJjD,MAAA,IAAA,EAAA,EAAA,EAAA;AA+iJM,MAAA,MAAM,OAAO,KAAA,IAAS,CAAA,GAAI,UAAU,UAAU,CAAA,GAAK,UAAU,UAAU,CAAA;AACvE,MAAA,MAAM,OAAO,IAAA,GAAO,KAAA;AACpB,MAAA,MAAM,EAAA,GAAK,aAAA,CAAc,IAAA,EAAM,IAAA,EAAM,KAAK,GAAG,CAAA;AAC7C,MAAA,MAAM,EAAA,GAAK,aAAA,CAAc,IAAA,EAAM,IAAA,EAAM,KAAK,GAAG,CAAA;AAC7C,MAAA,MAAM,IAAI,IAAA,CAAK,IAAA,GAAO,UAAA,GAAa,UAAA,GAAA,CAAc,aAAa,QAAA,IAAY,CAAA;AAC1E,MAAA,aAAA;AAAA,QACE,GAAA;AAAA,QACA,CAAA;AAAA,QACA,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA;AAAA,QACf,QAAA;AAAA,QACA,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,EAAA,GAAK,EAAE,CAAC,CAAA;AAAA,QAAA,CAC/B,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,UAAA,CAAA,KAArB,IAAA,GAAA,EAAA,GAAoC,IAAA;AAAA,QACpC,MAAA,CAAO,WAAA;AAAA,QACP,sBAAA,CAAuB,QAAQ,IAAI;AAAA,OACrC;AACA,MAAA,IAAI,KAAA,IAAS,CAAA,EAAG,SAAA,CAAU,UAAU,CAAA,GAAI,IAAA;AAAA,WACnC,SAAA,CAAU,UAAU,CAAA,GAAI,IAAA;AAAA,IAC/B,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AApCS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAsCT,SAAS,aAAA,CACP,KAAA,EACA,IAAA,EACA,GAAA,EACA,GAAA,EACQ;AACR,EAAA,OAAO,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,GAAA,CAAW,KAAA,GAAQ,GAAA,IAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAA,GAAM,GAAG,CAAA,GAAK,IAAA,CAAK,MAAA;AAClF;AAPS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAST,SAAS,qBAAqB,QAAA,EAAuC;AACnE,EAAA,OAAO,QAAA,KAAa,aAAa,QAAA,KAAa,gBAAA;AAChD;AAFS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAIT,SAAS,uBAAuB,UAAA,EAAyC;AACvE,EAAA,MAAM,SAAS,IAAI,GAAA,CAAI,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAQ;AAllJjD,IAAA,IAAA,EAAA;AAklJoD,IAAA,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,eAAP,IAAA,GAAA,EAAA,GAAqB,CAAA;AAAA,EAAA,CAAC,CAAC,CAAA;AACzE,EAAA,OAAO,MAAA,CAAO,IAAA,GAAO,CAAA,IAAK,UAAA,CAAW,MAAM,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AACpG;AAHS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAKT,SAAS,sBAAA,CAAuB,QAAwB,IAAA,EAAyC;AAC/F,EAAA,IAAI,CAAC,MAAA,CAAO,WAAA,EAAa,OAAO,MAAA;AAChC,EAAA,OAAO,gBAAA;AAAA,IAAA,CACL,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,OAAO,KAAA,IAAS,MAAA,CAAO,cAAc,IAAA,CAAK,MAAA,CAAO,QAAS,GAAA,GAAM,MAAA;AAAA,IACtE;AAAA,GACF;AACF;AANS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAQT,SAAS,oBAAA,CACP,KAAA,EACA,IAAA,EACA,QAAA,EACQ;AAlmJV,EAAA,IAAA,EAAA;AAmmJE,EAAA,OAAA,CACE,EAAA,GAAA,gBAAA;AAAA,IACE,KAAA,KAAU,UAAa,IAAA,CAAK,MAAA,CAAO,QAAS,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,GAAS,GAAA,GAAM,MAAA;AAAA,IAC/E;AAAA,QAFF,IAAA,GAAA,EAAA,GAGK,QAAA;AAET;AAXS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAkBT,SAAS,gBAAA,CACP,OACA,QAAA,EACoB;AACpB,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,QAAA;AAChC,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,EAAM,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAC5C;AANS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAQT,SAAS,eAAA,CACP,GAAA,EACA,MAAA,EACA,KAAA,EACA,cAAA,EACQ;AA7nJV,EAAA,IAAA,EAAA,EAAA,EAAA;AA8nJE,EAAA,IAAA,CAAA,CAAI,EAAA,GAAA,MAAA,CAAO,iBAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,MAAA,CAAO,WAAU,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC/E,IAAA,MAAM,EAAA,GAAK,CAAA,oBAAA,EAAuB,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA;AAC/G,IAAA,uBAAA,CAAwB,GAAA,EAAK,EAAA,EAAI,MAAA,CAAO,YAAY,CAAA;AACpD,IAAA,OAAO,QAAQ,EAAE,CAAA,CAAA,CAAA;AAAA,EACnB;AACA,EAAA,OAAA,CAAO,YAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,cAAA,CAAe,KAAA,GAAQ,eAAe,MAAM,CAAA;AACzE;AAZS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAcT,SAAS,cAAA,CACP,MAAA,EACA,UAAA,EACA,cAAA,EACQ;AA1oJV,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2oJE,EAAA,OAAA,CACE,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,UAAA,CAAA,KAArB,IAAA,GAAA,EAAA,GACA,MAAA,CAAO,SAAA,KADP,IAAA,GAAA,EAAA,GAEA,cAAA,CAAe,UAAA,GAAa,cAAA,CAAe,MAAM,CAAA;AAErD;AAVS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAYT,SAAS,oBAAA,CACP,GAAA,EACA,UAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC7B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,UAAA,CAAW,MAAA;AACrC,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,QAAA,EAAU,KAAA,KAAU;AACtC,IAAA,aAAA;AAAA,MACE,GAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,CAAK,IAAA,GAAO,IAAA,GAAO,KAAA,GAAQ,IAAA,GAAO,CAAA;AAAA,MAClC,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,GAAS,GAAA;AAAA,MACzB,GAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAlBS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAoBT,SAAS,iBAAA,CACP,GAAA,EACA,UAAA,EACA,IAAA,EACA,KACA,GAAA,EACM;AACN,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG,CAAC,CAAA;AAC/E,EAAA,MAAM,UAAA,GAAa,KAAK,KAAA,GAAQ,OAAA;AAChC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAI,UAAA,GAAa,IAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,MAAA,EAAQ,CAAC,CAAC,CAAA;AACjF,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,MAAA,EAAQ,WAAA,KAAgB;AAC1C,IAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC7B,IAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,UAAA,KAAe;AAC3C,MAAA,MAAM,MAAA,GAAA,CAAW,QAAQ,GAAA,IAAO,IAAA,CAAK,IAAI,CAAA,EAAG,GAAA,GAAM,GAAG,CAAA,GAAK,IAAA,CAAK,MAAA;AAC/D,MAAA,MAAM,CAAA,GACJ,IAAA,CAAK,IAAA,GACL,UAAA,GAAa,UAAA,GAAA,CACZ,UAAA,GAAa,QAAA,GAAW,UAAA,CAAW,MAAA,IAAU,CAAA,GAC9C,WAAA,GAAc,QAAA,GACd,QAAA,GAAW,CAAA;AACb,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAC5C,MAAA,aAAA,CAAc,GAAA,EAAK,OAAO,KAAK,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,WAAW,QAAQ,CAAA;AAAA,IAChE,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAxBS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AA0BT,SAAS,qBAAA,CACP,GAAA,EACA,UAAA,EACA,IAAA,EACA,KACA,GAAA,EACM;AACN,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,eAAA,IAAmB,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA,EAAG;AAC3D,IAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,UAAA,KAAe;AAC3C,MAAA,MAAM,CAAA,GACJ,IAAA,CAAK,IAAA,IACJ,MAAA,CAAO,OAAO,MAAA,KAAW,CAAA,GACtB,IAAA,CAAK,KAAA,GAAQ,IACZ,IAAA,CAAK,KAAA,GAAQ,UAAA,IAAe,MAAA,CAAO,OAAO,MAAA,GAAS,CAAA,CAAA,CAAA;AAC1D,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,GAAA,CAAW,KAAA,GAAQ,GAAA,IAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAA,GAAM,GAAG,IAAK,IAAA,CAAK,MAAA;AACnF,MAAA,aAAA,CAAc,GAAA,EAAK,MAAA,CAAO,KAAK,CAAA,EAAG,GAAG,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,GAAM,GAAG,CAAA,GAAI,GAAG,CAAA,EAAG,GAAA,EAAK,WAAW,QAAQ,CAAA;AAAA,IAChG,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAnBS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAqBT,SAAS,mBAAA,CACP,GAAA,EACA,UAAA,EACA,IAAA,EACM;AAztJR,EAAA,IAAA,EAAA;AA0tJE,EAAA,MAAM,MAAA,GAAS,WAAW,CAAC,CAAA;AAC3B,EAAA,IAAI,EAAC,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,MAAA,CAAO,MAAA,CAAA,EAAQ;AAC5B,EAAA,MAAM,SAAS,CAAC,SAAA,EAAW,WAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AAChF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,EAAK,KAAA,KAAU,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA;AACnF,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,IAAA;AACpC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,GAAS,GAAA;AACpC,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,KAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA;AACnD,EAAA,MAAM,cAAc,MAAA,GAAS,IAAA;AAC7B,EAAA,IAAI,KAAA,GAAQ,GAAA;AACZ,EAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AACtC,IAAA,MAAM,QAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAI,KAAA,GAAS,GAAA;AAC7C,IAAA,MAAM,UAAA,GAAa,KAAA;AACnB,IAAA,MAAM,WAAW,KAAA,GAAQ,KAAA;AACzB,IAAA,gBAAA;AAAA,MACE,GAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA,CAAe,MAAA,EAAQ,KAAA,EAAO,MAAM;AAAA,KACtC;AACA,IAAA,IAAI,MAAA,CAAO,sBAAA,IAA0B,MAAA,CAAO,iBAAA,IAAqB,OAAO,eAAA,EAAiB;AACvF,MAAA,MAAM,UAAA,GAAa,uBAAA,CAAwB,MAAA,EAAQ,KAAA,EAAO,OAAO,KAAK,CAAA;AACtE,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,MAAM,KAAA,GAAQ,kBAAA;AAAA,UACZ,MAAA;AAAA,UACA,KAAA;AAAA,UACA,EAAA;AAAA,UACA,EAAA;AAAA,UACA,MAAA,GAAS,GAAA;AAAA,UACT,IAAA;AAAA,UAAA,CACC,aAAa,QAAA,IAAY;AAAA,SAC5B;AACA,QAAA,sBAAA;AAAA,UACE,GAAA;AAAA,UACA,UAAA;AAAA,UACA,KAAA,CAAM,CAAA;AAAA,UACN,KAAA,CAAM,CAAA;AAAA,UACN,GAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAA,CAAM,CAAA,IAAK,EAAA,GAAK,OAAA,GAAU;AAAA,SAC5B;AAAA,MACF;AAAA,IACF;AACA,IAAA,KAAA,IAAS,KAAA;AAAA,EACX,CAAC,CAAA;AACD,EAAA,eAAA,CAAgB,GAAA,EAAK,EAAA,EAAI,EAAA,EAAI,WAAA,GAAc,MAAM,SAAS,CAAA;AAC1D,EAAA,MAAM,WAAA,GAAc,uBAAA,CAAwB,MAAA,CAAO,IAAI,CAAA;AACvD,EAAA,IAAI,WAAA,gBAA2B,GAAA,EAAK,WAAA,EAAa,IAAI,EAAA,GAAK,GAAA,EAAK,GAAA,EAAK,SAAA,EAAW,QAAQ,CAAA;AACvF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA;AAC7B,EAAA,IAAI,KAAA,KAAU,MAAA;AACZ,IAAA,aAAA;AAAA,MACE,GAAA;AAAA,MACA,2BAAA,CAA4B,OAAO,KAAK,CAAA;AAAA,MACxC,EAAA;AAAA,MACA,EAAA,GAAK,GAAA;AAAA,MACL,GAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AACF,EAAA,YAAA,CAAa,GAAA,EAAA,CAAK,EAAA,GAAA,MAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,EAAC,EAAG,MAAA,EAAQ,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,IAAA,EAAM,IAAA,CAAK,MAAM,CAAC,CAAA;AAChG;AApES,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAsET,SAAS,uBAAA,CACP,MAAA,EACA,KAAA,EACA,KAAA,EACA,KAAA,EACU;AAhyJZ,EAAA,IAAA,EAAA;AAiyJE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,MAAA,CAAO,UAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,KAAA,CAAA;AACrC,EAAA,IAAI,MAAA,CAAO,sBAAA,IAA0B,QAAA,EAAU,KAAA,CAAM,KAAK,QAAQ,CAAA;AAClE,EAAA,IAAI,OAAO,eAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAC,CAAA;AAC7D,EAAA,IAAI,OAAO,iBAAA,EAAmB,KAAA,CAAM,KAAK,2BAAA,CAA4B,KAAA,EAAO,KAAK,CAAC,CAAA;AAClF,EAAA,OAAO,KAAA;AACT;AAZS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAcT,SAAS,mBACP,MAAA,EACA,KAAA,EACA,IACA,EAAA,EACA,cAAA,EACA,MACA,aAAA,EAC0B;AAI1B,EAAA,OAAO,UAAA,CAAW,EAAA,EAAI,EAAA,EAAI,cAAA,EAAgB,aAAa,CAAA;AACzD;AAbS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAeT,SAAS,2BAAA,CAA4B,OAAe,KAAA,EAAuB;AACzE,EAAA,MAAM,KAAA,GAAQ,KAAA,GAAQ,CAAA,IAAK,KAAA,IAAS,CAAA,IAAK,KAAA,IAAS,CAAA,GAAI,KAAA,GAAQ,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA;AACvF,EAAA,MAAM,UAAU,KAAA,GAAQ,GAAA;AACxB,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAC/E;AAJS,MAAA,CAAA,2BAAA,EAAA,6BAAA,CAAA;AAMT,SAAS,wBAAwB,KAAA,EAAmC;AAClE,EAAA,MAAM,IAAA,GAAA,CAAQ,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,EAAA,EAAI,IAAA,EAAK;AAChC,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,CAAA,EAAG,OAAO,IAAA;AAC9B,EAAA,OAAO,CAAA,EAAG,MAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,MAAA,CAAA;AACtC;AANS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAQT,SAAS,gBAAA,CACP,GAAA,EACA,UAAA,EACA,IAAA,EACA,GAAA,EACM;AA30JR,EAAA,IAAA,EAAA;AA40JE,EAAA,MAAM,MAAA,GAAS,WAAW,CAAC,CAAA;AAC3B,EAAA,IAAI,EAAC,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,MAAA,CAAO,MAAA,CAAA,EAAQ;AAC5B,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,CAAO,MAAA;AAC5B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,IAAA;AACpC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,GAAS,GAAA;AACpC,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,KAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA;AACnD,EAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,IAAQ,CAAA,EAAG,IAAA,EAAA,EAAQ;AACpC,IAAA,aAAA,CAAc,GAAA,EAAK,YAAA,CAAa,KAAA,EAAO,EAAA,EAAI,EAAA,EAAK,MAAA,GAAS,IAAA,GAAQ,CAAA,EAAG,IAAI,CAAA,EAAG,SAAA,EAAW,IAAI,CAAA;AAAA,EAC5F;AACA,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,EAAO,KAAA,EAAA,EAAS;AAC1C,IAAA,MAAM,QAAQ,UAAA,CAAW,KAAA,EAAO,KAAA,EAAO,EAAA,EAAI,IAAI,MAAM,CAAA;AACrD,IAAA,aAAA,CAAc,GAAA,EAAK,IAAI,EAAA,EAAI,KAAA,CAAM,GAAG,KAAA,CAAM,CAAA,EAAG,WAAW,IAAI,CAAA;AAAA,EAC9D;AACA,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,IAAA,EAAM,WAAA,KAAgB;AAz1J5C,IAAA,IAAAf,GAAAA;AA01JI,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ;AACzB,IAAA,MAAM,cAAc,IAAA,CAAK,MAAA,CACtB,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CACd,GAAA;AAAA,MAAI,CAAC,KAAA,EAAO,KAAA,KACX,WAAW,KAAA,EAAO,KAAA,EAAO,IAAI,EAAA,EAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,GAAG,IAAK,MAAM;AAAA,KACnF;AACF,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,IAAA,IAAA,CAAK,YAAA;AAAA,MACH,GAAA;AAAA,MACA,WAAA,CACG,IAAI,CAAC,KAAA,EAAO,UAAU,CAAA,EAAG,KAAA,KAAU,IAAI,GAAA,GAAM,GAAG,IAAI,KAAA,CAAM,CAAC,IAAI,KAAA,CAAM,CAAC,EAAE,CAAA,CACxE,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KACjB;AACA,IAAA,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,WAAA,KAAgB,CAAA,GAAI,4BAA4B,MAAM,CAAA;AAChF,IAAA,IAAA,CAAK,aAAa,QAAA,EAAA,CAAUA,GAAAA,GAAA,KAAK,SAAA,KAAL,IAAA,GAAAA,MAAkB,SAAS,CAAA;AACvD,IAAA,IAAA,CAAK,aAAa,cAAA,EAAgB,MAAA,CAAO,qBAAqB,IAAA,EAAM,MAAS,CAAC,CAAC,CAAA;AAC/E,IAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AACf,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,WAAW,MAAA,EAAQ;AAChD,MAAA,WAAA,CAAY,OAAA;AAAA,QAAQ,CAAC,KAAA,KAAO;AA52JlC,UAAA,IAAAA,GAAAA;AA62JQ,UAAA,OAAA,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,GAAA,EAAA,CAAKA,GAAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAAA,GAAAA,GAAkB,SAAS,CAAA;AAAA,QAAA;AAAA,OACzE;AAAA,IACF;AACA,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,EAAE,OAAA,CAAQ,CAAC,OAAO,KAAA,KAAU;AAj3J5D,QAAA,IAAAA,GAAAA;AAk3JQ,QAAA,MAAM,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC/B,QAAA,aAAA;AAAA,UACE,GAAA;AAAA,UACA,gBAAgB,KAAK,CAAA;AAAA,UACrB,KAAA,CAAM,CAAA;AAAA,UACN,MAAM,CAAA,GAAI,GAAA;AAAA,UACV,GAAA;AAAA,UAAA,CACAA,GAAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAAA,GAAAA,GAAkB,SAAA;AAAA,UAClB;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAC,CAAA;AACD,EAAA,CAAA,CAAC,EAAA,GAAA,MAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,EAAC,EAAG,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,QAAA,EAAU,KAAA,KAAU;AACrE,IAAA,MAAM,QAAQ,UAAA,CAAW,KAAA,EAAO,OAAO,EAAA,EAAI,EAAA,EAAI,SAAS,CAAC,CAAA;AACzD,IAAA,aAAA,CAAc,GAAA,EAAK,UAAU,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA,EAAG,GAAA,EAAK,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC7E,CAAC,CAAA;AACH;AA7DS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AA+DT,SAAS,gBAAA,CACP,KACA,EAAA,EACA,EAAA,EACA,aACA,WAAA,EACA,UAAA,EACA,UACA,KAAA,EACM;AACN,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,WAAW,UAAU,CAAA;AAClD,EAAA,MAAM,QAAA,GAAW,KAAA,GAAQ,GAAA,GAAM,CAAA,GAAI,CAAA;AACnC,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,EAAA,EAAI,EAAA,EAAI,aAAa,UAAU,CAAA;AAC7D,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,EAAA,EAAI,EAAA,EAAI,aAAa,QAAQ,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,EAAA,EAAI,EAAA,EAAI,aAAa,QAAQ,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,EAAA,EAAI,EAAA,EAAI,aAAa,UAAU,CAAA;AAC3D,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,EAAA,IAAA,CAAK,YAAA;AAAA,IACH,GAAA;AAAA,IACA;AAAA,MACE,CAAA,EAAA,EAAK,UAAA,CAAW,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,CAAA,CAAA;AAAA,MACjC,CAAA,EAAA,EAAK,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,GAAA,EAAM,QAAQ,CAAA,GAAA,EAAM,QAAA,CAAS,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,CAAC,CAAA,CAAA;AAAA,MAC3E,CAAA,EAAA,EAAK,UAAA,CAAW,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,CAAA,CAAA;AAAA,MACjC,CAAA,EAAA,EAAK,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,GAAA,EAAM,QAAQ,CAAA,GAAA,EAAM,QAAA,CAAS,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,CAAC,CAAA,CAAA;AAAA,MAC3E;AAAA,KACF,CAAE,KAAK,GAAG;AAAA,GACZ;AACA,EAAA,IAAA,CAAK,YAAA,CAAa,QAAQ,KAAK,CAAA;AAC/B,EAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AACjB;AA7BS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AA+BT,SAAS,YAAA,CACP,GAAA,EACA,MAAA,EACA,MAAA,EACA,GACA,CAAA,EACM;AACN,EAAA,MAAA,CAAO,MAAM,CAAA,EAAG,CAAC,EAAE,OAAA,CAAQ,CAAC,OAAO,KAAA,KAAU;AAC3C,IAAA,aAAA,CAAc,GAAA,EAAK,CAAA,EAAG,CAAA,GAAI,KAAA,GAAQ,CAAA,EAAG,GAAA,EAAK,GAAA,EAAK,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,MAAM,CAAE,CAAA;AAC7E,IAAA,aAAA,CAAc,GAAA,EAAK,OAAO,CAAA,GAAI,GAAA,EAAK,IAAI,KAAA,GAAQ,CAAA,GAAI,GAAA,EAAK,GAAA,EAAK,SAAS,CAAA;AAAA,EACxE,CAAC,CAAA;AACH;AAXS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAaT,SAAS,YAAA,CACP,KAAA,EACA,EAAA,EACA,EAAA,EACA,QACA,MAAA,EACQ;AACR,EAAA,OACE,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,OAAM,EAAG,CAAC,GAAG,KAAA,KAAU;AAC1C,IAAA,MAAM,QAAQ,UAAA,CAAW,KAAA,EAAO,KAAA,EAAO,EAAA,EAAI,IAAI,MAAM,CAAA;AACrD,IAAA,OAAO,CAAA,EAAG,KAAA,KAAU,CAAA,GAAI,GAAA,GAAM,GAAG,IAAI,KAAA,CAAM,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAA,CAAA;AAAA,EACzD,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,SAAS,IAAA,GAAO,EAAA,CAAA;AAEpC;AAbS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAeT,SAAS,UAAA,CACP,KAAA,EACA,KAAA,EACA,EAAA,EACA,IACA,MAAA,EAC0B;AAC1B,EAAA,OAAO,WAAW,EAAA,EAAI,EAAA,EAAI,QAAQ,GAAA,GAAO,GAAA,GAAM,QAAS,KAAK,CAAA;AAC/D;AARS,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAUT,SAAS,UAAA,CACP,EAAA,EACA,EAAA,EACA,MAAA,EACA,KAAA,EAC0B;AAC1B,EAAA,MAAM,OAAA,GAAW,KAAA,GAAQ,IAAA,CAAK,EAAA,GAAM,GAAA;AACpC,EAAA,OAAO,EAAE,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,IAAI,OAAO,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,OAAO,IAAI,MAAA,EAAO;AAClF;AARS,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAUT,SAAS,aAAA,CACP,KACA,EAAA,EACA,EAAA,EACA,IACA,EAAA,EACA,KAAA,EACA,KAAA,EACA,OAAA,EACA,GAAA,EACM;AACN,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,EAAA,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,EAAE,CAAC,CAAA;AAClC,EAAA,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,EAAE,CAAC,CAAA;AAClC,EAAA,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,EAAE,CAAC,CAAA;AAClC,EAAA,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,EAAE,CAAC,CAAA;AAClC,EAAA,IAAA,CAAK,YAAA,CAAa,UAAU,KAAK,CAAA;AACjC,EAAA,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,KAAK,CAAC,CAAA;AAC/C,EAAA,IAAA,CAAK,YAAA,CAAa,gBAAA,EAAkB,gBAAA,CAAiB,GAAG,CAAC,CAAA;AACzD,EAAA,IAAI,OAAA,KAAY,MAAA;AACd,IAAA,IAAA,CAAK,YAAA,CAAa,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAC/E,EAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AACjB;AAtBS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAwBT,SAAS,iBAAiB,GAAA,EAAsD;AAC9E,EAAA,IAAI,GAAA,KAAQ,OAAO,OAAO,OAAA;AAC1B,EAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,QAAA;AACzB,EAAA,OAAO,MAAA;AACT;AAJS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAMT,SAAS,aAAA,CAAc,GAAA,EAAoB,CAAA,EAAW,KAAA,EAAe,KAAA,EAAqB;AACxF,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,EAAA,IAAA,CAAK,YAAA,CAAa,KAAK,CAAC,CAAA;AACxB,EAAA,IAAA,CAAK,YAAA,CAAa,QAAQ,MAAM,CAAA;AAChC,EAAA,IAAA,CAAK,YAAA,CAAa,UAAU,KAAK,CAAA;AACjC,EAAA,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,KAAK,CAAC,CAAA;AAC/C,EAAA,IAAA,CAAK,YAAA,CAAa,mBAAmB,OAAO,CAAA;AAC5C,EAAA,IAAA,CAAK,YAAA,CAAa,kBAAkB,OAAO,CAAA;AAC3C,EAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AACjB;AATS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAWT,SAAS,gBACP,GAAA,EACA,EAAA,EACA,IACA,CAAA,EACA,KAAA,EACA,QACA,WAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,QAAQ,CAAA;AAC9E,EAAA,MAAA,CAAO,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,EAAE,CAAC,CAAA;AACpC,EAAA,MAAA,CAAO,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,EAAE,CAAC,CAAA;AACpC,EAAA,MAAA,CAAO,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAClC,EAAA,MAAA,CAAO,YAAA,CAAa,QAAQ,KAAK,CAAA;AACjC,EAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AAChD,EAAA,IAAI,gBAAgB,MAAA,EAAW,MAAA,CAAO,aAAa,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAC,CAAA;AACtF,EAAA,GAAA,CAAI,OAAO,MAAM,CAAA;AACnB;AAjBS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAmBT,SAAS,cAAA,CACP,KACA,CAAA,EACA,CAAA,EACA,WACA,MAAA,EACA,KAAA,EACA,OACA,OAAA,EACM;AACN,EAAA,MAAM,YAAY,KAAA,GAAQ,CAAA;AAC1B,EAAA,MAAM,MAAA,GACJ,cAAc,OAAA,GACV;AAAA,IACE,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,GAAI,MAAA,EAAQ,CAAA,GAAI,SAAS,CAAA;AAAA,IAC1B,CAAC,CAAA,GAAI,MAAA,EAAQ,CAAA,GAAI,SAAS;AAAA,GAC5B,GACA,cAAc,MAAA,GACZ;AAAA,IACE,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,GAAI,MAAA,EAAQ,CAAA,GAAI,SAAS,CAAA;AAAA,IAC1B,CAAC,CAAA,GAAI,MAAA,EAAQ,CAAA,GAAI,SAAS;AAAA,GAC5B,GACA,cAAc,MAAA,GACZ;AAAA,IACE,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,GAAI,SAAA,EAAW,CAAA,GAAI,MAAM,CAAA;AAAA,IAC1B,CAAC,CAAA,GAAI,SAAA,EAAW,CAAA,GAAI,MAAM;AAAA,GAC5B,GACA;AAAA,IACE,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,GAAI,SAAA,EAAW,CAAA,GAAI,MAAM,CAAA;AAAA,IAC1B,CAAC,CAAA,GAAI,SAAA,EAAW,CAAA,GAAI,MAAM;AAAA,GAC5B;AACV,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,SAAS,CAAA;AAChF,EAAA,OAAA,CAAQ,SAAA,CAAU,IAAI,qBAAqB,CAAA;AAC3C,EAAA,OAAA,CAAQ,YAAA,CAAa,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA;AAC/E,EAAA,OAAA,CAAQ,YAAA,CAAa,QAAQ,KAAK,CAAA;AAClC,EAAA,IAAI,OAAA,KAAY,MAAA;AACd,IAAA,OAAA,CAAQ,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAChF,EAAA,GAAA,CAAI,OAAO,OAAO,CAAA;AACpB;AA1CS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AA4CT,SAAS,aAAA,CACP,KACA,CAAA,EACA,CAAA,EACA,OACA,MAAA,EACA,KAAA,EACA,QACA,WAAA,EACM;AACN,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,EAAA,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAChC,EAAA,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAChC,EAAA,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AACxC,EAAA,IAAA,CAAK,YAAA,CAAa,QAAA,EAAU,MAAA,CAAO,MAAM,CAAC,CAAA;AAC1C,EAAA,IAAA,CAAK,YAAA,CAAa,QAAQ,KAAK,CAAA;AAC/B,EAAA,IAAI,MAAA,IAAU,gBAAgB,MAAA,EAAW;AACvC,IAAA,IAAA,CAAK,YAAA,CAAa,UAAU,MAAM,CAAA;AAClC,IAAA,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,EACvD;AACA,EAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AACjB;AArBS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAuBT,SAAS,aAAA,CACP,KACA,IAAA,EACA,CAAA,EACA,GACA,IAAA,EACA,KAAA,EACA,SAAqC,OAAA,EAC/B;AACN,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAC1E,EAAA,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAChC,EAAA,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAChC,EAAA,IAAA,CAAK,YAAA,CAAa,WAAA,EAAa,MAAA,CAAO,IAAI,CAAC,CAAA;AAC3C,EAAA,IAAA,CAAK,YAAA,CAAa,QAAQ,KAAK,CAAA;AAC/B,EAAA,IAAA,CAAK,YAAA,CAAa,eAAe,MAAM,CAAA;AACvC,EAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,EAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AACjB;AAjBS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAmBT,SAAS,sBAAA,CACP,KACA,KAAA,EACA,CAAA,EACA,GACA,IAAA,EACA,KAAA,EACA,SAAqC,OAAA,EAC/B;AACN,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC7B,IAAA,aAAA,CAAc,GAAA,EAAK,MAAM,CAAA,EAAG,CAAA,GAAI,QAAQ,IAAA,GAAO,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,EACzE,CAAC,CAAA;AACH;AAZS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA","file":"ppt-native.cjs","sourcesContent":["import type {\n PptPresentationModel,\n PptChartModel,\n PptCustomGeometryModel,\n PptGradientFillModel,\n PptImageCropModel,\n PptShapeGeometry,\n PptShapeKind,\n PptShapeModel,\n PptShapeStyle,\n PptTextStyle,\n PptSlideBackgroundModel,\n PptSlideModel,\n PptSlideSize,\n PptTableModel,\n PptTextBodyProperties,\n PptTextParagraph,\n} from '@coco-vexel/coco-office/ppt';\n\nexport type PptSceneNodeKind = PptShapeKind;\ntype PptShapeStyleWithLineGradient = PptShapeStyle & {\n lineGradient?: PptGradientFillModel;\n lineCap?: string;\n lineDash?: string;\n};\n\nexport interface PptSceneRect {\n left: number;\n top: number;\n width: number;\n height: number;\n rotation?: number;\n flipHorizontal?: boolean;\n flipVertical?: boolean;\n}\n\nexport interface PptSceneNode {\n id: string;\n name?: string;\n kind: PptSceneNodeKind;\n bounds: PptSceneRect;\n text?: string;\n textStyle?: PptTextStyle;\n textParagraphs?: PptTextParagraph[];\n textBody?: PptTextBodyProperties;\n imagePath?: string;\n imageCrop?: PptImageCropModel;\n imageFillRect?: PptImageCropModel;\n imageOpacity?: number;\n chart?: PptChartModel;\n table?: PptTableModel;\n fillColor?: string;\n fillGradient?: PptGradientFillModel;\n opacity?: number;\n lineColor?: string;\n lineGradient?: PptGradientFillModel;\n lineOpacity?: number;\n lineWidth?: number;\n lineCap?: string;\n lineDash?: string;\n lineHeadEnd?: string;\n lineTailEnd?: string;\n shadow?: PptShapeStyle['shadow'];\n presetGeometry?: string;\n presetAdjustments?: Record<string, number>;\n customGeometry?: PptCustomGeometryModel;\n threeD?: NonNullable<PptShapeModel['raw']>['threeD'];\n usesBackgroundFill?: boolean;\n backgroundFill?: PptSlideBackgroundModel;\n locked: boolean;\n editable: boolean;\n capabilities: PptSceneNodeCapabilities;\n groupContext?: PptSceneGroupContext;\n source: PptShapeModel;\n children: PptSceneNode[];\n}\n\nexport interface PptSceneGroupContext {\n parentId: string;\n parentName?: string;\n parentBounds: PptSceneRect;\n parentTransform: {\n childLeft: number;\n childTop: number;\n childWidth: number;\n childHeight: number;\n };\n}\n\nexport interface PptSceneNodeCapabilities {\n readonly select: boolean;\n readonly editText: boolean;\n readonly editTextStyle: boolean;\n readonly editTableCells: boolean;\n readonly editGeometry: boolean;\n readonly editShapeStyle: boolean;\n readonly reason?: string;\n readonly reasons?: Partial<Record<PptSceneNodeCapability, string>>;\n}\n\nexport interface PptSlideScene {\n id: string;\n index: number;\n name?: string;\n title?: string;\n size: PptSlideSize;\n background?: PptSlideBackgroundModel;\n nodes: PptSceneNode[];\n groups: PptSceneNode[];\n source: PptSlideModel;\n}\n\nexport interface PptPresentationScene {\n size: PptSlideSize;\n slides: PptSlideScene[];\n}\n\nexport type PptSceneNodeCapability =\n 'editText' | 'editTextStyle' | 'editTableCells' | 'editGeometry' | 'editShapeStyle';\n\nexport const DEFAULT_PPT_SLIDE_SIZE: PptSlideSize = {\n width: 9144000,\n height: 5143500,\n};\n\nconst editableShapeKinds = new Set<PptShapeKind>([\n 'placeholder',\n 'textBox',\n 'geometricShape',\n 'line',\n]);\nconst pptSceneGroupContexts = new WeakMap<PptShapeModel, PptSceneGroupContext>();\n\nexport function buildPptPresentationScene(model: PptPresentationModel): PptPresentationScene {\n const size = model.slideSize ?? DEFAULT_PPT_SLIDE_SIZE;\n return {\n size,\n slides: model.slides.map((slide) => buildPptSlideScene(slide, size)),\n };\n}\n\nexport function buildPptSlideScene(\n slide: PptSlideModel,\n fallbackSize: PptSlideSize,\n): PptSlideScene {\n const layoutShapes = slide.layout?.shapes ?? [];\n const inheritedShapes = [\n ...(slide.layout?.master?.shapes ?? []).map((shape) =>\n namespaceInheritedShape(shape, 'master'),\n ),\n ...layoutShapes.map((shape) => namespaceInheritedShape(shape, 'layout')),\n ].filter(shouldRenderInheritedShape);\n const shapes = [\n ...inheritedShapes,\n ...slide.shapes.map((shape) => applyPlaceholderInheritance(shape, layoutShapes)),\n ];\n const renderShapes = shapes.flatMap(flattenRenderableShape);\n const background =\n slide.background ?? slide.layout?.background ?? slide.layout?.master?.background;\n const backgroundFill = background ?? inferFullSlidePictureBackground(shapes, fallbackSize);\n return {\n id: slide.id,\n index: slide.index,\n name: slide.name,\n title: slide.title,\n size: fallbackSize,\n ...(background ? { background } : {}),\n nodes: renderShapes.map((shape, index) =>\n buildPptSceneNode(shape, { slideSize: fallbackSize, index, background, backgroundFill }),\n ),\n groups: shapes.flatMap((shape) =>\n collectGroupSceneNodes(shape, { background, backgroundFill }),\n ),\n source: slide,\n };\n}\n\nfunction inferFullSlidePictureBackground(\n shapes: PptShapeModel[],\n slideSize: PptSlideSize,\n): PptSlideBackgroundModel | undefined {\n const picture = shapes.find((shape) => {\n const bounds = normalizePptGeometry(shape.geometry);\n return (\n shape.kind === 'picture' &&\n !!shape.image?.targetPath &&\n bounds.left <= slideSize.width * 0.02 &&\n bounds.top <= slideSize.height * 0.02 &&\n bounds.width >= slideSize.width * 0.96 &&\n bounds.height >= slideSize.height * 0.96\n );\n });\n return picture?.image?.targetPath ? { imagePath: picture.image.targetPath } : undefined;\n}\n\nfunction namespaceInheritedShape(shape: PptShapeModel, source: 'layout' | 'master'): PptShapeModel {\n return {\n ...shape,\n id: `${source}:${shape.id}`,\n children: shape.children?.map((child) => namespaceInheritedShape(child, source)),\n };\n}\n\nfunction shouldRenderInheritedShape(shape: PptShapeModel): boolean {\n if (shape.placeholder) return false;\n return (\n shape.kind === 'group' ||\n shape.kind === 'picture' ||\n shape.kind === 'geometricShape' ||\n shape.kind === 'line' ||\n shape.kind === 'textBox'\n );\n}\n\nfunction flattenRenderableShape(shape: PptShapeModel): PptShapeModel[] {\n if (shape.kind !== 'group') return [shape];\n return (shape.children ?? []).flatMap((child) =>\n flattenRenderableShape(transformGroupChild(shape, child)),\n );\n}\n\nfunction collectGroupSceneNodes(\n shape: PptShapeModel,\n options: { background?: PptSlideBackgroundModel; backgroundFill?: PptSlideBackgroundModel } = {},\n): PptSceneNode[] {\n if (shape.kind !== 'group') return [];\n return [\n buildPptSceneNode(shape, {\n background: options.background,\n backgroundFill: options.backgroundFill,\n }),\n ...(shape.children ?? [])\n .map((child) => transformGroupChild(shape, child))\n .flatMap((child) => collectGroupSceneNodes(child, options)),\n ];\n}\n\nfunction transformGroupChild(group: PptShapeModel, child: PptShapeModel): PptShapeModel {\n const groupBounds = normalizePptGeometry(group.geometry);\n const groupTransform = group.raw?.groupTransform;\n const childBounds = normalizePptGeometry(child.geometry);\n const childLeft = groupTransform?.childLeft ?? groupBounds.left;\n const childTop = groupTransform?.childTop ?? groupBounds.top;\n const childWidth = groupTransform?.childWidth || groupBounds.width || 1;\n const childHeight = groupTransform?.childHeight || groupBounds.height || 1;\n const scaleX = groupBounds.width / childWidth;\n const scaleY = groupBounds.height / childHeight;\n const scaledLeft = (childBounds.left - childLeft) * scaleX;\n const scaledTop = (childBounds.top - childTop) * scaleY;\n const scaledWidth = childBounds.width * scaleX;\n const scaledHeight = childBounds.height * scaleY;\n const unrotatedLeft = groupBounds.flipHorizontal\n ? groupBounds.left + groupBounds.width - scaledLeft - scaledWidth\n : groupBounds.left + scaledLeft;\n const unrotatedTop = groupBounds.flipVertical\n ? groupBounds.top + groupBounds.height - scaledTop - scaledHeight\n : groupBounds.top + scaledTop;\n const rotatedBounds = rotateGroupChildBounds(\n {\n left: unrotatedLeft,\n top: unrotatedTop,\n width: scaledWidth,\n height: scaledHeight,\n },\n groupBounds,\n );\n const rotation = normalizeRotation((groupBounds.rotation ?? 0) + (childBounds.rotation ?? 0));\n const transformed: PptShapeModel = {\n ...child,\n id: `${group.id}:${child.id}`,\n geometry: {\n ...child.geometry,\n left: rotatedBounds.left,\n top: rotatedBounds.top,\n width: scaledWidth,\n height: scaledHeight,\n rotation,\n flipHorizontal: Boolean(groupBounds.flipHorizontal) !== Boolean(childBounds.flipHorizontal),\n flipVertical: Boolean(groupBounds.flipVertical) !== Boolean(childBounds.flipVertical),\n },\n children: child.children,\n };\n pptSceneGroupContexts.set(transformed, {\n parentId: group.id,\n parentName: group.name,\n parentBounds: groupBounds,\n parentTransform: {\n childLeft,\n childTop,\n childWidth,\n childHeight,\n },\n });\n return transformed;\n}\n\nfunction rotateGroupChildBounds(child: PptSceneRect, group: PptSceneRect): PptSceneRect {\n if (!group.rotation) return child;\n const angle = (group.rotation * Math.PI) / 180;\n const groupCenterX = group.left + group.width / 2;\n const groupCenterY = group.top + group.height / 2;\n const childCenterX = child.left + child.width / 2;\n const childCenterY = child.top + child.height / 2;\n const dx = childCenterX - groupCenterX;\n const dy = childCenterY - groupCenterY;\n const rotatedCenterX = groupCenterX + dx * Math.cos(angle) - dy * Math.sin(angle);\n const rotatedCenterY = groupCenterY + dx * Math.sin(angle) + dy * Math.cos(angle);\n return {\n ...child,\n left: rotatedCenterX - child.width / 2,\n top: rotatedCenterY - child.height / 2,\n };\n}\n\nfunction normalizeRotation(rotation: number): number | undefined {\n const normalized = ((rotation % 360) + 360) % 360;\n return normalized === 0 ? undefined : normalized;\n}\n\nfunction applyPlaceholderInheritance(\n shape: PptShapeModel,\n layoutShapes: PptShapeModel[],\n): PptShapeModel {\n if (!shape.placeholder || !shape.text) return shape;\n const layoutShape = layoutShapes.find((candidate) => samePlaceholder(shape, candidate));\n const inheritedStyle = layoutShape?.text?.style;\n if (!inheritedStyle && !layoutShape) return shape;\n return {\n ...shape,\n geometry: {\n ...layoutShape?.geometry,\n ...shape.geometry,\n },\n text: {\n ...shape.text,\n style: {\n ...inheritedStyle,\n ...shape.text.style,\n },\n },\n };\n}\n\nfunction samePlaceholder(shape: PptShapeModel, candidate: PptShapeModel): boolean {\n if (!candidate.placeholder) return false;\n if (shape.placeholder?.index && candidate.placeholder.index === shape.placeholder.index)\n return true;\n return Boolean(shape.placeholder?.type && candidate.placeholder.type === shape.placeholder.type);\n}\n\nexport function buildPptSceneNode(\n shape: PptShapeModel,\n options: {\n slideSize?: PptSlideSize;\n index?: number;\n background?: PptSlideBackgroundModel;\n backgroundFill?: PptSlideBackgroundModel;\n } = {},\n): PptSceneNode {\n const capabilities = pptSceneNodeCapabilities(shape);\n const editable =\n capabilities.editText ||\n capabilities.editTextStyle ||\n capabilities.editTableCells ||\n capabilities.editGeometry ||\n capabilities.editShapeStyle;\n const shapeStyle = shape.style as PptShapeStyleWithLineGradient | undefined;\n const usesBackgroundFill = shape.raw?.useBackgroundFill === true;\n const fillColor = usesBackgroundFill\n ? undefined\n : (shape.style?.fillColor ?? inferPptSceneFillColor(shape, options));\n const textStyle = inferPptSceneTextStyle(shape.text?.style, {\n fillColor,\n background: options.background,\n });\n const bounds = normalizePptGeometry(shape.geometry);\n return {\n id: shape.id,\n name: shape.name,\n kind: shape.kind,\n bounds: tableVisualBounds(shape, bounds),\n text: shape.text?.text ?? tablePreviewText(shape),\n textStyle,\n textParagraphs: shape.text?.paragraphs,\n textBody: shape.text?.body,\n imagePath: shape.image?.targetPath,\n imageCrop: shape.image?.crop,\n imageFillRect: shape.image?.fillRect,\n imageOpacity: shape.image?.opacity,\n chart: shape.chart,\n table: shape.table,\n fillColor,\n fillGradient: usesBackgroundFill ? undefined : shapeStyle?.fillGradient,\n opacity: shapeStyle?.opacity,\n lineColor: shapeStyle?.lineColor,\n lineGradient: shapeStyle?.lineGradient,\n lineOpacity: shapeStyle?.lineOpacity,\n lineWidth: shapeStyle?.lineWidth,\n lineCap: shapeStyle?.lineCap,\n lineDash: shapeStyle?.lineDash,\n lineHeadEnd: shapeStyle?.lineHeadEnd,\n lineTailEnd: shapeStyle?.lineTailEnd,\n shadow: shapeStyle?.shadow,\n presetGeometry: shape.raw?.presetGeometry,\n presetAdjustments: shape.raw?.presetAdjustments,\n customGeometry: shape.raw?.customGeometry,\n threeD: shape.raw?.threeD,\n usesBackgroundFill,\n ...(usesBackgroundFill && options.backgroundFill\n ? { backgroundFill: options.backgroundFill }\n : {}),\n locked: !editable,\n editable,\n capabilities,\n groupContext: groupContextOf(shape),\n source: shape,\n children: (shape.children ?? []).map((child) =>\n buildPptSceneNode(child, {\n background: options.background,\n backgroundFill: options.backgroundFill,\n }),\n ),\n };\n}\n\nfunction tablePreviewText(shape: PptShapeModel): string | undefined {\n if (!shape.table) return undefined;\n return shape.table.values.map((row) => row.join(' ')).join('\\n');\n}\n\nfunction tableVisualBounds(shape: PptShapeModel, bounds: PptSceneRect): PptSceneRect {\n if (!shape.table) return bounds;\n const width = sumPositiveNumbers(shape.table.columnWidths);\n const height = sumPositiveNumbers(shape.table.rowHeights);\n if (width === undefined && height === undefined) return bounds;\n return {\n ...bounds,\n ...(shouldUseTableGridExtent(bounds.width, width) ? { width } : {}),\n ...(shouldUseTableGridExtent(bounds.height, height) ? { height } : {}),\n };\n}\n\nfunction sumPositiveNumbers(values: number[] | undefined): number | undefined {\n if (!values?.length) return undefined;\n const sum = values.reduce((total, value) => total + value, 0);\n return Number.isFinite(sum) && sum > 0 ? sum : undefined;\n}\n\nfunction shouldUseTableGridExtent(frameExtent: number, gridExtent: number | undefined): boolean {\n if (gridExtent === undefined) return false;\n if (!Number.isFinite(frameExtent) || frameExtent <= 0) return true;\n const ratio = gridExtent / frameExtent;\n return ratio > 1.15;\n}\n\nfunction inferPptSceneFillColor(\n shape: PptShapeModel,\n options: { slideSize?: PptSlideSize; index?: number },\n): string | undefined {\n const bounds = normalizePptGeometry(shape.geometry);\n const size = options.slideSize;\n if (\n options.index === 0 &&\n shape.kind === 'geometricShape' &&\n !shape.text?.text &&\n size &&\n bounds.left <= 0 &&\n bounds.top <= 0 &&\n bounds.width >= size.width * 0.95 &&\n bounds.height >= size.height * 0.95\n ) {\n return '#1D3F80';\n }\n return undefined;\n}\n\nfunction inferPptSceneTextStyle(\n style: PptTextStyle | undefined,\n context: { fillColor?: string; background?: PptSlideBackgroundModel },\n): PptTextStyle | undefined {\n if (style?.color) return style;\n const referenceColor = context.fillColor ?? context.background?.fillColor;\n if (!referenceColor || !isDarkColor(referenceColor)) return style;\n return {\n ...style,\n color: '#FFFFFF',\n };\n}\n\nfunction isDarkColor(color: string): boolean {\n const match = /^#?([0-9a-f]{6})$/i.exec(color);\n if (!match) return false;\n const value = match[1]!;\n const r = Number.parseInt(value.slice(0, 2), 16);\n const g = Number.parseInt(value.slice(2, 4), 16);\n const b = Number.parseInt(value.slice(4, 6), 16);\n return (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255 < 0.45;\n}\n\nexport function isPptShapeEditable(shape: PptShapeModel): boolean {\n const capabilities = pptSceneNodeCapabilities(shape);\n return (\n capabilities.editText ||\n capabilities.editTextStyle ||\n capabilities.editTableCells ||\n capabilities.editGeometry ||\n capabilities.editShapeStyle\n );\n}\n\nexport function pptSceneNodeCapabilities(shape: PptShapeModel): PptSceneNodeCapabilities {\n if (isInheritedPptShape(shape)) {\n return {\n select: true,\n editText: false,\n editTextStyle: false,\n editTableCells: false,\n editGeometry: false,\n editShapeStyle: false,\n reason: 'Inherited from layout/master',\n reasons: allCapabilityReasons('继承自母版/版式,当前只支持查看'),\n };\n }\n if (isProjectedGroupChild(shape)) {\n const editableTextShape = Boolean(shape.text) && editableShapeKinds.has(shape.kind);\n const editableTable = shape.kind === 'table' && Boolean(shape.table);\n const baseReason = '组内子对象暂不支持该项直接编辑';\n return {\n select: true,\n editText: editableTextShape,\n editTextStyle: editableTextShape,\n editTableCells: editableTable,\n editGeometry: true,\n editShapeStyle: false,\n reason: 'Flattened group child',\n reasons: disabledCapabilityReasons({\n editText: editableTextShape ? undefined : textCapabilityReason(shape),\n editTextStyle: editableTextShape ? undefined : textCapabilityReason(shape),\n editTableCells: editableTable ? undefined : '当前对象不是表格',\n editShapeStyle: baseReason,\n }),\n };\n }\n if (shape.kind === 'table') {\n return {\n select: true,\n editText: false,\n editTextStyle: false,\n editTableCells: true,\n editGeometry: true,\n editShapeStyle: true,\n reasons: disabledCapabilityReasons({\n editText: '表格文字请使用单元格编辑',\n editTextStyle: '表格文字样式当前不在高频工具栏开放',\n }),\n };\n }\n if (shape.kind === 'picture') {\n return {\n select: true,\n editText: false,\n editTextStyle: false,\n editTableCells: false,\n editGeometry: true,\n editShapeStyle: true,\n reasons: disabledCapabilityReasons({\n editText: '图片对象没有可编辑文字',\n editTextStyle: '图片对象没有可编辑文字样式',\n editTableCells: '当前对象不是表格',\n }),\n };\n }\n if (shape.kind === 'chart' || shape.kind === 'smartArt' || shape.kind === 'group') {\n const reason = limitedObjectTypeReason(shape.kind);\n return {\n select: true,\n editText: false,\n editTextStyle: false,\n editTableCells: false,\n editGeometry: true,\n editShapeStyle: false,\n reason: 'Limited editor support for this object type',\n reasons: disabledCapabilityReasons({\n editText: reason.text,\n editTextStyle: reason.textStyle,\n editTableCells: '当前对象不是表格',\n editShapeStyle: reason.shapeStyle,\n }),\n };\n }\n const editableTextShape = Boolean(shape.text) && editableShapeKinds.has(shape.kind);\n if (editableShapeKinds.has(shape.kind)) {\n return {\n select: true,\n editText: editableTextShape,\n editTextStyle: editableTextShape,\n editTableCells: false,\n editGeometry: true,\n editShapeStyle: true,\n reasons: disabledCapabilityReasons({\n editText: editableTextShape ? undefined : textCapabilityReason(shape),\n editTextStyle: editableTextShape ? undefined : textCapabilityReason(shape),\n editTableCells: '当前对象不是表格',\n }),\n };\n }\n return {\n select: true,\n editText: false,\n editTextStyle: false,\n editTableCells: false,\n editGeometry: false,\n editShapeStyle: false,\n reason: 'Unsupported object type',\n reasons: allCapabilityReasons('当前对象类型暂不支持常规编辑'),\n };\n}\n\nfunction disabledCapabilityReasons(\n reasons: Partial<Record<PptSceneNodeCapability, string | undefined>>,\n): Partial<Record<PptSceneNodeCapability, string>> {\n return Object.fromEntries(\n Object.entries(reasons).filter((entry): entry is [PptSceneNodeCapability, string] =>\n Boolean(entry[1]),\n ),\n ) as Partial<Record<PptSceneNodeCapability, string>>;\n}\n\nfunction allCapabilityReasons(reason: string): Partial<Record<PptSceneNodeCapability, string>> {\n return {\n editText: reason,\n editTextStyle: reason,\n editTableCells: reason,\n editGeometry: reason,\n editShapeStyle: reason,\n };\n}\n\nfunction textCapabilityReason(shape: PptShapeModel): string {\n if (!shape.text) return '当前对象没有可编辑文字内容';\n if (!editableShapeKinds.has(shape.kind)) return '当前对象类型暂不支持文字编辑';\n return '当前对象文字暂不支持编辑';\n}\n\nfunction limitedObjectTypeReason(kind: PptShapeKind): {\n text: string;\n textStyle: string;\n shapeStyle: string;\n} {\n if (kind === 'chart') {\n return {\n text: '图表文字绑定在图表数据中,当前仅开放整体位置尺寸',\n textStyle: '图表内部文字样式暂未开放',\n shapeStyle: '图表形状样式暂未开放',\n };\n }\n if (kind === 'smartArt') {\n return {\n text: 'SmartArt 内部文本结构暂未开放',\n textStyle: 'SmartArt 内部文字样式暂未开放',\n shapeStyle: 'SmartArt 样式暂未开放',\n };\n }\n return {\n text: '组合对象请双击或点选组内子对象编辑文字',\n textStyle: '组合对象请选中组内文本子对象编辑文字样式',\n shapeStyle: '组合对象暂不支持整体形状样式编辑',\n };\n}\n\nfunction isInheritedPptShape(shape: PptShapeModel): boolean {\n return shape.id.startsWith('layout:') || shape.id.startsWith('master:');\n}\n\nfunction isProjectedGroupChild(shape: PptShapeModel): boolean {\n return shape.id.includes(':');\n}\n\nexport function pptSceneGeometryToSourceGeometry(\n node: PptSceneNode,\n geometry: Partial<PptShapeGeometry>,\n): Partial<PptShapeGeometry> {\n if (!node.groupContext) return geometry;\n const parent = node.groupContext.parentBounds;\n const transform = node.groupContext.parentTransform;\n const nextBounds = { ...node.bounds, ...geometry };\n const scaleX = parent.width / (transform.childWidth || parent.width || 1);\n const scaleY = parent.height / (transform.childHeight || parent.height || 1);\n const center = inverseRotatePoint(\n nextBounds.left + nextBounds.width / 2,\n nextBounds.top + nextBounds.height / 2,\n parent,\n );\n const unrotatedLeft = center.x - nextBounds.width / 2;\n const unrotatedTop = center.y - nextBounds.height / 2;\n const scaledLeft = parent.flipHorizontal\n ? parent.left + parent.width - unrotatedLeft - nextBounds.width\n : unrotatedLeft - parent.left;\n const scaledTop = parent.flipVertical\n ? parent.top + parent.height - unrotatedTop - nextBounds.height\n : unrotatedTop - parent.top;\n const source: Partial<PptShapeGeometry> = {};\n if (geometry.left !== undefined) source.left = scaledLeft / scaleX + transform.childLeft;\n if (geometry.top !== undefined) source.top = scaledTop / scaleY + transform.childTop;\n if (geometry.width !== undefined) source.width = nextBounds.width / scaleX;\n if (geometry.height !== undefined) source.height = nextBounds.height / scaleY;\n if (geometry.rotation !== undefined)\n source.rotation = normalizeRotation(geometry.rotation - (parent.rotation ?? 0));\n if (geometry.flipHorizontal !== undefined)\n source.flipHorizontal = Boolean(parent.flipHorizontal) !== Boolean(geometry.flipHorizontal);\n if (geometry.flipVertical !== undefined)\n source.flipVertical = Boolean(parent.flipVertical) !== Boolean(geometry.flipVertical);\n return source;\n}\n\nfunction groupContextOf(shape: PptShapeModel): PptSceneGroupContext | undefined {\n return pptSceneGroupContexts.get(shape);\n}\n\nfunction inverseRotatePoint(x: number, y: number, group: PptSceneRect): { x: number; y: number } {\n if (!group.rotation) return { x, y };\n const angle = (-group.rotation * Math.PI) / 180;\n const centerX = group.left + group.width / 2;\n const centerY = group.top + group.height / 2;\n const dx = x - centerX;\n const dy = y - centerY;\n return {\n x: centerX + dx * Math.cos(angle) - dy * Math.sin(angle),\n y: centerY + dx * Math.sin(angle) + dy * Math.cos(angle),\n };\n}\n\nexport function normalizePptGeometry(geometry: PptShapeGeometry = {}): PptSceneRect {\n return {\n left: geometry.left ?? 0,\n top: geometry.top ?? 0,\n width: geometry.width ?? 0,\n height: geometry.height ?? 0,\n rotation: geometry.rotation,\n flipHorizontal: geometry.flipHorizontal,\n flipVertical: geometry.flipVertical,\n };\n}\n\nexport function findPptSceneSlide(\n scene: PptPresentationScene,\n slideIdOrIndex: string | number,\n): PptSlideScene | null {\n if (typeof slideIdOrIndex === 'number') {\n return scene.slides.find((slide) => slide.index === slideIdOrIndex) ?? null;\n }\n return (\n scene.slides.find((slide) => slide.id === slideIdOrIndex || slide.name === slideIdOrIndex) ??\n null\n );\n}\n\nexport function findPptSceneNode(slide: PptSlideScene, shapeIdOrName: string): PptSceneNode | null {\n const stack = [...slide.nodes, ...slide.groups];\n while (stack.length > 0) {\n const node = stack.shift()!;\n if (node.id === shapeIdOrName || node.name === shapeIdOrName) return node;\n stack.unshift(...node.children);\n }\n return null;\n}\n","import {\n Presentation,\n Shape,\n ShapeCollection,\n type PptPresentationModel,\n type PptShapeGeometry,\n type PptShapeStyle,\n type PptTextStyle,\n} from '@coco-vexel/coco-office/ppt';\nimport {\n buildPptSceneNode,\n buildPptPresentationScene,\n findPptSceneNode,\n findPptSceneSlide,\n pptSceneGeometryToSourceGeometry,\n type PptSceneNode,\n type PptPresentationScene,\n} from './scene.js';\nimport type { PptEditorView } from './view.js';\n\nexport type PptEditorSelection =\n { kind: 'slide'; slideId: string } | { kind: 'shape'; slideId: string; shapeId: string } | null;\n\nexport type PptEditorCommand =\n | { kind: 'select-slide'; slideIdOrIndex: string | number }\n | { kind: 'select-shape'; slideIdOrIndex: string | number; shapeIdOrName: string }\n | { kind: 'set-shape-text'; slideIdOrIndex: string | number; shapeIdOrName: string; text: string }\n | {\n kind: 'set-shape-text-style';\n slideIdOrIndex: string | number;\n shapeIdOrName: string;\n style: Partial<PptTextStyle>;\n }\n | {\n kind: 'set-table-cell-text';\n slideIdOrIndex: string | number;\n shapeIdOrName: string;\n row: number;\n column: number;\n text: string;\n }\n | {\n kind: 'set-shape-geometry';\n slideIdOrIndex: string | number;\n shapeIdOrName: string;\n geometry: Partial<PptShapeGeometry>;\n preserveTextSizeOnResize?: boolean;\n }\n | {\n kind: 'set-shape-style';\n slideIdOrIndex: string | number;\n shapeIdOrName: string;\n style: Partial<PptShapeStyle>;\n }\n | { kind: 'delete-shape'; slideIdOrIndex: string | number; shapeIdOrName: string }\n | {\n kind: 'duplicate-shape';\n slideIdOrIndex: string | number;\n shapeIdOrName: string;\n offset?: Partial<PptShapeGeometry>;\n }\n | {\n kind: 'paste-shape';\n slideIdOrIndex: string | number;\n shapeIdOrName: string;\n offset?: Partial<PptShapeGeometry>;\n }\n | { kind: 'bring-shape-to-front'; slideIdOrIndex: string | number; shapeIdOrName: string }\n | { kind: 'send-shape-to-back'; slideIdOrIndex: string | number; shapeIdOrName: string };\n\nexport type PptEditorRuntimeEvent = 'change' | 'selectionChange';\n\nexport interface PptEditorChangeEvent {\n readonly revision: number;\n readonly command: PptEditorCommand;\n readonly model: PptPresentationModel;\n readonly scene: PptPresentationScene;\n}\n\nexport interface PptEditorSelectionChangeEvent {\n readonly selection: PptEditorSelection;\n}\n\nexport interface PptEditorRuntimeEventMap {\n change: PptEditorChangeEvent;\n selectionChange: PptEditorSelectionChangeEvent;\n}\n\nexport interface PptEditorSessionOptions {\n maxHistory?: number;\n}\n\ntype Listener<T> = (event: T) => void;\ntype PptExistingShapeCommand = Exclude<PptEditorCommand, { kind: 'select-slide' | 'select-shape' }>;\ntype PptTextBodyOverride = NonNullable<PptSceneNode['textBody']>;\ninterface PptEditorHistoryEntry {\n readonly bytes: Uint8Array;\n readonly textBodyOverrides: Map<string, PptTextBodyOverride>;\n}\n\nexport class PptEditorSession {\n private presentationValue: Presentation;\n private modelValue: PptPresentationModel;\n private sceneValue: PptPresentationScene;\n private selectionValue: PptEditorSelection = null;\n private revisionValue = 0;\n private readonly undoStack: PptEditorHistoryEntry[] = [];\n private readonly redoStack: PptEditorHistoryEntry[] = [];\n private readonly textBodyOverrides = new Map<string, PptTextBodyOverride>();\n private readonly maxHistory: number;\n private readonly changeListeners = new Set<Listener<PptEditorChangeEvent>>();\n private readonly selectionListeners = new Set<Listener<PptEditorSelectionChangeEvent>>();\n\n constructor(view: PptEditorView, options: PptEditorSessionOptions = {}) {\n this.presentationValue = view.presentation;\n this.modelValue = view.model;\n this.sceneValue = view.scene;\n this.maxHistory = options.maxHistory ?? 50;\n this.selectionValue = view.scene.slides[0]\n ? { kind: 'slide', slideId: view.scene.slides[0].id }\n : null;\n }\n\n presentation(): Presentation {\n return this.presentationValue;\n }\n\n model(): PptPresentationModel {\n return this.modelValue;\n }\n\n scene(): PptPresentationScene {\n return this.sceneValue;\n }\n\n selection(): PptEditorSelection {\n return this.selectionValue;\n }\n\n revision(): number {\n return this.revisionValue;\n }\n\n canUndo(): boolean {\n return this.undoStack.length > 0;\n }\n\n canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n subscribe<K extends PptEditorRuntimeEvent>(\n event: K,\n listener: Listener<PptEditorRuntimeEventMap[K]>,\n ): () => void {\n const listeners = event === 'change' ? this.changeListeners : this.selectionListeners;\n listeners.add(\n listener as Listener<PptEditorChangeEvent> & Listener<PptEditorSelectionChangeEvent>,\n );\n return () =>\n listeners.delete(\n listener as Listener<PptEditorChangeEvent> & Listener<PptEditorSelectionChangeEvent>,\n );\n }\n\n async dispatch(command: PptEditorCommand): Promise<void> {\n if (command.kind === 'select-slide' || command.kind === 'select-shape') {\n await this.applySelectionCommand(command);\n return;\n }\n\n const before = await this.presentationValue.toZip();\n const nextSelection = await this.applyEditCommand(command);\n this.pushUndo(before);\n this.redoStack.length = 0;\n await this.refreshAfterChange(command);\n if (nextSelection !== undefined) this.setSelection(nextSelection);\n }\n\n async undo(): Promise<void> {\n const entry = this.undoStack.pop();\n if (!entry) return;\n const selection = this.selectionValue;\n this.redoStack.push(this.historyEntry(await this.presentationValue.toZip()));\n this.restoreTextBodyOverrides(entry.textBodyOverrides);\n await this.replacePresentation(entry.bytes, selection);\n }\n\n async redo(): Promise<void> {\n const entry = this.redoStack.pop();\n if (!entry) return;\n const selection = this.selectionValue;\n this.undoStack.push(this.historyEntry(await this.presentationValue.toZip()));\n this.restoreTextBodyOverrides(entry.textBodyOverrides);\n await this.replacePresentation(entry.bytes, selection);\n }\n\n async loadPresentation(bytes: Uint8Array | ArrayBuffer): Promise<void> {\n this.undoStack.length = 0;\n this.redoStack.length = 0;\n this.textBodyOverrides.clear();\n await this.replacePresentation(bytes);\n }\n\n async toPptx(): Promise<Uint8Array> {\n return this.presentationValue.toZip();\n }\n\n async verifyExport(): Promise<PptPresentationModel> {\n const bytes = await this.toPptx();\n const reloaded = await Presentation.fromZip(bytes, { mode: 'inline' });\n try {\n return await reloaded.toModel();\n } finally {\n await reloaded.dispose();\n }\n }\n\n async destroy(): Promise<void> {\n await this.presentationValue.dispose();\n this.undoStack.length = 0;\n this.redoStack.length = 0;\n this.changeListeners.clear();\n this.selectionListeners.clear();\n }\n\n private async applySelectionCommand(\n command: Extract<PptEditorCommand, { kind: 'select-slide' | 'select-shape' }>,\n ): Promise<void> {\n const slide = findPptSceneSlide(this.sceneValue, command.slideIdOrIndex);\n if (!slide) throw new Error(`PPT slide not found: ${String(command.slideIdOrIndex)}`);\n if (command.kind === 'select-slide') {\n this.setSelection({ kind: 'slide', slideId: slide.id });\n return;\n }\n const shape = findPptSceneNode(slide, command.shapeIdOrName);\n if (!shape) throw new Error(`PPT shape not found: ${command.shapeIdOrName}`);\n this.setSelection({ kind: 'shape', slideId: slide.id, shapeId: shape.id });\n }\n\n private async applyEditCommand(\n command: Exclude<PptEditorCommand, { kind: 'select-slide' | 'select-shape' }>,\n ): Promise<PptEditorSelection | undefined> {\n if (\n command.kind === 'delete-shape' ||\n command.kind === 'duplicate-shape' ||\n command.kind === 'paste-shape' ||\n command.kind === 'bring-shape-to-front' ||\n command.kind === 'send-shape-to-back'\n ) {\n return this.applyShapeCollectionCommand(command);\n }\n const sceneNode = this.assertEditableSceneNodeForCommand(command);\n const sceneSlide = findPptSceneSlide(this.sceneValue, command.slideIdOrIndex);\n if (!sceneSlide) throw new Error(`PPT slide not found: ${String(command.slideIdOrIndex)}`);\n const slide = this.presentationValue.slides.getItem(command.slideIdOrIndex);\n const shape = resolvePptRuntimeShape(slide.shapes, command.shapeIdOrName);\n if (command.kind === 'set-shape-text') {\n await shape.text.setText(command.text, { preserveFirstRunStyle: true });\n return undefined;\n }\n if (command.kind === 'set-shape-text-style') {\n await shape.text.setTextStyle(command.style);\n return undefined;\n }\n if (command.kind === 'set-table-cell-text') {\n await shape.table.setCellText(command.row, command.column, command.text);\n return undefined;\n }\n if (command.kind === 'set-shape-geometry') {\n if (command.preserveTextSizeOnResize && shouldUseWrappingAfterTextResize(sceneNode)) {\n const body = {\n ...sceneNode.textBody,\n autoFit: 'none' as const,\n wrap: sceneNode.textBody?.wrap ?? ('square' as const),\n };\n await shape.text.setBodyProperties(body);\n this.textBodyOverrides.set(textBodyOverrideKey(sceneSlide.id, sceneNode.id), body);\n }\n await shape.setGeometry(pptSceneGeometryToSourceGeometry(sceneNode, command.geometry));\n return undefined;\n }\n await shape.setStyle(command.style);\n return undefined;\n }\n\n private assertEditableSceneNodeForCommand(command: PptExistingShapeCommand): PptSceneNode {\n const slide = findPptSceneSlide(this.sceneValue, command.slideIdOrIndex);\n if (!slide) throw new Error(`PPT slide not found: ${String(command.slideIdOrIndex)}`);\n const shape =\n findPptSceneNode(slide, command.shapeIdOrName) ??\n editableTopLevelSceneNode(slide, command.shapeIdOrName);\n if (!shape) throw new Error(`PPT shape not found: ${command.shapeIdOrName}`);\n if (\n isShapeCollectionCommand(command) &&\n (shape.locked || shape.id.includes(':') || !shape.editable)\n ) {\n throw new Error(`PPT shape collection operation is not editable: ${shape.id}`);\n }\n if (command.kind === 'set-shape-text' && !shape.capabilities.editText) {\n throw new Error(`PPT shape is not text-editable: ${shape.id}`);\n }\n if (command.kind === 'set-shape-text-style' && !shape.capabilities.editTextStyle) {\n throw new Error(`PPT shape text style is not editable: ${shape.id}`);\n }\n if (command.kind === 'set-table-cell-text' && !shape.capabilities.editTableCells) {\n throw new Error(`PPT shape table cells are not editable: ${shape.id}`);\n }\n if (command.kind === 'set-shape-geometry' && !shape.capabilities.editGeometry) {\n throw new Error(`PPT shape geometry is not editable: ${shape.id}`);\n }\n if (command.kind === 'set-shape-style' && !shape.capabilities.editShapeStyle) {\n throw new Error(`PPT shape style is not editable: ${shape.id}`);\n }\n return shape;\n }\n\n private async applyShapeCollectionCommand(\n command: Extract<\n PptEditorCommand,\n {\n kind:\n | 'delete-shape'\n | 'duplicate-shape'\n | 'paste-shape'\n | 'bring-shape-to-front'\n | 'send-shape-to-back';\n }\n >,\n ): Promise<PptEditorSelection> {\n this.assertEditableSceneNodeForCommand(command);\n const sceneSlide = findPptSceneSlide(this.sceneValue, command.slideIdOrIndex);\n if (!sceneSlide) throw new Error(`PPT slide not found: ${String(command.slideIdOrIndex)}`);\n const sceneNode = findPptSceneNode(sceneSlide, command.shapeIdOrName);\n if (!sceneNode) throw new Error(`PPT shape not found: ${command.shapeIdOrName}`);\n const slide = this.presentationValue.slides.getItem(command.slideIdOrIndex);\n const shape = slide.shapes.getItem(command.shapeIdOrName);\n if (command.kind === 'delete-shape') {\n await shape.delete();\n return { kind: 'slide', slideId: sceneSlide.id };\n }\n if (command.kind === 'bring-shape-to-front') {\n await shape.bringToFront();\n return { kind: 'shape', slideId: sceneSlide.id, shapeId: sceneNode.id };\n }\n if (command.kind === 'send-shape-to-back') {\n await shape.sendToBack();\n return { kind: 'shape', slideId: sceneSlide.id, shapeId: sceneNode.id };\n }\n\n const duplicateGeometry = {\n left:\n typeof sceneNode.bounds.left === 'number'\n ? sceneNode.bounds.left + (command.offset?.left ?? 180000)\n : sceneNode.bounds.left,\n top:\n typeof sceneNode.bounds.top === 'number'\n ? sceneNode.bounds.top + (command.offset?.top ?? 180000)\n : sceneNode.bounds.top,\n width: command.offset?.width ?? sceneNode.bounds.width,\n height: command.offset?.height ?? sceneNode.bounds.height,\n };\n const duplicated = await shape.duplicate({ geometry: duplicateGeometry });\n const duplicatedModel = await duplicated.toModel();\n return { kind: 'shape', slideId: sceneSlide.id, shapeId: duplicatedModel.id };\n }\n\n private async refreshAfterChange(command: PptEditorCommand): Promise<void> {\n this.modelValue = await this.presentationValue.toModel();\n this.sceneValue = buildPptPresentationScene(this.modelValue);\n this.applyTextBodyOverrides();\n this.revisionValue += 1;\n this.changeListeners.forEach((listener) =>\n listener({\n revision: this.revisionValue,\n command,\n model: this.modelValue,\n scene: this.sceneValue,\n }),\n );\n }\n\n private async replacePresentation(\n bytes: Uint8Array | ArrayBuffer,\n preferredSelection: PptEditorSelection = null,\n ): Promise<void> {\n const next = await Presentation.fromZip(bytes, { mode: 'inline' });\n await this.presentationValue.dispose();\n this.presentationValue = next;\n this.modelValue = await next.toModel();\n this.sceneValue = buildPptPresentationScene(this.modelValue);\n this.applyTextBodyOverrides();\n if (preferredSelection) {\n const slide = this.sceneValue.slides.find((item) => item.id === preferredSelection.slideId);\n if (preferredSelection.kind === 'slide' && slide) {\n this.setSelection({ kind: 'slide', slideId: slide.id });\n return;\n }\n if (\n preferredSelection.kind === 'shape' &&\n slide?.nodes.some((node) => node.id === preferredSelection.shapeId)\n ) {\n this.setSelection({\n kind: 'shape',\n slideId: slide.id,\n shapeId: preferredSelection.shapeId,\n });\n return;\n }\n }\n const firstSlide = this.sceneValue.slides[0];\n this.setSelection(firstSlide ? { kind: 'slide', slideId: firstSlide.id } : null);\n }\n\n private setSelection(selection: PptEditorSelection): void {\n this.selectionValue = selection;\n this.selectionListeners.forEach((listener) => listener({ selection }));\n }\n\n private pushUndo(bytes: Uint8Array): void {\n this.undoStack.push(this.historyEntry(bytes));\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n private historyEntry(bytes: Uint8Array): PptEditorHistoryEntry {\n return {\n bytes,\n textBodyOverrides: new Map(this.textBodyOverrides),\n };\n }\n\n private restoreTextBodyOverrides(overrides: Map<string, PptTextBodyOverride>): void {\n this.textBodyOverrides.clear();\n overrides.forEach((body, key) => this.textBodyOverrides.set(key, { ...body }));\n }\n\n private applyTextBodyOverrides(): void {\n for (const [key, body] of this.textBodyOverrides) {\n const [slideId, shapeId] = key.split('\\u0000');\n if (!slideId || !shapeId) continue;\n const slide = findPptSceneSlide(this.sceneValue, slideId);\n const node = slide ? findPptSceneNode(slide, shapeId) : null;\n if (!node || (!node.text && !node.textParagraphs?.length)) continue;\n node.textBody = {\n ...node.textBody,\n ...body,\n };\n }\n }\n}\n\nfunction textBodyOverrideKey(slideId: string, shapeId: string): string {\n return `${slideId}\\u0000${shapeId}`;\n}\n\nfunction shouldUseWrappingAfterTextResize(node: PptSceneNode): boolean {\n return Boolean(\n node.capabilities.editGeometry &&\n isResizeWrappingTextShape(node) &&\n (node.text || node.textParagraphs?.length),\n );\n}\n\nfunction isResizeWrappingTextShape(node: PptSceneNode): boolean {\n return node.kind === 'placeholder' || node.kind === 'textBox' || node.kind === 'geometricShape';\n}\n\nfunction editableTopLevelSceneNode(\n slide: PptPresentationScene['slides'][number],\n idOrName: string,\n): PptSceneNode | null {\n const source = slide.source.shapes.find(\n (shape) => shape.id === idOrName || shape.name === idOrName,\n );\n return source\n ? buildPptSceneNode(source, { slideSize: slide.size, background: slide.background })\n : null;\n}\n\nfunction resolvePptRuntimeShape(shapes: ShapeCollection, idOrName: string): Shape {\n const path = idOrName.split(':').filter(Boolean);\n if (path.length <= 1) return shapes.getItem(idOrName);\n let shape = shapes.getItem(path[0]!);\n for (const id of path.slice(1)) {\n shape = shape.group.getItem(id);\n }\n return shape;\n}\n\nfunction isShapeCollectionCommand(command: PptExistingShapeCommand): command is Extract<\n PptExistingShapeCommand,\n {\n kind:\n | 'delete-shape'\n | 'duplicate-shape'\n | 'paste-shape'\n | 'bring-shape-to-front'\n | 'send-shape-to-back';\n }\n> {\n return (\n command.kind === 'delete-shape' ||\n command.kind === 'duplicate-shape' ||\n command.kind === 'paste-shape' ||\n command.kind === 'bring-shape-to-front' ||\n command.kind === 'send-shape-to-back'\n );\n}\n","import type { PptSceneNode, PptSlideScene } from './scene.js';\nimport { PptEditorSession, type PptEditorCommand, type PptEditorSelection } from './session.js';\nimport type { PptEditorView } from './view.js';\n\ninterface NativePptDragState {\n mode: 'move' | 'resize';\n slideId: string;\n shapeId: string;\n slideSize: PptSlideScene['size'];\n startClientX: number;\n startClientY: number;\n startBounds: PptSceneNode['bounds'];\n scale: number;\n element: HTMLElement;\n active: boolean;\n}\n\ninterface PptSnapGuide {\n axis: 'x' | 'y';\n value: number;\n kind: 'slide' | 'shape';\n referenceShapeId?: string;\n}\n\ntype PptSnapRole = 'start' | 'center' | 'end';\n\ninterface PptSnapResult {\n bounds: PptSceneNode['bounds'];\n guides: PptSnapGuide[];\n snapped: boolean;\n}\n\nconst MIN_PPT_DRAG_VISIBLE_EMU = 240000;\nconst MIN_PPT_RESIZE_SIZE_EMU = 91440;\nconst PPT_KEYBOARD_NUDGE_EMU = 91440;\nconst PPT_DRAG_START_THRESHOLD_PX = 4;\nconst PPT_DRAG_SNAP_THRESHOLD_PX = 7;\nconst PPT_THUMB_WIDTH_PX = 128;\nconst PPT_THUMB_MARGIN_BOTTOM_PX = 8;\nconst PPT_THUMB_OVERSCAN = 2;\nconst PPT_THUMB_RASTER_SCALE = 2;\n\ntype PptTextAlignment = NonNullable<NonNullable<PptSceneNode['textStyle']>['alignment']>;\ntype NativePptTextStyle = NonNullable<PptSceneNode['textStyle']> & {\n textFill?: 'none';\n textGradient?: PptGradientModel;\n textOutlineColor?: string;\n textShadow?: NonNullable<PptSceneNode['shadow']>;\n};\ntype PptCustomGeometryPath = NonNullable<PptSceneNode['customGeometry']>['paths'][number];\ntype PptCustomGeometryCommand = PptCustomGeometryPath['commands'][number];\ntype PptGradientModel = NonNullable<PptSceneNode['fillGradient']>;\ninterface PptThumbnailCanvasCacheEntry {\n readonly fingerprint: string;\n readonly canvas: HTMLCanvasElement;\n}\ntype PptChartModel = NonNullable<PptSceneNode['chart']>;\ntype PptChartData = NonNullable<PptChartModel['data']>;\ntype PptChartSeriesList = PptChartData['series'];\ntype PptChartSeries = PptChartSeriesList[number];\ntype PptTableMerge = NonNullable<NonNullable<PptSceneNode['table']>['mergedCells']>[number];\ntype PptTableCellStyle = NonNullable<\n NonNullable<PptSceneNode['table']>['cellStyles']\n>[number][number];\ntype PptParagraphStyle = NonNullable<PptSceneNode['textParagraphs']>[number]['style'];\n\nexport interface NativePptEditorOptions {\n styleIsolation?: 'shadow' | 'none';\n onChange?: (event: { revision: number; bytes: Uint8Array }) => void | Promise<void>;\n onObjectAction?: (event: {\n action:\n | 'blocked-text-edit'\n | 'cycle-selection'\n | 'nudge-geometry'\n | 'snap-geometry'\n | 'copy-shape'\n | 'paste-shape'\n | 'delete-shape'\n | 'duplicate-shape'\n | 'bring-shape-to-front'\n | 'send-shape-to-back';\n slideId: string;\n shapeId: string;\n kind: PptSceneNode['kind'];\n name?: string;\n reason: string;\n candidateIndex?: number;\n candidateCount?: number;\n }) => void;\n onTextEditStateChange?: (event: {\n state: 'start' | 'commit' | 'cancel';\n slideId: string;\n shapeId: string;\n text: string;\n }) => void;\n onTableCellSelectionChange?: (event: {\n slideId: string;\n shapeId: string;\n row: number;\n column: number;\n text: string;\n }) => void;\n}\n\nexport interface NativePptEditor {\n session(): PptEditorSession;\n selection(): PptEditorSelection;\n dispatch(command: PptEditorCommand): Promise<void>;\n loadPresentation(bytes: Uint8Array | ArrayBuffer): Promise<void>;\n toPptx(): Promise<Uint8Array>;\n canUndo(): boolean;\n canRedo(): boolean;\n undo(): Promise<void>;\n redo(): Promise<void>;\n destroy(): Promise<void>;\n}\n\nexport function renderNativePptEditor(\n host: HTMLElement,\n view: PptEditorView,\n options: NativePptEditorOptions = {},\n): NativePptEditor {\n return new NativePptEditorController(host, view, options);\n}\n\nfunction isFilledCircleLikeNode(node: PptSceneNode): boolean {\n if (node.kind === 'line') return false;\n if (node.kind !== 'geometricShape') return false;\n if (node.customGeometry) return false;\n if (node.presetGeometry && node.presetGeometry !== 'ellipse') return false;\n if (node.text || !node.fillColor) return false;\n const min = Math.min(node.bounds.width, node.bounds.height);\n const max = Math.max(node.bounds.width, node.bounds.height);\n if (min <= 0) return false;\n return max / min < 1.2;\n}\n\nfunction clampedPptDragBounds(\n current: PptSceneNode['bounds'],\n slideSize: PptSlideScene['size'],\n next: Partial<PptSceneNode['bounds']>,\n): PptSceneNode['bounds'] {\n const width = Math.max(MIN_PPT_RESIZE_SIZE_EMU, next.width ?? current.width);\n const height = Math.max(MIN_PPT_RESIZE_SIZE_EMU, next.height ?? current.height);\n const visibleX = Math.min(MIN_PPT_DRAG_VISIBLE_EMU, width);\n const visibleY = Math.min(MIN_PPT_DRAG_VISIBLE_EMU, height);\n const left = clampNumber(\n next.left ?? current.left,\n -width + visibleX,\n slideSize.width - visibleX,\n );\n const top = clampNumber(next.top ?? current.top, -height + visibleY, slideSize.height - visibleY);\n return {\n ...current,\n left,\n top,\n width,\n height,\n };\n}\n\nfunction clampNumber(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction pptSnapTargetsForAxis(\n slide: PptSlideScene,\n shapeId: string,\n axis: PptSnapGuide['axis'],\n): Array<{\n value: number;\n kind: PptSnapGuide['kind'];\n role: PptSnapRole;\n referenceShapeId?: string;\n}> {\n const slideSize = axis === 'x' ? slide.size.width : slide.size.height;\n const targets: Array<{\n value: number;\n kind: PptSnapGuide['kind'];\n role: PptSnapRole;\n referenceShapeId?: string;\n }> = [\n { value: 0, kind: 'slide', role: 'start' },\n { value: slideSize / 2, kind: 'slide', role: 'center' },\n { value: slideSize, kind: 'slide', role: 'end' },\n ];\n for (const node of slide.nodes) {\n if (!isPptSnapReferenceNode(node, shapeId)) continue;\n const start = axis === 'x' ? node.bounds.left : node.bounds.top;\n const length = axis === 'x' ? node.bounds.width : node.bounds.height;\n targets.push(\n { value: start, kind: 'shape', role: 'start', referenceShapeId: node.id },\n { value: start + length / 2, kind: 'shape', role: 'center', referenceShapeId: node.id },\n { value: start + length, kind: 'shape', role: 'end', referenceShapeId: node.id },\n );\n }\n return targets;\n}\n\nfunction isPptSnapReferenceNode(node: PptSceneNode, activeShapeId: string): boolean {\n return (\n node.id !== activeShapeId &&\n node.kind !== 'line' &&\n !node.locked &&\n !node.id.includes(':') &&\n node.capabilities.select &&\n node.capabilities.editGeometry &&\n node.bounds.width > MIN_PPT_RESIZE_SIZE_EMU &&\n node.bounds.height > MIN_PPT_RESIZE_SIZE_EMU\n );\n}\n\nfunction closestPptSnap(\n sources: Array<{ value: number; offset: number; role: PptSnapRole }>,\n targets: Array<{\n value: number;\n kind: PptSnapGuide['kind'];\n role: PptSnapRole;\n referenceShapeId?: string;\n }>,\n threshold: number,\n options: { matchRole?: boolean } = {},\n): {\n source: { value: number; offset: number; role: PptSnapRole };\n target: {\n value: number;\n kind: PptSnapGuide['kind'];\n role: PptSnapRole;\n referenceShapeId?: string;\n };\n distance: number;\n} | null {\n let closest: {\n source: { value: number; offset: number; role: PptSnapRole };\n target: {\n value: number;\n kind: PptSnapGuide['kind'];\n role: PptSnapRole;\n referenceShapeId?: string;\n };\n distance: number;\n } | null = null;\n for (const source of sources) {\n for (const target of targets) {\n if (options.matchRole !== false && source.role !== target.role) continue;\n const distance = Math.abs(source.value - target.value);\n if (distance > threshold) continue;\n if (!closest || distance < closest.distance) {\n closest = { source, target, distance };\n }\n }\n }\n return closest;\n}\n\nfunction snappedResizeLength(\n origin: number,\n currentLength: number,\n source: { offset: number },\n targetValue: number,\n): number {\n const centerOffset = currentLength / 2;\n const next =\n Math.abs(source.offset - centerOffset) < 1 ? (targetValue - origin) * 2 : targetValue - origin;\n return Math.max(MIN_PPT_RESIZE_SIZE_EMU, next);\n}\n\nfunction isShapeCollectionEditable(node: PptSceneNode): boolean {\n return (\n !node.locked &&\n !node.id.includes(':') &&\n (node.capabilities.editGeometry ||\n node.capabilities.editText ||\n node.capabilities.editShapeStyle ||\n node.capabilities.editTableCells)\n );\n}\n\nfunction parentGroupDragNode(node: PptSceneNode): PptSceneNode {\n const context = node.groupContext;\n if (!context) return node;\n const groupNode: PptSceneNode = {\n ...node,\n id: context.parentId,\n name: context.parentName,\n kind: 'group',\n bounds: context.parentBounds,\n text: undefined,\n textStyle: undefined,\n textParagraphs: undefined,\n textBody: undefined,\n groupContext: undefined,\n locked: false,\n editable: true,\n capabilities: {\n select: true,\n editText: false,\n editTextStyle: false,\n editTableCells: false,\n editGeometry: true,\n editShapeStyle: false,\n reason: 'Parent group',\n },\n children: [],\n };\n return groupNode;\n}\n\nfunction isCircleLikeCustomPictureNode(node: PptSceneNode): boolean {\n if (node.kind !== 'picture' || !node.customGeometry || node.customGeometry.paths.length !== 1)\n return false;\n const min = Math.min(node.bounds.width, node.bounds.height);\n const max = Math.max(node.bounds.width, node.bounds.height);\n if (min <= 0 || max / min > 1.12) return false;\n const commands = node.customGeometry.paths[0]?.commands ?? [];\n const cubicCount = commands.filter(\n (command: PptCustomGeometryCommand) => command.kind === 'cubicBezierTo',\n ).length;\n return (\n cubicCount >= 4 &&\n commands.some((command: PptCustomGeometryCommand) => command.kind === 'close')\n );\n}\n\nclass NativePptEditorController implements NativePptEditor {\n private readonly root: HTMLElement | ShadowRoot;\n private readonly sessionValue: PptEditorSession;\n private readonly imageResources: PptEditorView['images'];\n private readonly fontResources: PptEditorView['fonts'];\n private readonly referencedFontFamilies: string[];\n private readonly slideList = document.createElement('div');\n private readonly canvas = document.createElement('div');\n private readonly contextMenu = document.createElement('div');\n private readonly snapGuides = document.createElement('div');\n private readonly options: NativePptEditorOptions;\n private readonly handleCanvasClick = () => void this.dispatchCurrentSlideSelection();\n private readonly handleWindowMouseMove = (event: MouseEvent) => void this.updateDrag(event);\n private readonly handleWindowMouseUp = (event: MouseEvent) => void this.finishDrag(event);\n private readonly handleWindowKeyDown = (event: KeyboardEvent) => void this.handleKeyDown(event);\n private readonly handleWindowPointerDown = (event: PointerEvent) =>\n void this.dismissContextMenu(event);\n private readonly handleWindowScroll = () => this.hideContextMenu();\n private readonly handleCanvasSelectStart = (event: Event) => this.handleSelectStart(event);\n private readonly handleSlideListScroll = () => this.scheduleThumbnailRender();\n private dragState: NativePptDragState | null = null;\n private suppressClickAfterDrag = false;\n private clipboardShape: { slideId: string; shapeId: string } | null = null;\n private thumbnailFrame = 0;\n private thumbnailRasterEpoch = 0;\n private readonly thumbnailCanvasCache = new Map<string, PptThumbnailCanvasCacheEntry>();\n private readonly pendingCommands = new Set<Promise<void>>();\n\n constructor(host: HTMLElement, view: PptEditorView, options: NativePptEditorOptions) {\n this.options = options;\n this.root = options.styleIsolation === 'none' ? host : host.attachShadow({ mode: 'open' });\n this.sessionValue = new PptEditorSession(view);\n this.imageResources = view.images;\n this.fontResources = view.fonts;\n this.referencedFontFamilies = usedFontFamiliesInView(view);\n const fontLinksReady = ensureGoogleFontLinks(this.fontResources, this.referencedFontFamilies);\n exposeNativePptFontReady(this.scheduleFontRenderRefresh(fontLinksReady));\n this.mount();\n this.sessionValue.subscribe('change', async (event) => {\n this.thumbnailRasterEpoch++;\n this.render();\n await this.options.onChange?.({\n revision: event.revision,\n bytes: await this.sessionValue.toPptx(),\n });\n });\n this.sessionValue.subscribe('selectionChange', () => this.renderSelection());\n this.render();\n }\n\n session(): PptEditorSession {\n return this.sessionValue;\n }\n\n selection(): PptEditorSelection {\n return this.sessionValue.selection();\n }\n\n async dispatch(command: PptEditorCommand): Promise<void> {\n const pending = this.dispatchAndRender(command);\n this.pendingCommands.add(pending);\n try {\n await pending;\n } finally {\n this.pendingCommands.delete(pending);\n }\n }\n\n private async dispatchAndRender(command: PptEditorCommand): Promise<void> {\n const previousSlideId = this.currentSlide()?.id;\n await this.sessionValue.dispatch(command);\n if (command.kind === 'select-slide' || command.kind === 'select-shape') {\n if (this.currentSlide()?.id !== previousSlideId) {\n this.render();\n return;\n }\n this.renderSelection();\n return;\n }\n this.render();\n }\n\n async loadPresentation(bytes: Uint8Array | ArrayBuffer): Promise<void> {\n await this.sessionValue.loadPresentation(bytes);\n this.thumbnailCanvasCache.clear();\n this.thumbnailRasterEpoch++;\n this.render();\n }\n\n async toPptx(): Promise<Uint8Array> {\n // Export can follow blur in the same event turn, while its command is still\n // awaiting the undo snapshot. Commit active text/table edits and await them.\n this.root\n .querySelector<HTMLElement>('[contenteditable=\"true\"]')\n ?.dispatchEvent(new FocusEvent('blur'));\n await Promise.all([...this.pendingCommands]);\n return this.sessionValue.toPptx();\n }\n\n canUndo(): boolean {\n return this.sessionValue.canUndo();\n }\n\n canRedo(): boolean {\n return this.sessionValue.canRedo();\n }\n\n async undo(): Promise<void> {\n await this.sessionValue.undo();\n this.render();\n }\n\n async redo(): Promise<void> {\n await this.sessionValue.redo();\n this.render();\n }\n\n async destroy(): Promise<void> {\n this.canvas.removeEventListener('click', this.handleCanvasClick);\n this.canvas.removeEventListener('selectstart', this.handleCanvasSelectStart);\n this.slideList.removeEventListener('scroll', this.handleSlideListScroll);\n if (this.thumbnailFrame) cancelAnimationFrame(this.thumbnailFrame);\n this.thumbnailRasterEpoch++;\n window.removeEventListener('mousemove', this.handleWindowMouseMove);\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n window.removeEventListener('keydown', this.handleWindowKeyDown);\n window.removeEventListener('pointerdown', this.handleWindowPointerDown);\n window.removeEventListener('scroll', this.handleWindowScroll, true);\n await this.sessionValue.destroy();\n while (this.root.firstChild) this.root.removeChild(this.root.firstChild);\n }\n\n private mount(): void {\n const style = document.createElement('style');\n style.textContent = `\n ${fontFaceCss(this.fontResources)}\n :host, .coco-ppt-editor { box-sizing: border-box; width: 100%; height: 100%; min-height: 360px; }\n .coco-ppt-editor { display: grid; grid-template-columns: 160px minmax(0, 1fr); background: #f4f6f8; color: #17202a; font: 13px/1.4 system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; }\n .coco-ppt-slides { overflow: auto; border-right: 1px solid #d7dde5; background: #edf1f5; padding: 8px; }\n .coco-ppt-thumb { width: 128px; aspect-ratio: 16 / 9; margin: 0 0 8px; border: 1px solid #c7d0dc; background: #fff; display: block; position: relative; overflow: hidden; cursor: pointer; padding: 0; }\n .coco-ppt-thumb[data-selected=\"true\"] { border-color: #2563eb; box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.18); }\n .coco-ppt-thumb-number { position: absolute; left: 5px; top: 4px; z-index: 5; min-width: 16px; height: 16px; border-radius: 999px; background: rgba(15, 23, 42, 0.64); color: #fff; font-size: 10px; line-height: 16px; text-align: center; pointer-events: none; }\n .coco-ppt-thumb-preview { position: absolute; inset: 0; overflow: hidden; background: #fff; pointer-events: none; }\n .coco-ppt-thumb-placeholder { position: absolute; inset: 0; display: grid; place-items: center; color: #475569; font-size: 14px; pointer-events: none; }\n .coco-ppt-thumb-slide { position: relative; overflow: hidden; transform-origin: top left; pointer-events: none; }\n .coco-ppt-thumb-canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; pointer-events: none; }\n .coco-ppt-thumb-node { position: absolute; box-sizing: border-box; overflow: hidden; border: 0 solid transparent; white-space: pre-wrap; overflow-wrap: anywhere; padding: 0; display: flex; align-items: flex-start; justify-content: flex-start; line-height: 1.2; font-family: \"Calibri\", \"Microsoft YaHei\", SimSun, \"Segoe UI\", Arial, sans-serif; user-select: none; pointer-events: none; }\n .coco-ppt-thumb-node > img { width: 100%; height: 100%; object-fit: fill; display: block; pointer-events: none; }\n .coco-ppt-stage { min-width: 0; overflow: auto; display: grid; place-items: center; padding: 24px; }\n .coco-ppt-canvas { position: relative; overflow: hidden; background: #fff; box-shadow: 0 10px 30px rgba(15, 23, 42, 0.16); transform-origin: center; user-select: none; }\n .coco-ppt-node { position: absolute; box-sizing: border-box; overflow: hidden; border: 0 solid transparent; white-space: pre-wrap; overflow-wrap: anywhere; padding: 0; display: flex; align-items: flex-start; justify-content: flex-start; line-height: 1.2; font-family: \"Calibri\", \"Microsoft YaHei\", SimSun, \"Segoe UI\", Arial, sans-serif; user-select: none; }\n .coco-ppt-node > img { width: 100%; height: 100%; object-fit: fill; display: block; pointer-events: none; }\n .coco-ppt-css-geometry { position: absolute; inset: 0; pointer-events: none; z-index: 0; box-sizing: border-box; }\n .coco-ppt-custom-geometry, .coco-ppt-preset-geometry { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 0; }\n .coco-ppt-gradient-outline, .coco-ppt-solid-outline { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 0; }\n .coco-ppt-line-geometry { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; z-index: 0; }\n .coco-ppt-text-layer { position: relative; z-index: 1; width: 100%; min-height: 100%; box-sizing: border-box; white-space: inherit; overflow-wrap: inherit; display: inherit; align-items: inherit; justify-content: inherit; }\n .coco-ppt-rich-text { width: 100%; box-sizing: border-box; white-space: pre-wrap; overflow-wrap: anywhere; }\n .coco-ppt-distributed-text { width: 100%; display: flex; justify-content: space-between; align-items: baseline; }\n .coco-ppt-paragraph { margin: 0; min-height: 1em; }\n .coco-ppt-paragraph[data-bullet=\"true\"] { padding-left: 1em; text-indent: -1em; }\n .coco-ppt-bullet { display: inline-block; width: 1em; text-indent: 0; }\n .coco-ppt-table { width: 100%; height: 100%; table-layout: fixed; border-collapse: collapse; font: 12px/1.25 \"Calibri\", \"Microsoft YaHei\", \"Segoe UI\", sans-serif; color: inherit; background: transparent; }\n .coco-ppt-table td { border: 1px solid rgba(148, 163, 184, 0.8); padding: 4px 7px; vertical-align: middle; text-align: left; white-space: pre-wrap; overflow-wrap: anywhere; }\n .coco-ppt-table td[contenteditable=\"true\"] { cursor: text; outline: 2px solid #2563eb; outline-offset: -2px; }\n .coco-ppt-node[contenteditable=\"true\"] { cursor: text; outline: 2px solid rgba(37, 99, 235, 0.3); user-select: text; }\n .coco-ppt-text-layer[contenteditable=\"true\"] { cursor: text; outline: 2px solid rgba(37, 99, 235, 0.3); user-select: text; }\n .coco-ppt-node[data-kind=\"picture\"] { background: transparent; }\n .coco-ppt-unsupported-image { position: absolute; inset: 0; display: grid; place-items: center; box-sizing: border-box; border: 1px dashed rgba(100, 116, 139, 0.48); background: repeating-linear-gradient(135deg, rgba(148, 163, 184, 0.12) 0 8px, rgba(248, 250, 252, 0.1) 8px 16px); color: rgba(51, 65, 85, 0.72); font: 11px/1.2 \"Segoe UI\", sans-serif; pointer-events: none; }\n .coco-ppt-thumb-node .coco-ppt-unsupported-image { font-size: 8px; border-width: 0.5px; }\n .coco-ppt-node[data-selected=\"true\"] { outline: 2px solid rgba(37, 99, 235, 0.38); }\n .coco-ppt-node[data-draggable=\"true\"] { cursor: move; }\n .coco-ppt-node[data-dragging=\"true\"] { outline: 1px dashed rgba(15, 23, 42, 0.68); outline-offset: 2px; }\n .coco-ppt-node[data-snap-reference=\"true\"] { outline: 1px dashed rgba(245, 158, 11, 0.9); outline-offset: 2px; box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.16); }\n .coco-ppt-parent-group-outline { position: absolute; box-sizing: border-box; border: 1px dashed rgba(16, 185, 129, 0.9); background: transparent; pointer-events: none; z-index: 850; }\n .coco-ppt-parent-group-outline[data-selected=\"true\"] { border-style: solid; border-color: rgba(5, 150, 105, 0.95); box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.16); }\n .coco-ppt-parent-group-handle { position: absolute; left: -9px; top: -9px; width: 18px; height: 18px; border-radius: 3px; border: 1px solid rgba(4, 120, 87, 0.95); background: rgba(110, 231, 183, 0.95); cursor: move; pointer-events: auto; box-shadow: 0 1px 4px rgba(15, 23, 42, 0.24); }\n .coco-ppt-parent-group-edge { position: absolute; pointer-events: auto; cursor: move; }\n .coco-ppt-parent-group-edge[data-edge=\"top\"] { left: -4px; right: -4px; top: -6px; height: 12px; }\n .coco-ppt-parent-group-edge[data-edge=\"right\"] { top: -4px; bottom: -4px; right: -6px; width: 12px; }\n .coco-ppt-parent-group-edge[data-edge=\"bottom\"] { left: -4px; right: -4px; bottom: -6px; height: 12px; }\n .coco-ppt-parent-group-edge[data-edge=\"left\"] { top: -4px; bottom: -4px; left: -6px; width: 12px; }\n .coco-ppt-node[data-editing=\"true\"] { cursor: text; outline: 2px solid #2563eb; z-index: 30; }\n .coco-ppt-canvas[data-interaction-mode=\"dragging\"] .coco-ppt-node:not([data-dragging=\"true\"]) { cursor: default; }\n .coco-ppt-canvas[data-interaction-mode=\"editing\"] .coco-ppt-node:not([data-editing=\"true\"]) { cursor: default; }\n .coco-ppt-resize-handle { position: absolute; right: -5px; bottom: -5px; width: 10px; height: 10px; border: 1px solid #fff; background: #2563eb; cursor: nwse-resize; display: none; }\n .coco-ppt-node[data-selected=\"true\"][data-resizable=\"true\"] > .coco-ppt-resize-handle { display: block; }\n .coco-ppt-node[data-editing=\"true\"] > .coco-ppt-resize-handle { display: none; }\n .coco-ppt-snap-guides { position: absolute; inset: 0; z-index: 900; pointer-events: none; }\n .coco-ppt-snap-guide { position: absolute; background: rgba(37, 99, 235, 0.62); }\n .coco-ppt-snap-guide[data-kind=\"slide\"] { background: rgba(100, 116, 139, 0.42); }\n .coco-ppt-snap-guide[data-axis=\"x\"] { top: 0; bottom: 0; width: 1px; }\n .coco-ppt-snap-guide[data-axis=\"y\"] { left: 0; right: 0; height: 1px; }\n .coco-ppt-context-menu { position: fixed; z-index: 1000; min-width: 148px; padding: 4px; background: #fff; border: 1px solid #cbd5e1; box-shadow: 0 12px 28px rgba(15, 23, 42, 0.18); display: none; }\n .coco-ppt-context-menu[data-open=\"true\"] { display: block; }\n .coco-ppt-context-menu button { width: 100%; min-height: 28px; display: flex; align-items: center; justify-content: space-between; gap: 12px; border: 0; background: transparent; color: #17202a; padding: 5px 8px; font: inherit; text-align: left; cursor: pointer; }\n .coco-ppt-context-menu button:hover:not(:disabled) { background: #eaf2ff; color: #0f3f8f; }\n .coco-ppt-context-menu button:disabled { color: #94a3b8; cursor: default; }\n .coco-ppt-context-menu span { color: #64748b; font-size: 11px; }\n .coco-ppt-context-menu hr { border: 0; border-top: 1px solid #e2e8f0; margin: 4px 0; }\n `;\n const shell = document.createElement('div');\n shell.className = 'coco-ppt-editor';\n this.slideList.className = 'coco-ppt-slides';\n const stage = document.createElement('div');\n stage.className = 'coco-ppt-stage';\n this.canvas.className = 'coco-ppt-canvas';\n this.contextMenu.className = 'coco-ppt-context-menu';\n this.snapGuides.className = 'coco-ppt-snap-guides';\n stage.append(this.canvas);\n shell.append(this.slideList, stage);\n this.root.append(style, shell, this.contextMenu);\n this.canvas.addEventListener('click', this.handleCanvasClick);\n this.canvas.addEventListener('selectstart', this.handleCanvasSelectStart);\n this.slideList.addEventListener('scroll', this.handleSlideListScroll, { passive: true });\n window.addEventListener('mousemove', this.handleWindowMouseMove);\n window.addEventListener('mouseup', this.handleWindowMouseUp);\n window.addEventListener('keydown', this.handleWindowKeyDown);\n window.addEventListener('pointerdown', this.handleWindowPointerDown);\n window.addEventListener('scroll', this.handleWindowScroll, true);\n }\n\n private scheduleFontRenderRefresh(fontLinksReady: Promise<void>): Promise<void> {\n if (typeof document === 'undefined' || !document.fonts) return Promise.resolve();\n return fontLinksReady\n .then(() =>\n Promise.all(\n [...new Set(this.fontResources.map((font) => font.family))].map((family) =>\n document.fonts.load(`16px ${cssFontFamilyStack(family)}`),\n ),\n ),\n )\n .then(() =>\n Promise.all(\n this.referencedFontFamilies.map((family) =>\n document.fonts.load(`16px ${cssFontFamilyStack(family)}`),\n ),\n ),\n )\n .then(() => document.fonts.ready)\n .then(() => {\n this.render();\n })\n .catch(() => {});\n }\n\n private render(): void {\n const scene = this.sessionValue.scene();\n this.slideList.replaceChildren(\n ...scene.slides.map((slide) => {\n const thumb = document.createElement('button');\n thumb.className = 'coco-ppt-thumb';\n thumb.type = 'button';\n thumb.dataset.slideId = slide.id;\n thumb.dataset.slideIndex = String(slide.index);\n thumb.dataset.selected =\n this.sessionValue.selection()?.slideId === slide.id ? 'true' : 'false';\n const preview = document.createElement('div');\n preview.className = 'coco-ppt-thumb-preview';\n const placeholder = document.createElement('div');\n placeholder.className = 'coco-ppt-thumb-placeholder';\n const number = document.createElement('span');\n number.className = 'coco-ppt-thumb-number';\n number.textContent = String(slide.index + 1);\n thumb.append(preview, placeholder, number);\n thumb.addEventListener(\n 'click',\n () => void this.dispatch({ kind: 'select-slide', slideIdOrIndex: slide.id }),\n );\n return thumb;\n }),\n );\n this.renderVisibleThumbnails(scene.slides);\n const selected = this.currentSlide();\n if (!selected) {\n this.canvas.replaceChildren();\n this.hideContextMenu();\n return;\n }\n const scale = this.computeScale(selected);\n this.canvas.style.width = `${selected.size.width * scale}px`;\n this.canvas.style.height = `${selected.size.height * scale}px`;\n this.canvas.style.background = cssBackground(selected.background, this.imageResources);\n this.canvas.replaceChildren(\n ...selected.nodes.map((node) => this.renderNode(node, scale, selected)),\n this.snapGuides,\n );\n this.hideSnapGuides();\n this.hideContextMenu();\n this.renderSelection();\n }\n\n private renderVisibleThumbnails(slides: PptSlideScene[]): void {\n const thumbs = Array.from(\n this.slideList.querySelectorAll<HTMLButtonElement>('.coco-ppt-thumb'),\n );\n const range = this.visibleThumbnailRange(slides.length);\n thumbs.forEach((thumb, index) => {\n const preview = thumb.querySelector<HTMLElement>('.coco-ppt-thumb-preview');\n const placeholder = thumb.querySelector<HTMLElement>('.coco-ppt-thumb-placeholder');\n if (!preview || !placeholder) return;\n if (index < range.start || index >= range.end) {\n preview.replaceChildren();\n delete thumb.dataset.previewRendered;\n delete thumb.dataset.previewMode;\n placeholder.hidden = false;\n return;\n }\n if (thumb.dataset.previewRendered === 'true') return;\n const slide = slides[index];\n if (!slide) return;\n const fingerprint = thumbnailFingerprint(slide);\n const cached = this.thumbnailCanvasCache.get(slide.id);\n if (cached?.fingerprint === fingerprint) {\n preview.replaceChildren(cloneThumbnailCanvas(cached.canvas));\n thumb.dataset.previewMode = 'canvas';\n } else {\n preview.replaceChildren(this.renderThumbnailSlide(slide));\n thumb.dataset.previewMode = 'dom';\n void this.rasterizeThumbnail(thumb, slide);\n }\n thumb.dataset.previewRendered = 'true';\n placeholder.hidden = true;\n });\n }\n\n private visibleThumbnailRange(count: number): { start: number; end: number } {\n const itemHeight = PPT_THUMB_WIDTH_PX * (9 / 16) + PPT_THUMB_MARGIN_BOTTOM_PX;\n const viewportHeight = this.slideList.clientHeight || itemHeight * Math.min(count, 5);\n const first = Math.max(\n 0,\n Math.floor(this.slideList.scrollTop / itemHeight) - PPT_THUMB_OVERSCAN,\n );\n const visible = Math.ceil(viewportHeight / itemHeight) + PPT_THUMB_OVERSCAN * 2;\n const selection = this.sessionValue.selection();\n const selectedIndex =\n selection?.slideId !== undefined\n ? this.sessionValue.scene().slides.findIndex((slide) => slide.id === selection.slideId)\n : -1;\n const start =\n selectedIndex >= 0 ? Math.min(first, Math.max(0, selectedIndex - PPT_THUMB_OVERSCAN)) : first;\n const end =\n selectedIndex >= 0\n ? Math.max(first + visible, Math.min(count, selectedIndex + PPT_THUMB_OVERSCAN + 1))\n : first + visible;\n return { start, end: Math.min(count, end) };\n }\n\n private renderThumbnailSlide(slide: PptSlideScene): HTMLElement {\n const wrapper = document.createElement('div');\n wrapper.className = 'coco-ppt-thumb-slide';\n const scale = PPT_THUMB_WIDTH_PX / slide.size.width;\n wrapper.style.width = `${slide.size.width * scale}px`;\n wrapper.style.height = `${slide.size.height * scale}px`;\n wrapper.style.background = cssBackground(slide.background, this.imageResources);\n wrapper.replaceChildren(\n ...slide.nodes.map((node) => this.renderNode(node, scale, slide, false)),\n );\n return wrapper;\n }\n\n private async rasterizeThumbnail(thumb: HTMLButtonElement, slide: PptSlideScene): Promise<void> {\n const epoch = this.thumbnailRasterEpoch;\n const fingerprint = thumbnailFingerprint(slide);\n await nextAnimationFrame();\n await nextAnimationFrame();\n if (epoch !== this.thumbnailRasterEpoch || !thumb.isConnected) return;\n const preview = thumb.querySelector<HTMLElement>('.coco-ppt-thumb-preview');\n const slideElement = preview?.querySelector<HTMLElement>('.coco-ppt-thumb-slide');\n if (!preview || !slideElement) return;\n const canvas = await rasterizeThumbnailElement(\n slideElement,\n PPT_THUMB_WIDTH_PX,\n PPT_THUMB_WIDTH_PX * (slide.size.height / slide.size.width),\n PPT_THUMB_RASTER_SCALE,\n this.root.querySelector('style')?.textContent ?? '',\n );\n if (!canvas) return;\n if (epoch !== this.thumbnailRasterEpoch || !thumb.isConnected) return;\n const currentSlide = this.sessionValue.scene().slides.find((item) => item.id === slide.id);\n if (!currentSlide || thumbnailFingerprint(currentSlide) !== fingerprint) return;\n this.thumbnailCanvasCache.set(slide.id, { fingerprint, canvas });\n preview.replaceChildren(cloneThumbnailCanvas(canvas));\n thumb.dataset.previewMode = 'canvas';\n }\n\n private scheduleThumbnailRender(): void {\n if (this.thumbnailFrame) return;\n this.thumbnailFrame = requestAnimationFrame(() => {\n this.thumbnailFrame = 0;\n this.renderVisibleThumbnails(this.sessionValue.scene().slides);\n });\n }\n\n private renderNode(\n node: PptSceneNode,\n scale: number,\n slide: PptSlideScene,\n interactive = true,\n ): HTMLElement {\n const element = document.createElement('div');\n const lineNode = isLineNode(node);\n const frameNode = node.presetGeometry === 'frame';\n const lineAxis = lineNode ? lineAxisKind(node) : 'horizontal';\n const nodeWidth = Math.max(\n lineNode && lineAxis === 'vertical' ? 12 : 1,\n node.bounds.width * scale,\n );\n const nodeHeight = Math.max(\n lineNode && lineAxis === 'horizontal' ? 12 : 1,\n node.bounds.height * scale,\n );\n element.className = interactive ? 'coco-ppt-node' : 'coco-ppt-thumb-node';\n element.dataset.kind = node.kind;\n element.dataset.locked = String(node.locked);\n if (interactive) {\n element.dataset.draggable = String(node.capabilities.editGeometry);\n element.dataset.resizable = String(node.capabilities.editGeometry);\n element.dataset.shapeId = node.id;\n }\n element.style.left = `${node.bounds.left * scale - (lineNode && lineAxis === 'vertical' ? nodeWidth / 2 : 0)}px`;\n element.style.top = `${node.bounds.top * scale - (lineNode && lineAxis === 'horizontal' ? nodeHeight / 2 : 0)}px`;\n element.style.width = `${nodeWidth}px`;\n element.style.height = `${nodeHeight}px`;\n const transforms: string[] = [];\n if (node.bounds.rotation) transforms.push(`rotate(${node.bounds.rotation}deg)`);\n if (node.bounds.flipHorizontal) transforms.push('scaleX(-1)');\n if (node.bounds.flipVertical) transforms.push('scaleY(-1)');\n if (transforms.length > 0) element.style.transform = transforms.join(' ');\n const svgPresetNode = hasSvgPresetGeometry(node);\n const clipPath = cssClipPathForPresetGeometry(node.presetGeometry);\n const cssPresetTextNode = Boolean(\n clipPath && node.text && !node.customGeometry && !svgPresetNode,\n );\n if (node.usesBackgroundFill && node.backgroundFill) {\n applyBackgroundFill(element, node.backgroundFill, node, slide, scale, this.imageResources);\n } else if (\n node.customGeometry ||\n svgPresetNode ||\n cssPresetTextNode ||\n node.kind === 'table' ||\n lineNode ||\n frameNode\n ) {\n element.style.background = 'transparent';\n } else if (node.fillGradient && node.fillGradient.colors.length > 1) {\n element.style.background = cssLinearGradient(node.fillGradient, effectiveFillOpacity(node));\n } else if (node.fillColor) {\n element.style.background = cssColorWithOpacity(node.fillColor, effectiveFillOpacity(node));\n }\n if (shouldAllowTextOverflow(node)) element.style.overflow = 'visible';\n if (node.presetGeometry === 'roundRect' || node.presetGeometry === 'round1Rect')\n element.style.borderRadius = `${roundRectRadius(node) * scale}px`;\n if (node.presetGeometry === 'round2DiagRect') {\n const radius = `${roundRectRadius(node) * scale}px`;\n element.style.borderRadius = `${radius} 0 ${radius} 0`;\n }\n if (node.presetGeometry === 'round2SameRect') {\n const radius = `${roundRectRadius(node) * scale}px`;\n element.style.borderRadius = `${radius} ${radius} 0 0`;\n }\n if (\n node.presetGeometry === 'ellipse' ||\n isFilledCircleLikeNode(node) ||\n isCircleLikeCustomPictureNode(node)\n )\n element.style.borderRadius = '9999px';\n if (clipPath && !cssPresetTextNode && !svgPresetNode) element.style.clipPath = clipPath;\n if (frameNode) {\n element.style.borderStyle = 'solid';\n element.style.borderWidth = `${frameBorderWidth(node, scale)}px`;\n if (node.fillGradient && node.fillGradient.colors.length > 1) {\n element.style.borderImageSource = cssLinearGradient(node.fillGradient);\n element.style.borderImageSlice = '1';\n } else if (node.fillColor) {\n element.style.borderColor = node.fillColor;\n }\n } else if (\n !node.customGeometry &&\n !svgPresetNode &&\n !cssPresetTextNode &&\n !lineNode &&\n node.kind !== 'picture' &&\n node.lineColor\n ) {\n element.style.borderStyle = cssBorderStyleForLineDash(node.lineDash);\n element.style.borderWidth = `${Math.max(1, (node.lineWidth ?? 9525) * scale)}px`;\n element.style.borderColor = cssColorWithOpacity(node.lineColor, node.lineOpacity);\n }\n if (node.shadow) element.style.boxShadow = cssBoxShadow(node.shadow, scale);\n this.applyTextStyle(element, node, scale);\n applyTextMetricFallback(element, node, scale);\n if (cssPresetTextNode && clipPath)\n element.append(renderCssPresetGeometry(node, scale, clipPath));\n if (node.customGeometry && node.kind !== 'picture')\n element.append(renderCustomGeometry(node, scale));\n if (svgPresetNode) element.append(renderPresetGeometry(node, scale));\n if (lineNode) {\n element.append(renderLineGeometry(node, scale));\n } else if (node.kind === 'chart') {\n element.append(renderChartPreview(node));\n } else if (node.kind === 'table') {\n const table = renderTablePreview(node, scale, interactive);\n if (interactive) {\n table.addEventListener('click', (event) => {\n event.stopPropagation();\n if (this.consumeSuppressedClick()) return;\n this.notifyTableCellSelection(slide, node, event);\n void this.dispatch({\n kind: 'select-shape',\n slideIdOrIndex: slide.id,\n shapeIdOrName: node.id,\n });\n });\n table.addEventListener('dblclick', (event) => {\n const cell = tableCellFromEvent(event);\n if (!cell || !node.capabilities.editTableCells) return;\n event.stopPropagation();\n const row = Number(cell.dataset.row);\n const column = Number(cell.dataset.column);\n if (!Number.isInteger(row) || !Number.isInteger(column)) return;\n this.startTableCellEdit(cell, slide, node, row, column);\n });\n }\n element.append(table);\n } else if (node.kind === 'picture') {\n const resource = node.imagePath ? this.imageResources[node.imagePath] : undefined;\n const url = resource?.url;\n if (url && isBrowserRenderableImage(resource.contentType, node.imagePath)) {\n if (shouldClipCustomGeometryPicture(node, slide)) {\n element.append(renderCustomGeometryPicture(node, url));\n } else {\n const image = document.createElement('img');\n image.src = url;\n image.alt = node.name ?? '';\n applyImagePlacement(image, node);\n if (node.imageOpacity !== undefined)\n image.style.opacity = String(Math.max(0, Math.min(1, node.imageOpacity)));\n element.append(image);\n }\n if (node.lineColor) element.append(renderSolidOutline(node, scale));\n } else {\n element.dataset.unsupportedImage = node.imagePath ? 'true' : 'missing';\n if (resource?.contentType) element.dataset.imageContentType = resource.contentType;\n if (node.imagePath) element.dataset.imagePath = node.imagePath;\n element.append(renderUnsupportedImagePlaceholder(node, resource?.contentType));\n }\n } else {\n const text = node.text ?? '';\n if (\n node.customGeometry ||\n svgPresetNode ||\n cssPresetTextNode ||\n shouldCounterFlipText(node)\n ) {\n const textLayer = document.createElement('div');\n textLayer.className = 'coco-ppt-text-layer';\n applyTextCounterFlip(textLayer, node);\n appendTextContent(textLayer, node, scale, text);\n element.append(textLayer);\n applyTextWrapping(textLayer, node);\n applyTextAutoFit(textLayer, node);\n } else {\n appendTextContent(element, node, scale, text);\n applyTextWrapping(element, node);\n applyTextAutoFit(element, node);\n }\n }\n if (shouldRenderGradientOutline(node)) element.append(renderGradientOutline(node, scale));\n if (!interactive) return element;\n const handle = document.createElement('div');\n handle.className = 'coco-ppt-resize-handle';\n handle.addEventListener('mousedown', (event) => {\n if (!node.capabilities.editGeometry) return;\n event.preventDefault();\n event.stopPropagation();\n this.startDrag(event, 'resize', slide, node, scale, element);\n });\n element.append(handle);\n element.addEventListener('click', (event) => {\n this.hideContextMenu();\n event.stopPropagation();\n if (this.consumeSuppressedClick()) return;\n if (event.altKey) {\n const selection = this.selection();\n const cycledNode = cycledSelectableHit(\n slide,\n event,\n scale,\n selection?.kind === 'shape' ? selection.shapeId : node.id,\n );\n if (cycledNode) {\n void this.dispatch({\n kind: 'select-shape',\n slideIdOrIndex: slide.id,\n shapeIdOrName: cycledNode.node.id,\n });\n this.options.onObjectAction?.({\n action: 'cycle-selection',\n slideId: slide.id,\n shapeId: cycledNode.node.id,\n kind: cycledNode.node.kind,\n name: cycledNode.node.name,\n reason: `已切换到重叠对象 ${cycledNode.index + 1}/${cycledNode.count}`,\n candidateIndex: cycledNode.index,\n candidateCount: cycledNode.count,\n });\n return;\n }\n }\n const redirectedNode = this.pointerOperationNode(slide, node, event, scale);\n if (redirectedNode) {\n void this.dispatch({\n kind: 'select-shape',\n slideIdOrIndex: slide.id,\n shapeIdOrName: redirectedNode.id,\n });\n return;\n }\n void this.dispatch({\n kind: 'select-shape',\n slideIdOrIndex: slide.id,\n shapeIdOrName: node.id,\n });\n });\n element.addEventListener('contextmenu', (event) => {\n event.preventDefault();\n event.stopPropagation();\n const targetNode = this.pointerOperationNode(slide, node, event, scale) ?? node;\n void this.dispatch({\n kind: 'select-shape',\n slideIdOrIndex: slide.id,\n shapeIdOrName: targetNode.id,\n }).then(() => this.showContextMenu(event, slide, targetNode));\n });\n element.addEventListener('mousedown', (event) => {\n const targetNode = this.pointerOperationNode(slide, node, event, scale) ?? node;\n const targetElement = elementForShape(this.canvas, targetNode.id) ?? element;\n if (\n isEditingText(targetElement, event.target) ||\n event.button !== 0 ||\n !targetNode.capabilities.editGeometry\n )\n return;\n event.preventDefault();\n event.stopPropagation();\n this.startDrag(event, 'move', slide, targetNode, scale, targetElement);\n });\n element.addEventListener('dblclick', (event) => {\n event.stopPropagation();\n const redirectedNode = redirectedEditableTextHit(slide, node, event, scale);\n if (redirectedNode) {\n this.startTextEdit(\n elementForShape(this.canvas, redirectedNode.id) ?? element,\n slide,\n redirectedNode,\n );\n return;\n }\n if (!node.capabilities.editText) {\n void this.sessionValue\n .dispatch({ kind: 'select-shape', slideIdOrIndex: slide.id, shapeIdOrName: node.id })\n .then(() => this.renderSelection());\n this.options.onObjectAction?.({\n action: 'blocked-text-edit',\n slideId: slide.id,\n shapeId: node.id,\n kind: node.kind,\n name: node.name,\n reason: nonTextEditReason(node),\n });\n return;\n }\n this.startTextEdit(element, slide, node);\n });\n return element;\n }\n\n private pointerOperationNode(\n slide: PptSlideScene,\n current: PptSceneNode,\n event: MouseEvent,\n scale: number,\n ): PptSceneNode | null {\n const selection = this.selection();\n if (\n selection?.kind === 'shape' &&\n selection.slideId === slide.id &&\n selection.shapeId === current.id\n ) {\n return current;\n }\n return redirectedEditableTextHit(slide, current, event, scale);\n }\n\n private notifyTableCellSelection(slide: PptSlideScene, node: PptSceneNode, event: Event): void {\n const cell = tableCellFromEvent(event);\n if (!cell || !node.capabilities.editTableCells) return;\n const row = Number(cell.dataset.row);\n const column = Number(cell.dataset.column);\n if (!Number.isInteger(row) || !Number.isInteger(column)) return;\n this.options.onTableCellSelectionChange?.({\n slideId: slide.id,\n shapeId: node.id,\n row,\n column,\n text: tableCellRawText(cell, node, row, column),\n });\n }\n\n private applyTextStyle(element: HTMLElement, node: PptSceneNode, scale: number): void {\n const style = node.textStyle;\n if (style) {\n applyTextStyleToElement(element, inheritedNodeTextStyle(node, style), scale);\n if (style.alignment) {\n applyTextAlignment(element, style.alignment);\n if (style.alignment === 'center') element.style.justifyContent = 'center';\n if (style.alignment === 'right') element.style.justifyContent = 'flex-end';\n }\n }\n const body = node.kind === 'table' ? undefined : node.textBody;\n if (body) {\n const left = body.insetLeft ?? 91440;\n const top = body.insetTop ?? 45720;\n const right = body.insetRight ?? 91440;\n const bottom = body.insetBottom ?? 45720;\n const baselineOffset = textBaselineMetricOffset(node, scale);\n element.style.padding = `${top * scale + baselineOffset}px ${right * scale}px ${bottom * scale}px ${left * scale}px`;\n if (isVerticalTextBody(body)) {\n element.style.writingMode = 'vertical-rl';\n element.style.textOrientation = 'upright';\n }\n if (body.anchor === 'middle') element.style.alignItems = 'center';\n if (body.anchor === 'bottom') element.style.alignItems = 'flex-end';\n if (body.anchor === 'top') element.style.alignItems = 'flex-start';\n }\n }\n\n private startTextEdit(element: HTMLElement, slide: PptSlideScene, node: PptSceneNode): void {\n const originalText = node.text ?? '';\n const editableTarget = editableTextTarget(element);\n let finished = false;\n void this.sessionValue\n .dispatch({ kind: 'select-shape', slideIdOrIndex: slide.id, shapeIdOrName: node.id })\n .then(() => this.renderSelection());\n this.options.onTextEditStateChange?.({\n state: 'start',\n slideId: slide.id,\n shapeId: node.id,\n text: originalText,\n });\n editableTarget.contentEditable = 'true';\n editableTarget.spellcheck = false;\n editableTarget.setAttribute('role', 'textbox');\n editableTarget.setAttribute('aria-label', node.name ?? 'PPT text');\n element.dataset.editing = 'true';\n this.canvas.dataset.interactionMode = 'editing';\n editableTarget.textContent = originalText;\n editableTarget.focus();\n const selection = editableTarget.ownerDocument.getSelection();\n if (selection) {\n const range = editableTarget.ownerDocument.createRange();\n range.selectNodeContents(editableTarget);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n const finish = (commit: boolean) => {\n if (finished) return;\n finished = true;\n editableTarget.contentEditable = 'false';\n editableTarget.removeAttribute('role');\n editableTarget.removeAttribute('aria-label');\n delete element.dataset.editing;\n delete this.canvas.dataset.interactionMode;\n editableTarget.removeEventListener('blur', handleBlur);\n editableTarget.removeEventListener('keydown', handleKeydown);\n editableTarget.removeEventListener('paste', handlePaste);\n const text = editableTarget.textContent ?? '';\n if (!commit) {\n editableTarget.textContent = originalText;\n this.options.onTextEditStateChange?.({\n state: 'cancel',\n slideId: slide.id,\n shapeId: node.id,\n text: originalText,\n });\n this.render();\n return;\n }\n this.options.onTextEditStateChange?.({\n state: 'commit',\n slideId: slide.id,\n shapeId: node.id,\n text,\n });\n if (text !== originalText) {\n void this.dispatch({\n kind: 'set-shape-text',\n slideIdOrIndex: slide.id,\n shapeIdOrName: node.id,\n text,\n });\n } else {\n this.render();\n }\n };\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n finish(false);\n return;\n }\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n finish(true);\n }\n };\n const handlePaste = (event: ClipboardEvent) => {\n const text = event.clipboardData?.getData('text/plain');\n if (text === undefined) return;\n event.preventDefault();\n insertPlainText(editableTarget, text);\n };\n const handleBlur = () => finish(true);\n editableTarget.addEventListener('blur', handleBlur);\n editableTarget.addEventListener('keydown', handleKeydown);\n editableTarget.addEventListener('paste', handlePaste);\n }\n\n private startTableCellEdit(\n cell: HTMLElement,\n slide: PptSlideScene,\n node: PptSceneNode,\n row: number,\n column: number,\n ): void {\n const originalText = tableCellRawText(cell, node, row, column);\n let finished = false;\n void this.sessionValue\n .dispatch({ kind: 'select-shape', slideIdOrIndex: slide.id, shapeIdOrName: node.id })\n .then(() => this.renderSelection());\n this.options.onTableCellSelectionChange?.({\n slideId: slide.id,\n shapeId: node.id,\n row,\n column,\n text: originalText,\n });\n cell.contentEditable = 'true';\n cell.spellcheck = false;\n this.canvas.dataset.interactionMode = 'editing';\n cell.setAttribute('role', 'textbox');\n cell.setAttribute('aria-label', `${node.name ?? 'PPT table'} cell ${row + 1},${column + 1}`);\n cell.textContent = originalText;\n cell.focus();\n const selection = cell.ownerDocument.getSelection();\n if (selection) {\n const range = cell.ownerDocument.createRange();\n range.selectNodeContents(cell);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n const finish = (commit: boolean) => {\n if (finished) return;\n finished = true;\n cell.contentEditable = 'false';\n delete this.canvas.dataset.interactionMode;\n cell.removeAttribute('role');\n cell.removeAttribute('aria-label');\n cell.removeEventListener('blur', handleBlur);\n cell.removeEventListener('keydown', handleKeydown);\n cell.removeEventListener('paste', handlePaste);\n const text = cell.textContent ?? '';\n if (!commit) {\n cell.textContent = originalText;\n cell.dataset.cellText = originalText;\n return;\n }\n if (text !== originalText) {\n cell.dataset.cellText = text;\n void this.dispatch({\n kind: 'set-table-cell-text',\n slideIdOrIndex: slide.id,\n shapeIdOrName: node.id,\n row,\n column,\n text,\n });\n } else {\n this.render();\n }\n };\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n finish(false);\n return;\n }\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n finish(true);\n }\n };\n const handlePaste = (event: ClipboardEvent) => {\n const text = event.clipboardData?.getData('text/plain');\n if (text === undefined) return;\n event.preventDefault();\n insertPlainText(cell, text);\n };\n const handleBlur = () => finish(true);\n cell.addEventListener('blur', handleBlur);\n cell.addEventListener('keydown', handleKeydown);\n cell.addEventListener('paste', handlePaste);\n }\n\n private startDrag(\n event: MouseEvent,\n mode: NativePptDragState['mode'],\n slide: PptSlideScene,\n node: PptSceneNode,\n scale: number,\n element: HTMLElement,\n ): void {\n if (mode === 'resize') prepareTextResizePreview(element, node);\n this.dragState = {\n mode,\n slideId: slide.id,\n shapeId: node.id,\n slideSize: slide.size,\n startClientX: event.clientX,\n startClientY: event.clientY,\n startBounds: { ...node.bounds },\n scale,\n element,\n active: false,\n };\n void this.sessionValue\n .dispatch({ kind: 'select-shape', slideIdOrIndex: slide.id, shapeIdOrName: node.id })\n .then(() => this.renderSelection());\n }\n\n private updateDrag(event: MouseEvent): void {\n const drag = this.dragState;\n if (!drag) return;\n const distance = Math.hypot(\n event.clientX - drag.startClientX,\n event.clientY - drag.startClientY,\n );\n if (distance <= PPT_DRAG_START_THRESHOLD_PX) {\n this.restoreDragElementBounds(drag);\n this.hideSnapGuides();\n drag.active = false;\n this.clearDragVisualState(drag.element, true);\n return;\n }\n drag.active = true;\n drag.element.dataset.dragging = 'true';\n this.canvas.dataset.interactionMode = 'dragging';\n const dx = (event.clientX - drag.startClientX) / drag.scale;\n const dy = (event.clientY - drag.startClientY) / drag.scale;\n if (drag.mode === 'move') {\n const { bounds } = event.altKey\n ? {\n bounds: clampedPptDragBounds(drag.startBounds, drag.slideSize, {\n left: drag.startBounds.left + dx,\n top: drag.startBounds.top + dy,\n }),\n }\n : this.snapDragBounds(drag, {\n left: drag.startBounds.left + dx,\n top: drag.startBounds.top + dy,\n });\n if (event.altKey) this.hideSnapGuides();\n drag.element.style.left = `${bounds.left * drag.scale}px`;\n drag.element.style.top = `${bounds.top * drag.scale}px`;\n return;\n }\n const { bounds } = event.altKey\n ? {\n bounds: clampedPptDragBounds(drag.startBounds, drag.slideSize, {\n width: drag.startBounds.width + dx,\n height: drag.startBounds.height + dy,\n }),\n }\n : this.snapResizeBounds(drag, {\n width: drag.startBounds.width + dx,\n height: drag.startBounds.height + dy,\n });\n if (event.altKey) this.hideSnapGuides();\n drag.element.style.width = `${bounds.width * drag.scale}px`;\n drag.element.style.height = `${bounds.height * drag.scale}px`;\n }\n\n private async finishDrag(event: MouseEvent): Promise<void> {\n const drag = this.dragState;\n if (!drag) return;\n this.dragState = null;\n const dx = (event.clientX - drag.startClientX) / drag.scale;\n const dy = (event.clientY - drag.startClientY) / drag.scale;\n const distance = Math.hypot(\n event.clientX - drag.startClientX,\n event.clientY - drag.startClientY,\n );\n if (distance <= PPT_DRAG_START_THRESHOLD_PX || !drag.active) {\n this.hideSnapGuides();\n this.clearDragVisualState(drag.element);\n return;\n }\n this.suppressClickAfterDrag =\n this.suppressClickAfterDrag || distance > PPT_DRAG_START_THRESHOLD_PX;\n const snap = event.altKey\n ? clampedPptDragBounds(\n drag.startBounds,\n drag.slideSize,\n drag.mode === 'move'\n ? {\n left: drag.startBounds.left + dx,\n top: drag.startBounds.top + dy,\n }\n : {\n width: drag.startBounds.width + dx,\n height: drag.startBounds.height + dy,\n },\n )\n : drag.mode === 'move'\n ? this.snapDragBounds(drag, {\n left: drag.startBounds.left + dx,\n top: drag.startBounds.top + dy,\n })\n : this.snapResizeBounds(drag, {\n width: drag.startBounds.width + dx,\n height: drag.startBounds.height + dy,\n });\n this.hideSnapGuides();\n this.clearDragVisualState(drag.element);\n await this.dispatch({\n kind: 'set-shape-geometry',\n slideIdOrIndex: drag.slideId,\n shapeIdOrName: drag.shapeId,\n geometry: 'bounds' in snap ? snap.bounds : snap,\n preserveTextSizeOnResize: drag.mode === 'resize',\n });\n if ('snapped' in snap && snap.snapped) {\n const slide = this.currentSlide();\n const node = slide?.nodes.find((item) => item.id === drag.shapeId);\n if (slide && node) {\n this.options.onObjectAction?.({\n action: 'snap-geometry',\n slideId: slide.id,\n shapeId: node.id,\n kind: node.kind,\n name: node.name,\n reason: this.snapActionReason(snap, slide),\n });\n }\n }\n }\n\n private snapActionReason(snap: PptSnapResult, slide: PptSlideScene): string {\n const referenceNames = [\n ...new Set(\n snap.guides\n .map((guide) => guide.referenceShapeId)\n .filter((id): id is string => Boolean(id)),\n ),\n ]\n .map((shapeId) => slide.nodes.find((node) => node.id === shapeId))\n .filter((node): node is PptSceneNode => Boolean(node))\n .map((node) => node.name || node.id);\n if (referenceNames.length > 0) {\n return `已吸附到 ${referenceNames.join('、')}`;\n }\n return '已吸附到页面参考线';\n }\n\n private snapDragBounds(\n drag: NativePptDragState,\n next: Pick<PptSceneNode['bounds'], 'left' | 'top'>,\n ): PptSnapResult {\n const rawBounds = clampedPptDragBounds(drag.startBounds, drag.slideSize, next);\n const slide = this.sessionValue.scene().slides.find((item) => item.id === drag.slideId);\n if (!slide) {\n this.hideSnapGuides();\n return { bounds: rawBounds, guides: [], snapped: false };\n }\n const threshold = Math.min(180000, PPT_DRAG_SNAP_THRESHOLD_PX / drag.scale);\n const xSnap = closestPptSnap(\n [\n { offset: 0, value: rawBounds.left, role: 'start' },\n {\n offset: rawBounds.width / 2,\n value: rawBounds.left + rawBounds.width / 2,\n role: 'center',\n },\n { offset: rawBounds.width, value: rawBounds.left + rawBounds.width, role: 'end' },\n ],\n pptSnapTargetsForAxis(slide, drag.shapeId, 'x'),\n threshold,\n );\n const ySnap = closestPptSnap(\n [\n { offset: 0, value: rawBounds.top, role: 'start' },\n {\n offset: rawBounds.height / 2,\n value: rawBounds.top + rawBounds.height / 2,\n role: 'center',\n },\n { offset: rawBounds.height, value: rawBounds.top + rawBounds.height, role: 'end' },\n ],\n pptSnapTargetsForAxis(slide, drag.shapeId, 'y'),\n threshold,\n );\n const bounds = clampedPptDragBounds(drag.startBounds, drag.slideSize, {\n left: xSnap ? xSnap.target.value - xSnap.source.offset : rawBounds.left,\n top: ySnap ? ySnap.target.value - ySnap.source.offset : rawBounds.top,\n });\n const guides = [\n ...(xSnap\n ? [\n {\n axis: 'x' as const,\n value: xSnap.target.value,\n kind: xSnap.target.kind,\n referenceShapeId: xSnap.target.referenceShapeId,\n },\n ]\n : []),\n ...(ySnap\n ? [\n {\n axis: 'y' as const,\n value: ySnap.target.value,\n kind: ySnap.target.kind,\n referenceShapeId: ySnap.target.referenceShapeId,\n },\n ]\n : []),\n ];\n this.renderSnapGuides(guides, drag.scale);\n return { bounds, guides, snapped: guides.length > 0 };\n }\n\n private snapResizeBounds(\n drag: NativePptDragState,\n next: Pick<PptSceneNode['bounds'], 'width' | 'height'>,\n ): PptSnapResult {\n const rawBounds = clampedPptDragBounds(drag.startBounds, drag.slideSize, next);\n const slide = this.sessionValue.scene().slides.find((item) => item.id === drag.slideId);\n if (!slide) {\n this.hideSnapGuides();\n return { bounds: rawBounds, guides: [], snapped: false };\n }\n const threshold = Math.min(180000, PPT_DRAG_SNAP_THRESHOLD_PX / drag.scale);\n const xSnap = closestPptSnap(\n [\n {\n offset: rawBounds.width / 2,\n value: rawBounds.left + rawBounds.width / 2,\n role: 'center',\n },\n { offset: rawBounds.width, value: rawBounds.left + rawBounds.width, role: 'end' },\n ],\n pptSnapTargetsForAxis(slide, drag.shapeId, 'x'),\n threshold,\n { matchRole: false },\n );\n const ySnap = closestPptSnap(\n [\n {\n offset: rawBounds.height / 2,\n value: rawBounds.top + rawBounds.height / 2,\n role: 'center',\n },\n { offset: rawBounds.height, value: rawBounds.top + rawBounds.height, role: 'end' },\n ],\n pptSnapTargetsForAxis(slide, drag.shapeId, 'y'),\n threshold,\n { matchRole: false },\n );\n const bounds = clampedPptDragBounds(drag.startBounds, drag.slideSize, {\n width: xSnap\n ? snappedResizeLength(rawBounds.left, rawBounds.width, xSnap.source, xSnap.target.value)\n : rawBounds.width,\n height: ySnap\n ? snappedResizeLength(rawBounds.top, rawBounds.height, ySnap.source, ySnap.target.value)\n : rawBounds.height,\n });\n const guides = [\n ...(xSnap\n ? [\n {\n axis: 'x' as const,\n value: xSnap.target.value,\n kind: xSnap.target.kind,\n referenceShapeId: xSnap.target.referenceShapeId,\n },\n ]\n : []),\n ...(ySnap\n ? [\n {\n axis: 'y' as const,\n value: ySnap.target.value,\n kind: ySnap.target.kind,\n referenceShapeId: ySnap.target.referenceShapeId,\n },\n ]\n : []),\n ];\n this.renderSnapGuides(guides, drag.scale);\n return { bounds, guides, snapped: guides.length > 0 };\n }\n\n private renderSnapGuides(guides: PptSnapGuide[], scale: number): void {\n this.clearSnapReferenceHighlights();\n const referenceShapeIds = new Set(\n guides.map((guide) => guide.referenceShapeId).filter((id): id is string => Boolean(id)),\n );\n for (const shapeId of referenceShapeIds) {\n const node = elementForShape(this.canvas, shapeId);\n if (node) node.dataset.snapReference = 'true';\n }\n this.snapGuides.replaceChildren(\n ...guides.map((guide) => {\n const element = document.createElement('div');\n element.className = 'coco-ppt-snap-guide';\n element.dataset.axis = guide.axis;\n element.dataset.kind = guide.kind;\n if (guide.referenceShapeId) element.dataset.referenceShapeId = guide.referenceShapeId;\n if (guide.axis === 'x') {\n element.style.left = `${guide.value * scale}px`;\n } else {\n element.style.top = `${guide.value * scale}px`;\n }\n return element;\n }),\n );\n }\n\n private hideSnapGuides(): void {\n this.clearSnapReferenceHighlights();\n this.snapGuides.replaceChildren();\n }\n\n private clearDragVisualState(element: HTMLElement, force = false): void {\n delete element.dataset.dragging;\n if (force || !this.dragState) delete this.canvas.dataset.interactionMode;\n }\n\n private restoreDragElementBounds(drag: NativePptDragState): void {\n if (drag.mode === 'move') {\n drag.element.style.left = `${drag.startBounds.left * drag.scale}px`;\n drag.element.style.top = `${drag.startBounds.top * drag.scale}px`;\n return;\n }\n drag.element.style.width = `${drag.startBounds.width * drag.scale}px`;\n drag.element.style.height = `${drag.startBounds.height * drag.scale}px`;\n }\n\n private clearSnapReferenceHighlights(): void {\n this.canvas\n .querySelectorAll<HTMLElement>('.coco-ppt-node[data-snap-reference=\"true\"]')\n .forEach((node) => {\n delete node.dataset.snapReference;\n });\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n if (\n event.defaultPrevented ||\n this.dragState ||\n isTypingTarget(event.target) ||\n Boolean(this.root.querySelector('[contenteditable=\"true\"]'))\n )\n return;\n const selection = this.selection();\n if (selection?.kind !== 'shape') return;\n const slide = this.sessionValue.scene().slides.find((item) => item.id === selection.slideId);\n const node = slide?.nodes.find((item) => item.id === selection.shapeId);\n if (!slide || !node) return;\n const commandKey = event.ctrlKey || event.metaKey;\n if (commandKey && event.key.toLowerCase() === 'c') {\n event.preventDefault();\n this.copySelectedShape(slide, node);\n return;\n }\n if (commandKey && event.key.toLowerCase() === 'v') {\n event.preventDefault();\n this.pasteClipboardShape(slide, node);\n return;\n }\n if (commandKey && event.key.toLowerCase() === 'd') {\n event.preventDefault();\n this.duplicateSelectedShape(slide, node);\n return;\n }\n if (commandKey && event.shiftKey && event.key === ']') {\n event.preventDefault();\n this.bringSelectedShapeToFront(slide, node);\n return;\n }\n if (commandKey && event.shiftKey && event.key === '[') {\n event.preventDefault();\n this.sendSelectedShapeToBack(slide, node);\n return;\n }\n if (event.key === 'Delete' || event.key === 'Backspace') {\n if (!isShapeCollectionEditable(node)) return;\n event.preventDefault();\n this.deleteSelectedShape(slide, node);\n return;\n }\n const direction = arrowKeyDirection(event.key);\n if (!direction) return;\n if (!node.capabilities.editGeometry) return;\n const step = PPT_KEYBOARD_NUDGE_EMU * (event.shiftKey ? 10 : 1);\n const geometry = clampedPptDragBounds(node.bounds, slide.size, {\n left: node.bounds.left + direction.dx * step,\n top: node.bounds.top + direction.dy * step,\n });\n event.preventDefault();\n void this.dispatch({\n kind: 'set-shape-geometry',\n slideIdOrIndex: slide.id,\n shapeIdOrName: node.id,\n geometry: { left: geometry.left, top: geometry.top },\n }).then(() => {\n this.options.onObjectAction?.({\n action: 'nudge-geometry',\n slideId: slide.id,\n shapeId: node.id,\n kind: node.kind,\n name: node.name,\n reason: `已移动对象 ${direction.label}${event.shiftKey ? ' 10步' : ' 1步'}`,\n });\n });\n }\n\n private handleSelectStart(event: Event): void {\n if (isTypingTarget(event.target)) return;\n if (event.target instanceof HTMLElement && event.target.closest('[contenteditable=\"true\"]'))\n return;\n event.preventDefault();\n }\n\n private copySelectedShape(slide: PptSlideScene, node: PptSceneNode): void {\n if (!isShapeCollectionEditable(node)) return;\n this.clipboardShape = { slideId: slide.id, shapeId: node.id };\n this.options.onObjectAction?.({\n action: 'copy-shape',\n slideId: slide.id,\n shapeId: node.id,\n kind: node.kind,\n name: node.name,\n reason: '已复制对象',\n });\n }\n\n private pasteClipboardShape(slide: PptSlideScene, node: PptSceneNode): void {\n if (!this.clipboardShape) return;\n const source = this.clipboardShape;\n void this.dispatch({\n kind: 'paste-shape',\n slideIdOrIndex: source.slideId,\n shapeIdOrName: source.shapeId,\n }).then(() => {\n const selection = this.selection();\n this.options.onObjectAction?.({\n action: 'paste-shape',\n slideId: source.slideId,\n shapeId: selection?.kind === 'shape' ? selection.shapeId : node.id,\n kind: node.kind,\n name: node.name,\n reason: '已粘贴对象',\n });\n });\n }\n\n private duplicateSelectedShape(slide: PptSlideScene, node: PptSceneNode): void {\n if (!isShapeCollectionEditable(node)) return;\n void this.dispatch({\n kind: 'duplicate-shape',\n slideIdOrIndex: slide.id,\n shapeIdOrName: node.id,\n }).then(() => {\n const selection = this.selection();\n this.options.onObjectAction?.({\n action: 'duplicate-shape',\n slideId: slide.id,\n shapeId: selection?.kind === 'shape' ? selection.shapeId : node.id,\n kind: node.kind,\n name: node.name,\n reason: '已重复对象',\n });\n });\n }\n\n private bringSelectedShapeToFront(slide: PptSlideScene, node: PptSceneNode): void {\n if (!isShapeCollectionEditable(node)) return;\n void this.dispatch({\n kind: 'bring-shape-to-front',\n slideIdOrIndex: slide.id,\n shapeIdOrName: node.id,\n }).then(() => {\n this.options.onObjectAction?.({\n action: 'bring-shape-to-front',\n slideId: slide.id,\n shapeId: node.id,\n kind: node.kind,\n name: node.name,\n reason: '已置于顶层',\n });\n });\n }\n\n private sendSelectedShapeToBack(slide: PptSlideScene, node: PptSceneNode): void {\n if (!isShapeCollectionEditable(node)) return;\n void this.dispatch({\n kind: 'send-shape-to-back',\n slideIdOrIndex: slide.id,\n shapeIdOrName: node.id,\n }).then(() => {\n this.options.onObjectAction?.({\n action: 'send-shape-to-back',\n slideId: slide.id,\n shapeId: node.id,\n kind: node.kind,\n name: node.name,\n reason: '已置于底层',\n });\n });\n }\n\n private showContextMenu(event: MouseEvent, slide: PptSlideScene, node: PptSceneNode): void {\n const editable = isShapeCollectionEditable(node);\n const hasClipboard = Boolean(this.clipboardShape);\n const run = (action: () => void) => () => {\n this.hideContextMenu();\n action();\n };\n this.contextMenu.replaceChildren(\n contextMenuButton(\n '复制',\n 'Ctrl+C',\n editable,\n run(() => this.copySelectedShape(slide, node)),\n ),\n contextMenuButton(\n '粘贴',\n 'Ctrl+V',\n hasClipboard,\n run(() => this.pasteClipboardShape(slide, node)),\n ),\n contextMenuButton(\n '重复',\n 'Ctrl+D',\n editable,\n run(() => this.duplicateSelectedShape(slide, node)),\n ),\n contextMenuDivider(),\n contextMenuButton(\n '置于顶层',\n 'Ctrl+Shift+]',\n editable,\n run(() => this.bringSelectedShapeToFront(slide, node)),\n ),\n contextMenuButton(\n '置于底层',\n 'Ctrl+Shift+[',\n editable,\n run(() => this.sendSelectedShapeToBack(slide, node)),\n ),\n contextMenuDivider(),\n contextMenuButton(\n '删除',\n 'Del',\n editable,\n run(() => this.deleteSelectedShape(slide, node)),\n ),\n );\n const rootRect =\n this.root instanceof ShadowRoot\n ? this.root.host.getBoundingClientRect()\n : this.root.getBoundingClientRect();\n const left = clampNumber(event.clientX, rootRect.left + 4, window.innerWidth - 170);\n const top = clampNumber(event.clientY, rootRect.top + 4, window.innerHeight - 220);\n this.contextMenu.style.left = `${left}px`;\n this.contextMenu.style.top = `${top}px`;\n this.contextMenu.dataset.shapeId = node.id;\n this.contextMenu.dataset.open = 'true';\n }\n\n private deleteSelectedShape(slide: PptSlideScene, node: PptSceneNode): void {\n if (!isShapeCollectionEditable(node)) return;\n void this.dispatch({\n kind: 'delete-shape',\n slideIdOrIndex: slide.id,\n shapeIdOrName: node.id,\n }).then(() => {\n this.options.onObjectAction?.({\n action: 'delete-shape',\n slideId: slide.id,\n shapeId: node.id,\n kind: node.kind,\n name: node.name,\n reason: '已删除对象',\n });\n });\n }\n\n private async dispatchCurrentSlideSelection(): Promise<void> {\n if (this.consumeSuppressedClick()) return;\n const slide = this.currentSlide();\n if (!slide) return;\n await this.dispatch({ kind: 'select-slide', slideIdOrIndex: slide.id });\n }\n\n private consumeSuppressedClick(): boolean {\n if (!this.suppressClickAfterDrag) return false;\n this.suppressClickAfterDrag = false;\n return true;\n }\n\n private dismissContextMenu(event: PointerEvent): void {\n const target = event.composedPath()[0];\n if (target instanceof Node && this.contextMenu.contains(target)) return;\n this.hideContextMenu();\n }\n\n private hideContextMenu(): void {\n delete this.contextMenu.dataset.open;\n delete this.contextMenu.dataset.shapeId;\n }\n\n private renderSelection(): void {\n this.canvas\n .querySelectorAll<HTMLElement>('.coco-ppt-parent-group-outline')\n .forEach((node) => node.remove());\n const selection = this.sessionValue.selection();\n this.slideList.querySelectorAll<HTMLElement>('.coco-ppt-thumb').forEach((thumb, index) => {\n const slide = this.sessionValue.scene().slides[index];\n thumb.dataset.selected = selection?.slideId === slide?.id ? 'true' : 'false';\n });\n this.canvas.querySelectorAll<HTMLElement>('.coco-ppt-node').forEach((node) => {\n node.dataset.selected =\n selection?.kind === 'shape' && node.dataset.shapeId === selection.shapeId\n ? 'true'\n : 'false';\n });\n this.renderParentGroupSelection(selection);\n }\n\n private renderParentGroupSelection(selection: PptEditorSelection): void {\n if (selection?.kind !== 'shape') return;\n const slide = this.sessionValue.scene().slides.find((item) => item.id === selection.slideId);\n const selectedNode =\n slide?.nodes.find((item) => item.id === selection.shapeId) ??\n slide?.groups.find((item) => item.id === selection.shapeId);\n const groupNode = selectedNode?.groupContext\n ? (slide?.groups.find((item) => item.id === selectedNode.groupContext?.parentId) ??\n parentGroupDragNode(selectedNode))\n : selectedNode?.kind === 'group'\n ? selectedNode\n : null;\n if (!slide || !groupNode) return;\n const scale = this.computeScale(slide);\n const outline = document.createElement('div');\n outline.className = 'coco-ppt-parent-group-outline';\n outline.dataset.shapeId = groupNode.id;\n outline.dataset.selected = selection.shapeId === groupNode.id ? 'true' : 'false';\n outline.title = `父组:${groupNode.name || groupNode.id}`;\n outline.style.left = `${groupNode.bounds.left * scale}px`;\n outline.style.top = `${groupNode.bounds.top * scale}px`;\n outline.style.width = `${groupNode.bounds.width * scale}px`;\n outline.style.height = `${groupNode.bounds.height * scale}px`;\n const startParentGroupDrag = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n this.startDrag(event, 'move', slide, groupNode, scale, outline);\n };\n (['top', 'right', 'bottom', 'left'] as const).forEach((edge) => {\n const edgeElement = document.createElement('div');\n edgeElement.className = 'coco-ppt-parent-group-edge';\n edgeElement.dataset.edge = edge;\n edgeElement.title = '拖动父组';\n edgeElement.addEventListener('mousedown', startParentGroupDrag);\n outline.append(edgeElement);\n });\n const handle = document.createElement('div');\n handle.className = 'coco-ppt-parent-group-handle';\n handle.title = '拖动父组';\n handle.addEventListener('mousedown', startParentGroupDrag);\n outline.append(handle);\n this.canvas.append(outline);\n }\n\n private currentSlide(): PptSlideScene | null {\n const scene = this.sessionValue.scene();\n const selection = this.sessionValue.selection();\n if (selection?.kind === 'slide' || selection?.kind === 'shape') {\n return (\n scene.slides.find((slide) => slide.id === selection.slideId) ?? scene.slides[0] ?? null\n );\n }\n return scene.slides[0] ?? null;\n }\n\n private computeScale(slide: PptSlideScene): number {\n const stage = this.canvas.parentElement;\n const availableWidth = stage ? Math.max(1, stage.clientWidth - 48) : 960;\n const availableHeight = stage ? Math.max(1, stage.clientHeight - 48) : 540;\n return Math.min(\n 960 / slide.size.width,\n 540 / slide.size.height,\n availableWidth / slide.size.width,\n availableHeight / slide.size.height,\n );\n }\n}\n\nfunction prepareTextResizePreview(element: HTMLElement, node: PptSceneNode): void {\n if (!shouldUseWrappingResizePreview(node)) return;\n const target =\n element.querySelector<HTMLElement>('.coco-ppt-rich-text, .coco-ppt-distributed-text') ??\n element.querySelector<HTMLElement>('.coco-ppt-text-layer') ??\n element;\n element.dataset.textResizePreview = 'wrap';\n target.dataset.textResizePreview = 'wrap';\n target.style.transform = '';\n target.style.transformOrigin = '';\n target.style.width = '';\n element.style.whiteSpace = 'pre-wrap';\n element.style.overflowWrap = 'anywhere';\n element.querySelectorAll<HTMLElement>('.coco-ppt-rich-text, .coco-ppt-paragraph').forEach((item) => {\n item.style.whiteSpace = 'pre-wrap';\n item.style.overflowWrap = 'anywhere';\n });\n}\n\nfunction shouldUseWrappingResizePreview(node: PptSceneNode): boolean {\n return Boolean(\n node.capabilities.editGeometry &&\n isResizeWrappingTextShape(node) &&\n (node.text || node.textParagraphs?.length),\n );\n}\n\nfunction isResizeWrappingTextShape(node: PptSceneNode): boolean {\n return node.kind === 'placeholder' || node.kind === 'textBox' || node.kind === 'geometricShape';\n}\n\nfunction nextAnimationFrame(): Promise<void> {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\n\nasync function rasterizeThumbnailElement(\n element: HTMLElement,\n width: number,\n height: number,\n scale: number,\n cssText: string,\n): Promise<HTMLCanvasElement | null> {\n if (\n typeof XMLSerializer === 'undefined' ||\n typeof Blob === 'undefined' ||\n typeof URL === 'undefined' ||\n typeof URL.createObjectURL !== 'function'\n )\n return null;\n await waitForThumbnailImages(element);\n const canvas = document.createElement('canvas');\n canvas.width = Math.max(1, Math.round(width * scale));\n canvas.height = Math.max(1, Math.round(height * scale));\n const context = canvas.getContext('2d');\n if (!context) return null;\n const wrapper = document.createElement('div');\n wrapper.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n wrapper.style.width = `${width}px`;\n wrapper.style.height = `${height}px`;\n wrapper.style.position = 'relative';\n wrapper.style.overflow = 'hidden';\n wrapper.style.background = '#fff';\n const style = document.createElement('style');\n style.textContent = cssText;\n const clone = element.cloneNode(true) as HTMLElement;\n await inlineThumbnailImages(clone);\n clone.style.position = 'relative';\n clone.style.left = '0';\n clone.style.top = '0';\n wrapper.append(style, clone);\n const serialized = new XMLSerializer().serializeToString(wrapper);\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${canvas.width}\" height=\"${canvas.height}\" viewBox=\"0 0 ${width} ${height}\"><foreignObject width=\"100%\" height=\"100%\">${serialized}</foreignObject></svg>`;\n const url = URL.createObjectURL(new Blob([svg], { type: 'image/svg+xml;charset=utf-8' }));\n try {\n const image = await loadRasterImage(url);\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n return canvas;\n } catch {\n return null;\n } finally {\n URL.revokeObjectURL(url);\n }\n}\n\nfunction cloneThumbnailCanvas(source: HTMLCanvasElement): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.className = 'coco-ppt-thumb-canvas';\n canvas.width = source.width;\n canvas.height = source.height;\n const context = canvas.getContext('2d');\n if (context) context.drawImage(source, 0, 0);\n return canvas;\n}\n\nfunction thumbnailFingerprint(slide: PptSlideScene): string {\n return JSON.stringify({\n size: slide.size,\n background: slide.background,\n nodes: slide.nodes.map((node) => thumbnailNodeFingerprint(node)),\n });\n}\n\nfunction thumbnailNodeFingerprint(node: PptSceneNode): unknown {\n return {\n id: node.id,\n kind: node.kind,\n bounds: node.bounds,\n text: node.text,\n textParagraphs: node.textParagraphs,\n textStyle: node.textStyle,\n textBody: node.textBody,\n table: node.table,\n fillColor: node.fillColor,\n fillGradient: node.fillGradient,\n opacity: node.opacity,\n lineColor: node.lineColor,\n lineGradient: node.lineGradient,\n lineOpacity: node.lineOpacity,\n lineWidth: node.lineWidth,\n lineDash: node.lineDash,\n presetGeometry: node.presetGeometry,\n presetAdjustments: node.presetAdjustments,\n customGeometry: node.customGeometry,\n imagePath: node.imagePath,\n imageCrop: node.imageCrop,\n imageFillRect: node.imageFillRect,\n imageOpacity: node.imageOpacity,\n shadow: node.shadow,\n threeD: node.threeD,\n children: node.children.map((child) => thumbnailNodeFingerprint(child)),\n };\n}\n\nasync function waitForThumbnailImages(element: HTMLElement): Promise<void> {\n const images = Array.from(element.querySelectorAll<HTMLImageElement>('img'));\n await Promise.all(\n images.map(async (image) => {\n if (image.complete && image.naturalWidth > 0) return;\n if (typeof image.decode === 'function') {\n await image.decode().catch(() => {});\n return;\n }\n await new Promise<void>((resolve) => {\n const done = () => resolve();\n image.addEventListener('load', done, { once: true });\n image.addEventListener('error', done, { once: true });\n setTimeout(done, 500);\n });\n }),\n );\n}\n\nasync function inlineThumbnailImages(element: HTMLElement): Promise<void> {\n const images = Array.from(element.querySelectorAll<HTMLImageElement>('img'));\n await Promise.all(\n images.map(async (image) => {\n image.alt = '';\n const src = image.getAttribute('src');\n if (!src || src.startsWith('data:')) return;\n const dataUrl = await imageSrcToDataUrl(src).catch(() => undefined);\n if (dataUrl) image.setAttribute('src', dataUrl);\n }),\n );\n}\n\nasync function imageSrcToDataUrl(src: string): Promise<string> {\n const response = await fetch(src);\n if (!response.ok) throw new Error(`Failed to inline thumbnail image: ${response.status}`);\n const blob = await response.blob();\n return blobToDataUrl(blob);\n}\n\nfunction blobToDataUrl(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === 'string') resolve(reader.result);\n else reject(new Error('Failed to read thumbnail image blob.'));\n };\n reader.onerror = () =>\n reject(reader.error ?? new Error('Failed to read thumbnail image blob.'));\n reader.readAsDataURL(blob);\n });\n}\n\nfunction loadRasterImage(url: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error('Failed to rasterize PPT thumbnail.'));\n image.src = url;\n });\n}\n\nfunction fontFaceCss(fonts: PptEditorView['fonts']): string {\n const faces = fonts.filter(isBrowserUsableFontResource).map((font) => {\n const family = cssString(font.family);\n const weight = font.weight ?? 400;\n const style = font.style ?? 'normal';\n return `@font-face { font-family: ${family}; src: url(${cssUrl(font.url)}); font-weight: ${weight}; font-style: ${style}; }`;\n });\n return faces.join('\\n');\n}\n\nfunction isBrowserUsableFontResource(font: PptEditorView['fonts'][number]): boolean {\n return /font\\/(ttf|otf|woff|woff2)|application\\/font-(sfnt|woff|woff2)/i.test(font.contentType);\n}\n\nfunction ensureGoogleFontLinks(\n fonts: PptEditorView['fonts'],\n referencedFamilies: Iterable<string> = [],\n): Promise<void> {\n if (typeof document === 'undefined') return Promise.resolve();\n const families = new Set(fonts.map((font) => font.family));\n for (const family of referencedFamilies) families.add(family);\n const pending: Promise<void>[] = [];\n for (const family of families) {\n const url = googleFontCssUrl(family);\n if (!url) continue;\n const id = `coco-ppt-google-font-${family.replace(/[^a-zA-Z0-9_-]/g, '_')}`;\n const existing = document.getElementById(id) as HTMLLinkElement | null;\n if (existing) {\n pending.push(waitForStylesheet(existing));\n continue;\n }\n const link = document.createElement('link');\n link.id = id;\n link.rel = 'stylesheet';\n link.href = url;\n pending.push(waitForStylesheet(link));\n document.head.append(link);\n }\n return Promise.all(pending).then(() => {});\n}\n\nfunction usedFontFamiliesInView(view: PptEditorView): string[] {\n const families = new Set<string>();\n const add = (family: string | undefined) => {\n if (family?.trim()) families.add(family.trim());\n };\n const visitNode = (node: PptSceneNode) => {\n add(node.textStyle?.fontFamily);\n for (const paragraph of node.textParagraphs ?? []) {\n add(paragraph.style?.bulletFontFamily);\n for (const run of paragraph.runs ?? []) add(run.style?.fontFamily);\n }\n for (const row of node.table?.cellStyles ?? []) {\n for (const cell of row) add(cell?.textStyle?.fontFamily);\n }\n for (const child of node.children) visitNode(child);\n };\n for (const slide of view.scene.slides) {\n for (const node of slide.nodes) visitNode(node);\n }\n return [...families];\n}\n\nfunction exposeNativePptFontReady(ready: Promise<void>): void {\n (globalThis as unknown as { __cocoPptFontRenderReady?: Promise<void> }).__cocoPptFontRenderReady =\n ready;\n}\n\nfunction waitForStylesheet(link: HTMLLinkElement): Promise<void> {\n if (link.sheet) return Promise.resolve();\n return new Promise((resolve) => {\n const finish = () => resolve();\n link.addEventListener('load', finish, { once: true });\n link.addEventListener('error', finish, { once: true });\n window.setTimeout(finish, 5000);\n });\n}\n\nfunction editableTextTarget(element: HTMLElement): HTMLElement {\n return element.querySelector<HTMLElement>('.coco-ppt-text-layer') ?? element;\n}\n\nfunction tableCellFromEvent(event: Event): HTMLElement | null {\n const target = event.target;\n if (!(target instanceof HTMLElement)) return null;\n return target.closest<HTMLElement>('td[data-row][data-column]');\n}\n\nfunction contextMenuButton(\n label: string,\n shortcut: string,\n enabled: boolean,\n action: () => void,\n): HTMLButtonElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.disabled = !enabled;\n const text = document.createElement('strong');\n text.textContent = label;\n const keys = document.createElement('span');\n keys.textContent = shortcut;\n button.append(text, keys);\n button.addEventListener('click', () => {\n if (button.disabled) return;\n action();\n });\n return button;\n}\n\nfunction contextMenuDivider(): HTMLHRElement {\n return document.createElement('hr');\n}\n\nfunction arrowKeyDirection(key: string): { dx: number; dy: number; label: string } | null {\n if (key === 'ArrowLeft') return { dx: -1, dy: 0, label: '左' };\n if (key === 'ArrowRight') return { dx: 1, dy: 0, label: '右' };\n if (key === 'ArrowUp') return { dx: 0, dy: -1, label: '上' };\n if (key === 'ArrowDown') return { dx: 0, dy: 1, label: '下' };\n return null;\n}\n\nfunction isTypingTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tagName = target.tagName.toLowerCase();\n return tagName === 'input' || tagName === 'textarea' || tagName === 'select';\n}\n\nfunction isEditingText(element: HTMLElement, target: EventTarget | null): boolean {\n if (element.isContentEditable) return true;\n if (target instanceof HTMLElement && target.isContentEditable) return true;\n return Boolean(element.querySelector<HTMLElement>('[contenteditable=\"true\"]'));\n}\n\nfunction inheritedNodeTextStyle(\n node: PptSceneNode,\n style: NonNullable<PptSceneNode['textStyle']>,\n): NonNullable<PptSceneNode['textStyle']> {\n const paragraphs = node.textParagraphs?.filter((paragraph) => paragraph.runs.length > 0);\n if (!paragraphs?.length || !shouldRenderRichText(node, paragraphs)) return style;\n const { textGradient, textFill, textOutlineColor, ...inherited } = style;\n void textGradient;\n void textFill;\n void textOutlineColor;\n return inherited;\n}\n\nfunction redirectedEditableTextHit(\n slide: PptSlideScene,\n current: PptSceneNode,\n event: MouseEvent,\n scale: number,\n): PptSceneNode | null {\n if (current.capabilities.editText || isInteractiveNonTextNode(current)) return null;\n const point = slidePointFromMouseEvent(event, scale);\n if (!point) return null;\n const currentIndex = slide.nodes.findIndex((node) => node.id === current.id);\n const candidates = slide.nodes.slice(0, currentIndex < 0 ? slide.nodes.length : currentIndex);\n for (let index = candidates.length - 1; index >= 0; index--) {\n const candidate = candidates[index]!;\n if (!candidate.capabilities.editText) continue;\n if (pointInPptRect(point.x, point.y, candidate.bounds)) return candidate;\n }\n return null;\n}\n\nfunction cycledSelectableHit(\n slide: PptSlideScene,\n event: MouseEvent,\n scale: number,\n currentShapeId: string | undefined,\n): { node: PptSceneNode; index: number; count: number } | null {\n const candidates = selectableHitsAtEvent(slide, event, scale);\n if (candidates.length < 2) return null;\n const currentIndex = Math.max(\n 0,\n candidates.findIndex((candidate) => candidate.id === currentShapeId),\n );\n const index = (currentIndex + 1) % candidates.length;\n return { node: candidates[index]!, index, count: candidates.length };\n}\n\nfunction selectableHitsAtEvent(\n slide: PptSlideScene,\n event: MouseEvent,\n scale: number,\n): PptSceneNode[] {\n const point = slidePointFromMouseEvent(event, scale);\n if (!point) return [];\n const hits: PptSceneNode[] = [];\n for (let index = slide.nodes.length - 1; index >= 0; index--) {\n const node = slide.nodes[index]!;\n if (!node.capabilities.select) continue;\n if (pointInPptRect(point.x, point.y, node.bounds)) hits.push(node);\n }\n return hits;\n}\n\nfunction isInteractiveNonTextNode(node: PptSceneNode): boolean {\n return node.kind === 'table' || node.kind === 'chart' || node.kind === 'smartArt';\n}\n\nfunction slidePointFromMouseEvent(\n event: MouseEvent,\n scale: number,\n): { x: number; y: number } | null {\n const canvas =\n event.currentTarget &&\n typeof (event.currentTarget as { parentElement?: unknown }).parentElement === 'object'\n ? ((event.currentTarget as { parentElement?: HTMLElement | null }).parentElement ?? null)\n : null;\n const rect = canvas?.getBoundingClientRect();\n if (!rect) return null;\n return {\n x: (event.clientX - rect.left) / scale,\n y: (event.clientY - rect.top) / scale,\n };\n}\n\nfunction pointInPptRect(x: number, y: number, rect: PptSceneNode['bounds']): boolean {\n return (\n x >= rect.left && x <= rect.left + rect.width && y >= rect.top && y <= rect.top + rect.height\n );\n}\n\nfunction elementForShape(canvas: HTMLElement, shapeId: string): HTMLElement | null {\n for (const element of Array.from(canvas.querySelectorAll<HTMLElement>('.coco-ppt-node'))) {\n if (element.dataset.shapeId === shapeId) return element;\n }\n return null;\n}\n\nfunction insertPlainText(target: HTMLElement, text: string): void {\n const selection = target.ownerDocument.getSelection();\n if (!selection || selection.rangeCount === 0) {\n target.textContent = `${target.textContent ?? ''}${text}`;\n return;\n }\n const range = selection.getRangeAt(0);\n const selectedInsideTarget =\n target === range.commonAncestorContainer || target.contains(range.commonAncestorContainer);\n if (!selectedInsideTarget) {\n target.textContent = `${target.textContent ?? ''}${text}`;\n return;\n }\n range.deleteContents();\n const textNode = target.ownerDocument.createTextNode(text);\n range.insertNode(textNode);\n range.setStartAfter(textNode);\n range.setEndAfter(textNode);\n selection.removeAllRanges();\n selection.addRange(range);\n}\n\nfunction nonTextEditReason(node: PptSceneNode): string {\n if (node.capabilities.reasons?.editText) return node.capabilities.reasons.editText;\n if (node.capabilities.reason) return node.capabilities.reason;\n if (node.kind === 'table') return '表格请使用单元格编辑';\n if (node.kind === 'picture') return '图片对象不支持文字编辑';\n if (node.kind === 'chart') return '图表当前仅支持选择和位置编辑';\n if (node.kind === 'smartArt') return 'SmartArt 当前仅支持选择和位置编辑';\n if (node.kind === 'group') return '组合对象当前仅支持选择和位置编辑';\n return '该对象不支持文字编辑';\n}\n\nfunction googleFontCssUrl(family: string): string | undefined {\n const urls: Record<string, string> = {\n Cuprum:\n 'https://fonts.googleapis.com/css2?family=Cuprum:ital,wght@0,400;0,700;1,400;1,700&display=swap',\n Podkova: 'https://fonts.googleapis.com/css2?family=Podkova:wght@400;700&display=swap',\n Ubuntu:\n 'https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,400;0,700;1,400;1,700&display=swap',\n };\n return urls[family];\n}\n\nfunction cssFontFamilyStack(family: string): string {\n return [\n cssString(family),\n '\"Calibri\"',\n '\"Microsoft YaHei\"',\n '\"Segoe UI\"',\n 'sans-serif',\n ].join(', ');\n}\n\nfunction cssString(value: string): string {\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n}\n\nfunction cssUrl(value: string): string {\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n}\n\nfunction cssColorWithOpacity(color: string, opacity: number | undefined): string {\n if (opacity === undefined || opacity >= 1) return color;\n const alpha = Math.max(0, Math.min(1, opacity));\n const hex = color.match(/^#([0-9a-fA-F]{6})$/)?.[1];\n if (!hex) return color;\n const red = Number.parseInt(hex.slice(0, 2), 16);\n const green = Number.parseInt(hex.slice(2, 4), 16);\n const blue = Number.parseInt(hex.slice(4, 6), 16);\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n}\n\nfunction effectiveFillOpacity(node: PptSceneNode): number | undefined {\n if (node.opacity !== undefined) return Math.max(0, Math.min(1, node.opacity));\n return node.threeD?.material === 'translucentPowder' ? 0.52 : undefined;\n}\n\nfunction applyImagePlacement(image: HTMLImageElement, node: PptSceneNode): void {\n if (node.imageFillRect) {\n applyImageFillRect(image, node);\n return;\n }\n applyImageCrop(image, node);\n}\n\nfunction applyImageCrop(image: HTMLImageElement, node: PptSceneNode): void {\n const crop = node.imageCrop;\n if (!crop) return;\n const left = crop.left ?? 0;\n const right = crop.right ?? 0;\n const top = crop.top ?? 0;\n const bottom = crop.bottom ?? 0;\n const visibleWidth = Math.max(0.01, 1 - left - right);\n const visibleHeight = Math.max(0.01, 1 - top - bottom);\n image.style.position = 'absolute';\n image.style.left = `${(-left / visibleWidth) * 100}%`;\n image.style.top = `${(-top / visibleHeight) * 100}%`;\n image.style.width = `${(1 / visibleWidth) * 100}%`;\n image.style.height = `${(1 / visibleHeight) * 100}%`;\n}\n\nfunction applyImageFillRect(image: HTMLImageElement, node: PptSceneNode): void {\n const fillRect = node.imageFillRect;\n if (!fillRect) return;\n const left = fillRect.left ?? 0;\n const right = fillRect.right ?? 0;\n const top = fillRect.top ?? 0;\n const bottom = fillRect.bottom ?? 0;\n image.style.position = 'absolute';\n image.style.left = `${left * 100}%`;\n image.style.top = `${top * 100}%`;\n image.style.width = `${Math.max(0.01, 1 - left - right) * 100}%`;\n image.style.height = `${Math.max(0.01, 1 - top - bottom) * 100}%`;\n}\n\nfunction renderUnsupportedImagePlaceholder(\n node: PptSceneNode,\n contentType: string | undefined,\n): HTMLDivElement {\n const placeholder = document.createElement('div');\n placeholder.className = 'coco-ppt-unsupported-image';\n const extension = node.imagePath?.split('.').pop()?.toUpperCase();\n placeholder.textContent = extension || contentTypeLabel(contentType) || 'IMAGE';\n placeholder.title = node.imagePath\n ? `Unsupported image: ${node.imagePath}`\n : 'Missing image resource';\n return placeholder;\n}\n\nfunction contentTypeLabel(contentType: string | undefined): string | undefined {\n if (!contentType) return undefined;\n if (contentType.includes('emf')) return 'EMF';\n if (contentType.includes('wmf')) return 'WMF';\n if (contentType.includes('svg')) return 'SVG';\n return 'IMAGE';\n}\n\nfunction appendTextContent(\n container: HTMLElement,\n node: PptSceneNode,\n scale: number,\n fallbackText: string,\n): void {\n const paragraphs = node.textParagraphs?.filter((paragraph) => paragraph.runs.length > 0);\n const verticalText = isVerticalTextBody(node.textBody);\n if (!paragraphs?.length || !shouldRenderRichText(node, paragraphs)) {\n if (\n !verticalText &&\n node.textStyle?.alignment === 'distributed' &&\n Array.from(fallbackText).length > 1\n ) {\n appendDistributedFallbackText(container, fallbackText);\n } else {\n container.textContent = fallbackText;\n }\n return;\n }\n const wrapper = document.createElement('div');\n wrapper.className = 'coco-ppt-rich-text';\n paragraphs.forEach((paragraph) => {\n const paragraphElement = document.createElement('div');\n paragraphElement.className = 'coco-ppt-paragraph';\n if (paragraph.style?.alignment) applyTextAlignment(paragraphElement, paragraph.style.alignment);\n applyParagraphStyle(paragraphElement, paragraph.style, scale, { verticalText });\n const distributeCharacters =\n !verticalText && paragraph.style?.alignment === 'distributed' && !paragraph.style?.bullet;\n if (distributeCharacters) {\n paragraphElement.style.display = 'flex';\n paragraphElement.style.justifyContent = 'space-between';\n paragraphElement.style.alignItems = 'baseline';\n paragraphElement.style.width = '100%';\n }\n if (paragraph.style?.bullet) {\n paragraphElement.dataset.bullet = 'true';\n const bullet = document.createElement('span');\n bullet.className = 'coco-ppt-bullet';\n bullet.textContent = paragraph.style.bullet;\n if (paragraph.style.bulletColor) bullet.style.color = paragraph.style.bulletColor;\n applyBulletGlyphStyle(bullet, paragraph.style, scale, paragraph.text);\n paragraphElement.append(bullet);\n }\n paragraph.runs.forEach((run, runIndex) => {\n const texts = distributeCharacters ? Array.from(run.text) : [run.text];\n texts.forEach((text) => {\n const span = document.createElement('span');\n span.textContent = text;\n const runStyle = effectiveRichTextRunStyle(node, paragraph, run, runIndex);\n if (runStyle) applyTextStyleToElement(span, runStyle, scale);\n paragraphElement.append(span);\n });\n });\n wrapper.append(paragraphElement);\n });\n container.append(wrapper);\n}\n\nfunction isVerticalTextBody(body: PptSceneNode['textBody']): boolean {\n return body?.vertical === 'eastAsian' || body?.vertical === 'vertical';\n}\n\nfunction applyTextWrapping(container: HTMLElement, node: PptSceneNode): void {\n if (node.textBody?.wrap === 'none') setTextAutoFitNoWrap(container);\n}\n\nfunction applyTextAutoFit(container: HTMLElement, node: PptSceneNode): void {\n if (node.textBody?.autoFit !== 'normal') return;\n if (!node.text && !node.textParagraphs?.length) return;\n if (isSingleLineAutoFitText(node) && !shouldAllowSingleParagraphAutoFitWrap(node)) {\n setTextAutoFitNoWrap(container);\n }\n requestAnimationFrame(() => {\n if (container.dataset.textResizePreview === 'wrap') return;\n const availableWidth = container.clientWidth;\n const availableHeight = container.clientHeight;\n if (availableWidth <= 0 || availableHeight <= 0) return;\n const contentWidth = container.scrollWidth;\n const contentHeight = container.scrollHeight;\n const widthRatio = contentWidth > availableWidth ? availableWidth / contentWidth : 1;\n const heightRatio = contentHeight > availableHeight ? availableHeight / contentHeight : 1;\n const ratio = Math.max(0.25, Math.min(1, widthRatio, heightRatio));\n if (ratio >= 0.995) return;\n const target =\n container.querySelector<HTMLElement>('.coco-ppt-rich-text, .coco-ppt-distributed-text') ??\n container;\n if (target.dataset.textResizePreview === 'wrap') return;\n target.style.transformOrigin = textAutoFitOrigin(node);\n target.style.transform = `scale(${ratio})`;\n target.style.width = `${100 / ratio}%`;\n });\n}\n\nfunction shouldCounterFlipText(node: PptSceneNode): boolean {\n return Boolean(\n (node.text || node.textParagraphs?.length) &&\n (node.bounds.flipHorizontal || node.bounds.flipVertical),\n );\n}\n\nfunction applyTextCounterFlip(element: HTMLElement, node: PptSceneNode): void {\n const transforms: string[] = [];\n if (node.bounds.flipHorizontal) transforms.push('scaleX(-1)');\n if (node.bounds.flipVertical) transforms.push('scaleY(-1)');\n if (transforms.length === 0) return;\n element.style.transform = transforms.join(' ');\n element.style.transformOrigin = 'center';\n}\n\nfunction setTextAutoFitNoWrap(container: HTMLElement): void {\n container.style.whiteSpace = 'nowrap';\n container\n .querySelectorAll<HTMLElement>('.coco-ppt-rich-text, .coco-ppt-paragraph')\n .forEach((element) => {\n element.style.whiteSpace = 'nowrap';\n });\n}\n\nfunction applyTextMetricFallback(element: HTMLElement, node: PptSceneNode, scale: number): void {\n if (!shouldWidenLatinDisplayTitle(node, scale)) return;\n const fontPx = (node.textStyle?.fontSize ?? firstTextRunFontSize(node) ?? 28) * 12700 * scale;\n element.style.letterSpacing = `${Math.max(1, Math.min(2.4, fontPx * 0.035))}px`;\n}\n\nfunction textBaselineMetricOffset(node: PptSceneNode, scale: number): number {\n if (!shouldLowerCuprumDisplayTitle(node)) return 0;\n const fontSize = node.textStyle?.fontSize ?? firstTextRunFontSize(node);\n if (!fontSize) return 0;\n return fontSize * 12700 * scale * 0.18;\n}\n\nfunction shouldLowerCuprumDisplayTitle(node: PptSceneNode): boolean {\n if (node.kind !== 'textBox' && node.kind !== 'placeholder') return false;\n if (node.textBody?.anchor !== 'top' || node.textBody.wrap !== 'square') return false;\n if (node.fillColor || node.fillGradient || node.lineColor || node.lineGradient) return false;\n const family = node.textStyle?.fontFamily ?? firstTextRunFontFamily(node);\n if (!family || !/\\bCuprum\\b/i.test(family)) return false;\n const fontSize = node.textStyle?.fontSize ?? firstTextRunFontSize(node);\n if (!fontSize || fontSize < 72) return false;\n const paragraphs = node.textParagraphs?.filter((paragraph) => {\n const text = paragraph.text ?? paragraph.runs.map((run) => run.text).join('');\n return text.trim().length > 0;\n });\n if (paragraphs && paragraphs.length !== 1) return false;\n const text = (paragraphs?.[0]?.text ?? node.text ?? '').trim();\n return text.length >= 12 && !/[\\u3400-\\u9fff]/.test(text);\n}\n\nfunction shouldWidenLatinDisplayTitle(node: PptSceneNode, scale: number): boolean {\n if (node.textBody?.wrap !== 'square') return false;\n if (hasExplicitCharacterSpacing(node)) return false;\n const alignment = node.textStyle?.alignment ?? node.textParagraphs?.[0]?.style?.alignment;\n if (alignment !== 'center') return false;\n const family = node.textStyle?.fontFamily ?? firstTextRunFontFamily(node);\n if (!family || !/\\bJosefin Sans\\b/i.test(family)) return false;\n const text = (node.textParagraphs?.[0]?.text ?? node.text ?? '').replace(/\\s+/g, ' ').trim();\n if (text.length < 24 || /[a-z\\u3400-\\u9fff]/.test(text)) return false;\n if (!/^[A-Z0-9][A-Z0-9\\s&:;,.!?'\"()/+-]*$/.test(text)) return false;\n const fontSize = node.textStyle?.fontSize ?? firstTextRunFontSize(node);\n if (!fontSize) return false;\n const lineHeight = node.textStyle?.lineHeight ?? node.textParagraphs?.[0]?.style?.lineHeight ?? 1.2;\n const lineHeightPx = fontSize * 12700 * scale * lineHeight;\n return node.bounds.height * scale >= lineHeightPx * 1.75;\n}\n\nfunction hasExplicitCharacterSpacing(node: PptSceneNode): boolean {\n return Boolean(\n node.textStyle?.characterSpacing !== undefined ||\n node.textParagraphs?.some(\n (paragraph) =>\n paragraph.runs.some((run) => run.style?.characterSpacing !== undefined),\n ),\n );\n}\n\nfunction firstTextRunFontSize(node: PptSceneNode): number | undefined {\n for (const paragraph of node.textParagraphs ?? []) {\n for (const run of paragraph.runs) {\n if (run.style?.fontSize !== undefined) return run.style.fontSize;\n }\n }\n return undefined;\n}\n\nfunction firstTextRunFontFamily(node: PptSceneNode): string | undefined {\n for (const paragraph of node.textParagraphs ?? []) {\n for (const run of paragraph.runs) {\n if (run.style?.fontFamily) return run.style.fontFamily;\n }\n }\n return undefined;\n}\n\nfunction isSingleLineAutoFitText(node: PptSceneNode): boolean {\n const paragraphs = node.textParagraphs?.filter((paragraph) => paragraph.runs.length > 0);\n if (paragraphs && paragraphs.length !== 1) return false;\n if (paragraphs?.[0]?.style?.bullet) return false;\n const text = paragraphs?.[0]?.text ?? node.text ?? '';\n return text.length > 0 && !text.includes('\\n') && !text.includes('\\r');\n}\n\nfunction shouldAllowCompactLabelWrap(node: PptSceneNode): boolean {\n if (node.textBody?.wrap !== 'square') return false;\n if ((node.textStyle?.alignment ?? node.textParagraphs?.[0]?.style?.alignment) !== 'center')\n return false;\n const text = (node.textParagraphs?.[0]?.text ?? node.text ?? '').trim();\n if (!/^[\\u3400-\\u9fff]{4,6}$/.test(text)) return false;\n const min = Math.min(node.bounds.width, node.bounds.height);\n const max = Math.max(node.bounds.width, node.bounds.height);\n return min > 0 && max <= 1100000 && max / min < 1.25;\n}\n\nfunction shouldAllowSingleParagraphAutoFitWrap(node: PptSceneNode): boolean {\n if (shouldAllowCompactLabelWrap(node)) return true;\n if (node.textBody?.wrap !== 'square') return false;\n const text = (node.textParagraphs?.[0]?.text ?? node.text ?? '').trim();\n if (text.length < 18) return false;\n const cjkCharacters = text.match(/[\\u3400-\\u9fff]/g)?.length ?? 0;\n if (cjkCharacters >= 12) return true;\n return /[\\s,。;、,.]/.test(text);\n}\n\nfunction textAutoFitOrigin(node: PptSceneNode): string {\n const alignment = node.textStyle?.alignment ?? node.textParagraphs?.[0]?.style?.alignment;\n if (alignment === 'right') return 'right top';\n if (alignment === 'center') return 'center top';\n return 'top left';\n}\n\nfunction shouldAllowTextOverflow(node: PptSceneNode): boolean {\n if (node.kind !== 'textBox') return false;\n if (!node.text && !node.textParagraphs?.length) return false;\n if (node.customGeometry || hasSvgPresetGeometry(node) || isLineNode(node)) return false;\n return !hasVisibleFill(node) && !hasVisibleLine(node);\n}\n\nfunction hasVisibleFill(node: PptSceneNode): boolean {\n if (node.fillGradient?.colors.length) {\n return (node.fillGradient.opacities ?? []).some((opacity) => opacity > 0) || !node.fillGradient.opacities;\n }\n return Boolean(node.fillColor && node.opacity !== 0);\n}\n\nfunction hasVisibleLine(node: PptSceneNode): boolean {\n if (!node.lineColor && !node.lineGradient?.colors.length) return false;\n if (node.lineOpacity === 0) return false;\n return (node.lineWidth ?? 9525) > 0;\n}\n\nfunction appendDistributedFallbackText(container: HTMLElement, text: string): void {\n const wrapper = document.createElement('div');\n wrapper.className = 'coco-ppt-distributed-text';\n Array.from(text).forEach((char) => {\n const span = document.createElement('span');\n span.textContent = char;\n wrapper.append(span);\n });\n container.append(wrapper);\n}\n\nfunction shouldRenderRichText(\n node: PptSceneNode,\n paragraphs: NonNullable<PptSceneNode['textParagraphs']>,\n): boolean {\n return paragraphs.some(\n (paragraph) =>\n Boolean(paragraph.style?.bullet) ||\n hasParagraphLayoutStyle(paragraph.style) ||\n paragraph.runs.some(\n (run) =>\n Boolean(run.hyperlink) ||\n (run.style !== undefined && isMeaningfulRunStyle(run.style, node.textStyle)),\n ),\n );\n}\n\nfunction hasParagraphLayoutStyle(style: PptParagraphStyle): boolean {\n return Boolean(\n style?.lineHeight !== undefined ||\n style?.marginLeft !== undefined ||\n style?.textIndent !== undefined ||\n style?.spaceBefore !== undefined ||\n style?.spaceAfter !== undefined,\n );\n}\n\nfunction applyParagraphStyle(\n element: HTMLElement,\n style: PptParagraphStyle,\n scale: number,\n options: { verticalText?: boolean } = {},\n): void {\n if (!style) return;\n if (style.lineHeight !== undefined)\n element.style.lineHeight = String(pptParagraphLineHeight(style));\n if (style.marginLeft !== undefined) {\n element.style.paddingLeft = `${style.marginLeft * scale}px`;\n }\n if (style.textIndent !== undefined) element.style.textIndent = `${style.textIndent * scale}px`;\n if (options.verticalText) {\n if (style.spaceBefore !== undefined)\n element.style.marginRight = paragraphSpacingToCss(style.spaceBefore, scale);\n if (style.spaceAfter !== undefined)\n element.style.marginLeft = paragraphSpacingToCss(style.spaceAfter, scale);\n return;\n }\n if (style.spaceBefore !== undefined)\n element.style.marginTop = paragraphSpacingToCss(style.spaceBefore, scale);\n if (style.spaceAfter !== undefined)\n element.style.marginBottom = paragraphSpacingToCss(style.spaceAfter, scale);\n}\n\nfunction pptParagraphLineHeight(style: NonNullable<PptParagraphStyle>): number {\n const lineHeight = style.lineHeight ?? 1.2;\n if (!style.bullet) return lineHeight;\n return lineHeight * 1.15;\n}\n\nfunction applyBulletGlyphStyle(\n element: HTMLElement,\n style: PptParagraphStyle,\n scale: number,\n paragraphText = '',\n): void {\n if (style?.bulletSize !== undefined) {\n if (style.bulletSize > 4) {\n element.style.fontSize = `${style.bulletSize * 12700 * scale}px`;\n } else if (style.bulletSize > 0) {\n element.style.fontSize = `${style.bulletSize}em`;\n }\n }\n if (!shouldRenderCompactWingdingsSquareBullet(style, paragraphText)) return;\n element.style.width = '0.5em';\n element.style.marginRight = '0.12em';\n element.style.transform = 'scale(0.62)';\n element.style.transformOrigin = 'center';\n element.style.verticalAlign = 'middle';\n}\n\nfunction shouldRenderCompactWingdingsSquareBullet(\n style: PptParagraphStyle,\n paragraphText = '',\n): boolean {\n if (!style) return false;\n const font = style.bulletFontFamily?.toLowerCase() ?? '';\n const compactLabelLength = Array.from(paragraphText.trim()).length;\n return (\n style.bullet === '□' &&\n style.alignment === 'center' &&\n compactLabelLength > 0 &&\n compactLabelLength <= 4 &&\n (font.includes('wingdings') || font.includes('webdings')) &&\n style.textIndent !== undefined &&\n style.textIndent < 0 &&\n style.marginLeft !== undefined &&\n style.marginLeft <= Math.abs(style.textIndent) * 1.25\n );\n}\n\nfunction paragraphSpacingToCss(value: number, scale: number): string {\n return value > 10 ? `${value * scale}px` : `${value}em`;\n}\n\nfunction isMeaningfulRunStyle(\n runStyle: NonNullable<\n NonNullable<PptSceneNode['textParagraphs']>[number]['runs'][number]['style']\n >,\n nodeStyle: PptSceneNode['textStyle'],\n): boolean {\n const nativeRunStyle = runStyle as NativePptTextStyle;\n const nativeNodeStyle = nodeStyle as NativePptTextStyle | undefined;\n if (runStyle.fontSize !== undefined && runStyle.fontSize !== nodeStyle?.fontSize) return true;\n if (runStyle.fontFamily !== undefined && runStyle.fontFamily !== nodeStyle?.fontFamily)\n return true;\n if (runStyle.color !== undefined && runStyle.color !== nodeStyle?.color) return true;\n if (\n nativeRunStyle.textFill !== undefined &&\n nativeRunStyle.textFill !== nativeNodeStyle?.textFill\n )\n return true;\n if (\n nativeRunStyle.textGradient !== undefined &&\n nativeRunStyle.textGradient !== nativeNodeStyle?.textGradient\n )\n return true;\n if (\n nativeRunStyle.textOutlineColor !== undefined &&\n nativeRunStyle.textOutlineColor !== nativeNodeStyle?.textOutlineColor\n )\n return true;\n if (\n nativeRunStyle.textShadow !== undefined &&\n nativeRunStyle.textShadow !== nativeNodeStyle?.textShadow\n )\n return true;\n if (runStyle.bold !== undefined && runStyle.bold !== nodeStyle?.bold) return true;\n if (runStyle.italic !== undefined && runStyle.italic !== nodeStyle?.italic) return true;\n if (runStyle.underline !== undefined && runStyle.underline !== nodeStyle?.underline) return true;\n if (\n runStyle.characterSpacing !== undefined &&\n runStyle.characterSpacing !== nodeStyle?.characterSpacing\n )\n return true;\n return false;\n}\n\nfunction effectiveRichTextRunStyle(\n node: PptSceneNode,\n paragraph: NonNullable<PptSceneNode['textParagraphs']>[number],\n run: NonNullable<PptSceneNode['textParagraphs']>[number]['runs'][number],\n runIndex: number,\n): NativePptTextStyle | undefined {\n if (!shouldUseNumberedTitleBodyFallback(node, paragraph, run, runIndex)) {\n return hyperlinkFallbackRunStyle(run, run.style as NativePptTextStyle | undefined);\n }\n const prefixSize = firstExplicitFontSize(paragraph.runs.slice(0, runIndex));\n return hyperlinkFallbackRunStyle(run, {\n ...(run.style as NativePptTextStyle | undefined),\n color: run.style?.color ?? '#000000',\n fontSize: run.style?.fontSize ?? Math.max(12, Math.round((prefixSize ?? 28) * 0.72)),\n });\n}\n\nfunction hyperlinkFallbackRunStyle(\n run: NonNullable<PptSceneNode['textParagraphs']>[number]['runs'][number],\n style: NativePptTextStyle | undefined,\n): NativePptTextStyle | undefined {\n if (!run.hyperlink) return style;\n const next: NativePptTextStyle = { ...(style ?? {}) };\n if (next.textFill === undefined && next.textGradient === undefined) {\n next.color = '#0563C1';\n }\n if (next.underline === undefined) next.underline = true;\n return next;\n}\n\nfunction shouldUseNumberedTitleBodyFallback(\n node: PptSceneNode,\n paragraph: NonNullable<PptSceneNode['textParagraphs']>[number],\n run: NonNullable<PptSceneNode['textParagraphs']>[number]['runs'][number],\n runIndex: number,\n): boolean {\n if (runIndex <= 0) return false;\n if (run.style?.color && run.style.fontSize !== undefined) return false;\n if (node.textBody?.autoFit !== 'shape') return false;\n if (!/[\\u3400-\\u9fff]/.test(run.text)) return false;\n const prefixText = paragraph.runs\n .slice(0, runIndex)\n .map((item) => item.text)\n .join('');\n const prefixMatch = /^\\s*\\d{1,2}\\s*[、..,,]\\s*(.*)$/u.exec(prefixText);\n if (!prefixMatch) return false;\n const titleCharsBeforeRun = Array.from(prefixMatch[1] ?? '').filter((char) =>\n /[\\u3400-\\u9fff]/.test(char),\n ).length;\n if (titleCharsBeforeRun > 2) return false;\n return paragraph.runs.slice(0, runIndex).some((item) => {\n const style = item.style as NativePptTextStyle | undefined;\n return style?.color !== undefined || style?.fontSize !== undefined;\n });\n}\n\nfunction firstExplicitFontSize(\n runs: NonNullable<PptSceneNode['textParagraphs']>[number]['runs'],\n): number | undefined {\n for (const run of runs) {\n if (run.style?.fontSize !== undefined) return run.style.fontSize;\n }\n return undefined;\n}\n\nfunction applyTextStyleToElement(\n element: HTMLElement,\n style: NativePptTextStyle,\n scale: number,\n): void {\n if (style.fontSize) element.style.fontSize = `${Math.max(1, style.fontSize * 12700 * scale)}px`;\n if (style.fontFamily)\n element.style.fontFamily = cssFontFamilyStack(style.fontFamily);\n if (style.lineHeight) element.style.lineHeight = String(style.lineHeight);\n if (style.characterSpacing !== undefined)\n element.style.letterSpacing = `${style.characterSpacing * 12700 * scale}px`;\n if (style.color) element.style.color = style.color;\n if (style.textGradient?.colors.length && style.textGradient.colors.length > 1) {\n element.style.backgroundImage = cssLinearGradient(style.textGradient);\n element.style.backgroundClip = 'text';\n element.style.setProperty('-webkit-background-clip', 'text');\n element.style.color = 'transparent';\n element.style.setProperty('-webkit-text-fill-color', 'transparent');\n }\n if (style.textFill === 'none') {\n element.style.color = style.textOutlineColor ?? style.color ?? 'transparent';\n element.style.setProperty('-webkit-text-fill-color', 'transparent');\n }\n if (style.textOutlineColor)\n element.style.setProperty('-webkit-text-stroke', `1px ${style.textOutlineColor}`);\n if (style.textShadow) element.style.textShadow = cssBoxShadow(style.textShadow, scale);\n if (style.bold !== undefined) element.style.fontWeight = style.bold ? '700' : '400';\n if (style.italic !== undefined) element.style.fontStyle = style.italic ? 'italic' : 'normal';\n if (style.underline !== undefined)\n element.style.textDecorationLine = style.underline ? 'underline' : 'none';\n}\n\nfunction isBrowserRenderableImage(\n contentType: string | undefined,\n path: string | undefined,\n): boolean {\n const normalized = contentType?.toLowerCase() ?? '';\n if (\n normalized === 'image/png' ||\n normalized === 'image/jpeg' ||\n normalized === 'image/jpg' ||\n normalized === 'image/gif' ||\n normalized === 'image/webp' ||\n normalized === 'image/svg+xml'\n ) {\n return true;\n }\n return Boolean(path && /\\.(?:png|jpe?g|gif|webp|svg)$/i.test(path));\n}\n\nfunction applyTextAlignment(element: HTMLElement, alignment: PptTextAlignment): void {\n if (alignment === 'distributed') {\n element.style.textAlign = 'justify';\n element.style.textAlignLast = 'justify';\n return;\n }\n element.style.textAlign = alignment === 'justify' ? 'justify' : alignment;\n}\n\nfunction isLineNode(node: PptSceneNode): boolean {\n if (node.customGeometry) return false;\n const preset = node.presetGeometry;\n const min = Math.min(node.bounds.width, node.bounds.height);\n const max = Math.max(node.bounds.width, node.bounds.height);\n return (\n (preset === 'line' || preset === 'straightConnector1') &&\n max > 0 &&\n (min === 0 || min / max < 0.02)\n );\n}\n\nfunction lineAxisKind(node: PptSceneNode): 'horizontal' | 'vertical' {\n return node.bounds.height > node.bounds.width ? 'vertical' : 'horizontal';\n}\n\nfunction cssBackground(\n background: PptSlideScene['background'],\n imageResources: PptEditorView['images'] = {},\n): string {\n if (background?.imagePath) {\n const resource = imageResources[background.imagePath];\n const url = resource?.url;\n if (url && isBrowserRenderableImage(resource.contentType, background.imagePath)) {\n return `url(\"${url}\") center / cover no-repeat`;\n }\n }\n if (background?.fillGradient && background.fillGradient.colors.length > 1) {\n return cssLinearGradient(background.fillGradient);\n }\n return background?.fillColor ?? '#fff';\n}\n\nfunction applyBackgroundFill(\n element: HTMLElement,\n background: PptSlideScene['background'],\n node: PptSceneNode,\n slide: PptSlideScene,\n scale: number,\n imageResources: PptEditorView['images'],\n): void {\n if (background?.imagePath) {\n const resource = imageResources[background.imagePath];\n const url = resource?.url;\n if (url && isBrowserRenderableImage(resource.contentType, background.imagePath)) {\n element.style.backgroundImage = `url(\"${url}\")`;\n element.style.backgroundRepeat = 'no-repeat';\n element.style.backgroundSize = `${slide.size.width * scale}px ${slide.size.height * scale}px`;\n element.style.backgroundPosition = `${-node.bounds.left * scale}px ${-node.bounds.top * scale}px`;\n return;\n }\n }\n element.style.background = cssBackground(background, imageResources);\n}\n\nfunction roundRectRadius(node: PptSceneNode): number {\n const adjustment = node.presetAdjustments?.adj;\n const ratio = adjustment === undefined ? 0.08 : Math.max(0, Math.min(0.5, adjustment / 100000));\n return Math.min(node.bounds.width, node.bounds.height) * ratio;\n}\n\nfunction frameBorderWidth(node: PptSceneNode, scale: number): number {\n const rawAdjustment = node.presetAdjustments?.adj ?? node.presetAdjustments?.adj1;\n const ratio =\n rawAdjustment === undefined ? 0.125 : Math.max(0.02, Math.min(0.45, rawAdjustment / 100000));\n return Math.max(1, Math.min(node.bounds.width, node.bounds.height) * ratio * scale);\n}\n\nfunction shouldRenderGradientOutline(node: PptSceneNode): boolean {\n return (\n !node.customGeometry &&\n node.kind !== 'line' &&\n !node.lineColor &&\n !!node.lineGradient &&\n node.lineGradient.colors.length > 1 &&\n (node.presetGeometry === 'roundRect' ||\n node.presetGeometry === 'round1Rect' ||\n node.presetGeometry === 'ellipse')\n );\n}\n\nfunction renderCssPresetGeometry(\n node: PptSceneNode,\n scale: number,\n clipPath: string,\n): HTMLDivElement {\n const shape = document.createElement('div');\n shape.className = 'coco-ppt-css-geometry';\n shape.style.clipPath = clipPath;\n if (node.fillGradient && node.fillGradient.colors.length > 1) {\n shape.style.background = cssLinearGradient(node.fillGradient, effectiveFillOpacity(node));\n } else if (node.fillColor) {\n shape.style.background = cssColorWithOpacity(node.fillColor, effectiveFillOpacity(node));\n }\n if (node.lineColor) {\n shape.style.borderStyle = cssBorderStyleForLineDash(node.lineDash);\n shape.style.borderWidth = `${Math.max(1, (node.lineWidth ?? 9525) * scale)}px`;\n shape.style.borderColor = cssColorWithOpacity(node.lineColor, node.lineOpacity);\n }\n return shape;\n}\n\nfunction cssLinearGradient(gradient: PptGradientModel, opacityMultiplier = 1): string {\n const angle = cssLinearGradientAngle(gradient);\n return `linear-gradient(${angle}deg, ${cssGradientStops(gradient, opacityMultiplier).join(', ')})`;\n}\n\nfunction cssLinearGradientAngle(gradient: PptGradientModel): number {\n return gradient.angle === undefined ? 160 : normalizeCssAngle(gradient.angle + 90);\n}\n\nfunction normalizeCssAngle(angle: number): number {\n return ((angle % 360) + 360) % 360;\n}\n\nfunction cssGradientStops(gradient: PptGradientModel, opacityMultiplier = 1): string[] {\n return normalizedGradientStops(gradient).map((stop) => {\n const opacity = Math.max(0, Math.min(1, stop.opacity * opacityMultiplier));\n const color = opacity < 1 ? cssColorWithAlpha(stop.color, opacity) : stop.color;\n return stop.position === undefined ? color : `${color} ${stop.position}%`;\n });\n}\n\nfunction normalizedGradientStops(\n gradient: PptGradientModel,\n): { color: string; position: number | undefined; opacity: number }[] {\n return gradient.colors\n .map((color: string, index: number) => {\n const parsedColor = parseCssRgbaColor(color);\n const position = gradient.positions?.[index];\n const opacity = Math.max(\n 0,\n Math.min(1, gradient.opacities?.[index] ?? parsedColor?.opacity ?? 1),\n );\n return {\n color: parsedColor?.color ?? color,\n position: position === undefined ? undefined : Math.max(0, Math.min(100, position)),\n opacity,\n index,\n };\n })\n .sort((a, b) => {\n if (a.position === undefined && b.position === undefined) return a.index - b.index;\n if (a.position === undefined) return 1;\n if (b.position === undefined) return -1;\n return a.position - b.position || a.index - b.index;\n })\n .map(({ color, position, opacity }) => ({ color, position, opacity }));\n}\n\nfunction cssColorWithAlpha(color: string, opacity: number): string {\n const hex = color.match(/^#([0-9a-fA-F]{6})$/)?.[1];\n if (!hex) return color;\n const red = Number.parseInt(hex.slice(0, 2), 16);\n const green = Number.parseInt(hex.slice(2, 4), 16);\n const blue = Number.parseInt(hex.slice(4, 6), 16);\n return `rgba(${red}, ${green}, ${blue}, ${Math.max(0, Math.min(1, opacity))})`;\n}\n\nfunction cssClipPathForPresetGeometry(preset: string | undefined): string | undefined {\n switch (preset) {\n case 'parallelogram':\n return 'polygon(18% 0, 100% 0, 82% 100%, 0 100%)';\n case 'trapezoid':\n return 'polygon(18% 0, 82% 0, 100% 100%, 0 100%)';\n case 'snip2DiagRect':\n return 'polygon(8% 0, 100% 0, 100% 92%, 92% 100%, 0 100%, 0 8%)';\n case 'rtTriangle':\n return 'polygon(0 0, 100% 100%, 0 100%)';\n case 'triangle':\n return 'polygon(50% 0, 100% 100%, 0 100%)';\n case 'diamond':\n return 'polygon(50% 0, 100% 50%, 50% 100%, 0 50%)';\n case 'pentagon':\n return 'polygon(0 0, 72% 0, 100% 50%, 72% 100%, 0 100%, 22% 50%)';\n case 'hexagon':\n return 'polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%)';\n case 'homePlate':\n return 'polygon(50% 0, 100% 25%, 100% 100%, 0 100%, 0 25%)';\n case 'leftRightArrow':\n return 'polygon(0 50%, 18% 0, 82% 0, 100% 50%, 82% 100%, 18% 100%)';\n case 'chevron':\n return 'polygon(0 0, 72% 0, 100% 50%, 72% 100%, 0 100%, 28% 50%)';\n case 'plaque':\n return 'polygon(0 12%, 3% 12%, 3% 0, 97% 0, 97% 12%, 100% 12%, 100% 88%, 97% 88%, 97% 100%, 3% 100%, 3% 88%, 0 88%)';\n case 'rightArrow':\n return 'polygon(0 0, 78% 0, 100% 50%, 78% 100%, 0 100%)';\n case 'leftArrow':\n return 'polygon(22% 0, 100% 0, 100% 100%, 22% 100%, 0 50%)';\n case 'bentArrow':\n return 'polygon(0 0, 30% 0, 30% 58%, 82% 58%, 82% 35%, 100% 70%, 82% 100%, 82% 77%, 12% 77%, 12% 18%, 0 18%)';\n default:\n return undefined;\n }\n}\n\nfunction cssBorderStyleForLineDash(dash: string | undefined): string {\n if (dash === 'dot' || dash === 'sysDot') return 'dotted';\n if (dash && dash !== 'solid') return 'dashed';\n return 'solid';\n}\n\nfunction svgStrokeDashArray(dash: string | undefined, strokeWidth: number): string | undefined {\n if (!dash || dash === 'solid' || strokeWidth <= 0) return undefined;\n const unit = Math.max(1, strokeWidth);\n const custom = /^cust:(\\d+):(\\d+)$/i.exec(dash);\n if (custom) {\n const dashUnits = Number(custom[1]) / 100000;\n const spaceUnits = Number(custom[2]) / 100000;\n if (dashUnits > 0 && spaceUnits >= 0) {\n return `${unit * dashUnits} ${unit * spaceUnits}`;\n }\n }\n switch (dash) {\n case 'dot':\n case 'sysDot':\n return `${unit} ${unit * 2}`;\n case 'dash':\n case 'sysDash':\n return `${unit * 4} ${unit * 2}`;\n case 'dashDot':\n case 'sysDashDot':\n return `${unit * 4} ${unit * 2} ${unit} ${unit * 2}`;\n case 'lgDash':\n return `${unit * 8} ${unit * 3}`;\n case 'lgDashDot':\n return `${unit * 8} ${unit * 3} ${unit} ${unit * 3}`;\n case 'lgDashDotDot':\n return `${unit * 8} ${unit * 3} ${unit} ${unit * 3} ${unit} ${unit * 3}`;\n default:\n return `${unit * 4} ${unit * 2}`;\n }\n}\n\nfunction hasSvgPresetGeometry(node: PptSceneNode): boolean {\n return (\n node.presetGeometry === 'curvedUpArrow' ||\n node.presetGeometry === 'donut' ||\n node.presetGeometry === 'arc' ||\n node.presetGeometry === 'blockArc' ||\n node.presetGeometry === 'plaque' ||\n node.presetGeometry === 'parallelogram' ||\n node.presetGeometry === 'trapezoid' ||\n node.presetGeometry === 'snip2DiagRect' ||\n node.presetGeometry === 'rtTriangle' ||\n node.presetGeometry === 'triangle' ||\n node.presetGeometry === 'diamond' ||\n node.presetGeometry === 'pentagon' ||\n node.presetGeometry === 'hexagon' ||\n node.presetGeometry === 'homePlate' ||\n node.presetGeometry === 'leftRightArrow' ||\n node.presetGeometry === 'chevron' ||\n node.presetGeometry === 'rightArrow' ||\n node.presetGeometry === 'leftArrow' ||\n node.presetGeometry === 'bentArrow'\n );\n}\n\nfunction renderPresetGeometry(node: PptSceneNode, scale: number): SVGSVGElement {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.classList.add('coco-ppt-preset-geometry');\n const width = Math.max(1, node.bounds.width * scale);\n const height = Math.max(1, node.bounds.height * scale);\n const extrusionDepth = presetExtrusionDepth(node, scale, width, height);\n if (node.shadow || extrusionDepth > 0) svg.style.overflow = 'visible';\n svg.setAttribute('viewBox', '0 0 100 100');\n svg.setAttribute('preserveAspectRatio', 'none');\n const gradientId =\n node.fillGradient && node.fillGradient.colors.length > 1\n ? `coco-ppt-preset-gradient-${node.id.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n : undefined;\n const lineGradientId =\n node.lineGradient && node.lineGradient.colors.length > 1\n ? `coco-ppt-preset-line-gradient-${node.id.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n : undefined;\n if (gradientId && node.fillGradient) appendSvgLinearGradient(svg, gradientId, node.fillGradient);\n if (lineGradientId && node.lineGradient)\n appendSvgLinearGradient(svg, lineGradientId, node.lineGradient);\n if (extrusionDepth > 0) {\n const backPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n backPath.classList.add('coco-ppt-preset-extrusion');\n backPath.setAttribute('d', presetGeometryPathData(node));\n if (node.presetGeometry === 'donut' || node.presetGeometry === 'blockArc')\n backPath.setAttribute('fill-rule', 'evenodd');\n backPath.setAttribute('fill', presetExtrusionFill(node));\n backPath.setAttribute(\n 'transform',\n `translate(${fmtSvgNumber(extrusionDepth * 0.38)} ${fmtSvgNumber(extrusionDepth)})`,\n );\n backPath.setAttribute('stroke', 'none');\n svg.append(backPath);\n }\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n path.setAttribute('d', presetGeometryPathData(node));\n if (node.presetGeometry === 'donut' || node.presetGeometry === 'blockArc')\n path.setAttribute('fill-rule', 'evenodd');\n const strokeWidth =\n node.lineColor || node.lineGradient\n ? Math.max(0.5, ((node.lineWidth ?? 9525) * scale * 100) / Math.max(width, height))\n : 0;\n path.setAttribute(\n 'fill',\n node.presetGeometry === 'arc'\n ? 'none'\n : gradientId\n ? `url(#${gradientId})`\n : (node.fillColor ?? 'none'),\n );\n const fillOpacity = effectiveFillOpacity(node);\n if (fillOpacity !== undefined && node.presetGeometry !== 'arc')\n path.setAttribute('fill-opacity', String(fillOpacity));\n path.setAttribute('stroke', lineGradientId ? `url(#${lineGradientId})` : (node.lineColor ?? 'none'));\n path.setAttribute('stroke-width', String(strokeWidth));\n if (node.lineOpacity !== undefined)\n path.setAttribute('stroke-opacity', String(Math.max(0, Math.min(1, node.lineOpacity))));\n const dashArray = svgStrokeDashArray(node.lineDash, strokeWidth);\n if (dashArray) path.setAttribute('stroke-dasharray', dashArray);\n path.setAttribute('stroke-linejoin', 'round');\n if (node.presetGeometry === 'arc') {\n path.setAttribute('stroke-linecap', 'round');\n appendArcArrowMarker(svg, path, node);\n }\n svg.append(path);\n return svg;\n}\n\nfunction presetExtrusionDepth(\n node: PptSceneNode,\n scale: number,\n width: number,\n height: number,\n): number {\n const extrusionHeight = node.threeD?.extrusionHeight ?? 0;\n if (extrusionHeight <= 0 || node.presetGeometry === 'arc') return 0;\n const rawDepth = (extrusionHeight * scale * 100) / Math.max(width, height);\n return Math.max(0.8, Math.min(3, rawDepth));\n}\n\nfunction presetExtrusionFill(node: PptSceneNode): string {\n const fill = node.fillGradient?.colors[0] ?? node.fillColor ?? '#64748B';\n const parsed = parseCssRgbaColor(fill);\n const alpha = node.threeD?.material === 'translucentPowder' ? 0.12 : 0.18;\n return cssColorWithAlpha(darkenHexColor(parsed?.color ?? fill, 0.8), alpha);\n}\n\nfunction darkenHexColor(color: string, ratio: number): string {\n const match = /^#?([0-9a-f]{6})$/i.exec(color);\n if (!match) return color;\n const value = match[1]!;\n const r = Number.parseInt(value.slice(0, 2), 16);\n const g = Number.parseInt(value.slice(2, 4), 16);\n const b = Number.parseInt(value.slice(4, 6), 16);\n return `#${toHexByte(r * ratio)}${toHexByte(g * ratio)}${toHexByte(b * ratio)}`;\n}\n\nfunction presetGeometryPathData(node: PptSceneNode): string {\n switch (node.presetGeometry) {\n case 'curvedUpArrow':\n return [\n 'M 16 88',\n 'C 3 61 9 28 38 13',\n 'C 60 2 87 9 97 34',\n 'L 82 36',\n 'C 74 22 59 18 45 24',\n 'C 23 33 17 61 28 82',\n 'Z',\n 'M 76 21',\n 'L 100 38',\n 'L 74 53',\n 'Z',\n ].join(' ');\n case 'donut':\n return ['M 50 2', 'A 48 48 0 1 1 49.99 2', 'M 50 27', 'A 23 23 0 1 0 50.01 27'].join(' ');\n case 'blockArc':\n return blockArcPresetPathData(node);\n case 'plaque':\n return 'M 4 0 H 96 Q 96 8 100 8 V 92 Q 96 92 96 100 H 4 Q 4 92 0 92 V 8 Q 4 8 4 0 Z';\n case 'parallelogram':\n return 'M 18 0 H 100 L 82 100 H 0 Z';\n case 'trapezoid':\n return 'M 18 0 H 82 L 100 100 H 0 Z';\n case 'snip2DiagRect':\n return 'M 8 0 H 100 V 92 L 92 100 H 0 V 8 Z';\n case 'rtTriangle':\n return 'M 0 0 L 100 100 H 0 Z';\n case 'triangle':\n return 'M 50 0 L 100 100 H 0 Z';\n case 'diamond':\n return 'M 50 0 L 100 50 L 50 100 L 0 50 Z';\n case 'pentagon':\n return 'M 0 0 H 72 L 100 50 L 72 100 H 0 L 22 50 Z';\n case 'hexagon':\n return 'M 25 0 H 75 L 100 50 L 75 100 H 25 L 0 50 Z';\n case 'homePlate':\n return 'M 50 0 L 100 25 V 100 H 0 V 25 Z';\n case 'leftRightArrow':\n return 'M 0 50 L 18 0 H 82 L 100 50 L 82 100 H 18 Z';\n case 'chevron':\n return 'M 0 0 H 72 L 100 50 L 72 100 H 0 L 28 50 Z';\n case 'rightArrow':\n return 'M 0 0 H 78 L 100 50 L 78 100 H 0 Z';\n case 'leftArrow':\n return 'M 22 0 H 100 V 100 H 22 L 0 50 Z';\n case 'bentArrow':\n return 'M 0 0 H 30 V 58 H 82 V 35 L 100 70 L 82 100 V 77 H 12 V 18 H 0 Z';\n case 'arc':\n return arcPresetPathData(node);\n default:\n return '';\n }\n}\n\nfunction blockArcPresetPathData(node: PptSceneNode): string {\n const startDegrees = (node.presetAdjustments?.adj1 ?? 0) / 60000;\n const endAdjustment = (node.presetAdjustments?.adj2 ?? 5400000) / 60000;\n const sweepDegrees = normalizeSweepDegrees(endAdjustment - startDegrees);\n const endDegrees = startDegrees + sweepDegrees;\n const outerRadius = 48;\n const thicknessRatio = Math.max(\n 0.08,\n Math.min(0.42, (node.presetAdjustments?.adj3 ?? 25000) / 100000),\n );\n const innerRadius = outerRadius * (1 - thicknessRatio);\n const outerStart = angleToRadiusPoint(startDegrees, outerRadius);\n const outerEnd = angleToRadiusPoint(endDegrees, outerRadius);\n const innerEnd = angleToRadiusPoint(endDegrees, innerRadius);\n const innerStart = angleToRadiusPoint(startDegrees, innerRadius);\n const largeArc = Math.abs(sweepDegrees) > 180 ? 1 : 0;\n const sweepFlag = sweepDegrees >= 0 ? 1 : 0;\n const reverseSweepFlag = sweepFlag ? 0 : 1;\n return [\n `M ${outerStart.x.toFixed(3)} ${outerStart.y.toFixed(3)}`,\n `A ${outerRadius} ${outerRadius} 0 ${largeArc} ${sweepFlag} ${outerEnd.x.toFixed(3)} ${outerEnd.y.toFixed(3)}`,\n `L ${innerEnd.x.toFixed(3)} ${innerEnd.y.toFixed(3)}`,\n `A ${innerRadius.toFixed(3)} ${innerRadius.toFixed(3)} 0 ${largeArc} ${reverseSweepFlag} ${innerStart.x.toFixed(3)} ${innerStart.y.toFixed(3)}`,\n 'Z',\n ].join(' ');\n}\n\nfunction normalizeSweepDegrees(value: number): number {\n if (!Number.isFinite(value) || value === 0) return 90;\n let normalized = value % 360;\n if (normalized > 330) normalized = 330;\n if (normalized < -330) normalized = -330;\n if (Math.abs(normalized) < 8) normalized = normalized < 0 ? -8 : 8;\n return normalized;\n}\n\nfunction arcPresetPathData(node: PptSceneNode): string {\n const start = angleToPoint(node.presetAdjustments?.adj1 ?? 18000000);\n const end = angleToPoint(node.presetAdjustments?.adj2 ?? 0);\n const startDegrees = (node.presetAdjustments?.adj1 ?? 18000000) / 60000;\n const endDegrees = (node.presetAdjustments?.adj2 ?? 0) / 60000;\n const clockwiseSpan = (((endDegrees - startDegrees) % 360) + 360) % 360;\n const largeArc = clockwiseSpan > 180 ? 1 : 0;\n return `M ${start.x.toFixed(3)} ${start.y.toFixed(3)} A 48 48 0 ${largeArc} 1 ${end.x.toFixed(3)} ${end.y.toFixed(3)}`;\n}\n\nfunction angleToPoint(rawAngle: number): { x: number; y: number } {\n return angleToRadiusPoint(rawAngle / 60000, 48);\n}\n\nfunction angleToRadiusPoint(degrees: number, radius: number): { x: number; y: number } {\n const radians = (degrees / 180) * Math.PI;\n return {\n x: 50 + radius * Math.cos(radians),\n y: 50 + radius * Math.sin(radians),\n };\n}\n\nfunction appendArcArrowMarker(svg: SVGSVGElement, path: SVGPathElement, node: PptSceneNode): void {\n if (node.lineHeadEnd !== 'triangle' && node.lineTailEnd !== 'triangle') return;\n const markerId = `coco-ppt-arc-arrow-${node.id.replace(/[^a-zA-Z0-9_-]/g, '_')}`;\n const marker = document.createElementNS('http://www.w3.org/2000/svg', 'marker');\n marker.setAttribute('id', markerId);\n marker.setAttribute('viewBox', '0 0 10 10');\n marker.setAttribute('markerWidth', '7');\n marker.setAttribute('markerHeight', '7');\n marker.setAttribute('refX', '5');\n marker.setAttribute('refY', '5');\n marker.setAttribute('orient', 'auto-start-reverse');\n const arrow = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n arrow.setAttribute('d', 'M 0 0 L 10 5 L 0 10 Z');\n arrow.setAttribute('fill', node.lineColor ?? node.fillColor ?? '#000000');\n marker.append(arrow);\n svg.append(marker);\n if (node.lineHeadEnd === 'triangle') path.setAttribute('marker-start', `url(#${markerId})`);\n if (node.lineTailEnd === 'triangle') path.setAttribute('marker-end', `url(#${markerId})`);\n}\n\nfunction shouldClipCustomGeometryPicture(node: PptSceneNode, slide: PptSlideScene): boolean {\n if (!node.customGeometry) return false;\n if (customGeometryIsRectangular(node.customGeometry)) return false;\n const nodeArea = Math.max(0, node.bounds.width) * Math.max(0, node.bounds.height);\n const slideArea = Math.max(1, slide.size.width * slide.size.height);\n const coversMostOfSlide = nodeArea / slideArea > 0.85;\n const nearSlideOrigin =\n Math.abs(node.bounds.left) < slide.size.width * 0.05 &&\n Math.abs(node.bounds.top) < slide.size.height * 0.05;\n return !(coversMostOfSlide && nearSlideOrigin);\n}\n\nfunction customGeometryIsRectangular(geometry: NonNullable<PptSceneNode['customGeometry']>): boolean {\n if (geometry.paths.length !== 1) return false;\n const path = geometry.paths[0];\n if (!path) return false;\n const width = path.width ?? 0;\n const height = path.height ?? 0;\n if (width <= 0 || height <= 0) return false;\n const points: Array<{ x: number; y: number }> = [];\n for (const command of path.commands) {\n if (command.kind === 'moveTo' || command.kind === 'lineTo') {\n points.push({ x: command.x, y: command.y });\n } else if (command.kind !== 'close') {\n return false;\n }\n }\n const unique = dedupeGeometryPoints(points);\n if (unique.length !== 4 && unique.length !== 5) return false;\n const corners = [\n { x: 0, y: 0 },\n { x: width, y: 0 },\n { x: width, y: height },\n { x: 0, y: height },\n ];\n return corners.every((corner) =>\n unique.some((point) => geometryPointNear(point.x, corner.x) && geometryPointNear(point.y, corner.y)),\n );\n}\n\nfunction dedupeGeometryPoints(points: Array<{ x: number; y: number }>): Array<{ x: number; y: number }> {\n const result: Array<{ x: number; y: number }> = [];\n for (const point of points) {\n if (!result.some((existing) => geometryPointNear(existing.x, point.x) && geometryPointNear(existing.y, point.y))) {\n result.push(point);\n }\n }\n return result;\n}\n\nfunction geometryPointNear(actual: number, expected: number): boolean {\n return Math.abs(actual - expected) <= 1;\n}\n\nfunction renderCustomGeometryPicture(node: PptSceneNode, url: string): SVGSVGElement {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.classList.add('coco-ppt-custom-geometry', 'coco-ppt-picture-clip');\n const pathWidth = Math.max(1, node.customGeometry?.paths[0]?.width ?? node.bounds.width);\n const pathHeight = Math.max(1, node.customGeometry?.paths[0]?.height ?? node.bounds.height);\n svg.setAttribute('viewBox', `0 0 ${pathWidth} ${pathHeight}`);\n svg.setAttribute('preserveAspectRatio', 'none');\n const clipId = `coco-ppt-picture-clip-${node.id.replace(/[^a-zA-Z0-9_-]/g, '_')}`;\n const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n const clipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');\n clipPath.setAttribute('id', clipId);\n for (const path of node.customGeometry?.paths ?? []) {\n const clipShape = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n clipShape.setAttribute('d', customGeometryPathData(path.commands));\n if (customGeometryNeedsEvenOddFill(path.commands)) clipShape.setAttribute('fill-rule', 'evenodd');\n clipPath.append(clipShape);\n }\n defs.append(clipPath);\n svg.append(defs);\n const image = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n image.setAttribute('href', url);\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'href', url);\n const placement = imagePlacementRect(node, pathWidth, pathHeight);\n image.setAttribute('x', String(placement.x));\n image.setAttribute('y', String(placement.y));\n image.setAttribute('width', String(placement.width));\n image.setAttribute('height', String(placement.height));\n image.setAttribute('preserveAspectRatio', 'none');\n image.setAttribute('clip-path', `url(#${clipId})`);\n if (node.imageOpacity !== undefined)\n image.setAttribute('opacity', String(Math.max(0, Math.min(1, node.imageOpacity))));\n svg.append(image);\n return svg;\n}\n\nfunction imagePlacementRect(\n node: PptSceneNode,\n width: number,\n height: number,\n): { x: number; y: number; width: number; height: number } {\n if (node.imageFillRect) {\n const left = node.imageFillRect.left ?? 0;\n const right = node.imageFillRect.right ?? 0;\n const top = node.imageFillRect.top ?? 0;\n const bottom = node.imageFillRect.bottom ?? 0;\n return {\n x: left * width,\n y: top * height,\n width: Math.max(0.01, 1 - left - right) * width,\n height: Math.max(0.01, 1 - top - bottom) * height,\n };\n }\n const crop = node.imageCrop;\n if (!crop) return { x: 0, y: 0, width, height };\n const left = crop.left ?? 0;\n const right = crop.right ?? 0;\n const top = crop.top ?? 0;\n const bottom = crop.bottom ?? 0;\n const visibleWidth = Math.max(0.01, 1 - left - right);\n const visibleHeight = Math.max(0.01, 1 - top - bottom);\n return {\n x: (-left / visibleWidth) * width,\n y: (-top / visibleHeight) * height,\n width: (1 / visibleWidth) * width,\n height: (1 / visibleHeight) * height,\n };\n}\n\nfunction renderCustomGeometry(node: PptSceneNode, scale: number): SVGSVGElement {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.classList.add('coco-ppt-custom-geometry');\n const width = node.customGeometry?.paths[0]?.width ?? node.bounds.width;\n const height = node.customGeometry?.paths[0]?.height ?? node.bounds.height;\n svg.setAttribute('viewBox', `0 0 ${Math.max(1, width)} ${Math.max(1, height)}`);\n svg.setAttribute('preserveAspectRatio', 'none');\n const gradientId =\n node.fillGradient && node.fillGradient.colors.length > 1\n ? `coco-ppt-gradient-${node.id.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n : undefined;\n const lineGradientId =\n node.lineGradient && node.lineGradient.colors.length > 1\n ? `coco-ppt-custom-line-gradient-${node.id.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n : undefined;\n if (gradientId && node.fillGradient) appendSvgLinearGradient(svg, gradientId, node.fillGradient);\n if (lineGradientId && node.lineGradient)\n appendSvgLinearGradient(svg, lineGradientId, node.lineGradient);\n for (const path of node.customGeometry?.paths ?? []) {\n const strokeWidth = customGeometryStrokeWidth(node, path);\n const ellipse = customGeometryEllipse(path);\n const shape = ellipse\n ? document.createElementNS('http://www.w3.org/2000/svg', 'ellipse')\n : document.createElementNS('http://www.w3.org/2000/svg', 'path');\n if (ellipse) {\n shape.setAttribute('cx', String(ellipse.cx));\n shape.setAttribute('cy', String(ellipse.cy));\n shape.setAttribute('rx', String(ellipse.rx));\n shape.setAttribute('ry', String(ellipse.ry));\n } else {\n shape.setAttribute('d', customGeometryPathData(path.commands));\n if (customGeometryNeedsEvenOddFill(path.commands)) shape.setAttribute('fill-rule', 'evenodd');\n }\n const hasFill = !(node.kind === 'line' && node.lineDash);\n shape.setAttribute(\n 'fill',\n hasFill ? (gradientId ? `url(#${gradientId})` : (node.fillColor ?? 'none')) : 'none',\n );\n const fillOpacity = effectiveFillOpacity(node);\n if (hasFill && fillOpacity !== undefined)\n shape.setAttribute('fill-opacity', String(fillOpacity));\n shape.setAttribute('stroke', lineGradientId ? `url(#${lineGradientId})` : (node.lineColor ?? 'none'));\n shape.setAttribute('stroke-width', String(strokeWidth));\n if (node.lineOpacity !== undefined)\n shape.setAttribute('stroke-opacity', String(Math.max(0, Math.min(1, node.lineOpacity))));\n const dashArray = svgStrokeDashArray(node.lineDash, strokeWidth);\n if (dashArray) shape.setAttribute('stroke-dasharray', dashArray);\n shape.setAttribute('stroke-linejoin', 'round');\n shape.setAttribute('stroke-linecap', 'round');\n svg.append(shape);\n }\n return svg;\n}\n\nfunction customGeometryEllipse(\n path: PptCustomGeometryPath,\n): { cx: number; cy: number; rx: number; ry: number } | undefined {\n const width = path.width;\n const height = path.height;\n if (!width || !height || width <= 0 || height <= 0) return undefined;\n const commands = path.commands;\n if (\n commands.length !== 6 ||\n commands[0]?.kind !== 'moveTo' ||\n commands[1]?.kind !== 'cubicBezierTo' ||\n commands[2]?.kind !== 'cubicBezierTo' ||\n commands[3]?.kind !== 'cubicBezierTo' ||\n commands[4]?.kind !== 'cubicBezierTo' ||\n commands[5]?.kind !== 'close'\n ) {\n return undefined;\n }\n const cx = width / 2;\n const cy = height / 2;\n const endpoints = [\n commands[0],\n commands[1],\n commands[2],\n commands[3],\n commands[4],\n ];\n const expected = [\n { x: width, y: cy },\n { x: cx, y: height },\n { x: 0, y: cy },\n { x: cx, y: 0 },\n { x: width, y: cy },\n ];\n const tolerance = Math.max(width, height) * 0.003;\n const endpointMatches = endpoints.every((command, index) => {\n if (command.kind !== 'moveTo' && command.kind !== 'cubicBezierTo') return false;\n return (\n Math.abs(command.x - expected[index]!.x) <= tolerance &&\n Math.abs(command.y - expected[index]!.y) <= tolerance\n );\n });\n return endpointMatches\n ? {\n cx,\n cy,\n rx: width / 2,\n ry: height / 2,\n }\n : undefined;\n}\n\nfunction customGeometryNeedsEvenOddFill(commands: PptCustomGeometryCommand[]): boolean {\n return commands.filter((command) => command.kind === 'moveTo').length > 1;\n}\n\nfunction customGeometryStrokeWidth(node: PptSceneNode, path: PptCustomGeometryPath): number {\n if (!node.lineWidth) return 0;\n const widthRatio = path.width && node.bounds.width ? path.width / node.bounds.width : undefined;\n const heightRatio =\n path.height && node.bounds.height ? path.height / node.bounds.height : undefined;\n const ratios = [widthRatio, heightRatio].filter(\n (ratio): ratio is number => ratio !== undefined && Number.isFinite(ratio) && ratio > 0,\n );\n const ratio = ratios.length > 0 ? Math.max(...ratios) : 1;\n return Math.max(0.5, node.lineWidth * ratio);\n}\n\nfunction renderGradientOutline(node: PptSceneNode, scale: number): SVGSVGElement {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.classList.add('coco-ppt-gradient-outline');\n const width = Math.max(1, node.bounds.width * scale);\n const height = Math.max(1, node.bounds.height * scale);\n const strokeWidth = Math.max(1, (node.lineWidth ?? 9525) * scale);\n const inset = strokeWidth / 2;\n const gradientId = `coco-ppt-line-gradient-${node.id.replace(/[^a-zA-Z0-9_-]/g, '_')}`;\n svg.setAttribute('viewBox', `0 0 ${width} ${height}`);\n svg.setAttribute('preserveAspectRatio', 'none');\n appendSvgLinearGradient(svg, gradientId, node.lineGradient!);\n const shape =\n node.presetGeometry === 'ellipse'\n ? document.createElementNS('http://www.w3.org/2000/svg', 'ellipse')\n : document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n if (shape.tagName === 'ellipse') {\n shape.setAttribute('cx', String(width / 2));\n shape.setAttribute('cy', String(height / 2));\n shape.setAttribute('rx', String(Math.max(0, width / 2 - inset)));\n shape.setAttribute('ry', String(Math.max(0, height / 2 - inset)));\n } else {\n shape.setAttribute('x', String(inset));\n shape.setAttribute('y', String(inset));\n shape.setAttribute('width', String(Math.max(0, width - strokeWidth)));\n shape.setAttribute('height', String(Math.max(0, height - strokeWidth)));\n shape.setAttribute('rx', String(Math.max(0, roundRectRadius(node) * scale - inset)));\n shape.setAttribute('ry', String(Math.max(0, roundRectRadius(node) * scale - inset)));\n }\n shape.setAttribute('fill', 'none');\n shape.setAttribute('stroke', `url(#${gradientId})`);\n shape.setAttribute('stroke-width', String(strokeWidth));\n if (node.lineOpacity !== undefined)\n shape.setAttribute('stroke-opacity', String(Math.max(0, Math.min(1, node.lineOpacity))));\n const dashArray = svgStrokeDashArray(node.lineDash, strokeWidth);\n if (dashArray) shape.setAttribute('stroke-dasharray', dashArray);\n svg.append(shape);\n return svg;\n}\n\nfunction renderSolidOutline(node: PptSceneNode, scale: number): SVGSVGElement {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.classList.add('coco-ppt-solid-outline');\n const width = Math.max(1, node.bounds.width * scale);\n const height = Math.max(1, node.bounds.height * scale);\n const strokeWidth = Math.max(1, (node.lineWidth ?? 9525) * scale);\n const strokeInsideBounds = node.kind !== 'picture';\n const inset = strokeInsideBounds ? strokeWidth / 2 : 0;\n if (!strokeInsideBounds) svg.style.overflow = 'visible';\n svg.setAttribute('viewBox', `0 0 ${width} ${height}`);\n svg.setAttribute('preserveAspectRatio', 'none');\n const shape =\n node.presetGeometry === 'ellipse'\n ? document.createElementNS('http://www.w3.org/2000/svg', 'ellipse')\n : document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n if (shape.tagName === 'ellipse') {\n shape.setAttribute('cx', String(width / 2));\n shape.setAttribute('cy', String(height / 2));\n shape.setAttribute('rx', String(Math.max(0, width / 2 - inset)));\n shape.setAttribute('ry', String(Math.max(0, height / 2 - inset)));\n } else {\n shape.setAttribute('x', String(inset));\n shape.setAttribute('y', String(inset));\n shape.setAttribute('width', String(Math.max(0, width - inset * 2)));\n shape.setAttribute('height', String(Math.max(0, height - inset * 2)));\n const radius =\n node.presetGeometry === 'roundRect' || node.presetGeometry === 'round1Rect'\n ? Math.max(0, roundRectRadius(node) * scale - inset)\n : 0;\n shape.setAttribute('rx', String(radius));\n shape.setAttribute('ry', String(radius));\n }\n shape.setAttribute('fill', 'none');\n shape.setAttribute('stroke', node.lineColor ?? 'none');\n shape.setAttribute('stroke-width', String(strokeWidth));\n if (node.lineOpacity !== undefined)\n shape.setAttribute('stroke-opacity', String(Math.max(0, Math.min(1, node.lineOpacity))));\n const dashArray = svgStrokeDashArray(node.lineDash, strokeWidth);\n if (dashArray) shape.setAttribute('stroke-dasharray', dashArray);\n svg.append(shape);\n return svg;\n}\n\nfunction renderLineGeometry(node: PptSceneNode, scale: number): SVGSVGElement {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.classList.add('coco-ppt-line-geometry');\n const isVertical = lineAxisKind(node) === 'vertical';\n const width = Math.max(isVertical ? 12 : 1, node.bounds.width * scale);\n const height = Math.max(isVertical ? 1 : 12, node.bounds.height * scale);\n svg.setAttribute('viewBox', `0 0 ${width} ${height}`);\n svg.setAttribute('preserveAspectRatio', 'none');\n const strokeWidth = Math.max(1, (node.lineWidth ?? 9525) * scale);\n const gradientId =\n node.lineGradient && node.lineGradient.colors.length > 1\n ? `coco-ppt-connector-gradient-${node.id.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n : undefined;\n if (gradientId && node.lineGradient) appendSvgLinearGradient(svg, gradientId, node.lineGradient);\n const color = gradientId\n ? `url(#${gradientId})`\n : cssColorWithOpacity(node.lineColor ?? '#000000', node.lineOpacity);\n const ovalRadius = ovalLineEndRadius(strokeWidth);\n const arrowLength = Math.max(5, strokeWidth * 3.2);\n const arrowWidth = Math.max(5, strokeWidth * 2.6);\n const headIsArrow = isArrowLineEnd(node.lineHeadEnd);\n const tailIsArrow = isArrowLineEnd(node.lineTailEnd);\n if (isVertical) {\n const x = width / 2;\n const y1 = headIsArrow ? Math.min(height, arrowLength) : 0;\n const y2 = tailIsArrow ? Math.max(0, height - arrowLength) : height;\n appendSvgLine(svg, x, y1, x, y2, color, strokeWidth, node.lineOpacity, node.lineCap);\n if (node.lineHeadEnd === 'oval') appendSvgCircle(svg, x, 0, ovalRadius, color);\n if (node.lineTailEnd === 'oval') appendSvgCircle(svg, x, height, ovalRadius, color);\n if (headIsArrow)\n appendSvgArrow(svg, x, 0, 'up', arrowLength, arrowWidth, color, node.lineOpacity);\n if (tailIsArrow)\n appendSvgArrow(svg, x, height, 'down', arrowLength, arrowWidth, color, node.lineOpacity);\n } else {\n const y = height / 2;\n const x1 = headIsArrow ? Math.min(width, arrowLength) : 0;\n const x2 = tailIsArrow ? Math.max(0, width - arrowLength) : width;\n appendSvgLine(svg, x1, y, x2, y, color, strokeWidth, node.lineOpacity, node.lineCap);\n if (node.lineHeadEnd === 'oval') appendSvgCircle(svg, 0, y, ovalRadius, color);\n if (node.lineTailEnd === 'oval') appendSvgCircle(svg, width, y, ovalRadius, color);\n if (headIsArrow)\n appendSvgArrow(svg, 0, y, 'left', arrowLength, arrowWidth, color, node.lineOpacity);\n if (tailIsArrow)\n appendSvgArrow(svg, width, y, 'right', arrowLength, arrowWidth, color, node.lineOpacity);\n }\n return svg;\n}\n\nfunction ovalLineEndRadius(strokeWidth: number): number {\n return Math.max(3, strokeWidth * 3);\n}\n\nfunction isArrowLineEnd(value: string | undefined): boolean {\n return value === 'arrow' || value === 'triangle';\n}\n\nfunction customGeometryPathData(commands: PptCustomGeometryCommand[]): string {\n const parts: string[] = [];\n let current: { x: number; y: number } | undefined;\n for (const command of commands) {\n if (command.kind === 'moveTo') {\n parts.push(`M ${command.x} ${command.y}`);\n current = { x: command.x, y: command.y };\n } else if (command.kind === 'lineTo') {\n parts.push(`L ${command.x} ${command.y}`);\n current = { x: command.x, y: command.y };\n } else if (command.kind === 'cubicBezierTo') {\n parts.push(`C ${command.x1} ${command.y1} ${command.x2} ${command.y2} ${command.x} ${command.y}`);\n current = { x: command.x, y: command.y };\n } else if (command.kind === 'arcTo') {\n const arc = svgArcCommandForCustomGeometry(command, current);\n if (arc) {\n parts.push(arc.path);\n current = arc.end;\n }\n } else {\n parts.push('Z');\n }\n }\n return parts.join(' ');\n}\n\nfunction svgArcCommandForCustomGeometry(\n command: Extract<PptCustomGeometryCommand, { kind: 'arcTo' }>,\n current: { x: number; y: number } | undefined,\n): { path: string; end: { x: number; y: number } } | undefined {\n if (!current || command.wR <= 0 || command.hR <= 0 || command.swAng === 0) return undefined;\n const startDegrees = command.stAng / 60000;\n const sweepDegrees = command.swAng / 60000;\n const endDegrees = startDegrees + sweepDegrees;\n const startVector = customGeometryArcVector(command.wR, command.hR, startDegrees);\n const center = {\n x: current.x - startVector.x,\n y: current.y - startVector.y,\n };\n const endVector = customGeometryArcVector(command.wR, command.hR, endDegrees);\n const end = {\n x: center.x + endVector.x,\n y: center.y + endVector.y,\n };\n const largeArc = Math.abs(sweepDegrees) > 180 ? 1 : 0;\n const sweepFlag = sweepDegrees >= 0 ? 1 : 0;\n return {\n path: `A ${fmtSvgNumber(command.wR)} ${fmtSvgNumber(command.hR)} 0 ${largeArc} ${sweepFlag} ${fmtSvgNumber(end.x)} ${fmtSvgNumber(end.y)}`,\n end,\n };\n}\n\nfunction customGeometryArcVector(radiusX: number, radiusY: number, degrees: number): {\n x: number;\n y: number;\n} {\n const radians = (degrees / 180) * Math.PI;\n return {\n x: radiusX * Math.cos(radians),\n y: radiusY * Math.sin(radians),\n };\n}\n\nfunction fmtSvgNumber(value: number): string {\n return Number.isInteger(value) ? String(value) : value.toFixed(3).replace(/\\.?0+$/, '');\n}\n\nfunction appendSvgLinearGradient(\n svg: SVGSVGElement,\n id: string,\n gradientModel: PptGradientModel | string[],\n): void {\n const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n const colors = Array.isArray(gradientModel) ? gradientModel : gradientModel.colors;\n const positions = Array.isArray(gradientModel) ? undefined : gradientModel.positions;\n const opacities = Array.isArray(gradientModel) ? undefined : gradientModel.opacities;\n const gradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient');\n const direction = Array.isArray(gradientModel)\n ? { x1: 0, y1: 0, x2: 100, y2: 100 }\n : svgLinearGradientDirection(cssLinearGradientAngle(gradientModel));\n gradient.setAttribute('id', id);\n gradient.setAttribute('x1', `${direction.x1}%`);\n gradient.setAttribute('y1', `${direction.y1}%`);\n gradient.setAttribute('x2', `${direction.x2}%`);\n gradient.setAttribute('y2', `${direction.y2}%`);\n colors\n .map((color: string, index: number) => {\n const offset = positions?.[index] ?? (index / Math.max(1, colors.length - 1)) * 100;\n const parsedColor = parseCssRgbaColor(color);\n const opacity = Math.max(0, Math.min(1, opacities?.[index] ?? parsedColor?.opacity ?? 1));\n return {\n color: parsedColor?.color ?? color,\n offset: Math.max(0, Math.min(100, offset)),\n opacity,\n };\n })\n .sort((a, b) => a.offset - b.offset)\n .forEach((item) => {\n const stop = document.createElementNS('http://www.w3.org/2000/svg', 'stop');\n stop.setAttribute('offset', `${item.offset}%`);\n stop.setAttribute('stop-color', item.color);\n if (item.opacity < 1) stop.setAttribute('stop-opacity', String(item.opacity));\n gradient.append(stop);\n });\n defs.append(gradient);\n svg.append(defs);\n}\n\nfunction svgLinearGradientDirection(angle: number): {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n} {\n const radians = (angle * Math.PI) / 180;\n const dx = Math.sin(radians);\n const dy = -Math.cos(radians);\n const extent = 50 / Math.max(Math.abs(dx), Math.abs(dy), 0.0001);\n return {\n x1: roundGradientCoordinate(50 - dx * extent),\n y1: roundGradientCoordinate(50 - dy * extent),\n x2: roundGradientCoordinate(50 + dx * extent),\n y2: roundGradientCoordinate(50 + dy * extent),\n };\n}\n\nfunction roundGradientCoordinate(value: number): number {\n return Math.round(Math.max(0, Math.min(100, value)) * 1000) / 1000;\n}\n\nfunction parseCssRgbaColor(color: string): { color: string; opacity: number } | undefined {\n const match =\n /^rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})(?:\\s*,\\s*([0-9.]+)\\s*)?\\)$/i.exec(color);\n if (!match) return undefined;\n const r = Math.max(0, Math.min(255, Number(match[1])));\n const g = Math.max(0, Math.min(255, Number(match[2])));\n const b = Math.max(0, Math.min(255, Number(match[3])));\n const opacity = match[4] === undefined ? 1 : Math.max(0, Math.min(1, Number(match[4])));\n return {\n color: `#${toHexByte(r)}${toHexByte(g)}${toHexByte(b)}`,\n opacity,\n };\n}\n\nfunction toHexByte(value: number): string {\n return Math.round(value).toString(16).padStart(2, '0').toUpperCase();\n}\n\nfunction renderTablePreview(\n node: PptSceneNode,\n scale: number,\n interactive = true,\n): HTMLTableElement {\n const table = document.createElement('table');\n table.className = 'coco-ppt-table';\n const model = node.table;\n if (!model) return table;\n const rowCount = Math.max(model.rowCount, model.values.length);\n const columnCount = Math.max(model.columnCount, ...model.values.map((row) => row.length), 1);\n const totalColumnWidth = model.columnWidths?.reduce((sum, width) => sum + width, 0) ?? 0;\n if (totalColumnWidth > 0) {\n const colgroup = document.createElement('colgroup');\n for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n const col = document.createElement('col');\n const width = model.columnWidths?.[columnIndex];\n if (width) col.style.width = `${(width / totalColumnWidth) * 100}%`;\n colgroup.append(col);\n }\n table.append(colgroup);\n }\n const totalRowHeight = model.rowHeights?.reduce((sum, height) => sum + height, 0) ?? 0;\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const row = document.createElement('tr');\n const height = model.rowHeights?.[rowIndex];\n row.style.height =\n totalRowHeight > 0 && height ? `${(height / totalRowHeight) * 100}%` : `${100 / rowCount}%`;\n for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n const merge = tableCellMergeAt(model, rowIndex, columnIndex);\n if (merge?.hMerge || merge?.vMerge) continue;\n const cell = document.createElement('td');\n const style = model.cellStyles?.[rowIndex]?.[columnIndex];\n if (interactive) {\n cell.dataset.row = String(rowIndex);\n cell.dataset.column = String(columnIndex);\n }\n const text = model.values[rowIndex]?.[columnIndex] ?? '';\n cell.dataset.cellText = text;\n appendTableCellText(cell, text);\n if (merge?.columnSpan && merge.columnSpan > 1) cell.colSpan = merge.columnSpan;\n if (merge?.rowSpan && merge.rowSpan > 1) cell.rowSpan = merge.rowSpan;\n if (style?.fillGradient && style.fillGradient.colors.length > 1) {\n cell.style.background = cssLinearGradient(style.fillGradient);\n } else if (style?.fillColor && !isTransparentTableFill(style.fillColor)) {\n cell.style.background = style.fillColor;\n }\n if (style?.body) {\n const body = style.body;\n const left = body.insetLeft ?? 91440;\n const top = body.insetTop ?? 45720;\n const right = body.insetRight ?? 91440;\n const bottom = body.insetBottom ?? 45720;\n cell.style.padding = `${top * scale}px ${right * scale}px ${bottom * scale}px ${left * scale}px`;\n if (body.anchor === 'middle') cell.style.verticalAlign = 'middle';\n if (body.anchor === 'bottom') cell.style.verticalAlign = 'bottom';\n if (body.anchor === 'top') cell.style.verticalAlign = 'top';\n }\n if (style?.textStyle) applyTextStyleToElement(cell, style.textStyle, scale);\n if (style?.textStyle?.alignment) {\n applyTextAlignment(cell, style.textStyle.alignment);\n }\n applyTableCellBorders(cell, style, scale);\n row.append(cell);\n }\n table.append(row);\n }\n return table;\n}\n\nfunction applyTableCellBorders(\n cell: HTMLElement,\n style: PptTableCellStyle | undefined,\n scale: number,\n): void {\n const borders = style?.borders;\n if (!borders) return;\n applyTableCellBorderSide(cell, 'Left', borders.left, scale);\n applyTableCellBorderSide(cell, 'Right', borders.right, scale);\n applyTableCellBorderSide(cell, 'Top', borders.top, scale);\n applyTableCellBorderSide(cell, 'Bottom', borders.bottom, scale);\n}\n\nfunction applyTableCellBorderSide(\n cell: HTMLElement,\n side: 'Left' | 'Right' | 'Top' | 'Bottom',\n border: NonNullable<PptTableCellStyle['borders']>['left'] | undefined,\n scale: number,\n): void {\n if (!border) return;\n const styleProp = `border${side}Style` as const;\n const widthProp = `border${side}Width` as const;\n const colorProp = `border${side}Color` as const;\n if (border.hidden) {\n cell.style[styleProp] = 'none';\n cell.style[widthProp] = '0';\n return;\n }\n cell.style[styleProp] = cssBorderStyleForLineDash(border.dash);\n cell.style[widthProp] = `${Math.max(1, (border.width ?? 9525) * scale)}px`;\n cell.style[colorProp] = cssColorWithOpacity(border.color ?? '#94A3B8', border.opacity);\n}\n\nfunction appendTableCellText(cell: HTMLElement, text: string): void {\n const lines = text.split(/\\r?\\n/);\n if (lines.length <= 1) {\n cell.textContent = text;\n return;\n }\n lines.forEach((line, index) => {\n if (index > 0) cell.append(document.createElement('br'));\n const span = document.createElement('span');\n span.textContent = line;\n if (index > 0) {\n span.className = 'coco-ppt-table-cell-secondary-line';\n span.style.fontSize = '0.7em';\n span.style.fontWeight = '400';\n }\n cell.append(span);\n });\n}\n\nfunction tableCellRawText(\n cell: HTMLElement,\n node: PptSceneNode,\n row: number,\n column: number,\n): string {\n return cell.dataset.cellText ?? node.table?.values[row]?.[column] ?? cell.textContent ?? '';\n}\n\nfunction isTransparentTableFill(color: string): boolean {\n const match = /^#?([0-9a-f]{6})$/i.exec(color);\n if (!match) return false;\n const value = match[1]!;\n const r = Number.parseInt(value.slice(0, 2), 16);\n const g = Number.parseInt(value.slice(2, 4), 16);\n const b = Number.parseInt(value.slice(4, 6), 16);\n return (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255 > 0.9;\n}\n\nfunction cssBoxShadow(shadow: NonNullable<PptSceneNode['shadow']>, scale: number): string {\n const distance = (shadow.distance ?? 0) * scale;\n const direction = ((shadow.direction ?? 0) * Math.PI) / 180;\n const offsetX = Math.cos(direction) * distance;\n const offsetY = Math.sin(direction) * distance;\n const blur = (shadow.blur ?? 0) * scale;\n return `${offsetX}px ${offsetY}px ${blur}px ${shadowColor(shadow)}`;\n}\n\nfunction shadowColor(shadow: NonNullable<PptSceneNode['shadow']>): string {\n const color = shadow.color ?? '#000000';\n const alpha = shadow.opacity ?? 0.25;\n const match = /^#?([0-9a-f]{6})$/i.exec(color);\n if (!match) return color;\n const value = match[1]!;\n const r = Number.parseInt(value.slice(0, 2), 16);\n const g = Number.parseInt(value.slice(2, 4), 16);\n const b = Number.parseInt(value.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${Math.max(0, Math.min(1, alpha))})`;\n}\n\nfunction tableCellMergeAt(\n table: NonNullable<PptSceneNode['table']>,\n row: number,\n column: number,\n): PptTableMerge | undefined {\n return table.mergedCells?.find((merge) => merge.row === row && merge.column === column);\n}\n\nfunction renderChartPreview(node: PptSceneNode): SVGSVGElement {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', '0 0 100 60');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n svg.setAttribute('preserveAspectRatio', 'none');\n const data = node.chart?.data;\n if (!data?.series.length) {\n appendSvgText(svg, node.name ?? 'Chart', 4, 8, 4, '#17202a');\n return svg;\n }\n\n const chartType = node.chart?.type ?? '';\n const grouping = node.chart?.grouping;\n const rangeValues = chartRangeValues(data.series, chartType, grouping);\n const rawMax = Math.max(...rangeValues, 1);\n const rawMin = Math.min(...rangeValues, 0);\n const valueAxis = node.chart?.axes?.value;\n const categoryAxis = node.chart?.axes?.category;\n const min = valueAxis?.min ?? (rawMin >= 0 ? 0 : rawMin);\n const max = valueAxis?.max ?? (rawMin >= 0 ? niceChartMax(rawMax) : rawMax);\n const plot = chartPlotArea(node);\n const tickCount = chartTickCount(min, max, valueAxis?.majorUnit);\n if (chartType.includes('doughnut') || chartType.includes('pie')) {\n renderDoughnutChart(svg, data.series, plot);\n return svg;\n }\n if (chartType.includes('radar')) {\n renderRadarChart(svg, data.series, plot, valueAxis?.max ?? rawMax);\n return svg;\n }\n if (valueAxis?.majorGridlines !== false)\n renderChartGrid(svg, plot, tickCount, node, valueAxis, categoryAxis);\n if (valueAxis?.deleted !== true && valueAxis?.tickLabelPosition !== 'none')\n renderValueAxisLabels(svg, plot, min, max, tickCount);\n renderChartTitleAndLegend(svg, node, plot);\n\n const barSeries = data.series.filter((series) =>\n (series.type ?? node.chart?.type ?? '').includes('bar'),\n );\n const lineSeries = data.series.filter((series) => (series.type ?? '').includes('line'));\n if (barSeries.length > 0) {\n renderBarSeries(svg, barSeries, plot, min, max, node, grouping);\n renderCategoryLabels(svg, barSeries[0]?.categories ?? [], plot);\n if (barSeries.some((series) => series.showValueLabels))\n renderValueLabels(svg, barSeries, plot, min, max);\n if (lineSeries.length > 0) renderLineSeries(svg, lineSeries, plot, min, max, undefined, node);\n if (lineSeries.some((series) => series.showValueLabels))\n renderLineValueLabels(svg, lineSeries, plot, min, max);\n } else {\n renderLineSeries(\n svg,\n data.series,\n plot,\n min,\n max,\n ['#22C7F2', '#22C7F2', '#94A3B8', '#F59E0B'],\n node,\n );\n renderCategoryLabels(\n svg,\n data.series.find((series) => series.categories?.length)?.categories ?? [],\n plot,\n );\n if (data.series.some((series) => series.showValueLabels))\n renderLineValueLabels(svg, data.series, plot, min, max);\n }\n return svg;\n}\n\nfunction chartRangeValues(\n seriesList: PptChartSeriesList,\n chartType: string,\n grouping: string | undefined,\n): number[] {\n const barSeries = seriesList.filter((series) => (series.type ?? chartType).includes('bar'));\n if (!isStackedBarGrouping(grouping) || barSeries.length <= 1) {\n return seriesList.flatMap((series) => series.values);\n }\n const columns = Math.max(...barSeries.map((series) => series.values.length), 1);\n const values: number[] = [];\n for (let valueIndex = 0; valueIndex < columns; valueIndex++) {\n let positive = 0;\n let negative = 0;\n for (const series of barSeries) {\n const value = series.values[valueIndex] ?? 0;\n if (value >= 0) positive += value;\n else negative += value;\n }\n values.push(positive, negative);\n }\n return values;\n}\n\nfunction chartPlotArea(node: PptSceneNode): {\n left: number;\n top: number;\n width: number;\n height: number;\n} {\n const layout = node.chart?.plotLayout;\n const chartType = node.chart?.type ?? '';\n if (!layout) {\n if (shouldOverlayBarSeries(node.chart?.data?.series ?? []))\n return { left: 7, top: 8, width: 88, height: 40 };\n if (isCompactCategoryBarChart(node)) return { left: 18, top: 8, width: 72, height: 40 };\n return node.chart?.axes?.value?.deleted === true\n ? { left: 6, top: 8, width: 90, height: 40 }\n : { left: 18, top: 8, width: 76, height: 40 };\n }\n const needsValueAxisInset =\n node.chart?.axes?.value?.deleted !== true &&\n !chartType.includes('doughnut') &&\n !chartType.includes('pie') &&\n !chartType.includes('radar');\n const minLeft = needsValueAxisInset ? 14 : 4;\n const left = (layout.x ?? 0.12) * 100;\n const top = (layout.y ?? 0.13) * 60;\n const width = (layout.width ?? 0.82) * 100;\n const height = (layout.height ?? 0.67) * 60;\n const clampedLeft = Math.max(minLeft, Math.min(20, left));\n return {\n left: clampedLeft,\n top: Math.max(3, Math.min(12, top)),\n width: Math.max(40, Math.min(92, Math.min(width, 96 - clampedLeft))),\n height: Math.max(24, Math.min(50, height)),\n };\n}\n\nfunction isCompactCategoryBarChart(node: PptSceneNode): boolean {\n const chart = node.chart;\n const chartType = chart?.type ?? '';\n if (!chart || !chartType.includes('bar') || chart.plotLayout) return false;\n const series = chart.data?.series ?? [];\n if (series.length !== 1) return false;\n const categoryCount = Math.max(series[0]?.categories?.length ?? 0, series[0]?.values.length ?? 0);\n return categoryCount > 0 && categoryCount <= 2;\n}\n\nfunction niceChartMax(value: number): number {\n if (value <= 0) return 1;\n if (value <= 10) return Math.max(1, Math.ceil(value));\n const padded = value * 1.1;\n const magnitude = 10 ** Math.floor(Math.log10(padded));\n return Math.ceil(padded / magnitude) * magnitude;\n}\n\nfunction chartTickCount(min: number, max: number, majorUnit?: number): number {\n const range = Math.abs(max - min);\n if (majorUnit && majorUnit > 0) return Math.max(1, Math.min(8, Math.round(range / majorUnit)));\n if (Number.isInteger(range) && range > 0 && range <= 6) return range;\n return 4;\n}\n\nfunction renderChartTitleAndLegend(\n svg: SVGSVGElement,\n node: PptSceneNode,\n plot: { left: number; top: number; width: number },\n): void {\n const title = node.chart?.title ?? node.chart?.data?.title;\n if (title) {\n appendSvgText(\n svg,\n title,\n plot.left + plot.width * 0.5,\n Math.max(4, plot.top - 3.2),\n 3.1,\n '#17202A',\n 'middle',\n );\n }\n const series = node.chart?.data?.series ?? [];\n const names = series\n .map((item) => item.name)\n .filter((value): value is string => Boolean(value))\n .slice(0, 4);\n if (names.length === 0) return;\n const colors = ['#C50D13', '#0EA5E9', '#F59E0B', '#A3E635'];\n let x = plot.left + plot.width * 0.78;\n const y = Math.max(4, plot.top - 2.4);\n names.forEach((name, index) => {\n const seriesItem = series.find((item) => item.name === name) ?? series[index];\n const fill = seriesItem ? chartLegendColor(svg, seriesItem, index, colors) : colors[index]!;\n if (seriesItem && (seriesItem.type ?? '').includes('line')) {\n appendSvgLine(svg, x, y - 1.1, x + 2.3, y - 1.1, fill, 0.45);\n appendSvgCircle(\n svg,\n x + 1.15,\n y - 1.1,\n 0.45,\n seriesItem.marker?.fillColor ?? '#FFFFFF',\n seriesItem.marker?.lineColor ?? fill,\n 0.32,\n );\n appendSvgText(svg, name, x + 2.8, y - 0.45, 2.2, '#64748B');\n } else {\n appendSvgRect(svg, x, y - 1.8, 1.4, 1.4, fill);\n appendSvgText(svg, name, x + 2, y - 0.45, 2.2, '#64748B');\n }\n x += Math.max(9, Array.from(name).length * 2.2 + 4.5);\n });\n}\n\nfunction chartLegendColor(\n svg: SVGSVGElement,\n series: PptChartSeries,\n index: number,\n fallbackColors: string[],\n): string {\n if ((series.type ?? '').includes('line')) return series.lineColor ?? fallbackColors[index]!;\n return chartSeriesFill(svg, series, index, fallbackColors);\n}\n\nfunction renderChartGrid(\n svg: SVGSVGElement,\n plot: { left: number; top: number; width: number; height: number },\n tickCount: number,\n node: PptSceneNode,\n valueAxis?: NonNullable<PptChartModel['axes']>['value'],\n categoryAxis?: NonNullable<PptChartModel['axes']>['category'],\n): void {\n const gridColor = valueAxis?.gridlineColor ?? '#E8EDF3';\n const gridWidth = chartAxisStrokeWidth(valueAxis?.gridlineWidth, node, 0.35);\n for (let i = 0; i <= tickCount; i++) {\n const y = plot.top + (plot.height / tickCount) * i;\n appendSvgLine(svg, plot.left, y, plot.left + plot.width, y, gridColor, gridWidth);\n }\n appendSvgLine(\n svg,\n plot.left,\n plot.top + plot.height,\n plot.left + plot.width,\n plot.top + plot.height,\n categoryAxis?.lineColor ?? '#CBD5E1',\n chartAxisStrokeWidth(categoryAxis?.lineWidth, node, 0.45),\n );\n}\n\nfunction renderValueAxisLabels(\n svg: SVGSVGElement,\n plot: { left: number; top: number; width: number; height: number },\n min: number,\n max: number,\n tickCount: number,\n): void {\n for (let i = 0; i <= tickCount; i++) {\n const value = max - ((max - min) / tickCount) * i;\n const y = plot.top + (plot.height / tickCount) * i + 1;\n appendSvgText(svg, formatChartTick(value), plot.left - 1.8, y, 3, '#9AA6B2', 'end');\n }\n}\n\nfunction formatChartTick(value: number): string {\n return Number.isInteger(value) ? String(value) : value.toFixed(1).replace(/\\.0$/, '');\n}\n\nfunction renderLineSeries(\n svg: SVGSVGElement,\n seriesList: PptChartSeriesList,\n plot: { left: number; top: number; width: number; height: number },\n min: number,\n max: number,\n fallbackColors: string[] = ['#CBD5E1', '#94A3B8', '#F59E0B', '#A3E635'],\n node?: PptSceneNode,\n): void {\n seriesList.forEach((series, index) => {\n if (series.values.length === 0) return;\n const points = series.values.map((value, pointIndex) => {\n const x =\n plot.left +\n (series.values.length === 1\n ? plot.width / 2\n : (plot.width * pointIndex) / (series.values.length - 1));\n const y = plot.top + plot.height - ((value - min) / Math.max(1, max - min)) * plot.height;\n return { x, y };\n });\n const path = chartLinePath(points, series.smooth === true);\n const color = series.lineColor ?? fallbackColors[index % fallbackColors.length]!;\n appendSvgPath(svg, path, color, chartSeriesLineWidth(series, node));\n if (series.marker?.symbol !== 'none') {\n const radius = Math.max(0.5, Math.min(1.6, (series.marker?.size ?? 5) * 0.18));\n const fill = series.marker?.fillColor ?? color;\n const stroke = series.marker?.lineColor;\n const strokeWidth = chartMarkerStrokeWidth(series, node);\n points.forEach((point) =>\n appendSvgCircle(svg, point.x, point.y, radius, fill, stroke, strokeWidth),\n );\n }\n });\n}\n\nfunction chartMarkerStrokeWidth(\n series: PptChartSeries,\n node: PptSceneNode | undefined,\n): number | undefined {\n if (!series.marker?.lineWidth || !node?.bounds.width) return undefined;\n return Math.max(0.25, Math.min(1, (series.marker.lineWidth / node.bounds.width) * 100));\n}\n\nfunction chartSeriesLineWidth(series: PptChartSeries, node: PptSceneNode | undefined): number {\n if (!series.lineWidth || !node?.bounds.width) return 0.8;\n return Math.max(0.3, Math.min(1.2, (series.lineWidth / node.bounds.width) * 100));\n}\n\nfunction chartLinePath(points: { x: number; y: number }[], smooth: boolean): string {\n if (points.length === 0) return '';\n if (!smooth || points.length < 3) {\n return points\n .map((point, pointIndex) => `${pointIndex === 0 ? 'M' : 'L'} ${point.x} ${point.y}`)\n .join(' ');\n }\n const segments = [`M ${points[0]!.x} ${points[0]!.y}`];\n for (let i = 0; i < points.length - 1; i++) {\n const previous = points[Math.max(0, i - 1)]!;\n const current = points[i]!;\n const next = points[i + 1]!;\n const afterNext = points[Math.min(points.length - 1, i + 2)]!;\n const control1 = {\n x: current.x + (next.x - previous.x) / 6,\n y: current.y + (next.y - previous.y) / 6,\n };\n const control2 = {\n x: next.x - (afterNext.x - current.x) / 6,\n y: next.y - (afterNext.y - current.y) / 6,\n };\n segments.push(`C ${control1.x} ${control1.y} ${control2.x} ${control2.y} ${next.x} ${next.y}`);\n }\n return segments.join(' ');\n}\n\nfunction renderBarSeries(\n svg: SVGSVGElement,\n seriesList: PptChartSeriesList,\n plot: { left: number; top: number; width: number; height: number },\n min: number,\n max: number,\n node?: PptSceneNode,\n grouping?: string,\n): void {\n if (isStackedBarGrouping(grouping) && seriesList.length > 1) {\n renderStackedBarSeries(svg, seriesList, plot, min, max, node);\n return;\n }\n if (shouldOverlayBarSeries(seriesList)) {\n renderOverlayBarSeries(svg, seriesList, plot, min, max, node);\n return;\n }\n const colors = ['#C50D13', '#0EA5E9', '#F59E0B', '#A3E635'];\n const columns = Math.max(...seriesList.map((series) => series.values.length), 1);\n const groupWidth = plot.width / columns;\n const barWidth = Math.max(1, (groupWidth * 0.48) / Math.max(seriesList.length, 1));\n seriesList.forEach((series, seriesIndex) => {\n const fill = chartSeriesFill(svg, series, seriesIndex, colors);\n series.values.forEach((value, valueIndex) => {\n const height = ((value - min) / Math.max(1, max - min)) * plot.height;\n const x =\n plot.left +\n valueIndex * groupWidth +\n (groupWidth - barWidth * seriesList.length) / 2 +\n seriesIndex * barWidth;\n const y = plot.top + plot.height - height;\n appendSvgRect(\n svg,\n x,\n y,\n barWidth,\n height,\n series.pointColors?.[valueIndex] ?? fill,\n series.borderColor,\n chartSeriesBorderWidth(series, node),\n );\n });\n });\n}\n\nfunction renderOverlayBarSeries(\n svg: SVGSVGElement,\n seriesList: PptChartSeriesList,\n plot: { left: number; top: number; width: number; height: number },\n min: number,\n max: number,\n node?: PptSceneNode,\n): void {\n const colors = ['#C50D13', '#0EA5E9', '#F59E0B', '#A3E635'];\n const columns = Math.max(...seriesList.map((series) => series.values.length), 1);\n const groupWidth = plot.width / columns;\n const barWidth = Math.max(1, groupWidth * 0.34);\n seriesList.forEach((series, seriesIndex) => {\n const fill = chartSeriesFill(svg, series, seriesIndex, colors);\n series.values.forEach((value, valueIndex) => {\n const y = chartValueToY(value, plot, min, max);\n const baseline = chartValueToY(0, plot, min, max);\n const x = plot.left + valueIndex * groupWidth + (groupWidth - barWidth) / 2;\n appendSvgRect(\n svg,\n x,\n Math.min(y, baseline),\n barWidth,\n Math.max(0.1, Math.abs(baseline - y)),\n series.pointColors?.[valueIndex] ?? fill,\n series.borderColor,\n chartSeriesBorderWidth(series, node),\n );\n });\n });\n}\n\nfunction renderStackedBarSeries(\n svg: SVGSVGElement,\n seriesList: PptChartSeriesList,\n plot: { left: number; top: number; width: number; height: number },\n min: number,\n max: number,\n node?: PptSceneNode,\n): void {\n const colors = ['#C50D13', '#0EA5E9', '#F59E0B', '#A3E635'];\n const columns = Math.max(...seriesList.map((series) => series.values.length), 1);\n const groupWidth = plot.width / columns;\n const barWidth = Math.max(1, groupWidth * 0.46);\n const positives = new Array<number>(columns).fill(Math.max(0, min));\n const negatives = new Array<number>(columns).fill(Math.min(0, max));\n seriesList.forEach((series, seriesIndex) => {\n const fill = chartSeriesFill(svg, series, seriesIndex, colors);\n series.values.forEach((value, valueIndex) => {\n const base = value >= 0 ? positives[valueIndex]! : negatives[valueIndex]!;\n const next = base + value;\n const y1 = chartValueToY(base, plot, min, max);\n const y2 = chartValueToY(next, plot, min, max);\n const x = plot.left + valueIndex * groupWidth + (groupWidth - barWidth) / 2;\n appendSvgRect(\n svg,\n x,\n Math.min(y1, y2),\n barWidth,\n Math.max(0.1, Math.abs(y2 - y1)),\n series.pointColors?.[valueIndex] ?? fill,\n series.borderColor,\n chartSeriesBorderWidth(series, node),\n );\n if (value >= 0) positives[valueIndex] = next;\n else negatives[valueIndex] = next;\n });\n });\n}\n\nfunction chartValueToY(\n value: number,\n plot: { top: number; height: number },\n min: number,\n max: number,\n): number {\n return plot.top + plot.height - ((value - min) / Math.max(1, max - min)) * plot.height;\n}\n\nfunction isStackedBarGrouping(grouping: string | undefined): boolean {\n return grouping === 'stacked' || grouping === 'percentStacked';\n}\n\nfunction shouldOverlayBarSeries(seriesList: PptChartSeriesList): boolean {\n const groups = new Set(seriesList.map((series) => series.chartGroup ?? 0));\n return groups.size > 1 && seriesList.every((series) => !series.type || series.type.includes('bar'));\n}\n\nfunction chartSeriesBorderWidth(series: PptChartSeries, node?: PptSceneNode): number | undefined {\n if (!series.borderWidth) return undefined;\n return chartStrokeWidth(\n node?.bounds.width ? (series.borderWidth / node.bounds.width) * 100 : undefined,\n undefined,\n );\n}\n\nfunction chartAxisStrokeWidth(\n width: number | undefined,\n node: PptSceneNode,\n fallback: number,\n): number {\n return (\n chartStrokeWidth(\n width !== undefined && node.bounds.width ? (width / node.bounds.width) * 100 : undefined,\n fallback,\n ) ?? fallback\n );\n}\n\nfunction chartStrokeWidth(width: number | undefined, fallback: number): number;\nfunction chartStrokeWidth(\n width: number | undefined,\n fallback: number | undefined,\n): number | undefined;\nfunction chartStrokeWidth(\n width: number | undefined,\n fallback: number | undefined,\n): number | undefined {\n if (width === undefined) return fallback;\n return Math.max(0.15, Math.min(1.4, width));\n}\n\nfunction chartSeriesFill(\n svg: SVGSVGElement,\n series: PptChartSeries,\n index: number,\n fallbackColors: string[],\n): string {\n if (series.fillGradient?.colors.length && series.fillGradient.colors.length > 1) {\n const id = `coco-chart-gradient-${index}-${series.fillGradient.colors.join('-').replace(/[^a-zA-Z0-9_-]/g, '_')}`;\n appendSvgLinearGradient(svg, id, series.fillGradient);\n return `url(#${id})`;\n }\n return series.fillColor ?? fallbackColors[index % fallbackColors.length]!;\n}\n\nfunction chartPointFill(\n series: PptChartSeries,\n pointIndex: number,\n fallbackColors: string[],\n): string {\n return (\n series.pointColors?.[pointIndex] ??\n series.fillColor ??\n fallbackColors[pointIndex % fallbackColors.length]!\n );\n}\n\nfunction renderCategoryLabels(\n svg: SVGSVGElement,\n categories: string[],\n plot: { left: number; top: number; width: number; height: number },\n): void {\n if (categories.length === 0) return;\n const step = plot.width / categories.length;\n categories.forEach((category, index) => {\n appendSvgText(\n svg,\n category,\n plot.left + step * index + step / 2,\n plot.top + plot.height + 5.2,\n 3.2,\n '#64748B',\n 'middle',\n );\n });\n}\n\nfunction renderValueLabels(\n svg: SVGSVGElement,\n seriesList: PptChartSeriesList,\n plot: { left: number; top: number; width: number; height: number },\n min: number,\n max: number,\n): void {\n const columns = Math.max(...seriesList.map((series) => series.values.length), 1);\n const groupWidth = plot.width / columns;\n const barWidth = Math.max(1, (groupWidth * 0.48) / Math.max(seriesList.length, 1));\n seriesList.forEach((series, seriesIndex) => {\n if (!series.showValueLabels) return;\n series.values.forEach((value, valueIndex) => {\n const height = ((value - min) / Math.max(1, max - min)) * plot.height;\n const x =\n plot.left +\n valueIndex * groupWidth +\n (groupWidth - barWidth * seriesList.length) / 2 +\n seriesIndex * barWidth +\n barWidth / 2;\n const y = plot.top + plot.height - height - 2;\n appendSvgText(svg, String(value), x, y, 3, '#A7AEB8', 'middle');\n });\n });\n}\n\nfunction renderLineValueLabels(\n svg: SVGSVGElement,\n seriesList: PptChartSeriesList,\n plot: { left: number; top: number; width: number; height: number },\n min: number,\n max: number,\n): void {\n seriesList.forEach((series) => {\n if (!series.showValueLabels || series.values.length === 0) return;\n series.values.forEach((value, pointIndex) => {\n const x =\n plot.left +\n (series.values.length === 1\n ? plot.width / 2\n : (plot.width * pointIndex) / (series.values.length - 1));\n const y = plot.top + plot.height - ((value - min) / Math.max(1, max - min)) * plot.height;\n appendSvgText(svg, String(value), x, Math.max(plot.top + 2, y - 2.2), 2.6, '#374151', 'middle');\n });\n });\n}\n\nfunction renderDoughnutChart(\n svg: SVGSVGElement,\n seriesList: PptChartSeriesList,\n plot: { left: number; top: number; width: number; height: number },\n): void {\n const series = seriesList[0];\n if (!series?.values.length) return;\n const colors = ['#1D4ED8', '#E3B363', '#60A5FA', '#94A3B8', '#F59E0B', '#22C7F2'];\n const total = series.values.reduce((sum, value) => sum + Math.max(0, value), 0) || 1;\n const cx = plot.left + plot.width * 0.42;\n const cy = plot.top + plot.height * 0.5;\n const radius = Math.min(plot.width, plot.height) * 0.34;\n const innerRadius = radius * 0.58;\n let angle = -90;\n series.values.forEach((value, index) => {\n const sweep = (Math.max(0, value) / total) * 360;\n const startAngle = angle;\n const endAngle = angle + sweep;\n appendDonutSlice(\n svg,\n cx,\n cy,\n radius,\n innerRadius,\n startAngle,\n endAngle,\n chartPointFill(series, index, colors),\n );\n if (series.showCategoryNameLabels || series.showPercentLabels || series.showValueLabels) {\n const labelLines = doughnutSliceLabelLines(series, value, index, total);\n if (labelLines.length > 0) {\n const point = doughnutLabelPoint(\n series,\n index,\n cx,\n cy,\n radius + 3.6,\n plot,\n (startAngle + endAngle) / 2,\n );\n appendSvgMultilineText(\n svg,\n labelLines,\n point.x,\n point.y,\n 1.9,\n '#334155',\n point.x >= cx ? 'start' : 'end',\n );\n }\n }\n angle += sweep;\n });\n appendSvgCircle(svg, cx, cy, innerRadius * 0.92, '#FFFFFF');\n const centerLabel = compactChartCenterLabel(series.name);\n if (centerLabel) appendSvgText(svg, centerLabel, cx, cy - 1.8, 1.8, '#64748B', 'middle');\n const first = series.values[0];\n if (first !== undefined)\n appendSvgText(\n svg,\n formatDoughnutCenterPercent(first, total),\n cx,\n cy + 3.4,\n 3.9,\n '#1E3A8A',\n 'middle',\n );\n renderLegend(svg, series.categories ?? [], colors, plot.left + plot.width * 0.72, plot.top + 9);\n}\n\nfunction doughnutSliceLabelLines(\n series: PptChartSeries,\n value: number,\n index: number,\n total: number,\n): string[] {\n const parts: string[] = [];\n const category = series.categories?.[index];\n if (series.showCategoryNameLabels && category) parts.push(category);\n if (series.showValueLabels) parts.push(formatChartTick(value));\n if (series.showPercentLabels) parts.push(formatDoughnutCenterPercent(value, total));\n return parts;\n}\n\nfunction doughnutLabelPoint(\n series: PptChartSeries,\n index: number,\n cx: number,\n cy: number,\n fallbackRadius: number,\n plot: { width: number; height: number },\n fallbackAngle: number,\n): { x: number; y: number } {\n void series;\n void index;\n void plot;\n return polarPoint(cx, cy, fallbackRadius, fallbackAngle);\n}\n\nfunction formatDoughnutCenterPercent(value: number, total: number): string {\n const ratio = value > 0 && value <= 1 && total <= 2 ? value : value / Math.max(1, total);\n const percent = ratio * 100;\n return `${Number.isInteger(percent) ? percent.toFixed(0) : percent.toFixed(1)}%`;\n}\n\nfunction compactChartCenterLabel(value: string | undefined): string {\n const text = (value ?? '').trim();\n if (!text) return '';\n const chars = Array.from(text);\n if (chars.length <= 6) return text;\n return `${chars.slice(0, 5).join('')}…`;\n}\n\nfunction renderRadarChart(\n svg: SVGSVGElement,\n seriesList: PptChartSeriesList,\n plot: { left: number; top: number; width: number; height: number },\n max: number,\n): void {\n const series = seriesList[0];\n if (!series?.values.length) return;\n const count = series.values.length;\n const cx = plot.left + plot.width * 0.48;\n const cy = plot.top + plot.height * 0.5;\n const radius = Math.min(plot.width, plot.height) * 0.35;\n for (let ring = 1; ring <= 4; ring++) {\n appendSvgPath(svg, radarPolygon(count, cx, cy, (radius * ring) / 4, true), '#CBD5E1', 0.25);\n }\n for (let index = 0; index < count; index++) {\n const point = radarPoint(index, count, cx, cy, radius);\n appendSvgLine(svg, cx, cy, point.x, point.y, '#E2E8F0', 0.25);\n }\n seriesList.forEach((item, seriesIndex) => {\n if (!item.values.length) return;\n const valuePoints = item.values\n .slice(0, count)\n .map((value, index) =>\n radarPoint(index, count, cx, cy, (Math.max(0, value) / Math.max(1, max)) * radius),\n );\n const area = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n area.setAttribute(\n 'd',\n valuePoints\n .map((point, index) => `${index === 0 ? 'M' : 'L'} ${point.x} ${point.y}`)\n .join(' ') + ' Z',\n );\n area.setAttribute('fill', seriesIndex === 0 ? 'rgba(37, 99, 235, 0.08)' : 'none');\n area.setAttribute('stroke', item.lineColor ?? '#2563EB');\n area.setAttribute('stroke-width', String(chartSeriesLineWidth(item, undefined)));\n svg.append(area);\n if (item.marker && item.marker.symbol !== 'none') {\n valuePoints.forEach((point) =>\n appendSvgCircle(svg, point.x, point.y, 0.9, item.lineColor ?? '#2563EB'),\n );\n }\n if (item.showValueLabels) {\n item.values.slice(0, count).forEach((value, index) => {\n const point = valuePoints[index]!;\n appendSvgText(\n svg,\n formatChartTick(value),\n point.x,\n point.y - 1.2,\n 2.2,\n item.lineColor ?? '#2563EB',\n 'middle',\n );\n });\n }\n });\n (series.categories ?? []).slice(0, count).forEach((category, index) => {\n const point = radarPoint(index, count, cx, cy, radius + 5);\n appendSvgText(svg, category, point.x, point.y + 1, 2.6, '#64748B', 'middle');\n });\n}\n\nfunction appendDonutSlice(\n svg: SVGSVGElement,\n cx: number,\n cy: number,\n outerRadius: number,\n innerRadius: number,\n startAngle: number,\n endAngle: number,\n color: string,\n): void {\n const sweep = Math.max(0.01, endAngle - startAngle);\n const largeArc = sweep > 180 ? 1 : 0;\n const startOuter = polarPoint(cx, cy, outerRadius, startAngle);\n const endOuter = polarPoint(cx, cy, outerRadius, endAngle);\n const startInner = polarPoint(cx, cy, innerRadius, endAngle);\n const endInner = polarPoint(cx, cy, innerRadius, startAngle);\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n path.setAttribute(\n 'd',\n [\n `M ${startOuter.x} ${startOuter.y}`,\n `A ${outerRadius} ${outerRadius} 0 ${largeArc} 1 ${endOuter.x} ${endOuter.y}`,\n `L ${startInner.x} ${startInner.y}`,\n `A ${innerRadius} ${innerRadius} 0 ${largeArc} 0 ${endInner.x} ${endInner.y}`,\n 'Z',\n ].join(' '),\n );\n path.setAttribute('fill', color);\n svg.append(path);\n}\n\nfunction renderLegend(\n svg: SVGSVGElement,\n labels: string[],\n colors: string[],\n x: number,\n y: number,\n): void {\n labels.slice(0, 6).forEach((label, index) => {\n appendSvgRect(svg, x, y + index * 5, 2.4, 2.4, colors[index % colors.length]!);\n appendSvgText(svg, label, x + 3.6, y + index * 5 + 2.2, 2.7, '#334155');\n });\n}\n\nfunction radarPolygon(\n count: number,\n cx: number,\n cy: number,\n radius: number,\n closed: boolean,\n): string {\n return (\n Array.from({ length: count }, (_, index) => {\n const point = radarPoint(index, count, cx, cy, radius);\n return `${index === 0 ? 'M' : 'L'} ${point.x} ${point.y}`;\n }).join(' ') + (closed ? ' Z' : '')\n );\n}\n\nfunction radarPoint(\n index: number,\n count: number,\n cx: number,\n cy: number,\n radius: number,\n): { x: number; y: number } {\n return polarPoint(cx, cy, radius, -90 + (360 * index) / count);\n}\n\nfunction polarPoint(\n cx: number,\n cy: number,\n radius: number,\n angle: number,\n): { x: number; y: number } {\n const radians = (angle * Math.PI) / 180;\n return { x: cx + Math.cos(radians) * radius, y: cy + Math.sin(radians) * radius };\n}\n\nfunction appendSvgLine(\n svg: SVGSVGElement,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n color: string,\n width: number,\n opacity?: number,\n cap?: string,\n): void {\n const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n line.setAttribute('x1', String(x1));\n line.setAttribute('y1', String(y1));\n line.setAttribute('x2', String(x2));\n line.setAttribute('y2', String(y2));\n line.setAttribute('stroke', color);\n line.setAttribute('stroke-width', String(width));\n line.setAttribute('stroke-linecap', svgStrokeLineCap(cap));\n if (opacity !== undefined)\n line.setAttribute('stroke-opacity', String(Math.max(0, Math.min(1, opacity))));\n svg.append(line);\n}\n\nfunction svgStrokeLineCap(cap: string | undefined): 'butt' | 'round' | 'square' {\n if (cap === 'rnd') return 'round';\n if (cap === 'sq') return 'square';\n return 'butt';\n}\n\nfunction appendSvgPath(svg: SVGSVGElement, d: string, color: string, width: number): void {\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n path.setAttribute('d', d);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke', color);\n path.setAttribute('stroke-width', String(width));\n path.setAttribute('stroke-linejoin', 'round');\n path.setAttribute('stroke-linecap', 'round');\n svg.append(path);\n}\n\nfunction appendSvgCircle(\n svg: SVGSVGElement,\n cx: number,\n cy: number,\n r: number,\n color: string,\n stroke?: string,\n strokeWidth?: number,\n): void {\n const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n circle.setAttribute('cx', String(cx));\n circle.setAttribute('cy', String(cy));\n circle.setAttribute('r', String(r));\n circle.setAttribute('fill', color);\n if (stroke) circle.setAttribute('stroke', stroke);\n if (strokeWidth !== undefined) circle.setAttribute('stroke-width', String(strokeWidth));\n svg.append(circle);\n}\n\nfunction appendSvgArrow(\n svg: SVGSVGElement,\n x: number,\n y: number,\n direction: 'left' | 'right' | 'up' | 'down',\n length: number,\n width: number,\n color: string,\n opacity?: number,\n): void {\n const halfWidth = width / 2;\n const points =\n direction === 'right'\n ? [\n [x, y],\n [x - length, y - halfWidth],\n [x - length, y + halfWidth],\n ]\n : direction === 'left'\n ? [\n [x, y],\n [x + length, y - halfWidth],\n [x + length, y + halfWidth],\n ]\n : direction === 'down'\n ? [\n [x, y],\n [x - halfWidth, y - length],\n [x + halfWidth, y - length],\n ]\n : [\n [x, y],\n [x - halfWidth, y + length],\n [x + halfWidth, y + length],\n ];\n const polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');\n polygon.classList.add('coco-ppt-line-arrow');\n polygon.setAttribute('points', points.map((point) => point.join(',')).join(' '));\n polygon.setAttribute('fill', color);\n if (opacity !== undefined)\n polygon.setAttribute('fill-opacity', String(Math.max(0, Math.min(1, opacity))));\n svg.append(polygon);\n}\n\nfunction appendSvgRect(\n svg: SVGSVGElement,\n x: number,\n y: number,\n width: number,\n height: number,\n color: string,\n stroke?: string,\n strokeWidth?: number,\n): void {\n const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n rect.setAttribute('x', String(x));\n rect.setAttribute('y', String(y));\n rect.setAttribute('width', String(width));\n rect.setAttribute('height', String(height));\n rect.setAttribute('fill', color);\n if (stroke && strokeWidth !== undefined) {\n rect.setAttribute('stroke', stroke);\n rect.setAttribute('stroke-width', String(strokeWidth));\n }\n svg.append(rect);\n}\n\nfunction appendSvgText(\n svg: SVGSVGElement,\n text: string,\n x: number,\n y: number,\n size: number,\n color: string,\n anchor: 'start' | 'middle' | 'end' = 'start',\n): void {\n const node = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('x', String(x));\n node.setAttribute('y', String(y));\n node.setAttribute('font-size', String(size));\n node.setAttribute('fill', color);\n node.setAttribute('text-anchor', anchor);\n node.textContent = text;\n svg.append(node);\n}\n\nfunction appendSvgMultilineText(\n svg: SVGSVGElement,\n lines: string[],\n x: number,\n y: number,\n size: number,\n color: string,\n anchor: 'start' | 'middle' | 'end' = 'start',\n): void {\n lines.forEach((line, index) => {\n appendSvgText(svg, line, x, y + index * size * 1.2, size, color, anchor);\n });\n}\n"]}