persian-data-grid 0.6.0 → 0.7.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 (137) hide show
  1. package/README.md +1 -1
  2. package/dist/{ERPTableGroupRow-PSAPAHGL.js → ERPTableGroupRow-E5Q6FYDS.js} +4 -4
  3. package/dist/{ERPTableGroupRow-PSAPAHGL.js.map → ERPTableGroupRow-E5Q6FYDS.js.map} +1 -1
  4. package/dist/{ERPTableGroupRow-J5Z2LRC5.cjs → ERPTableGroupRow-F2IPDYL5.cjs} +9 -9
  5. package/dist/{ERPTableGroupRow-J5Z2LRC5.cjs.map → ERPTableGroupRow-F2IPDYL5.cjs.map} +1 -1
  6. package/dist/{GridPlugin-CJCaYnlw.d.ts → GridPlugin-Bewn0X51.d.ts} +1 -1
  7. package/dist/{GridPlugin-oxhq8AsM.d.cts → GridPlugin-DewWufGZ.d.cts} +1 -1
  8. package/dist/{GridSession-Bc7UIawO.d.ts → GridSession-CeIfVFck.d.ts} +142 -9
  9. package/dist/{GridSession-B-9lLcoB.d.cts → GridSession-CmQn2RnL.d.cts} +142 -9
  10. package/dist/GridSyncService-3JQLEY65.cjs +12 -0
  11. package/dist/{GridSyncService-TAPAHABV.cjs.map → GridSyncService-3JQLEY65.cjs.map} +1 -1
  12. package/dist/GridSyncService-GECXGEKL.js +3 -0
  13. package/dist/{GridSyncService-KTLB4KP3.js.map → GridSyncService-GECXGEKL.js.map} +1 -1
  14. package/dist/{PdfRenderer-CBg7hWNS.d.cts → PdfRenderer-B9FJaCo_.d.cts} +1 -1
  15. package/dist/{PdfRenderer-1HFh6UeR.d.ts → PdfRenderer-bN7ca_Aj.d.ts} +1 -1
  16. package/dist/{UITableController-DU8RopUM.d.ts → UITableController-C71LXBiX.d.ts} +48 -2
  17. package/dist/{UITableController-Cuwq481K.d.cts → UITableController-CIwnHIw8.d.cts} +48 -2
  18. package/dist/{VazirmatnPdfRenderer-BCMpC1zy.d.cts → VazirmatnPdfRenderer-CpCqA-Wh.d.cts} +2 -2
  19. package/dist/{VazirmatnPdfRenderer-Dz_G-m3c.d.ts → VazirmatnPdfRenderer-D46smncn.d.ts} +2 -2
  20. package/dist/adapters/arian-erp.cjs +16 -4
  21. package/dist/adapters/arian-erp.cjs.map +1 -1
  22. package/dist/adapters/arian-erp.d.cts +3 -1
  23. package/dist/adapters/arian-erp.d.ts +3 -1
  24. package/dist/adapters/arian-erp.js +11 -3
  25. package/dist/adapters/arian-erp.js.map +1 -1
  26. package/dist/{applyImportedRows-BO6yxoAN.d.cts → applyImportedRows-C2fWYoPy.d.cts} +3 -3
  27. package/dist/{applyImportedRows-D4zVY8uD.d.ts → applyImportedRows-Cqh_N_0k.d.ts} +3 -3
  28. package/dist/{applyRowVisibilityHandler-LXCOGESZ.cjs → applyRowVisibilityHandler-Q64ZFC7A.cjs} +7 -6
  29. package/dist/applyRowVisibilityHandler-Q64ZFC7A.cjs.map +1 -0
  30. package/dist/{applyRowVisibilityHandler-KS6TMCBN.js → applyRowVisibilityHandler-ZLZXQEGY.js} +6 -5
  31. package/dist/applyRowVisibilityHandler-ZLZXQEGY.js.map +1 -0
  32. package/dist/callbackRemoteApi-BYLjmSI6.d.ts +51 -0
  33. package/dist/callbackRemoteApi-Cv26MmSD.d.cts +51 -0
  34. package/dist/{cellRenderContext-DB7V_mlu.d.ts → cellRenderContext-BaNh4qn_.d.ts} +2 -2
  35. package/dist/{cellRenderContext-DG5BOlxK.d.cts → cellRenderContext-DvngkptV.d.cts} +2 -2
  36. package/dist/{chunk-HTNJT2QU.js → chunk-27ALJSZP.js} +617 -104
  37. package/dist/chunk-27ALJSZP.js.map +1 -0
  38. package/dist/{chunk-KUBVDIF7.cjs → chunk-3HP3HQCW.cjs} +52 -17
  39. package/dist/chunk-3HP3HQCW.cjs.map +1 -0
  40. package/dist/{chunk-DXRCYW42.cjs → chunk-52LFOPXD.cjs} +43 -23
  41. package/dist/chunk-52LFOPXD.cjs.map +1 -0
  42. package/dist/{chunk-VVGYRZ7S.cjs → chunk-72IVAOTK.cjs} +4 -4
  43. package/dist/{chunk-VVGYRZ7S.cjs.map → chunk-72IVAOTK.cjs.map} +1 -1
  44. package/dist/{chunk-LJ7LMEXO.js → chunk-7GWV5HGO.js} +3 -3
  45. package/dist/{chunk-LJ7LMEXO.js.map → chunk-7GWV5HGO.js.map} +1 -1
  46. package/dist/{chunk-RM6ZWNT3.js → chunk-7T6AWRPU.js} +43 -23
  47. package/dist/chunk-7T6AWRPU.js.map +1 -0
  48. package/dist/{chunk-PXCHPZTP.cjs → chunk-CMQ4VLCW.cjs} +8 -7
  49. package/dist/{chunk-EHHHC5JV.js.map → chunk-CMQ4VLCW.cjs.map} +1 -1
  50. package/dist/chunk-E2J533UH.cjs +53 -0
  51. package/dist/chunk-E2J533UH.cjs.map +1 -0
  52. package/dist/chunk-F6EMC75A.cjs +34 -0
  53. package/dist/chunk-F6EMC75A.cjs.map +1 -0
  54. package/dist/chunk-GKE33FOJ.js +32 -0
  55. package/dist/chunk-GKE33FOJ.js.map +1 -0
  56. package/dist/{chunk-QQMU44KJ.js → chunk-HLOHWFOA.js} +52 -19
  57. package/dist/chunk-HLOHWFOA.js.map +1 -0
  58. package/dist/{chunk-633KP74Z.js → chunk-KCNTKYUY.js} +19 -2
  59. package/dist/chunk-KCNTKYUY.js.map +1 -0
  60. package/dist/{chunk-BLYVOV3G.cjs → chunk-LY27YAXE.cjs} +19 -2
  61. package/dist/chunk-LY27YAXE.cjs.map +1 -0
  62. package/dist/{chunk-EHHHC5JV.js → chunk-NB5GCGHL.js} +5 -4
  63. package/dist/chunk-NB5GCGHL.js.map +1 -0
  64. package/dist/{chunk-6XBXZPBW.js → chunk-NQUVAJQA.js} +3 -3
  65. package/dist/{chunk-6XBXZPBW.js.map → chunk-NQUVAJQA.js.map} +1 -1
  66. package/dist/chunk-SVO62ZV2.js +50 -0
  67. package/dist/chunk-SVO62ZV2.js.map +1 -0
  68. package/dist/{chunk-MU3RY46O.js → chunk-VBAZ77Q4.js} +3 -3
  69. package/dist/{chunk-MU3RY46O.js.map → chunk-VBAZ77Q4.js.map} +1 -1
  70. package/dist/{chunk-H2LESGMX.cjs → chunk-VSAFQTW5.cjs} +4 -4
  71. package/dist/{chunk-H2LESGMX.cjs.map → chunk-VSAFQTW5.cjs.map} +1 -1
  72. package/dist/{chunk-2BJCRYOS.cjs → chunk-VYJQ2HTA.cjs} +5 -5
  73. package/dist/{chunk-2BJCRYOS.cjs.map → chunk-VYJQ2HTA.cjs.map} +1 -1
  74. package/dist/{chunk-IIISFUW4.cjs → chunk-WTHTVKVI.cjs} +621 -108
  75. package/dist/chunk-WTHTVKVI.cjs.map +1 -0
  76. package/dist/{createEngineGridQuery-Mt1hc33m.d.ts → createEngineGridQuery-BBkud5oE.d.ts} +61 -6
  77. package/dist/{createEngineGridQuery-Dmq3i5v3.d.cts → createEngineGridQuery-D-fgO_jg.d.cts} +61 -6
  78. package/dist/date-picker-jalali.cjs +17 -17
  79. package/dist/date-picker-jalali.d.cts +3 -3
  80. package/dist/date-picker-jalali.d.ts +3 -3
  81. package/dist/date-picker-jalali.js +1 -1
  82. package/dist/headless.cjs +102 -102
  83. package/dist/headless.d.cts +13 -9
  84. package/dist/headless.d.ts +13 -9
  85. package/dist/headless.js +4 -4
  86. package/dist/index.cjs +440 -382
  87. package/dist/index.cjs.map +1 -1
  88. package/dist/index.d.cts +34 -14
  89. package/dist/index.d.ts +34 -14
  90. package/dist/index.js +200 -143
  91. package/dist/index.js.map +1 -1
  92. package/dist/plugins/csv.cjs +3 -3
  93. package/dist/plugins/csv.d.cts +2 -2
  94. package/dist/plugins/csv.d.ts +2 -2
  95. package/dist/plugins/csv.js +2 -2
  96. package/dist/plugins/excel.cjs +11 -11
  97. package/dist/plugins/excel.d.cts +4 -4
  98. package/dist/plugins/excel.d.ts +4 -4
  99. package/dist/plugins/excel.js +3 -3
  100. package/dist/plugins/pdf/fonts/vazirmatn.cjs +6 -6
  101. package/dist/plugins/pdf/fonts/vazirmatn.d.cts +4 -4
  102. package/dist/plugins/pdf/fonts/vazirmatn.d.ts +4 -4
  103. package/dist/plugins/pdf/fonts/vazirmatn.js +3 -3
  104. package/dist/plugins/pdf.cjs +5 -5
  105. package/dist/plugins/pdf.d.cts +5 -5
  106. package/dist/plugins/pdf.d.ts +5 -5
  107. package/dist/plugins/pdf.js +2 -2
  108. package/dist/presence.d.cts +3 -3
  109. package/dist/presence.d.ts +3 -3
  110. package/dist/sync.cjs +2 -2
  111. package/dist/sync.d.cts +3 -3
  112. package/dist/sync.d.ts +3 -3
  113. package/dist/sync.js +1 -1
  114. package/package.json +3 -3
  115. package/dist/GridSyncService-KTLB4KP3.js +0 -3
  116. package/dist/GridSyncService-TAPAHABV.cjs +0 -12
  117. package/dist/applyRowVisibilityHandler-KS6TMCBN.js.map +0 -1
  118. package/dist/applyRowVisibilityHandler-LXCOGESZ.cjs.map +0 -1
  119. package/dist/callbackRemoteApi-BlXO5NJz.d.ts +0 -30
  120. package/dist/callbackRemoteApi-DgnXH-i0.d.cts +0 -30
  121. package/dist/chunk-633KP74Z.js.map +0 -1
  122. package/dist/chunk-ASPTRYRD.cjs +0 -21
  123. package/dist/chunk-ASPTRYRD.cjs.map +0 -1
  124. package/dist/chunk-BHDRUZH5.cjs +0 -33
  125. package/dist/chunk-BHDRUZH5.cjs.map +0 -1
  126. package/dist/chunk-BLYVOV3G.cjs.map +0 -1
  127. package/dist/chunk-DXRCYW42.cjs.map +0 -1
  128. package/dist/chunk-HTNJT2QU.js.map +0 -1
  129. package/dist/chunk-IIISFUW4.cjs.map +0 -1
  130. package/dist/chunk-KUBVDIF7.cjs.map +0 -1
  131. package/dist/chunk-KYAOSBQN.js +0 -31
  132. package/dist/chunk-KYAOSBQN.js.map +0 -1
  133. package/dist/chunk-PXCHPZTP.cjs.map +0 -1
  134. package/dist/chunk-QQMU44KJ.js.map +0 -1
  135. package/dist/chunk-RM6ZWNT3.js.map +0 -1
  136. package/dist/chunk-Y6W5V2CI.js +0 -19
  137. package/dist/chunk-Y6W5V2CI.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/plugins/pdf/src/TextPdfRenderer.ts","../packages/plugins/pdf/src/PdfExportPlugin.ts","../packages/plugins/pdf/src/pdfBuilder.ts","../packages/plugins/pdf/src/parseTtf.ts","../packages/plugins/pdf/src/shapeRtl.ts","../packages/plugins/pdf/src/VazirmatnPdfRenderer.ts"],"names":["formatExportValue","downloadBlob","deflateSync"],"mappings":";;;;;;;AAUO,IAAM,kBAAN,MAA6C;AAAA,EAClD,MAAM,MAAA,CACJ,MAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,KAAA,GAAkB,CAAC,OAAA,EAAS,KAAA,IAAS,QAAQ,CAAA;AACnD,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAA;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,YAAA,IAAgB,CAAA,CAAE,SAAS,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC,CAAA;AAExE,IAAA,KAAA,MAAW,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG;AAC1C,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,IAAA,KAAS,OAAA,GAAU,SAAA,GAAO,EAAA;AAC7C,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,MAAA,GACE,OAAA,CACG,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,UAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AACpC,UAAA,MAAM,GAAA,GAAM,IAAA,EAAM,OAAA,IAAW,IAAA,EAAM,KAAA,IAAS,EAAA;AAC5C,UAAA,OAAOA,oCAAkB,GAAA,EAAK,GAAA,CAAI,SAAS,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,QAC1D,CAAC,CAAA,CACA,IAAA,CAAK,KAAK;AAAA,OACjB;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,KAAA,CACb,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AAChB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA;AACxC,MAAA,MAAM,CAAA,GAAI,MAAM,CAAA,GAAI,EAAA;AACpB,MAAA,OAAO,CAAA,gBAAA,EAAmB,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAA,OAAA,CAAA;AAAA,IACzC,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,IAAA,MAAM,MAAA,GAAS,OAAA;AACf,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,kDAAA;AAAA,MACA,0DAAA;AAAA,MACA,6HAAA;AAAA,MACA,CAAA,kBAAA,EAAqB,OAAO,MAAM,CAAA;AAAA,EAAc,MAAM;AAAA;AAAA;AAAA,CAAA;AAAA,MACtD;AAAA,KACF;AAEA,IAAA,IAAI,IAAA,GAAO,YAAA;AACX,IAAA,MAAM,OAAA,GAAoB,CAAC,CAAC,CAAA;AAC5B,IAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAA,CAAQ,IAAA,CAAK,KAAK,MAAM,CAAA;AACxB,MAAA,IAAA,IAAQ,GAAA;AAAA,IACV;AACA,IAAA,MAAM,YAAY,IAAA,CAAK,MAAA;AACvB,IAAA,IAAA,IAAQ,CAAA;AAAA,EAAA,EAAW,OAAA,CAAQ,SAAS,CAAC;AAAA,CAAA;AACrC,IAAA,IAAA,IAAQ,uBAAA;AACR,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,IAAK,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC3C,MAAA,IAAA,IAAQ,CAAA,EAAG,OAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAE,QAAA,CAAS,EAAA,EAAI,GAAG,CAAC,CAAA;AAAA,CAAA;AAAA,IACjD;AACA,IAAA,IAAA,IAAQ,CAAA,gBAAA,EAAmB,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;AAAA,CAAA;AAC7C,IAAA,IAAA,IAAQ,CAAA;AAAA,EAAc,SAAS;AAAA;AAAA,CAAA;AAE/B,IAAA,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,IAAA,EAAM,mBAAmB,CAAA;AAAA,EACrD;AACF;;;ACvCO,IAAM,kBAAN,MAA4C;AAAA,EAKjD,WAAA,CAA6B,OAAA,GAAkC,EAAC,EAAG;AAAtC,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAJ7B,IAAA,IAAA,CAAS,IAAA,GAAO,YAAA;AAChB,IAAA,IAAA,CAAQ,KAAA,GAA6B,IAAA;AAInC,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,QAAA,IAAY,IAAI,eAAA,EAAgB;AAAA,EAC1D;AAAA,EAEA,SAAS,GAAA,EAA8B;AACrC,IAAA,IAAA,CAAK,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,YAAA,CAAa,CAAC,KAAA,KAAU;AAC3C,MAAA,KAAK,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,KAAA,IAAQ;AACb,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,EACf;AAAA,EAEA,MAAc,OAAA,CACZ,GAAA,EACA,KAAA,EACe;AACf,IAAA,IAAI,KAAA,CAAM,SAAS,kBAAA,EAAoB;AACvC,IAAA,IAAI,KAAA,CAAM,OAAA,KAAY,GAAA,CAAI,OAAA,EAAS;AAEnC,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,IAAA,IAAI,OAAA,CAAQ,WAAW,KAAA,EAAO;AAE9B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAM,eAAA;AAAA,QACvB,QAAQ,eAAA,IAAmB;AAAA,OAC7B;AACA,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,MACpC;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,MAAA,EAAQ;AAAA,QAC9C,KAAA,EAAO,QAAQ,QAAA,IAAY,QAAA;AAAA,QAC3B,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,QAAA,EAAU,KAAK,OAAA,CAAQ;AAAA,OACxB,CAAA;AAED,MAAA,MAAM,QAAA,GACJ,OAAA,CAAQ,QAAA,IACR,CAAA,OAAA,EAAA,iBAAU,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,IAAA,CAAA;AACjD,MAAA,MAAM,QAAA,GAAW,OAAO,IAAA,CAAK,MAAA;AAE7B,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,QAAA,KAAa,KAAA,EAAO;AACnC,QAAAC,8BAAA,CAAa,MAAM,QAAQ,CAAA;AAAA,MAC7B;AACA,MAAA,IAAA,CAAK,QAAQ,MAAA,GAAS,IAAA,EAAM,EAAE,QAAA,EAAU,UAAU,CAAA;AAElD,MAAA,MAAM,GAAA,CAAI,IAAI,OAAA,CAAQ;AAAA,QACpB,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,CAAA,OAAA,CAAA;AAAA,QACtB,IAAA,EAAM,sBAAA;AAAA,QACN,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,QAAA,EAAU,CAAA,MAAA,EAAS,GAAA,CAAI,OAAO,CAAA,KAAA,CAAA;AAAA,QAC9B,OAAA,EAAS,CAAA;AAAA,QACT,UAAA,EAAY,KAAK,GAAA,EAAI;AAAA,QACrB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,KAAA;AAAA,UACR,QAAA;AAAA,UACA,MAAA,EAAQ;AAAA;AACV,OACD,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,MAAM,GAAA,CAAI,IAAI,OAAA,CAAQ;AAAA,QACpB,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,CAAA,SAAA,CAAA;AAAA,QACtB,IAAA,EAAM,mBAAA;AAAA,QACN,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,QAAA,EAAU,CAAA,MAAA,EAAS,GAAA,CAAI,OAAO,CAAA,KAAA,CAAA;AAAA,QAC9B,OAAA,EAAS,CAAA;AAAA,QACT,UAAA,EAAY,KAAK,GAAA,EAAI;AAAA,QACrB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,KAAA;AAAA,UACR,IAAA,EAAM,OAAA,KAAY,kBAAA,GAAqB,OAAA,GAAU,eAAA;AAAA,UACjD;AAAA;AACF,OACD,CAAA;AAAA,IACH;AAAA,EACF;AACF;ACpHA,IAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAEhC,SAAS,OAAO,MAAA,EAAkC;AAChD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,KAAA,IAAS,CAAA,CAAE,MAAA;AACnC,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,KAAK,CAAA;AAChC,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,GAAA,CAAI,GAAA,CAAI,GAAG,CAAC,CAAA;AACZ,IAAA,CAAA,IAAK,CAAA,CAAE,MAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,MAAM,CAAA,EAAmB;AAChC,EAAA,OAAO,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,IAAI,GAAG,CAAA;AACnC;AAEO,IAAM,aAAN,MAAiB;AAAA,EAAjB,WAAA,GAAA;AACL,IAAA,IAAA,CAAiB,UAAwB,EAAC;AAAA,EAAA;AAAA,EAE1C,SAAS,IAAA,EAAsB;AAC7B,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACtC,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA;AAAA,EACtB;AAAA,EAEA,YAAA,CAAa,QAAgB,IAAA,EAAoB;AAC/C,IAAA,IAAA,CAAK,QAAQ,MAAA,GAAS,CAAC,CAAA,GAAI,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,EAChD;AAAA,EAEA,QAAA,CAAS,YAAA,EAA0B,SAAA,GAAY,EAAA,EAAY;AACzD,IAAA,MAAM,aAAaC,kBAAA,CAAY,YAAA,EAAc,EAAE,KAAA,EAAO,GAAG,CAAA;AACzD,IAAA,MAAM,IAAA,GAAO,CAAA,gCAAA,EAAmC,UAAA,CAAW,MAAM,IAAI,SAAS,CAAA,EAAA,CAAA;AAC9E,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,CAAU,CAAA;AAC/C,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,eAAe,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAA,CAAO,CAAC,QAAQ,UAAA,EAAY,IAAI,CAAC,CAAC,CAAA;AACpD,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA;AAAA,EACtB;AAAA;AAAA,EAGA,YAAA,CAAa,MAAkB,IAAA,EAAsB;AACnD,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,IAAI;AAAA;AAAA,CAAY,CAAA;AACjD,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,eAAe,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAA,CAAO,CAAC,QAAQ,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;AAC9C,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA;AAAA,EACtB;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,MAAM,KAAA,GAAsB,CAAC,OAAA,CAAQ,MAAA,CAAO,+BAA+B,CAAC,CAAA;AAC5E,IAAA,MAAM,OAAA,GAAU,CAAC,CAAC,CAAA;AAClB,IAAA,IAAI,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA;AACnB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC/C,MAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAChB,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,IAAI,CAAC,CAAA;AAAA,CAAU,CAAA;AAC9C,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA;AACtC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AAC3B,MAAA,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAC3B,MAAA,GAAA,IAAO,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA;AAAA,IAC1C;AACA,IAAA,MAAM,SAAA,GAAY,GAAA;AAClB,IAAA,IAAI,IAAA,GAAO,CAAA;AAAA,EAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAC;AAAA;AAAA,CAAA;AAC7C,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,IAAK,KAAK,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,IAAA,IAAQ,GAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAC,CAAC,CAAA;AAAA,CAAA;AAAA,IACnC;AACA,IAAA,IAAA,IAAQ,CAAA,gBAAA,EAAmB,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;AAAA,CAAA;AAClD,IAAA,IAAA,IAAQ,CAAA;AAAA,EAAc,SAAS;AAAA;AAAA,CAAA;AAC/B,IAAA,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAC/B,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF,CAAA;AAEO,SAAS,iBAAiB,IAAA,EAAiC;AAChE,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AACjE;;;ACtDA,SAAS,GAAA,CAAI,KAAiB,MAAA,EAAwB;AACpD,EAAA,OAAQ,IAAI,MAAM,CAAA,IAAK,CAAA,GAAK,GAAA,CAAI,SAAS,CAAC,CAAA;AAC5C;AAEA,SAAS,GAAA,CAAI,KAAiB,MAAA,EAAwB;AACpD,EAAA,OAAA,CACI,IAAI,MAAM,CAAA,IAAK,EAAA,GAAO,GAAA,CAAI,SAAS,CAAC,CAAA,IAAK,EAAA,GAAO,GAAA,CAAI,SAAS,CAAC,CAAA,IAAK,IAAK,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,MACxF,CAAA;AAEJ;AAEA,SAAS,GAAA,CAAI,KAAiB,MAAA,EAAwB;AACpD,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,GAAA,EAAK,MAAM,CAAA;AACzB,EAAA,OAAO,CAAA,GAAI,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ,CAAA;AACjC;AAEA,SAAS,KAAA,CAAM,KAAiB,MAAA,EAAwB;AACtD,EAAA,OAAO,OAAO,YAAA,CAAa,GAAA,CAAI,MAAM,CAAA,EAAG,IAAI,MAAA,GAAS,CAAC,CAAA,EAAG,GAAA,CAAI,SAAS,CAAC,CAAA,EAAG,GAAA,CAAI,MAAA,GAAS,CAAC,CAAC,CAAA;AAC3F;AAEA,SAAS,SAAS,GAAA,EAAkE;AAClF,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AAC5B,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAgD;AACnE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,KAAK,CAAA,EAAG;AACrC,IAAA,MAAM,CAAA,GAAI,KAAK,CAAA,GAAI,EAAA;AACnB,IAAA,MAAA,CAAO,IAAI,KAAA,CAAM,GAAA,EAAK,CAAC,CAAA,EAAG,EAAE,QAAQ,GAAA,CAAI,GAAA,EAAK,CAAA,GAAI,CAAC,GAAG,MAAA,EAAQ,GAAA,CAAI,KAAK,CAAA,GAAI,EAAE,GAAG,CAAA;AAAA,EACjF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,SAAA,CAAU,KAAiB,UAAA,EAA8C;AAChF,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,GAAA,EAAK,UAAA,GAAa,CAAC,CAAA;AACzC,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,KAAK,CAAA,EAAG;AACrC,IAAA,MAAM,GAAA,GAAM,UAAA,GAAa,CAAA,GAAI,CAAA,GAAI,CAAA;AACjC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,GAAA,EAAK,GAAG,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,GAAA,EAAK,GAAA,GAAM,CAAC,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,UAAA,GAAa,GAAA,CAAI,GAAA,EAAK,MAAM,CAAC,CAAA;AAC5C,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,EAAK,MAAM,CAAA;AAC9B,IAAA,IAAI,WAAW,EAAA,KAAO,QAAA,KAAa,CAAA,IAAK,QAAA,KAAa,IAAI,QAAA,GAAW,MAAA;AACpE,IAAA,IAAI,WAAW,CAAA,KAAM,QAAA,KAAa,KAAK,QAAA,KAAa,CAAA,CAAA,IAAM,YAAY,CAAA,EAAG;AACvE,MAAA,OAAA,GAAU,MAAA;AAAA,IACZ;AAAA,EACF;AAEA,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,GAAA,EAAK,QAAA,GAAW,EAAE,CAAA;AACtC,IAAA,MAAM,SAA+D,EAAC;AACtE,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,EAAS,KAAK,CAAA,EAAG;AACnC,MAAA,MAAM,CAAA,GAAI,QAAA,GAAW,EAAA,GAAK,CAAA,GAAI,EAAA;AAC9B,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,KAAA,EAAO,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AAAA,QACjB,GAAA,EAAK,GAAA,CAAI,GAAA,EAAK,CAAA,GAAI,CAAC,CAAA;AAAA,QACnB,KAAA,EAAO,GAAA,CAAI,GAAA,EAAK,CAAA,GAAI,CAAC;AAAA,OACtB,CAAA;AAAA,IACH;AACA,IAAA,OAAO,CAAC,IAAA,KAAiB;AACvB,MAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,QAAA,IAAI,IAAA,IAAQ,CAAA,CAAE,KAAA,IAAS,IAAA,IAAQ,CAAA,CAAE,KAAK,OAAO,CAAA,CAAE,KAAA,IAAS,IAAA,GAAO,CAAA,CAAE,KAAA,CAAA;AAAA,MACnE;AACA,MAAA,OAAO,CAAA;AAAA,IACT,CAAA;AAAA,EACF;AAEA,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,MAAM,CAAA;AAAA,EACf;AAEA,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,GAAA,EAAK,OAAA,GAAU,CAAC,CAAA,GAAI,CAAA;AACzC,EAAA,MAAM,WAAW,OAAA,GAAU,EAAA;AAC3B,EAAA,MAAM,UAAA,GAAa,QAAA,GAAW,CAAA,GAAI,QAAA,GAAW,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,aAAa,QAAA,GAAW,CAAA;AACzC,EAAA,MAAM,cAAA,GAAiB,WAAW,QAAA,GAAW,CAAA;AAE7C,EAAA,OAAO,CAAC,IAAA,KAAiB;AACvB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,KAAK,CAAA,EAAG;AACpC,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,EAAK,QAAA,GAAW,IAAI,CAAC,CAAA;AACrC,MAAA,IAAI,OAAO,GAAA,EAAK;AAChB,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,EAAK,UAAA,GAAa,IAAI,CAAC,CAAA;AACzC,MAAA,IAAI,IAAA,GAAO,OAAO,OAAO,CAAA;AACzB,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,GAAA,EAAK,cAAA,GAAiB,IAAI,CAAC,CAAA;AACnD,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,EAAK,QAAA,GAAW,IAAI,CAAC,CAAA;AACvC,MAAA,IAAI,WAAA,KAAgB,CAAA,EAAG,OAAQ,IAAA,GAAO,KAAA,GAAS,KAAA;AAC/C,MAAA,MAAM,cACJ,cAAA,GAAiB,CAAA,GAAI,CAAA,GAAI,WAAA,GAAA,CAAe,OAAO,KAAA,IAAS,CAAA;AAC1D,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,EAAK,WAAW,CAAA;AAClC,MAAA,IAAI,KAAA,KAAU,GAAG,OAAO,CAAA;AACxB,MAAA,OAAQ,QAAQ,KAAA,GAAS,KAAA;AAAA,IAC3B;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAA;AACF;AAEO,SAAS,SAAS,KAAA,EAA8B;AACrD,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA;AAC9B,EAAA,IAAI,CAAC,QAAQ,CAAC,IAAA,IAAQ,CAAC,IAAA,IAAQ,CAAC,IAAA,IAAQ,CAAC,IAAA,EAAM;AAC7C,IAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,EACxC;AAEA,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAC9C,EAAA,MAAM,OAAA,GAAsB;AAAA,IAC1B,UAAA;AAAA,IACA,IAAA,EAAM,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,IACjC,IAAA,EAAM,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,IACjC,IAAA,EAAM,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,IACjC,IAAA,EAAM,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,IACjC,MAAA,EAAQ,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IAClC,OAAA,EAAS,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IACnC,WAAA,EAAa,CAAA;AAAA,IACb,SAAA,EAAW,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,SAAS,CAAC;AAAA,GACvC;AAEA,EAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,IAAI,WAAA,CAAY,OAAA,CAAQ,SAAS,CAAA;AAClD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,gBAAA,EAAkB,KAAK,CAAA,EAAG;AAC5C,IAAA,QAAA,CAAS,CAAC,CAAA,GAAI,GAAA,CAAI,OAAO,IAAA,CAAK,MAAA,GAAS,IAAI,CAAC,CAAA;AAAA,EAC9C;AACA,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,gBAAA,GAAmB,CAAC,KAAK,OAAA,CAAQ,UAAA;AAC9D,EAAA,KAAA,IAAS,IAAI,gBAAA,EAAkB,CAAA,GAAI,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAA,EAAG;AAC5D,IAAA,QAAA,CAAS,CAAC,CAAA,GAAI,WAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AAC5C,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ,QAAA,CAAS,GAAG,CAAA,IAAK;AAAA,GACrC;AACF;AAEO,SAAS,QAAA,CAAS,SAAiB,UAAA,EAA4B;AACpE,EAAA,OAAQ,UAAU,GAAA,GAAQ,UAAA;AAC5B;;;ACzJA,IAAM,KAAA,GAA+B;AAAA,EACnC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM,CAAA;AAAA,EACvC,IAAA,EAAQ,CAAC,KAAA,EAAQ,KAAA,EAAQ,OAAQ,KAAM;AACzC,CAAA;AAEA,IAAM,UAAA,uBAAiB,GAAA,CAAI;AAAA,EACzB,IAAA;AAAA,EAAQ,IAAA;AAAA,EAAQ,IAAA;AAAA,EAAQ,IAAA;AAAA,EAAQ,IAAA;AAAA,EAAQ,IAAA;AAAA,EAAQ,IAAA;AAAA,EAAQ,IAAA;AAAA,EAAQ;AAClE,CAAC,CAAA;AAED,SAAS,UAAA,CAAW,IAAY,IAAA,EAAiC;AAC/D,EAAA,IAAI,CAAC,KAAA,CAAM,EAAE,CAAA,EAAG,OAAO,KAAA;AACvB,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA,SAAU,IAAA,KAAS,OAAA;AACxC,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,SAAS,EAAA,EAAqB;AACrC,EAAA,OAAO,EAAA,IAAM,KAAA;AACf;AAEO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,MAAM,GAAA,GAAM,CAAC,GAAG,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,EAAA,KAAO,EAAA,CAAG,WAAA,CAAY,CAAC,CAAA,IAAK,CAAC,CAAA;AACzD,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA,EAAG;AACtC,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAC,CAAA,IAAK,CAAA;AACrB,IAAA,MAAM,KAAA,GAAQ,MAAM,EAAE,CAAA;AACtB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,GAAA,CAAI,KAAK,EAAE,CAAA;AACX,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,CAAA,GAAI,CAAA;AACf,IAAA,OAAO,IAAA,IAAQ,CAAA,KAAM,GAAA,CAAI,IAAI,CAAA,KAAM,QAAU,GAAA,CAAI,IAAI,CAAA,KAAM,IAAA,CAAA,EAAS,IAAA,IAAQ,CAAA;AAC5E,IAAA,IAAI,OAAO,CAAA,GAAI,CAAA;AACf,IAAA,OAAO,IAAA,GAAO,GAAA,CAAI,MAAA,KAAW,GAAA,CAAI,IAAI,CAAA,KAAM,IAAA,IAAU,GAAA,CAAI,IAAI,CAAA,KAAM,IAAA,CAAA,EAAS,IAAA,IAAQ,CAAA;AACpF,IAAA,MAAM,SAAA,GAAY,IAAA,IAAQ,CAAA,IAAK,QAAA,CAAS,IAAI,IAAI,CAAA,IAAK,CAAC,CAAA,IAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,IAAK,GAAG,MAAM,CAAA;AAC5F,IAAA,MAAM,SAAA,GACJ,IAAA,GAAO,GAAA,CAAI,MAAA,IAAU,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,IAAK,CAAC,CAAA,IAAK,UAAA,CAAW,EAAA,EAAI,MAAM,CAAA;AACxE,IAAA,MAAM,OAAO,SAAA,IAAa,SAAA,GAAY,IAAI,SAAA,GAAY,CAAA,GAAI,YAAY,CAAA,GAAI,CAAA;AAC1E,IAAA,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,IAAK,EAAE,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,MAAA,CAAO,aAAA,CAAc,GAAG,GAAG,CAAA;AACpC;AAEA,IAAM,MAAA,GAAS,0BAAA;AAEf,SAAS,iBAAiB,CAAA,EAAmB;AAC3C,EAAA,OAAO,CAAC,GAAG,CAAC,EAAE,OAAA,EAAQ,CAAE,KAAK,EAAE,CAAA;AACjC;AAGO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,0BAA0B,CAAA;AACrD,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,GAAG,CAAA,IAAK,CAAA,EAAG,KAAK,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACzB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAA,CAAO,IAAA,CAAK,OAAO,IAAA,CAAK,IAAI,IAAI,IAAA,GAAO,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,MAAA,CAAO,KAAK,EAAE,CAAA;AACvB;;;ACzFA,IAAM,MAAA,GAAS,GAAA;AACf,IAAM,MAAA,GAAS,GAAA;AACf,IAAM,MAAA,GAAS,EAAA;AACf,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,QAAA,GAAW,CAAA;AACjB,IAAM,SAAA,GAAY,CAAA;AAClB,IAAM,KAAA,GAAQ,EAAA;AACd,IAAM,QAAA,GAAW,EAAA;AACjB,IAAM,QAAA,GAAW,EAAA;AACjB,IAAM,MAAA,GAAS,EAAA;AAEf,SAAS,QAAA,CAAS,KAAc,SAAA,EAA4B;AAC1D,EAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,IAAA,OAAO,MAAM,oBAAA,GAAQ,oBAAA;AAAA,EACvB;AACA,EAAA,OAAOF,mCAAA,CAAkB,KAAK,SAAS,CAAA;AACzC;AAEA,SAAS,OAAA,CAAQ,IAAA,EAAiB,IAAA,EAAc,IAAA,EAAsB;AACpE,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,WAAA,CAAY,CAAC,CAAA,IAAK,CAAA;AAChC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA;AAC3B,IAAA,CAAA,IAAK,SAAS,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,EAAG,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,EAC1D;AACA,EAAA,OAAQ,IAAI,IAAA,GAAQ,GAAA;AACtB;AAEA,SAAS,OAAA,CACP,IAAA,EACA,IAAA,EACA,IAAA,EACA,QAAA,EACQ;AACR,EAAA,IAAI,QAAQ,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,IAAK,UAAU,OAAO,IAAA;AAClD,EAAA,MAAM,QAAA,GAAW,KAAA;AACjB,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,IAAI,EAAA,GAAK,CAAC,GAAG,IAAI,CAAA,CAAE,MAAA;AACnB,EAAA,OAAO,KAAK,EAAA,EAAI;AACd,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAA,CAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAI,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GAAI,QAAA;AACjD,IAAA,IAAI,QAAQ,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA,IAAK,UAAU,EAAA,GAAK,GAAA;AAAA,cACvC,GAAA,GAAM,CAAA;AAAA,EAClB;AACA,EAAA,IAAI,EAAA,IAAM,GAAG,OAAO,QAAA;AACpB,EAAA,OAAO,CAAC,GAAG,IAAI,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GAAI,QAAA;AAC3C;AAEA,SAAS,MAAA,CAAO,MAAiB,IAAA,EAAwB;AACvD,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,WAAA,CAAY,CAAC,CAAA,IAAK,CAAA;AAChC,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAAwD;AAC7E,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,GAAA,EAAK,CAAA,CAAE,OAAO,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,MAAA,CAAO,SAAS,CAAA;AACpC,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,KAAK,GAAA,EAAK;AAC5C,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,IAAI,GAAG,CAAA;AACtC,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,YAAA,CAAc,CAAA;AACzC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,KAAA,EAAO;AAC9B,MAAA,MAAM,IAAI,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAC1C,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA,CAAE,SAAS,GAAA,GAAM,KAAA,GAAS,CAAA,GAAI,CAAA,EAAG,GAAG,CAAA;AAC7D,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,EAAI,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,IAC7B;AACA,IAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWP,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAOnB;AAEA,SAAS,YAAY,GAAA,EAA6B;AAChD,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC1E,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,IAAA,OAAO,MAAA,CAAO,aAAA,CAAc,CAAC,CAAA,GAAI,CAAA,GAAI,IAAA;AAAA,EACvC;AACA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,CAAA,GAAI,MAAA;AAAA,MACR,IACG,IAAA,EAAK,CACL,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAA,KAAM,MAAA,CAAO,8DAAA,CAAa,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA,CACxD,OAAA,CAAQ,MAAM,EAAE;AAAA,KACrB;AACA,IAAA,OAAO,OAAO,QAAA,CAAS,CAAC,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAAA,EAC9C;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAAoD;AACxE,EAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,IAAQ,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAM,OAAO,IAAA;AACvE,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ;AAC3B,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAM;AACrB,MAAA,CAAA,IAAK,CAAA;AACL,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA;AAC1B,IAAA,MAAM,GAAA,GAAO,MAAM,CAAA,GAAI,CAAC,KAAM,CAAA,GAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAC9C,IAAA,IAAI,MAAA,KAAW,GAAA,IAAQ,MAAA,KAAW,GAAA,IAAQ,WAAW,GAAA,EAAM;AACzD,MAAA,MAAM,CAAA,GAAK,MAAM,CAAA,GAAI,CAAC,KAAM,CAAA,GAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAC5C,MAAA,MAAM,CAAA,GAAK,MAAM,CAAA,GAAI,CAAC,KAAM,CAAA,GAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAC5C,MAAA,OAAO,EAAE,GAAG,CAAA,EAAE;AAAA,IAChB;AACA,IAAA,CAAA,IAAK,CAAA,GAAI,GAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA;AACT;AAMO,IAAM,uBAAN,MAAkD;AAAA,EACvD,YAA6B,SAAA,EAAuB;AAAvB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAC3B,IAAA,IAAI,CAAC,WAAW,UAAA,EAAY;AAC1B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,CACJ,MAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACpC,IAAA,MAAM,GAAA,GAAM,SAAS,SAAA,KAAc,KAAA;AACnC,IAAA,MAAM,WAAW,OAAA,EAAS,QAAA;AAC1B,IAAA,MAAM,KAAA,GACJ,QAAA,EAAU,MAAA,EAAQ,KAAA,IAAS,SAAS,KAAA,IAAS,mDAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,OAAO,CAAA;AACpE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,MAAM,CAAA;AAC3C,IAAA,MAAM,UAAA,GAAa,SAAS,MAAA,GAAS,CAAA;AACrC,IAAA,MAAM,OAAO,UAAA,GAAa,QAAA;AAC1B,IAAA,MAAM,OAAgD,EAAC;AAEvD,IAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAiB;AAC7B,MAAA,MAAM,MAAA,GAAS,GAAA,GAAM,SAAA,CAAU,IAAI,CAAA,GAAI,IAAA;AACvC,MAAA,KAAA,MAAW,MAAM,MAAA,EAAQ;AACvB,QAAA,MAAM,EAAA,GAAK,EAAA,CAAG,WAAA,CAAY,CAAC,CAAA,IAAK,CAAA;AAChC,QAAA,IAAA,CAAK,IAAA,CAAK,EAAE,GAAA,EAAK,IAAA,CAAK,QAAQ,EAAE,CAAA,EAAG,OAAA,EAAS,EAAA,EAAI,CAAA;AAAA,MAClD;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,KAAK,KAAK,CAAA;AAC9B,IAAA,MAAM,cAAA,GAAiB,UAAU,MAAA,EAAQ,QAAA,GACrC,KAAK,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,GAC7B,IAAA;AACJ,IAAA,MAAM,WAAA,GAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAC,CAAA;AACrE,IAAA,MAAM,gBAAA,GAAmB,UAAU,MAAA,EAAQ,IAAA,GACvC,KAAK,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA,GACzB,IAAA;AACJ,IAAA,MAAM,OAAA,GAAU,QAAA,EAAU,MAAA,EAAQ,gBAAA,IAAoB,kBAAA;AACtD,IAAA,MAAM,cAAA,GACJ,QAAA,IAAY,IAAA,IAAQ,QAAA,CAAS,QAAQ,cAAA,KAAmB,KAAA;AAC1D,IAAA,MAAM,YAAA,GAAe,QAAA,IAAY,IAAA,IAAQ,QAAA,CAAS,iBAAA,KAAsB,KAAA;AACxE,IAAA,MAAM,iBAAA,GAAoB,UAAU,UAAA,GAChC,IAAA,CAAK,SAAS,UAAA,CAAW,KAAA,IAAS,6CAAU,CAAA,GAC5C,IAAA;AACJ,IAAA,MAAM,eAAA,GAAkB,UAAU,SAAA,GAC9B,IAAA,CAAK,SAAS,SAAA,CAAU,KAAA,IAAS,0BAAM,CAAA,GACvC,IAAA;AACJ,IAAA,MAAM,gBAAA,GAAmB,UAAU,KAAA,GAC/B,IAAA,CAAK,SAAS,KAAA,CAAM,KAAA,IAAS,oBAAK,CAAA,GAClC,IAAA;AAGJ,IAAA,IAAA,CAAK,cAAc,CAAA;AAEnB,IAAA,MAAM,UAAU,OAAA,CAAQ,GAAA;AAAA,MAAI,CAAC,CAAA,KAC3B,IAAA,CAAK,CAAA,CAAE,YAAA,IAAgB,EAAE,SAAS;AAAA,KACpC;AACA,IAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,GAAA;AAAA,MAAI,CAAC,GAAA,KAC5B,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACnB,QAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AACpC,QAAA,MAAM,GAAA,GAAM,IAAA,EAAM,OAAA,IAAW,IAAA,EAAM,KAAA,IAAS,EAAA;AAC5C,QAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,MAC1C,CAAC;AAAA,KACH;AACA,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACxC,MAAA,MAAM,GAAA,uBAAU,GAAA,EAA2B;AAC3C,MAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,QAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AACpC,QAAA,MAAM,GAAA,GAAM,IAAA,EAAM,KAAA,IAAS,IAAA,EAAM,OAAA,IAAW,EAAA;AAC5C,QAAA,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,SAAA,EAAW,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,MACzC;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,IAAI,SAAA,GAAY,QAAA,EAAU,IAAA,EAAM,KAAA,IAAS,EAAA;AACzC,IAAA,IAAI,SAAA,GAAY,QAAA,EAAU,IAAA,EAAM,MAAA,IAAU,EAAA;AAC1C,IAAA,IAAI,QAAA,EAAU,IAAA,EAAM,SAAA,EAAW,UAAA,EAAY;AACzC,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACjD,MAAA,IAAI,IAAA,IAAQ,QAAA,CAAS,IAAA,CAAK,MAAA,IAAU,IAAA,EAAM;AACxC,QAAA,SAAA,GAAY,IAAA,CAAK,KAAA,CAAO,SAAA,GAAY,IAAA,CAAK,CAAA,GAAK,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,MACnE;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,WACf,IAAA,CAAK,GAAA;AAAA,MACH,SAAA;AAAA,MACA,EAAA,IAAM,cAAA,GAAiB,EAAA,GAAK,CAAA,CAAA,GAAK,YAAY,MAAA,GAAS;AAAA,KACxD,GAAI,KACJ,UAAA,GAAa,EAAA;AACjB,IAAA,MAAM,UAAA,GACJ,QAAA,KAAa,gBAAA,IAAoB,cAAA,CAAA,GAAkB,WAAW,CAAA,GAAI,CAAA;AACpE,IAAA,MAAM,QAAA,GACJ,QAAA,KAAa,eAAA,IAAmB,gBAAA,CAAA,GAAoB,SAAS,CAAA,GAAI,CAAA;AACnE,IAAA,MAAM,UAAA,GAAa,QAAA,EAAU,UAAA,GAAa,KAAA,GAAQ,CAAA,GAAI,CAAA;AAEtD,IAAA,MAAM,MAAA,GAAS,CAAC,QAAA,KACd,MAAA,GACA,MAAA,GAAS,CAAA,GACT,UAAA,GACA,UAAA,IACC,YAAA,GAAe,QAAA,GAAW,CAAA,CAAA,GAC3B,UAAA,IACC,WAAW,QAAA,GAAW,CAAA,CAAA;AAEzB,IAAA,MAAM,gBAA0B,EAAC;AACjC,IAAA,IAAI,YAAY,IAAA,CAAK,MAAA;AACrB,IAAA,IAAI,cAAc,CAAA,EAAG;AACnB,MAAA,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,OAAO,YAAY,CAAA,EAAG;AACpB,QAAA,MAAM,eAAe,SAAA,IAAa,IAAA,CAAK,MAAM,MAAA,CAAO,KAAK,IAAI,KAAK,CAAA;AAClE,QAAA,MAAM,SAAS,IAAA,CAAK,GAAA;AAAA,UAClB,CAAA;AAAA,UACA,KAAK,KAAA,CAAM,MAAA,CAAO,gBAAgB,QAAA,GAAW,CAAC,IAAI,KAAK;AAAA,SACzD;AACA,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,MAAM,CAAA;AACvC,QAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AACvB,QAAA,SAAA,IAAa,IAAA;AACb,QAAA,IAAI,aAAA,CAAc,SAAS,GAAA,EAAQ;AAAA,MACrC;AACA,MAAA,IAAI,WAAW,CAAA,EAAG;AAChB,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,MAAM,MAAA,CAAO,IAAI,CAAA,GAAI,KAAK,CAAC,CAAA;AAC/D,QAAA,MAAM,OAAA,GAAU,cAAc,MAAA,GAAS,CAAA;AACvC,QAAA,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA,IAAK,CAAA,IAAK,UAAA,EAAY;AAC9C,UAAA,MAAM,QAAA,GAAA,CAAY,aAAA,CAAc,OAAO,CAAA,IAAK,CAAA,IAAK,UAAA;AACjD,UAAA,aAAA,CAAc,OAAO,CAAA,GAAI,UAAA;AACzB,UAAA,aAAA,CAAc,KAAK,QAAQ,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,cAAc,MAAM,CAAA;AAGlD,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA;AAAA,MAAK,EAAE,QAAQ,SAAA,EAAU;AAAA,MAAG,CAAC,GAAG,CAAA,KACvD,IAAA;AAAA,QACE,OAAA,CACG,OAAA,CAAQ,QAAA,EAAU,MAAA,CAAO,CAAA,GAAI,CAAC,CAAC,CAAA,CAC/B,OAAA,CAAQ,SAAA,EAAW,MAAA,CAAO,SAAS,CAAC;AAAA;AACzC,KACF;AACA,IAAA,MAAM,cAAA,GAA6B,aAAA,CAAc,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AAChE,MAAA,IAAI,CAAC,QAAA,EAAU,UAAA,IAAc,CAAC,iBAAA,SAA0B,EAAC;AACzD,MAAA,MAAM,KAAA,GAAQ,aAAA,CACX,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAC5B,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAQ,IAAI,CAAA;AACnD,MAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,MAAA,KAAA,MAAW,KAAA,IAAS,QAAA,CAAS,UAAA,CAAW,OAAA,EAAS;AAC/C,QAAA,IAAI,CAAA,GAAI,CAAA;AACR,QAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,UAAA,MAAM,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA;AACvB,UAAA,IAAI,CAAA,IAAK,MAAM,CAAA,IAAK,CAAA;AAAA,QACtB;AACA,QAAA,IAAA,CAAK,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,MACnB;AACA,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAK,MAAA,KAAW;AAClC,QAAA,MAAM,aAAa,QAAA,CAAS,UAAA,CAAY,OAAA,CAAQ,QAAA,CAAS,IAAI,SAAS,CAAA;AACtE,QAAA,IAAI,UAAA,EAAY,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,GAAA,CAAI,SAAS,CAAA,IAAK,CAAC,CAAC,CAAA;AAChE,QAAA,MAAM,WAAW,OAAA,CAAQ,SAAA;AAAA,UACvB,CAAC,MAAM,CAAC,QAAA,CAAS,WAAY,OAAA,CAAQ,QAAA,CAAS,EAAE,SAAS;AAAA,SAC3D;AACA,QAAA,IAAI,MAAA,MAAY,QAAA,IAAY,CAAA,GAAI,QAAA,GAAW,IAAI,OAAO,iBAAA;AACtD,QAAA,OAAO,EAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,MAAM,KAAA,GAAQ,MAAO,OAAA,CAAQ,UAAA;AAC7B,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAA,GAAO,KAAK,CAAA;AAAA,MAC/B,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAA,GAAO,KAAK,CAAA;AAAA,MAC/B,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAA,GAAO,KAAK,CAAA;AAAA,MAC/B,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAA,GAAO,KAAK;AAAA,KACjC;AACA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,KAAK,CAAA;AAChD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,UAAU,KAAK,CAAA;AAElD,IAAA,MAAM,WAAW,CAAC,GAAG,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,KAAQ;AACnC,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,QAAQ,GAAG,CAAA,EAAG,OAAA,CAAQ,UAAU,CAAC,CAAA;AACpE,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAA;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,IAAI,UAAA,EAAW;AAC3B,IAAA,GAAA,CAAI,SAAS,qCAAqC,CAAA;AAClD,IAAA,MAAM,QAAA,GAAW,CAAA;AACjB,IAAA,GAAA,CAAI,SAAS,wCAAwC,CAAA;AAErD,IAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AAAA,MACnB,IAAA,CAAK,KAAA;AAAA,MACL,CAAA,SAAA,EAAY,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAAA;AAAA,KAC/B;AACA,IAAA,MAAM,aAAa,GAAA,CAAI,QAAA;AAAA,MACrB,CAAA,mEAAA,EAAsE,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,yBAAA,EAA4B,MAAM,CAAA,UAAA,EAAa,OAAO,CAAA,YAAA,EAAe,MAAM,CAAA,sBAAA,EAAyB,QAAQ,CAAA;AAAA;AAAA,KAClM;AACA,IAAA,MAAM,UAAU,GAAA,CAAI,QAAA;AAAA,MAClB,wJAAwJ,UAAU,CAAA,iBAAA,EAAoB,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA;AAAA,KACxM;AACA,IAAA,MAAM,YAAY,GAAA,CAAI,QAAA;AAAA,MACpB,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,aAAA,CAAc,IAAI,CAAC;AAAA,KAC9C;AACA,IAAA,MAAM,QAAQ,GAAA,CAAI,QAAA;AAAA,MAChB,CAAA,4FAAA,EAA+F,OAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA;AAAA;AAAA,KACrI;AAEA,IAAA,IAAI,WAAA,GAA6B,IAAA;AACjC,IAAA,IAAI,QAAA,EAAU,IAAA,EAAM,SAAA,EAAW,UAAA,EAAY;AACzC,MAAA,MAAM,IAAA,GAAO,SAAS,IAAA,CAAK,SAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,aAAa,IAAI,CAAA,IAAK,EAAE,CAAA,EAAG,SAAA,EAAW,GAAG,SAAA,EAAU;AAChE,MAAA,WAAA,GAAc,GAAA,CAAI,YAAA;AAAA,QAChB,IAAA;AAAA,QACA,CAAA,yCAAA,EAA4C,KAAK,CAAC,CAAA,SAAA,EAAY,KAAK,CAAC,CAAA,uEAAA,EAA0E,KAAK,MAAM,CAAA,GAAA;AAAA,OAC3J;AAAA,IACF;AAEA,IAAA,MAAM,cAAwB,EAAC;AAE/B,IAAA,MAAM,WAAW,CACf,GAAA,EACA,IAAA,EACA,IAAA,EACA,GACA,CAAA,KACG;AACH,MAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AACb,MAAA,GAAA,CAAI,IAAA,CAAK,CAAA,IAAA,EAAO,IAAI,CAAA,GAAA,CAAK,CAAA;AACzB,MAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAK,CAAA;AAC7C,MAAA,GAAA,CAAI,IAAA,CAAK,IAAI,gBAAA,CAAiB,MAAA,CAAO,MAAM,IAAI,CAAC,CAAC,CAAA,IAAA,CAAM,CAAA;AACvD,MAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACf,CAAA;AAEA,IAAA,MAAM,WAAW,CACf,GAAA,EACA,KACA,GAAA,EACA,MAAA,EACA,MACA,MAAA,KACG;AACH,MAAA,MAAM,CAAA,GAAI,MACN,MAAA,GAAS,MAAA,GAAA,CAAU,MAAM,CAAA,IAAK,IAAA,GAC9B,SAAS,GAAA,GAAM,IAAA;AACnB,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,GAAA,CAAI,KAAK,QAAQ,CAAA;AACjB,QAAA,GAAA,CAAI,IAAA;AAAA,UACF,CAAA,EAAG,EAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAA,CAAK,GAAA,GAAM,QAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAC,CAAC,IAAI,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,KAAA;AAAA,SACtF;AACA,QAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,MAChB;AACA,MAAA,GAAA,CAAI,KAAK,eAAe,CAAA;AACxB,MAAA,GAAA,CAAI,IAAA;AAAA,QACF,CAAA,EAAG,EAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAA,CAAK,GAAA,GAAM,QAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAC,CAAC,IAAI,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,KAAA;AAAA,OACtF;AACA,MAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AACd,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,OAAO,CAAC,CAAA;AACtD,MAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAC1C,MAAA,MAAM,KAAK,GAAA,GAAM,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA;AACzC,MAAA,MAAM,EAAA,GAAK,MAAM,MAAA,GAAS,GAAA;AAC1B,MAAA,QAAA,CAAS,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,EAAE,CAAA;AAAA,IACzC,CAAA;AAEA,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,KAAK,CAAA,EAAG;AACrC,MAAA,MAAM,MAAgB,EAAC;AACvB,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,GAAY,CAAA;AACjC,MAAA,IAAI,IAAI,MAAA,GAAS,MAAA;AAEjB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,eAAe,IAAA,EAAM;AACvB,UAAA,MAAM,EAAA,GAAK,GAAA,GAAM,MAAA,GAAS,MAAA,GAAS,SAAA,GAAY,MAAA;AAC/C,UAAA,MAAM,KAAK,CAAA,GAAI,SAAA;AACf,UAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AACZ,UAAA,GAAA,CAAI,IAAA;AAAA,YACF,CAAA,EAAG,SAAS,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAA,EAAI,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,WAAA;AAAA,WACjE;AACA,UAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,QACd;AACA,QAAA,MAAM,WAAA,GAAc,GAAA,GAChB,MAAA,GACA,MAAA,IACC,WAAA,IAAe,IAAA,GAAO,SAAA,GAAY,EAAA,GAAK,CAAA,CAAA,GACxC,MAAA,IAAU,WAAA,IAAe,IAAA,GAAO,YAAY,EAAA,GAAK,CAAA,CAAA;AACrD,QAAA,IAAI,KAAK,CAAA,GAAI,EAAA;AACb,QAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,EAAM,WAAA,EAAa,UAAU,CAAA;AAChD,QAAA,QAAA;AAAA,UACE,GAAA;AAAA,UACA,WAAA;AAAA,UACA,UAAA;AAAA,UACA,GAAA,GAAM,cAAc,EAAA,GAAK,WAAA;AAAA,UACzB;AAAA,SACF;AACA,QAAA,EAAA,IAAM,EAAA;AACN,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,EAAM,cAAA,EAAgB,QAAQ,CAAA;AACjD,UAAA,QAAA;AAAA,YACE,GAAA;AAAA,YACA,cAAA;AAAA,YACA,QAAA;AAAA,YACA,GAAA,GAAM,cAAc,EAAA,GAAK,WAAA;AAAA,YACzB;AAAA,WACF;AACA,UAAA,EAAA,IAAM,EAAA;AAAA,QACR;AACA,QAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,UAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AACvC,UAAA,QAAA;AAAA,YACE,GAAA;AAAA,YACA,IAAA;AAAA,YACA,QAAA;AAAA,YACA,GAAA,GAAM,cAAc,EAAA,GAAK,WAAA;AAAA,YACzB;AAAA,WACF;AACA,UAAA,EAAA,IAAM,EAAA;AAAA,QACR;AACA,QAAA,CAAA,GAAI,SAAS,MAAA,GAAS,UAAA;AAAA,MACxB,CAAA,MAAO;AACL,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,EAAM,WAAA,EAAa,UAAU,CAAA;AACpD,QAAA,QAAA;AAAA,UACE,GAAA;AAAA,UACA,WAAA;AAAA,UACA,UAAA;AAAA,UACA,GAAA,GAAM,MAAA,GAAS,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,UACjC,CAAA,GAAI;AAAA,SACN;AACA,QAAA,CAAA,GAAI,SAAS,MAAA,GAAS,UAAA;AAAA,MACxB;AAEA,MAAA,IAAI,YAAA,IAAgB,MAAM,CAAA,EAAG;AAC3B,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,EAAG,GAAA,KAAQ,QAAA,CAAS,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,IAAI,CAAC,CAAA;AACpE,QAAA,CAAA,IAAK,QAAA;AAAA,MACP;AAEA,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAC,CAAA,IAAK,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,YAAY,IAAI,CAAA;AACpD,MAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,QAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,IAAA,EAAM,GAAA,KAAQ,QAAA,CAAS,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AACpE,QAAA,CAAA,IAAK,KAAA;AAAA,MACP;AAEA,MAAA,MAAM,QAAA,GAAW,eAAe,CAAC,CAAA;AACjC,MAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,QAAA,QAAA,CAAS,OAAA;AAAA,UAAQ,CAAC,MAAM,MAAA,KACtB,QAAA,CAAS,KAAK,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,IAAA,EAAM,IAAI;AAAA,SAC5C;AACA,QAAA,CAAA,IAAK,KAAA;AAAA,MACP;AAEA,MAAA,IAAI,MAAA,KAAW,mBAAmB,gBAAA,CAAA,EAAmB;AACnD,QAAA,MAAM,IAAA,GAAA,CAAQ,aAAa,EAAA,IAAM,CAAA;AACjC,QAAA,MAAM,OAAO,MAAA,GAAS,CAAA;AACtB,QAAA,MAAM,EAAA,GAAK,SAAS,UAAA,GAAa,CAAA;AACjC,QAAA,MAAM,QAA6C,EAAC;AACpD,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,IAAI,eAAA,EAAiB;AACnB,YAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,eAAA,EAAiB,GAAG,MAAA,GAAS,MAAA,GAAS,MAAM,CAAA;AAAA,UAClE;AACA,UAAA,IAAI,gBAAA,EAAkB;AACpB,YAAA,KAAA,CAAM,IAAA,CAAK;AAAA,cACT,KAAA,EAAO,gBAAA;AAAA,cACP,CAAA,EAAG,MAAA,GAAS,MAAA,GAAS,IAAA,GAAO,CAAA,GAAI;AAAA,aACjC,CAAA;AAAA,UACH;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAI,eAAA,QAAuB,IAAA,CAAK,EAAE,OAAO,eAAA,EAAiB,CAAA,EAAG,QAAQ,CAAA;AACrE,UAAA,IAAI,gBAAA,EAAkB;AACpB,YAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,gBAAA,EAAkB,GAAG,MAAA,GAAS,IAAA,GAAO,IAAI,CAAA;AAAA,UAC/D;AAAA,QACF;AACA,QAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,UAAA,GAAA,CAAI,KAAK,eAAe,CAAA;AACxB,UAAA,GAAA,CAAI,IAAA;AAAA,YACF,CAAA,EAAG,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,GAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAC,CAAC,IAAI,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,KAAA;AAAA,WAC5E;AACA,UAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AACd,UAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,EAAM,GAAA,CAAI,OAAO,QAAQ,CAAA;AAC5C,UAAA,QAAA;AAAA,YACE,GAAA;AAAA,YACA,GAAA,CAAI,KAAA;AAAA,YACJ,QAAA;AAAA,YACA,MAAM,GAAA,CAAI,CAAA,GAAI,OAAO,CAAA,GAAI,EAAA,GAAK,IAAI,CAAA,GAAI,CAAA;AAAA,YACtC,KAAK,IAAA,GAAO;AAAA,WACd;AACA,UAAA,MAAM,SAAA,GAAY,QAAA,EAAU,SAAA,EAAW,KAAA,IAAS,CAAA;AAChD,UAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,SAAA,EAAW,MAAM,CAAA,EAAG;AACxC,YAAA,MAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;AAC1B,YAAA,GAAA,CAAI,KAAK,aAAa,CAAA;AACtB,YAAA,GAAA,CAAI,IAAA;AAAA,cACF,CAAA,EAAA,CAAI,GAAA,CAAI,CAAA,GAAI,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAC,OAAO,GAAA,CAAI,CAAA,GAAI,IAAA,GAAO,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA;AAAA,aAChG;AACA,YAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,aAAa,CAAA,EAAG;AAClB,QAAA,MAAM,KAAK,MAAA,GAAS,CAAA;AACpB,QAAA,IAAI,gBAAA,EAAkB;AACpB,UAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,EAAM,gBAAA,EAAkB,QAAQ,CAAA;AACnD,UAAA,QAAA;AAAA,YACE,GAAA;AAAA,YACA,gBAAA;AAAA,YACA,QAAA;AAAA,YACA,GAAA,GAAM,MAAA,GAAS,MAAA,GAAS,EAAA,GAAK,MAAA;AAAA,YAC7B;AAAA,WACF;AAAA,QACF;AACA,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,KAAA,GAAQ,WAAW,CAAC,CAAA;AAC1B,UAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAA;AACxC,UAAA,QAAA;AAAA,YACE,GAAA;AAAA,YACA,KAAA;AAAA,YACA,QAAA;AAAA,YACA,GAAA,GAAM,MAAA,GAAS,MAAA,GAAS,MAAA,GAAS,EAAA;AAAA,YACjC;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,UAAU,GAAA,CAAI,QAAA;AAAA,QAClB,IAAI,aAAY,CAAE,MAAA,CAAO,IAAI,IAAA,CAAK,IAAI,IAAI,IAAI;AAAA,OAChD;AACA,MAAA,MAAM,OAAA,GACJ,WAAA,IAAe,IAAA,GAAO,CAAA,iBAAA,EAAoB,WAAW,CAAA,OAAA,CAAA,GAAY,EAAA;AACnE,MAAA,MAAM,SAAS,GAAA,CAAI,QAAA;AAAA,QACjB,CAAA,uBAAA,EAA0B,QAAQ,CAAA,oBAAA,EAAuB,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,YAAA,EAAe,OAAO,CAAA,gCAAA,EAAmC,KAAK,CAAA,QAAA,EAAW,OAAO,CAAA;AAAA;AAAA,OAC3J;AACA,MAAA,WAAA,CAAY,KAAK,MAAM,CAAA;AACvB,MAAA,SAAA,IAAa,IAAA;AAAA,IACf;AAEA,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,IAAA,CAAM,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACxD,IAAA,GAAA,CAAI,YAAA;AAAA,MACF,QAAA;AAAA,MACA,CAAA,uBAAA,EAA0B,IAAI,CAAA,SAAA,EAAY,WAAA,CAAY,MAAM,CAAA;AAAA;AAAA,KAC9D;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM;AACxB,IAAA,OAAO,IAAI,KAAK,CAAC,KAAK,GAAiB,EAAE,IAAA,EAAM,mBAAmB,CAAA;AAAA,EACpE;AACF","file":"chunk-2BJCRYOS.cjs","sourcesContent":["import type { ExportSource } from '../../../../application/plugins/GridPlugin';\r\nimport type { PdfRenderer } from '../../../../application/ports/PdfRenderer';\r\nimport { formatExportValue } from '../../excel/src/formatExportValue';\r\n\r\n/**\r\n * Legacy Helvetica PDF (8 columns × 40 rows). Kept for tests and Host opt-in.\r\n * Product default is {@link VazirmatnPdfRenderer}.\r\n *\r\n * @deprecated Use VazirmatnPdfRenderer.\r\n */\r\nexport class TextPdfRenderer implements PdfRenderer {\r\n async render(\r\n source: ExportSource,\r\n options?: { title?: string },\r\n ): Promise<Blob> {\r\n const lines: string[] = [options?.title ?? 'Export'];\r\n const columns = source.columns.slice(0, 8);\r\n lines.push(columns.map((c) => c.fieldCaption ?? c.fieldName).join(' | '));\r\n\r\n for (const row of source.rows.slice(0, 40)) {\r\n const prefix = row.kind === 'group' ? '▸ ' : '';\r\n lines.push(\r\n prefix +\r\n columns\r\n .map((col) => {\r\n const cell = row.cells[col.fieldName];\r\n const raw = cell?.display ?? cell?.value ?? '';\r\n return formatExportValue(raw, col.fieldType).slice(0, 24);\r\n })\r\n .join(' | '),\r\n );\r\n }\r\n\r\n const content = lines\r\n .map((line, i) => {\r\n const safe = line.replace(/[()\\\\]/g, ' ');\r\n const y = 750 - i * 14;\r\n return `BT /F1 10 Tf 40 ${y} Td (${safe}) Tj ET`;\r\n })\r\n .join('\\n');\r\n\r\n const stream = content;\r\n const objects = [\r\n '1 0 obj<< /Type /Catalog /Pages 2 0 R >>endobj\\n',\r\n '2 0 obj<< /Type /Pages /Kids [3 0 R] /Count 1 >>endobj\\n',\r\n '3 0 obj<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Contents 4 0 R /Resources<< /Font<< /F1 5 0 R >> >> >>endobj\\n',\r\n `4 0 obj<< /Length ${stream.length} >>stream\\n${stream}\\nendstream\\nendobj\\n`,\r\n '5 0 obj<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>endobj\\n',\r\n ];\r\n\r\n let body = '%PDF-1.1\\n';\r\n const offsets: number[] = [0];\r\n for (const obj of objects) {\r\n offsets.push(body.length);\r\n body += obj;\r\n }\r\n const xrefStart = body.length;\r\n body += `xref\\n0 ${objects.length + 1}\\n`;\r\n body += '0000000000 65535 f \\n';\r\n for (let i = 1; i <= objects.length; i += 1) {\r\n body += `${String(offsets[i]).padStart(10, '0')} 00000 n \\n`;\r\n }\r\n body += `trailer<< /Size ${objects.length + 1} /Root 1 0 R >>\\n`;\r\n body += `startxref\\n${xrefStart}\\n%%EOF\\n`;\r\n\r\n return new Blob([body], { type: 'application/pdf' });\r\n }\r\n}\r\n","import type {\r\n ExportRequestedPayload,\r\n GridEvent,\r\n} from '../../../../domain/types/GridEvent';\r\nimport type {\r\n GridPlugin,\r\n GridPluginContext,\r\n} from '../../../../application/plugins/GridPlugin';\r\nimport type { PdfRenderer } from '../../../../application/ports/PdfRenderer';\r\nimport type { DocumentPdfTemplate } from './documentTemplate';\r\nimport { TextPdfRenderer } from './TextPdfRenderer';\r\nimport { downloadBlob } from '../../excel/src/buildXlsxBlob';\r\n\r\nexport type PdfExportPluginOptions = {\r\n renderer?: PdfRenderer;\r\n download?: boolean;\r\n /** Document chrome for VazirmatnPdfRenderer (PR-141). */\r\n template?: DocumentPdfTemplate;\r\n onBlob?: (blob: Blob, meta: { fileName: string; rowCount: number }) => void;\r\n};\r\n\r\n/**\r\n * Subscribes to EXPORT_REQUESTED (format=pdf); Domain stays untouched.\r\n *\r\n * Default renderer is legacy `TextPdfRenderer` so `./plugins/pdf` stays free of\r\n * font bytes (PR-76 / D15). For Persian PDF:\r\n * `import { createVazirmatnPdfExportPlugin } from 'persian-data-grid/plugins/pdf/fonts/vazirmatn'`.\r\n */\r\nexport class PdfExportPlugin implements GridPlugin {\r\n readonly name = 'pdf-export';\r\n private unsub: (() => void) | null = null;\r\n private readonly renderer: PdfRenderer;\r\n\r\n constructor(private readonly options: PdfExportPluginOptions = {}) {\r\n this.renderer = options.renderer ?? new TextPdfRenderer();\r\n }\r\n\r\n register(ctx: GridPluginContext): void {\r\n this.unsub = ctx.bus.subscribeAll((event) => {\r\n void this.onEvent(ctx, event);\r\n });\r\n }\r\n\r\n dispose(): void {\r\n this.unsub?.();\r\n this.unsub = null;\r\n }\r\n\r\n private async onEvent(\r\n ctx: GridPluginContext,\r\n event: GridEvent,\r\n ): Promise<void> {\r\n if (event.type !== 'EXPORT_REQUESTED') return;\r\n if (event.tableId !== ctx.tableId) return;\r\n\r\n const payload = event.payload as ExportRequestedPayload;\r\n if (payload.format !== 'pdf') return;\r\n\r\n try {\r\n const source = ctx.query.getExportSource(\r\n payload.collectionScope ?? 'active',\r\n );\r\n if (!source) {\r\n throw new Error('NO_EXPORT_SOURCE');\r\n }\r\n\r\n const blob = await this.renderer.render(source, {\r\n title: payload.fileName ?? 'Export',\r\n direction: payload.direction,\r\n template: this.options.template,\r\n });\r\n\r\n const fileName =\r\n payload.fileName ??\r\n `export-${new Date().toISOString().slice(0, 10)}.pdf`;\r\n const rowCount = source.rows.length;\r\n\r\n if (this.options.download !== false) {\r\n downloadBlob(blob, fileName);\r\n }\r\n this.options.onBlob?.(blob, { fileName, rowCount });\r\n\r\n await ctx.bus.publish({\r\n eventId: `${Date.now()}-pdf-ok`,\r\n type: 'PDF_EXPORT_COMPLETED',\r\n tableId: ctx.tableId,\r\n streamId: `table/${ctx.tableId}/view`,\r\n version: 0,\r\n occurredAt: Date.now(),\r\n actorId: event.actorId,\r\n correlationId: event.correlationId,\r\n causationId: event.eventId,\r\n payload: {\r\n format: 'pdf' as const,\r\n rowCount,\r\n blobId: fileName,\r\n },\r\n });\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n await ctx.bus.publish({\r\n eventId: `${Date.now()}-pdf-fail`,\r\n type: 'PDF_EXPORT_FAILED',\r\n tableId: ctx.tableId,\r\n streamId: `table/${ctx.tableId}/view`,\r\n version: 0,\r\n occurredAt: Date.now(),\r\n actorId: event.actorId,\r\n correlationId: event.correlationId,\r\n causationId: event.eventId,\r\n payload: {\r\n format: 'pdf' as const,\r\n code: message === 'NO_EXPORT_SOURCE' ? message : 'EXPORT_FAILED',\r\n message,\r\n },\r\n });\r\n }\r\n }\r\n}\r\n","import { deflateSync } from 'fflate';\r\n\r\nconst encoder = new TextEncoder();\r\n\r\nfunction concat(chunks: Uint8Array[]): Uint8Array {\r\n let total = 0;\r\n for (const c of chunks) total += c.length;\r\n const out = new Uint8Array(total);\r\n let o = 0;\r\n for (const c of chunks) {\r\n out.set(c, o);\r\n o += c.length;\r\n }\r\n return out;\r\n}\r\n\r\nfunction pad10(n: number): string {\r\n return String(n).padStart(10, '0');\r\n}\r\n\r\nexport class PdfBuilder {\r\n private readonly objects: Uint8Array[] = [];\r\n\r\n addAscii(body: string): number {\r\n this.objects.push(encoder.encode(body));\r\n return this.objects.length;\r\n }\r\n\r\n replaceAscii(objNum: number, body: string): void {\r\n this.objects[objNum - 1] = encoder.encode(body);\r\n }\r\n\r\n addFlate(uncompressed: Uint8Array, extraDict = ''): number {\r\n const compressed = deflateSync(uncompressed, { level: 9 });\r\n const dict = `<< /Filter /FlateDecode /Length ${compressed.length} ${extraDict}>>`;\r\n const header = encoder.encode(`${dict}stream\\n`);\r\n const tail = encoder.encode('\\nendstream\\n');\r\n this.objects.push(concat([header, compressed, tail]));\r\n return this.objects.length;\r\n }\r\n\r\n /** Raw stream (e.g. JPEG with `/Filter /DCTDecode`). `dict` is a full `<< … >>`. */\r\n addRawStream(data: Uint8Array, dict: string): number {\r\n const header = encoder.encode(`${dict}\\nstream\\n`);\r\n const tail = encoder.encode('\\nendstream\\n');\r\n this.objects.push(concat([header, data, tail]));\r\n return this.objects.length;\r\n }\r\n\r\n build(): Uint8Array {\r\n const parts: Uint8Array[] = [encoder.encode('%PDF-1.4\\n%\\x80\\x80\\x80\\x80\\n')];\r\n const offsets = [0];\r\n let pos = parts[0].length;\r\n for (let i = 0; i < this.objects.length; i += 1) {\r\n offsets.push(pos);\r\n const head = encoder.encode(`${i + 1} 0 obj\\n`);\r\n const tail = encoder.encode('endobj\\n');\r\n const body = this.objects[i];\r\n parts.push(head, body, tail);\r\n pos += head.length + body.length + tail.length;\r\n }\r\n const xrefStart = pos;\r\n let xref = `xref\\n0 ${this.objects.length + 1}\\n0000000000 65535 f \\n`;\r\n for (let i = 1; i <= this.objects.length; i += 1) {\r\n xref += `${pad10(offsets[i] ?? 0)} 00000 n \\n`;\r\n }\r\n xref += `trailer<< /Size ${this.objects.length + 1} /Root 1 0 R >>\\n`;\r\n xref += `startxref\\n${xrefStart}\\n%%EOF\\n`;\r\n parts.push(encoder.encode(xref));\r\n return concat(parts);\r\n }\r\n}\r\n\r\nexport function pdfEscapeTextHex(gids: readonly number[]): string {\r\n return gids.map((g) => g.toString(16).padStart(4, '0')).join('');\r\n}\r\n","/** Minimal TrueType reader for CIDFontType2 embedding (cmap + metrics). */\r\n\r\nexport type TtfMetrics = {\r\n unitsPerEm: number;\r\n xMin: number;\r\n yMin: number;\r\n xMax: number;\r\n yMax: number;\r\n ascent: number;\r\n descent: number;\r\n italicAngle: number;\r\n numGlyphs: number;\r\n};\r\n\r\nexport type ParsedTtf = {\r\n bytes: Uint8Array;\r\n metrics: TtfMetrics;\r\n glyphId: (codePoint: number) => number;\r\n advance: (glyphId: number) => number;\r\n};\r\n\r\nfunction u16(buf: Uint8Array, offset: number): number {\r\n return (buf[offset] << 8) | buf[offset + 1];\r\n}\r\n\r\nfunction u32(buf: Uint8Array, offset: number): number {\r\n return (\r\n ((buf[offset] << 24) | (buf[offset + 1] << 16) | (buf[offset + 2] << 8) | buf[offset + 3]) >>>\r\n 0\r\n );\r\n}\r\n\r\nfunction i16(buf: Uint8Array, offset: number): number {\r\n const v = u16(buf, offset);\r\n return v > 32767 ? v - 65536 : v;\r\n}\r\n\r\nfunction tagAt(buf: Uint8Array, offset: number): string {\r\n return String.fromCharCode(buf[offset], buf[offset + 1], buf[offset + 2], buf[offset + 3]);\r\n}\r\n\r\nfunction tableMap(buf: Uint8Array): Map<string, { offset: number; length: number }> {\r\n const numTables = u16(buf, 4);\r\n const tables = new Map<string, { offset: number; length: number }>();\r\n for (let i = 0; i < numTables; i += 1) {\r\n const o = 12 + i * 16;\r\n tables.set(tagAt(buf, o), { offset: u32(buf, o + 8), length: u32(buf, o + 12) });\r\n }\r\n return tables;\r\n}\r\n\r\nfunction parseCmap(buf: Uint8Array, cmapOffset: number): (code: number) => number {\r\n const numTables = u16(buf, cmapOffset + 2);\r\n let format4 = -1;\r\n let format12 = -1;\r\n for (let i = 0; i < numTables; i += 1) {\r\n const rec = cmapOffset + 4 + i * 8;\r\n const platform = u16(buf, rec);\r\n const encoding = u16(buf, rec + 2);\r\n const offset = cmapOffset + u32(buf, rec + 4);\r\n const format = u16(buf, offset);\r\n if (format === 12 && (platform === 3 || platform === 0)) format12 = offset;\r\n if (format === 4 && (platform === 3 || platform === 0) && encoding <= 1) {\r\n format4 = offset;\r\n }\r\n }\r\n\r\n if (format12 >= 0) {\r\n const nGroups = u32(buf, format12 + 12);\r\n const groups: Array<{ start: number; end: number; glyph: number }> = [];\r\n for (let i = 0; i < nGroups; i += 1) {\r\n const o = format12 + 16 + i * 12;\r\n groups.push({\r\n start: u32(buf, o),\r\n end: u32(buf, o + 4),\r\n glyph: u32(buf, o + 8),\r\n });\r\n }\r\n return (code: number) => {\r\n for (const g of groups) {\r\n if (code >= g.start && code <= g.end) return g.glyph + (code - g.start);\r\n }\r\n return 0;\r\n };\r\n }\r\n\r\n if (format4 < 0) {\r\n return () => 0;\r\n }\r\n\r\n const segCount = u16(buf, format4 + 6) / 2;\r\n const endCodes = format4 + 14;\r\n const startCodes = endCodes + 2 + segCount * 2;\r\n const idDeltas = startCodes + segCount * 2;\r\n const idRangeOffsets = idDeltas + segCount * 2;\r\n\r\n return (code: number) => {\r\n for (let i = 0; i < segCount; i += 1) {\r\n const end = u16(buf, endCodes + i * 2);\r\n if (code > end) continue;\r\n const start = u16(buf, startCodes + i * 2);\r\n if (code < start) return 0;\r\n const rangeOffset = u16(buf, idRangeOffsets + i * 2);\r\n const delta = i16(buf, idDeltas + i * 2);\r\n if (rangeOffset === 0) return (code + delta) & 0xffff;\r\n const glyphOffset =\r\n idRangeOffsets + i * 2 + rangeOffset + (code - start) * 2;\r\n const glyph = u16(buf, glyphOffset);\r\n if (glyph === 0) return 0;\r\n return (glyph + delta) & 0xffff;\r\n }\r\n return 0;\r\n };\r\n}\r\n\r\nexport function parseTtf(bytes: Uint8Array): ParsedTtf {\r\n const tables = tableMap(bytes);\r\n const head = tables.get('head');\r\n const hhea = tables.get('hhea');\r\n const hmtx = tables.get('hmtx');\r\n const maxp = tables.get('maxp');\r\n const cmap = tables.get('cmap');\r\n if (!head || !hhea || !hmtx || !maxp || !cmap) {\r\n throw new Error('VAZIRMATN_TTF_TABLES');\r\n }\r\n\r\n const unitsPerEm = u16(bytes, head.offset + 18);\r\n const metrics: TtfMetrics = {\r\n unitsPerEm,\r\n xMin: i16(bytes, head.offset + 36),\r\n yMin: i16(bytes, head.offset + 38),\r\n xMax: i16(bytes, head.offset + 40),\r\n yMax: i16(bytes, head.offset + 42),\r\n ascent: i16(bytes, hhea.offset + 4),\r\n descent: i16(bytes, hhea.offset + 6),\r\n italicAngle: 0,\r\n numGlyphs: u16(bytes, maxp.offset + 4),\r\n };\r\n\r\n const numberOfHMetrics = u16(bytes, hhea.offset + 34);\r\n const advances = new Uint16Array(metrics.numGlyphs);\r\n for (let i = 0; i < numberOfHMetrics; i += 1) {\r\n advances[i] = u16(bytes, hmtx.offset + i * 4);\r\n }\r\n const lastAdvance = advances[numberOfHMetrics - 1] ?? metrics.unitsPerEm;\r\n for (let i = numberOfHMetrics; i < metrics.numGlyphs; i += 1) {\r\n advances[i] = lastAdvance;\r\n }\r\n\r\n const glyphId = parseCmap(bytes, cmap.offset);\r\n return {\r\n bytes,\r\n metrics,\r\n glyphId,\r\n advance: (gid) => advances[gid] ?? lastAdvance,\r\n };\r\n}\r\n\r\nexport function pdfWidth(advance: number, unitsPerEm: number): number {\r\n return (advance * 1000) / unitsPerEm;\r\n}\r\n","/**\r\n * Arabic presentation-form shaping + a simple RTL visual order.\r\n * Isolated letters are readable; this joins Persian letters for PDF.\r\n */\r\n\r\ntype Forms = readonly [isolated: number, final: number, initial: number, medial: number];\r\n\r\nconst FORMS: Record<number, Forms> = {\r\n 0x0627: [0xfe8d, 0xfe8e, 0xfe8d, 0xfe8e],\r\n 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92],\r\n 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59],\r\n 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98],\r\n 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c],\r\n 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0],\r\n 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d],\r\n 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4],\r\n 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8],\r\n 0x062f: [0xfea9, 0xfeaa, 0xfea9, 0xfeaa],\r\n 0x0630: [0xfeab, 0xfeac, 0xfeab, 0xfeac],\r\n 0x0631: [0xfead, 0xfeae, 0xfead, 0xfeae],\r\n 0x0632: [0xfeaf, 0xfeb0, 0xfeaf, 0xfeb0],\r\n 0x0698: [0xfb8a, 0xfb8b, 0xfb8a, 0xfb8b],\r\n 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4],\r\n 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8],\r\n 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc],\r\n 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0],\r\n 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4],\r\n 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8],\r\n 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc],\r\n 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0],\r\n 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4],\r\n 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8],\r\n 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91],\r\n 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc],\r\n 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95],\r\n 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0],\r\n 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4],\r\n 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8],\r\n 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec],\r\n 0x0648: [0xfeed, 0xfeee, 0xfeed, 0xfeee],\r\n 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff],\r\n 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4],\r\n 0x0622: [0xfe81, 0xfe82, 0xfe81, 0xfe82],\r\n 0x0629: [0xfe93, 0xfe94, 0xfe93, 0xfe94],\r\n};\r\n\r\nconst RIGHT_ONLY = new Set([\r\n 0x0622, 0x0627, 0x0629, 0x062f, 0x0630, 0x0631, 0x0632, 0x0698, 0x0648,\r\n]);\r\n\r\nfunction canConnect(cp: number, side: 'left' | 'right'): boolean {\r\n if (!FORMS[cp]) return false;\r\n if (RIGHT_ONLY.has(cp)) return side === 'right';\r\n return true;\r\n}\r\n\r\nfunction isLetter(cp: number): boolean {\r\n return cp in FORMS;\r\n}\r\n\r\nexport function shapeArabic(input: string): string {\r\n const cps = [...input].map((ch) => ch.codePointAt(0) ?? 0);\r\n const out: number[] = [];\r\n for (let i = 0; i < cps.length; i += 1) {\r\n const cp = cps[i] ?? 0;\r\n const forms = FORMS[cp];\r\n if (!forms) {\r\n out.push(cp);\r\n continue;\r\n }\r\n let prev = i - 1;\r\n while (prev >= 0 && (cps[prev] === 0x0640 || cps[prev] === 0x200c)) prev -= 1;\r\n let next = i + 1;\r\n while (next < cps.length && (cps[next] === 0x0640 || cps[next] === 0x200d)) next += 1;\r\n const joinsPrev = prev >= 0 && isLetter(cps[prev] ?? 0) && canConnect(cps[prev] ?? 0, 'left');\r\n const joinsNext =\r\n next < cps.length && isLetter(cps[next] ?? 0) && canConnect(cp, 'left');\r\n const form = joinsPrev && joinsNext ? 3 : joinsNext ? 2 : joinsPrev ? 1 : 0;\r\n out.push(forms[form] ?? cp);\r\n }\r\n return String.fromCodePoint(...out);\r\n}\r\n\r\nconst LTR_RE = /^[0-9A-Za-z۰-۹.,:%/+-]+$/;\r\n\r\nfunction reverseGraphemes(s: string): string {\r\n return [...s].reverse().join('');\r\n}\r\n\r\n/** Visual order for an RTL line (Persian + Latin/digit islands). */\r\nexport function rtlVisual(input: string): string {\r\n const shaped = shapeArabic(input);\r\n const parts = shaped.split(/([0-9A-Za-z۰-۹.,:%/+-]+)/);\r\n const visual: string[] = [];\r\n for (let i = parts.length - 1; i >= 0; i -= 1) {\r\n const part = parts[i] ?? '';\r\n if (!part) continue;\r\n visual.push(LTR_RE.test(part) ? part : reverseGraphemes(part));\r\n }\r\n return visual.join('');\r\n}\r\n","import type { ExportSource } from '../../../../application/plugins/GridPlugin';\r\nimport type {\r\n PdfRenderOptions,\r\n PdfRenderer,\r\n} from '../../../../application/ports/PdfRenderer';\r\nimport { formatExportValue } from '../../excel/src/formatExportValue';\r\nimport type { DocumentPdfTemplate } from './documentTemplate';\r\nimport { PdfBuilder, pdfEscapeTextHex } from './pdfBuilder';\r\nimport { parseTtf, pdfWidth, type ParsedTtf } from './parseTtf';\r\nimport { rtlVisual } from './shapeRtl';\r\n\r\nconst PAGE_W = 595;\r\nconst PAGE_H = 842;\r\nconst MARGIN = 36;\r\nconst TITLE_SIZE = 12;\r\nconst SUB_SIZE = 9;\r\nconst CELL_SIZE = 8;\r\nconst ROW_H = 16;\r\nconst HEADER_H = 18;\r\nconst FOOTER_H = 22;\r\nconst SIGN_H = 56;\r\n\r\nfunction cellText(raw: unknown, fieldType?: string): string {\r\n if (fieldType === 'checkbox') {\r\n return raw ? 'بله' : 'خیر';\r\n }\r\n return formatExportValue(raw, fieldType);\r\n}\r\n\r\nfunction measure(font: ParsedTtf, text: string, size: number): number {\r\n let w = 0;\r\n for (const ch of text) {\r\n const cp = ch.codePointAt(0) ?? 0;\r\n const gid = font.glyphId(cp);\r\n w += pdfWidth(font.advance(gid), font.metrics.unitsPerEm);\r\n }\r\n return (w * size) / 1000;\r\n}\r\n\r\nfunction fitText(\r\n font: ParsedTtf,\r\n text: string,\r\n size: number,\r\n maxWidth: number,\r\n): string {\r\n if (measure(font, text, size) <= maxWidth) return text;\r\n const ellipsis = '...';\r\n let lo = 0;\r\n let hi = [...text].length;\r\n while (lo < hi) {\r\n const mid = Math.ceil((lo + hi) / 2);\r\n const slice = [...text].slice(0, mid).join('') + ellipsis;\r\n if (measure(font, slice, size) <= maxWidth) lo = mid;\r\n else hi = mid - 1;\r\n }\r\n if (lo <= 0) return ellipsis;\r\n return [...text].slice(0, lo).join('') + ellipsis;\r\n}\r\n\r\nfunction toGids(font: ParsedTtf, text: string): number[] {\r\n const gids: number[] = [];\r\n for (const ch of text) {\r\n const cp = ch.codePointAt(0) ?? 0;\r\n gids.push(font.glyphId(cp));\r\n }\r\n return gids;\r\n}\r\n\r\nfunction toUnicodeCmap(pairs: Array<{ gid: number; unicode: number }>): string {\r\n const unique = new Map<number, number>();\r\n for (const p of pairs) {\r\n if (!unique.has(p.gid)) unique.set(p.gid, p.unicode);\r\n }\r\n const entries = [...unique.entries()];\r\n const chunks: string[] = [];\r\n for (let i = 0; i < entries.length; i += 100) {\r\n const slice = entries.slice(i, i + 100);\r\n chunks.push(`${slice.length} beginbfchar`);\r\n for (const [gid, uni] of slice) {\r\n const g = gid.toString(16).padStart(4, '0');\r\n const u = uni.toString(16).padStart(uni > 0xffff ? 8 : 4, '0');\r\n chunks.push(`<${g}> <${u}>`);\r\n }\r\n chunks.push('endbfchar');\r\n }\r\n return `%!PS-Adobe-3.0 Resource-CMap\r\n%%BeginResource: CMap (Vazirmatn-UCS)\r\n/CIDInit /ProcSet findresource begin\r\n12 dict begin\r\nbegincmap\r\n/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def\r\n/CMapName /Vazirmatn-UCS def\r\n/CMapType 2 def\r\n1 begincodespacerange\r\n<0000> <FFFF>\r\nendcodespacerange\r\n${chunks.join('\\n')}\r\nendcmap\r\nCMapName currentdict /CMap defineresource pop\r\nend\r\nend\r\n%%EndResource\r\n`;\r\n}\r\n\r\nfunction toSumNumber(raw: unknown): number | null {\r\n if (typeof raw === 'number' && Number.isFinite(raw)) return Math.trunc(raw);\r\n if (typeof raw === 'bigint') {\r\n const n = Number(raw);\r\n return Number.isSafeInteger(n) ? n : null;\r\n }\r\n if (typeof raw === 'string') {\r\n const n = Number(\r\n raw\r\n .trim()\r\n .replace(/[۰-۹]/g, (d) => String('۰۱۲۳۴۵۶۷۸۹'.indexOf(d)))\r\n .replace(/,/g, ''),\r\n );\r\n return Number.isFinite(n) ? Math.trunc(n) : null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction readJpegSize(bytes: Uint8Array): { w: number; h: number } | null {\r\n if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8) return null;\r\n let i = 2;\r\n while (i + 9 < bytes.length) {\r\n if (bytes[i] !== 0xff) {\r\n i += 1;\r\n continue;\r\n }\r\n const marker = bytes[i + 1]!;\r\n const len = (bytes[i + 2]! << 8) | bytes[i + 3]!;\r\n if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2) {\r\n const h = (bytes[i + 5]! << 8) | bytes[i + 6]!;\r\n const w = (bytes[i + 7]! << 8) | bytes[i + 8]!;\r\n return { w, h };\r\n }\r\n i += 2 + len;\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Persian table PDF: embeds Vazirmatn (OFL) as CIDFontType2, RTL grid, no 8×40 cap.\r\n * PR-141: optional {@link DocumentPdfTemplate} for document chrome.\r\n */\r\nexport class VazirmatnPdfRenderer implements PdfRenderer {\r\n constructor(private readonly fontBytes: Uint8Array) {\r\n if (!fontBytes?.byteLength) {\r\n throw new Error(\r\n 'VazirmatnPdfRenderer requires font bytes from persian-data-grid/plugins/pdf/fonts/vazirmatn',\r\n );\r\n }\r\n }\r\n\r\n async render(\r\n source: ExportSource,\r\n options?: PdfRenderOptions,\r\n ): Promise<Blob> {\r\n const font = parseTtf(this.fontBytes);\r\n const rtl = options?.direction !== 'ltr';\r\n const template = options?.template as DocumentPdfTemplate | undefined;\r\n const title =\r\n template?.header?.title ?? options?.title ?? 'اقلام سند';\r\n const columns = source.columns.filter((c) => c.fieldName !== 'index');\r\n const colCount = Math.max(1, columns.length);\r\n const tableWidth = PAGE_W - MARGIN * 2;\r\n const colW = tableWidth / colCount;\r\n const used: Array<{ gid: number; unicode: number }> = [];\r\n\r\n const note = (text: string) => {\r\n const visual = rtl ? rtlVisual(text) : text;\r\n for (const ch of visual) {\r\n const cp = ch.codePointAt(0) ?? 0;\r\n used.push({ gid: font.glyphId(cp), unicode: cp });\r\n }\r\n return visual;\r\n };\r\n\r\n const titleVisual = note(title);\r\n const subtitleVisual = template?.header?.subtitle\r\n ? note(template.header.subtitle)\r\n : null;\r\n const metaVisuals = (template?.header?.meta ?? []).map((m) => note(m));\r\n const footerTextVisual = template?.footer?.text\r\n ? note(template.footer.text)\r\n : null;\r\n const pageFmt = template?.footer?.pageNumberFormat ?? '{page} / {pages}';\r\n const showPageNumber =\r\n template != null && template.footer?.showPageNumber !== false;\r\n const repeatHeader = template == null || template.repeatTableHeader !== false;\r\n const totalsLabelVisual = template?.pageTotals\r\n ? note(template.pageTotals.label ?? 'جمع صفحه')\r\n : null;\r\n const signLabelVisual = template?.signature\r\n ? note(template.signature.label ?? 'امضا')\r\n : null;\r\n const stampLabelVisual = template?.stamp\r\n ? note(template.stamp.label ?? 'مهر')\r\n : null;\r\n\r\n // Pre-register digits / separators used in page numbers & totals\r\n note('0123456789 /');\r\n\r\n const headers = columns.map((c) =>\r\n note(c.fieldCaption ?? c.fieldName),\r\n );\r\n const body = source.rows.map((row) =>\r\n columns.map((col) => {\r\n const cell = row.cells[col.fieldName];\r\n const raw = cell?.display ?? cell?.value ?? '';\r\n return note(cellText(raw, col.fieldType));\r\n }),\r\n );\r\n const bodyNums = source.rows.map((row) => {\r\n const map = new Map<string, number | null>();\r\n for (const col of columns) {\r\n const cell = row.cells[col.fieldName];\r\n const raw = cell?.value ?? cell?.display ?? '';\r\n map.set(col.fieldName, toSumNumber(raw));\r\n }\r\n return map;\r\n });\r\n\r\n let logoDrawW = template?.logo?.width ?? 64;\r\n let logoDrawH = template?.logo?.height ?? 48;\r\n if (template?.logo?.jpegBytes?.byteLength) {\r\n const size = readJpegSize(template.logo.jpegBytes);\r\n if (size && template.logo.height == null) {\r\n logoDrawH = Math.round((logoDrawW * size.h) / Math.max(1, size.w));\r\n }\r\n }\r\n\r\n const headerBand = template\r\n ? Math.max(\r\n logoDrawH,\r\n 28 + (subtitleVisual ? 14 : 0) + metaVisuals.length * 12,\r\n ) + 12\r\n : TITLE_SIZE + 16;\r\n const footerBand =\r\n template && (footerTextVisual || showPageNumber) ? FOOTER_H + 8 : 0;\r\n const signBand =\r\n template && (signLabelVisual || stampLabelVisual) ? SIGN_H + 8 : 0;\r\n const totalsBand = template?.pageTotals ? ROW_H + 4 : 0;\r\n\r\n const usable = (withSign: boolean) =>\r\n PAGE_H -\r\n MARGIN * 2 -\r\n headerBand -\r\n footerBand -\r\n (repeatHeader ? HEADER_H : 0) -\r\n totalsBand -\r\n (withSign ? signBand : 0);\r\n\r\n const pageRowCounts: number[] = [];\r\n let remaining = body.length;\r\n if (remaining === 0) {\r\n pageRowCounts.push(0);\r\n } else {\r\n while (remaining > 0) {\r\n const isLikelyLast = remaining <= Math.floor(usable(false) / ROW_H);\r\n const budget = Math.max(\r\n 1,\r\n Math.floor(usable(isLikelyLast && signBand > 0) / ROW_H),\r\n );\r\n const take = Math.min(remaining, budget);\r\n pageRowCounts.push(take);\r\n remaining -= take;\r\n if (pageRowCounts.length > 10_000) break;\r\n }\r\n if (signBand > 0) {\r\n const lastBudget = Math.max(1, Math.floor(usable(true) / ROW_H));\r\n const lastIdx = pageRowCounts.length - 1;\r\n if ((pageRowCounts[lastIdx] ?? 0) > lastBudget) {\r\n const overflow = (pageRowCounts[lastIdx] ?? 0) - lastBudget;\r\n pageRowCounts[lastIdx] = lastBudget;\r\n pageRowCounts.push(overflow);\r\n }\r\n }\r\n }\r\n const pageCount = Math.max(1, pageRowCounts.length);\r\n\r\n // Register page-number & totals glyph strings before embedding the font\r\n const pageLabels = Array.from({ length: pageCount }, (_, p) =>\r\n note(\r\n pageFmt\r\n .replace('{page}', String(p + 1))\r\n .replace('{pages}', String(pageCount)),\r\n ),\r\n );\r\n const pageTotalCells: string[][] = pageRowCounts.map((take, p) => {\r\n if (!template?.pageTotals || !totalsLabelVisual) return [];\r\n const start = pageRowCounts\r\n .slice(0, p)\r\n .reduce((a, n) => a + n, 0);\r\n const numSlice = bodyNums.slice(start, start + take);\r\n const sums = new Map<string, number>();\r\n for (const colId of template.pageTotals.columns) {\r\n let s = 0;\r\n for (const row of numSlice) {\r\n const n = row.get(colId);\r\n if (n != null) s += n;\r\n }\r\n sums.set(colId, s);\r\n }\r\n return columns.map((col, colIdx) => {\r\n const isTotalCol = template.pageTotals!.columns.includes(col.fieldName);\r\n if (isTotalCol) return note(String(sums.get(col.fieldName) ?? 0));\r\n const labelCol = columns.findIndex(\r\n (c) => !template.pageTotals!.columns.includes(c.fieldName),\r\n );\r\n if (colIdx === (labelCol >= 0 ? labelCol : 0)) return totalsLabelVisual;\r\n return '';\r\n });\r\n });\r\n\r\n const metrics = font.metrics;\r\n const scale = 1000 / metrics.unitsPerEm;\r\n const bbox = [\r\n Math.round(metrics.xMin * scale),\r\n Math.round(metrics.yMin * scale),\r\n Math.round(metrics.xMax * scale),\r\n Math.round(metrics.yMax * scale),\r\n ];\r\n const ascent = Math.round(metrics.ascent * scale);\r\n const descent = Math.round(metrics.descent * scale);\r\n\r\n const usedGids = [...new Set(used.map((u) => u.gid))].sort((a, b) => a - b);\r\n const wParts = usedGids.map((gid) => {\r\n const w = Math.round(pdfWidth(font.advance(gid), metrics.unitsPerEm));\r\n return `${gid} [${w}]`;\r\n });\r\n\r\n const pdf = new PdfBuilder();\r\n pdf.addAscii('<< /Type /Catalog /Pages 2 0 R >>\\n');\r\n const pagesObj = 2;\r\n pdf.addAscii('<< /Type /Pages /Kids [] /Count 0 >>\\n');\r\n\r\n const fontFile = pdf.addFlate(\r\n font.bytes,\r\n `/Length1 ${font.bytes.length} `,\r\n );\r\n const descriptor = pdf.addAscii(\r\n `<< /Type /FontDescriptor /FontName /Vazirmatn /Flags 32 /FontBBox [${bbox.join(' ')}] /ItalicAngle 0 /Ascent ${ascent} /Descent ${descent} /CapHeight ${ascent} /StemV 80 /FontFile2 ${fontFile} 0 R >>\\n`,\r\n );\r\n const cidFont = pdf.addAscii(\r\n `<< /Type /Font /Subtype /CIDFontType2 /BaseFont /Vazirmatn /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor ${descriptor} 0 R /DW 500 /W [${wParts.join(' ')}] /CIDToGIDMap /Identity >>\\n`,\r\n );\r\n const toUnicode = pdf.addFlate(\r\n new TextEncoder().encode(toUnicodeCmap(used)),\r\n );\r\n const type0 = pdf.addAscii(\r\n `<< /Type /Font /Subtype /Type0 /BaseFont /Vazirmatn /Encoding /Identity-H /DescendantFonts [${cidFont} 0 R] /ToUnicode ${toUnicode} 0 R >>\\n`,\r\n );\r\n\r\n let logoXObject: number | null = null;\r\n if (template?.logo?.jpegBytes?.byteLength) {\r\n const jpeg = template.logo.jpegBytes;\r\n const size = readJpegSize(jpeg) ?? { w: logoDrawW, h: logoDrawH };\r\n logoXObject = pdf.addRawStream(\r\n jpeg,\r\n `<< /Type /XObject /Subtype /Image /Width ${size.w} /Height ${size.h} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${jpeg.length} >>`,\r\n );\r\n }\r\n\r\n const pageObjNums: number[] = [];\r\n\r\n const drawText = (\r\n ops: string[],\r\n text: string,\r\n size: number,\r\n x: number,\r\n y: number,\r\n ) => {\r\n ops.push('BT');\r\n ops.push(`/F1 ${size} Tf`);\r\n ops.push(`${x.toFixed(2)} ${y.toFixed(2)} Td`);\r\n ops.push(`<${pdfEscapeTextHex(toGids(font, text))}> Tj`);\r\n ops.push('ET');\r\n };\r\n\r\n const drawCell = (\r\n ops: string[],\r\n col: number,\r\n top: number,\r\n height: number,\r\n text: string,\r\n header: boolean,\r\n ) => {\r\n const x = rtl\r\n ? PAGE_W - MARGIN - (col + 1) * colW\r\n : MARGIN + col * colW;\r\n if (header) {\r\n ops.push('0.92 g');\r\n ops.push(\r\n `${x.toFixed(2)} ${(top - height).toFixed(2)} ${colW.toFixed(2)} ${height.toFixed(2)} re f`,\r\n );\r\n ops.push('0 g');\r\n }\r\n ops.push('0.55 w 0.35 g');\r\n ops.push(\r\n `${x.toFixed(2)} ${(top - height).toFixed(2)} ${colW.toFixed(2)} ${height.toFixed(2)} re S`,\r\n );\r\n ops.push('0 g');\r\n if (!text) return;\r\n const fitted = fitText(font, text, CELL_SIZE, colW - 6);\r\n const tw = measure(font, fitted, CELL_SIZE);\r\n const tx = rtl ? x + colW - 3 - tw : x + 3;\r\n const ty = top - height + 4.5;\r\n drawText(ops, fitted, CELL_SIZE, tx, ty);\r\n };\r\n\r\n let rowCursor = 0;\r\n for (let p = 0; p < pageCount; p += 1) {\r\n const ops: string[] = [];\r\n const isLast = p === pageCount - 1;\r\n let y = PAGE_H - MARGIN;\r\n\r\n if (template) {\r\n if (logoXObject != null) {\r\n const lx = rtl ? PAGE_W - MARGIN - logoDrawW : MARGIN;\r\n const ly = y - logoDrawH;\r\n ops.push('q');\r\n ops.push(\r\n `${logoDrawW} 0 0 ${logoDrawH} ${lx.toFixed(2)} ${ly.toFixed(2)} cm /Im1 Do`,\r\n );\r\n ops.push('Q');\r\n }\r\n const textOriginX = rtl\r\n ? PAGE_W -\r\n MARGIN -\r\n (logoXObject != null ? logoDrawW + 10 : 0)\r\n : MARGIN + (logoXObject != null ? logoDrawW + 10 : 0);\r\n let ty = y - 12;\r\n const tw = measure(font, titleVisual, TITLE_SIZE);\r\n drawText(\r\n ops,\r\n titleVisual,\r\n TITLE_SIZE,\r\n rtl ? textOriginX - tw : textOriginX,\r\n ty,\r\n );\r\n ty -= 14;\r\n if (subtitleVisual) {\r\n const sw = measure(font, subtitleVisual, SUB_SIZE);\r\n drawText(\r\n ops,\r\n subtitleVisual,\r\n SUB_SIZE,\r\n rtl ? textOriginX - sw : textOriginX,\r\n ty,\r\n );\r\n ty -= 12;\r\n }\r\n for (const meta of metaVisuals) {\r\n const mw = measure(font, meta, SUB_SIZE);\r\n drawText(\r\n ops,\r\n meta,\r\n SUB_SIZE,\r\n rtl ? textOriginX - mw : textOriginX,\r\n ty,\r\n );\r\n ty -= 12;\r\n }\r\n y = PAGE_H - MARGIN - headerBand;\r\n } else {\r\n const titleW = measure(font, titleVisual, TITLE_SIZE);\r\n drawText(\r\n ops,\r\n titleVisual,\r\n TITLE_SIZE,\r\n rtl ? PAGE_W - MARGIN - titleW : MARGIN,\r\n y - 12,\r\n );\r\n y = PAGE_H - MARGIN - headerBand;\r\n }\r\n\r\n if (repeatHeader || p === 0) {\r\n headers.forEach((h, col) => drawCell(ops, col, y, HEADER_H, h, true));\r\n y -= HEADER_H;\r\n }\r\n\r\n const take = pageRowCounts[p] ?? 0;\r\n const slice = body.slice(rowCursor, rowCursor + take);\r\n for (const row of slice) {\r\n row.forEach((cell, col) => drawCell(ops, col, y, ROW_H, cell, false));\r\n y -= ROW_H;\r\n }\r\n\r\n const totalRow = pageTotalCells[p];\r\n if (totalRow && totalRow.length > 0) {\r\n totalRow.forEach((text, colIdx) =>\r\n drawCell(ops, colIdx, y, ROW_H, text, true),\r\n );\r\n y -= ROW_H;\r\n }\r\n\r\n if (isLast && (signLabelVisual || stampLabelVisual)) {\r\n const boxW = (tableWidth - 12) / 2;\r\n const boxH = SIGN_H - 8;\r\n const by = MARGIN + footerBand + 4;\r\n const boxes: Array<{ label: string; x: number }> = [];\r\n if (rtl) {\r\n if (signLabelVisual) {\r\n boxes.push({ label: signLabelVisual, x: PAGE_W - MARGIN - boxW });\r\n }\r\n if (stampLabelVisual) {\r\n boxes.push({\r\n label: stampLabelVisual,\r\n x: PAGE_W - MARGIN - boxW * 2 - 12,\r\n });\r\n }\r\n } else {\r\n if (signLabelVisual) boxes.push({ label: signLabelVisual, x: MARGIN });\r\n if (stampLabelVisual) {\r\n boxes.push({ label: stampLabelVisual, x: MARGIN + boxW + 12 });\r\n }\r\n }\r\n for (const box of boxes) {\r\n ops.push('0.55 w 0.35 g');\r\n ops.push(\r\n `${box.x.toFixed(2)} ${by.toFixed(2)} ${boxW.toFixed(2)} ${boxH.toFixed(2)} re S`,\r\n );\r\n ops.push('0 g');\r\n const lw = measure(font, box.label, SUB_SIZE);\r\n drawText(\r\n ops,\r\n box.label,\r\n SUB_SIZE,\r\n rtl ? box.x + boxW - 6 - lw : box.x + 6,\r\n by + boxH - 14,\r\n );\r\n const lineCount = template?.signature?.lines ?? 2;\r\n for (let li = 0; li < lineCount; li += 1) {\r\n const ly = by + 10 + li * 14;\r\n ops.push('0.4 w 0.6 g');\r\n ops.push(\r\n `${(box.x + 8).toFixed(2)} ${ly.toFixed(2)} m ${(box.x + boxW - 8).toFixed(2)} ${ly.toFixed(2)} l S`,\r\n );\r\n ops.push('0 g');\r\n }\r\n }\r\n }\r\n\r\n if (footerBand > 0) {\r\n const fy = MARGIN + 6;\r\n if (footerTextVisual) {\r\n const fw = measure(font, footerTextVisual, SUB_SIZE);\r\n drawText(\r\n ops,\r\n footerTextVisual,\r\n SUB_SIZE,\r\n rtl ? PAGE_W - MARGIN - fw : MARGIN,\r\n fy,\r\n );\r\n }\r\n if (showPageNumber) {\r\n const label = pageLabels[p]!;\r\n const pw = measure(font, label, SUB_SIZE);\r\n drawText(\r\n ops,\r\n label,\r\n SUB_SIZE,\r\n rtl ? MARGIN : PAGE_W - MARGIN - pw,\r\n fy,\r\n );\r\n }\r\n }\r\n\r\n const content = pdf.addFlate(\r\n new TextEncoder().encode(ops.join('\\n') + '\\n'),\r\n );\r\n const xobjRes =\r\n logoXObject != null ? `/XObject << /Im1 ${logoXObject} 0 R >>` : '';\r\n const pageNo = pdf.addAscii(\r\n `<< /Type /Page /Parent ${pagesObj} 0 R /MediaBox [0 0 ${PAGE_W} ${PAGE_H}] /Contents ${content} 0 R /Resources << /Font << /F1 ${type0} 0 R >> ${xobjRes} >> >>\\n`,\r\n );\r\n pageObjNums.push(pageNo);\r\n rowCursor += take;\r\n }\r\n\r\n const kids = pageObjNums.map((n) => `${n} 0 R`).join(' ');\r\n pdf.replaceAscii(\r\n pagesObj,\r\n `<< /Type /Pages /Kids [${kids}] /Count ${pageObjNums.length} >>\\n`,\r\n );\r\n\r\n const bytes = pdf.build();\r\n return new Blob([bytes] as BlobPart[], { type: 'application/pdf' });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../packages/plugins/pdf/src/TextPdfRenderer.ts","../packages/plugins/pdf/src/PdfExportPlugin.ts","../packages/plugins/pdf/src/pdfBuilder.ts","../packages/plugins/pdf/src/parseTtf.ts","../packages/plugins/pdf/src/shapeRtl.ts","../packages/plugins/pdf/src/VazirmatnPdfRenderer.ts"],"names":["formatExportValue","downloadBlob","deflateSync"],"mappings":"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","file":"chunk-VYJQ2HTA.cjs","sourcesContent":["import type { ExportSource } from '../../../../application/plugins/GridPlugin';\r\nimport type { PdfRenderer } from '../../../../application/ports/PdfRenderer';\r\nimport { formatExportValue } from '../../excel/src/formatExportValue';\r\n\r\n/**\r\n * Legacy Helvetica PDF (8 columns × 40 rows). Kept for tests and Host opt-in.\r\n * Product default is {@link VazirmatnPdfRenderer}.\r\n *\r\n * @deprecated Use VazirmatnPdfRenderer.\r\n */\r\nexport class TextPdfRenderer implements PdfRenderer {\r\n async render(\r\n source: ExportSource,\r\n options?: { title?: string },\r\n ): Promise<Blob> {\r\n const lines: string[] = [options?.title ?? 'Export'];\r\n const columns = source.columns.slice(0, 8);\r\n lines.push(columns.map((c) => c.fieldCaption ?? c.fieldName).join(' | '));\r\n\r\n for (const row of source.rows.slice(0, 40)) {\r\n const prefix = row.kind === 'group' ? '▸ ' : '';\r\n lines.push(\r\n prefix +\r\n columns\r\n .map((col) => {\r\n const cell = row.cells[col.fieldName];\r\n const raw = cell?.display ?? cell?.value ?? '';\r\n return formatExportValue(raw, col.fieldType).slice(0, 24);\r\n })\r\n .join(' | '),\r\n );\r\n }\r\n\r\n const content = lines\r\n .map((line, i) => {\r\n const safe = line.replace(/[()\\\\]/g, ' ');\r\n const y = 750 - i * 14;\r\n return `BT /F1 10 Tf 40 ${y} Td (${safe}) Tj ET`;\r\n })\r\n .join('\\n');\r\n\r\n const stream = content;\r\n const objects = [\r\n '1 0 obj<< /Type /Catalog /Pages 2 0 R >>endobj\\n',\r\n '2 0 obj<< /Type /Pages /Kids [3 0 R] /Count 1 >>endobj\\n',\r\n '3 0 obj<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Contents 4 0 R /Resources<< /Font<< /F1 5 0 R >> >> >>endobj\\n',\r\n `4 0 obj<< /Length ${stream.length} >>stream\\n${stream}\\nendstream\\nendobj\\n`,\r\n '5 0 obj<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>endobj\\n',\r\n ];\r\n\r\n let body = '%PDF-1.1\\n';\r\n const offsets: number[] = [0];\r\n for (const obj of objects) {\r\n offsets.push(body.length);\r\n body += obj;\r\n }\r\n const xrefStart = body.length;\r\n body += `xref\\n0 ${objects.length + 1}\\n`;\r\n body += '0000000000 65535 f \\n';\r\n for (let i = 1; i <= objects.length; i += 1) {\r\n body += `${String(offsets[i]).padStart(10, '0')} 00000 n \\n`;\r\n }\r\n body += `trailer<< /Size ${objects.length + 1} /Root 1 0 R >>\\n`;\r\n body += `startxref\\n${xrefStart}\\n%%EOF\\n`;\r\n\r\n return new Blob([body], { type: 'application/pdf' });\r\n }\r\n}\r\n","import type {\r\n ExportRequestedPayload,\r\n GridEvent,\r\n} from '../../../../domain/types/GridEvent';\r\nimport type {\r\n GridPlugin,\r\n GridPluginContext,\r\n} from '../../../../application/plugins/GridPlugin';\r\nimport type { PdfRenderer } from '../../../../application/ports/PdfRenderer';\r\nimport type { DocumentPdfTemplate } from './documentTemplate';\r\nimport { TextPdfRenderer } from './TextPdfRenderer';\r\nimport { downloadBlob } from '../../excel/src/buildXlsxBlob';\r\n\r\nexport type PdfExportPluginOptions = {\r\n renderer?: PdfRenderer;\r\n download?: boolean;\r\n /** Document chrome for VazirmatnPdfRenderer (PR-141). */\r\n template?: DocumentPdfTemplate;\r\n onBlob?: (blob: Blob, meta: { fileName: string; rowCount: number }) => void;\r\n};\r\n\r\n/**\r\n * Subscribes to EXPORT_REQUESTED (format=pdf); Domain stays untouched.\r\n *\r\n * Default renderer is legacy `TextPdfRenderer` so `./plugins/pdf` stays free of\r\n * font bytes (PR-76 / D15). For Persian PDF:\r\n * `import { createVazirmatnPdfExportPlugin } from 'persian-data-grid/plugins/pdf/fonts/vazirmatn'`.\r\n */\r\nexport class PdfExportPlugin implements GridPlugin {\r\n readonly name = 'pdf-export';\r\n private unsub: (() => void) | null = null;\r\n private readonly renderer: PdfRenderer;\r\n\r\n constructor(private readonly options: PdfExportPluginOptions = {}) {\r\n this.renderer = options.renderer ?? new TextPdfRenderer();\r\n }\r\n\r\n register(ctx: GridPluginContext): void {\r\n this.unsub = ctx.bus.subscribeAll((event) => {\r\n void this.onEvent(ctx, event);\r\n });\r\n }\r\n\r\n dispose(): void {\r\n this.unsub?.();\r\n this.unsub = null;\r\n }\r\n\r\n private async onEvent(\r\n ctx: GridPluginContext,\r\n event: GridEvent,\r\n ): Promise<void> {\r\n if (event.type !== 'EXPORT_REQUESTED') return;\r\n if (event.tableId !== ctx.tableId) return;\r\n\r\n const payload = event.payload as ExportRequestedPayload;\r\n if (payload.format !== 'pdf') return;\r\n\r\n try {\r\n const source = ctx.query.getExportSource(\r\n payload.collectionScope ?? 'active',\r\n );\r\n if (!source) {\r\n throw new Error('NO_EXPORT_SOURCE');\r\n }\r\n\r\n const blob = await this.renderer.render(source, {\r\n title: payload.fileName ?? 'Export',\r\n direction: payload.direction,\r\n template: this.options.template,\r\n });\r\n\r\n const fileName =\r\n payload.fileName ??\r\n `export-${new Date().toISOString().slice(0, 10)}.pdf`;\r\n const rowCount = source.rows.length;\r\n\r\n if (this.options.download !== false) {\r\n downloadBlob(blob, fileName);\r\n }\r\n this.options.onBlob?.(blob, { fileName, rowCount });\r\n\r\n await ctx.bus.publish({\r\n eventId: `${Date.now()}-pdf-ok`,\r\n type: 'PDF_EXPORT_COMPLETED',\r\n tableId: ctx.tableId,\r\n streamId: `table/${ctx.tableId}/view`,\r\n version: 0,\r\n occurredAt: Date.now(),\r\n actorId: event.actorId,\r\n correlationId: event.correlationId,\r\n causationId: event.eventId,\r\n payload: {\r\n format: 'pdf' as const,\r\n rowCount,\r\n blobId: fileName,\r\n },\r\n });\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n await ctx.bus.publish({\r\n eventId: `${Date.now()}-pdf-fail`,\r\n type: 'PDF_EXPORT_FAILED',\r\n tableId: ctx.tableId,\r\n streamId: `table/${ctx.tableId}/view`,\r\n version: 0,\r\n occurredAt: Date.now(),\r\n actorId: event.actorId,\r\n correlationId: event.correlationId,\r\n causationId: event.eventId,\r\n payload: {\r\n format: 'pdf' as const,\r\n code: message === 'NO_EXPORT_SOURCE' ? message : 'EXPORT_FAILED',\r\n message,\r\n },\r\n });\r\n }\r\n }\r\n}\r\n","import { deflateSync } from 'fflate';\r\n\r\nconst encoder = new TextEncoder();\r\n\r\nfunction concat(chunks: Uint8Array[]): Uint8Array {\r\n let total = 0;\r\n for (const c of chunks) total += c.length;\r\n const out = new Uint8Array(total);\r\n let o = 0;\r\n for (const c of chunks) {\r\n out.set(c, o);\r\n o += c.length;\r\n }\r\n return out;\r\n}\r\n\r\nfunction pad10(n: number): string {\r\n return String(n).padStart(10, '0');\r\n}\r\n\r\nexport class PdfBuilder {\r\n private readonly objects: Uint8Array[] = [];\r\n\r\n addAscii(body: string): number {\r\n this.objects.push(encoder.encode(body));\r\n return this.objects.length;\r\n }\r\n\r\n replaceAscii(objNum: number, body: string): void {\r\n this.objects[objNum - 1] = encoder.encode(body);\r\n }\r\n\r\n addFlate(uncompressed: Uint8Array, extraDict = ''): number {\r\n const compressed = deflateSync(uncompressed, { level: 9 });\r\n const dict = `<< /Filter /FlateDecode /Length ${compressed.length} ${extraDict}>>`;\r\n const header = encoder.encode(`${dict}stream\\n`);\r\n const tail = encoder.encode('\\nendstream\\n');\r\n this.objects.push(concat([header, compressed, tail]));\r\n return this.objects.length;\r\n }\r\n\r\n /** Raw stream (e.g. JPEG with `/Filter /DCTDecode`). `dict` is a full `<< … >>`. */\r\n addRawStream(data: Uint8Array, dict: string): number {\r\n const header = encoder.encode(`${dict}\\nstream\\n`);\r\n const tail = encoder.encode('\\nendstream\\n');\r\n this.objects.push(concat([header, data, tail]));\r\n return this.objects.length;\r\n }\r\n\r\n build(): Uint8Array {\r\n const parts: Uint8Array[] = [encoder.encode('%PDF-1.4\\n%\\x80\\x80\\x80\\x80\\n')];\r\n const offsets = [0];\r\n let pos = parts[0].length;\r\n for (let i = 0; i < this.objects.length; i += 1) {\r\n offsets.push(pos);\r\n const head = encoder.encode(`${i + 1} 0 obj\\n`);\r\n const tail = encoder.encode('endobj\\n');\r\n const body = this.objects[i];\r\n parts.push(head, body, tail);\r\n pos += head.length + body.length + tail.length;\r\n }\r\n const xrefStart = pos;\r\n let xref = `xref\\n0 ${this.objects.length + 1}\\n0000000000 65535 f \\n`;\r\n for (let i = 1; i <= this.objects.length; i += 1) {\r\n xref += `${pad10(offsets[i] ?? 0)} 00000 n \\n`;\r\n }\r\n xref += `trailer<< /Size ${this.objects.length + 1} /Root 1 0 R >>\\n`;\r\n xref += `startxref\\n${xrefStart}\\n%%EOF\\n`;\r\n parts.push(encoder.encode(xref));\r\n return concat(parts);\r\n }\r\n}\r\n\r\nexport function pdfEscapeTextHex(gids: readonly number[]): string {\r\n return gids.map((g) => g.toString(16).padStart(4, '0')).join('');\r\n}\r\n","/** Minimal TrueType reader for CIDFontType2 embedding (cmap + metrics). */\r\n\r\nexport type TtfMetrics = {\r\n unitsPerEm: number;\r\n xMin: number;\r\n yMin: number;\r\n xMax: number;\r\n yMax: number;\r\n ascent: number;\r\n descent: number;\r\n italicAngle: number;\r\n numGlyphs: number;\r\n};\r\n\r\nexport type ParsedTtf = {\r\n bytes: Uint8Array;\r\n metrics: TtfMetrics;\r\n glyphId: (codePoint: number) => number;\r\n advance: (glyphId: number) => number;\r\n};\r\n\r\nfunction u16(buf: Uint8Array, offset: number): number {\r\n return (buf[offset] << 8) | buf[offset + 1];\r\n}\r\n\r\nfunction u32(buf: Uint8Array, offset: number): number {\r\n return (\r\n ((buf[offset] << 24) | (buf[offset + 1] << 16) | (buf[offset + 2] << 8) | buf[offset + 3]) >>>\r\n 0\r\n );\r\n}\r\n\r\nfunction i16(buf: Uint8Array, offset: number): number {\r\n const v = u16(buf, offset);\r\n return v > 32767 ? v - 65536 : v;\r\n}\r\n\r\nfunction tagAt(buf: Uint8Array, offset: number): string {\r\n return String.fromCharCode(buf[offset], buf[offset + 1], buf[offset + 2], buf[offset + 3]);\r\n}\r\n\r\nfunction tableMap(buf: Uint8Array): Map<string, { offset: number; length: number }> {\r\n const numTables = u16(buf, 4);\r\n const tables = new Map<string, { offset: number; length: number }>();\r\n for (let i = 0; i < numTables; i += 1) {\r\n const o = 12 + i * 16;\r\n tables.set(tagAt(buf, o), { offset: u32(buf, o + 8), length: u32(buf, o + 12) });\r\n }\r\n return tables;\r\n}\r\n\r\nfunction parseCmap(buf: Uint8Array, cmapOffset: number): (code: number) => number {\r\n const numTables = u16(buf, cmapOffset + 2);\r\n let format4 = -1;\r\n let format12 = -1;\r\n for (let i = 0; i < numTables; i += 1) {\r\n const rec = cmapOffset + 4 + i * 8;\r\n const platform = u16(buf, rec);\r\n const encoding = u16(buf, rec + 2);\r\n const offset = cmapOffset + u32(buf, rec + 4);\r\n const format = u16(buf, offset);\r\n if (format === 12 && (platform === 3 || platform === 0)) format12 = offset;\r\n if (format === 4 && (platform === 3 || platform === 0) && encoding <= 1) {\r\n format4 = offset;\r\n }\r\n }\r\n\r\n if (format12 >= 0) {\r\n const nGroups = u32(buf, format12 + 12);\r\n const groups: Array<{ start: number; end: number; glyph: number }> = [];\r\n for (let i = 0; i < nGroups; i += 1) {\r\n const o = format12 + 16 + i * 12;\r\n groups.push({\r\n start: u32(buf, o),\r\n end: u32(buf, o + 4),\r\n glyph: u32(buf, o + 8),\r\n });\r\n }\r\n return (code: number) => {\r\n for (const g of groups) {\r\n if (code >= g.start && code <= g.end) return g.glyph + (code - g.start);\r\n }\r\n return 0;\r\n };\r\n }\r\n\r\n if (format4 < 0) {\r\n return () => 0;\r\n }\r\n\r\n const segCount = u16(buf, format4 + 6) / 2;\r\n const endCodes = format4 + 14;\r\n const startCodes = endCodes + 2 + segCount * 2;\r\n const idDeltas = startCodes + segCount * 2;\r\n const idRangeOffsets = idDeltas + segCount * 2;\r\n\r\n return (code: number) => {\r\n for (let i = 0; i < segCount; i += 1) {\r\n const end = u16(buf, endCodes + i * 2);\r\n if (code > end) continue;\r\n const start = u16(buf, startCodes + i * 2);\r\n if (code < start) return 0;\r\n const rangeOffset = u16(buf, idRangeOffsets + i * 2);\r\n const delta = i16(buf, idDeltas + i * 2);\r\n if (rangeOffset === 0) return (code + delta) & 0xffff;\r\n const glyphOffset =\r\n idRangeOffsets + i * 2 + rangeOffset + (code - start) * 2;\r\n const glyph = u16(buf, glyphOffset);\r\n if (glyph === 0) return 0;\r\n return (glyph + delta) & 0xffff;\r\n }\r\n return 0;\r\n };\r\n}\r\n\r\nexport function parseTtf(bytes: Uint8Array): ParsedTtf {\r\n const tables = tableMap(bytes);\r\n const head = tables.get('head');\r\n const hhea = tables.get('hhea');\r\n const hmtx = tables.get('hmtx');\r\n const maxp = tables.get('maxp');\r\n const cmap = tables.get('cmap');\r\n if (!head || !hhea || !hmtx || !maxp || !cmap) {\r\n throw new Error('VAZIRMATN_TTF_TABLES');\r\n }\r\n\r\n const unitsPerEm = u16(bytes, head.offset + 18);\r\n const metrics: TtfMetrics = {\r\n unitsPerEm,\r\n xMin: i16(bytes, head.offset + 36),\r\n yMin: i16(bytes, head.offset + 38),\r\n xMax: i16(bytes, head.offset + 40),\r\n yMax: i16(bytes, head.offset + 42),\r\n ascent: i16(bytes, hhea.offset + 4),\r\n descent: i16(bytes, hhea.offset + 6),\r\n italicAngle: 0,\r\n numGlyphs: u16(bytes, maxp.offset + 4),\r\n };\r\n\r\n const numberOfHMetrics = u16(bytes, hhea.offset + 34);\r\n const advances = new Uint16Array(metrics.numGlyphs);\r\n for (let i = 0; i < numberOfHMetrics; i += 1) {\r\n advances[i] = u16(bytes, hmtx.offset + i * 4);\r\n }\r\n const lastAdvance = advances[numberOfHMetrics - 1] ?? metrics.unitsPerEm;\r\n for (let i = numberOfHMetrics; i < metrics.numGlyphs; i += 1) {\r\n advances[i] = lastAdvance;\r\n }\r\n\r\n const glyphId = parseCmap(bytes, cmap.offset);\r\n return {\r\n bytes,\r\n metrics,\r\n glyphId,\r\n advance: (gid) => advances[gid] ?? lastAdvance,\r\n };\r\n}\r\n\r\nexport function pdfWidth(advance: number, unitsPerEm: number): number {\r\n return (advance * 1000) / unitsPerEm;\r\n}\r\n","/**\r\n * Arabic presentation-form shaping + a simple RTL visual order.\r\n * Isolated letters are readable; this joins Persian letters for PDF.\r\n */\r\n\r\ntype Forms = readonly [isolated: number, final: number, initial: number, medial: number];\r\n\r\nconst FORMS: Record<number, Forms> = {\r\n 0x0627: [0xfe8d, 0xfe8e, 0xfe8d, 0xfe8e],\r\n 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92],\r\n 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59],\r\n 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98],\r\n 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c],\r\n 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0],\r\n 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d],\r\n 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4],\r\n 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8],\r\n 0x062f: [0xfea9, 0xfeaa, 0xfea9, 0xfeaa],\r\n 0x0630: [0xfeab, 0xfeac, 0xfeab, 0xfeac],\r\n 0x0631: [0xfead, 0xfeae, 0xfead, 0xfeae],\r\n 0x0632: [0xfeaf, 0xfeb0, 0xfeaf, 0xfeb0],\r\n 0x0698: [0xfb8a, 0xfb8b, 0xfb8a, 0xfb8b],\r\n 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4],\r\n 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8],\r\n 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc],\r\n 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0],\r\n 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4],\r\n 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8],\r\n 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc],\r\n 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0],\r\n 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4],\r\n 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8],\r\n 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91],\r\n 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc],\r\n 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95],\r\n 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0],\r\n 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4],\r\n 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8],\r\n 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec],\r\n 0x0648: [0xfeed, 0xfeee, 0xfeed, 0xfeee],\r\n 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff],\r\n 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4],\r\n 0x0622: [0xfe81, 0xfe82, 0xfe81, 0xfe82],\r\n 0x0629: [0xfe93, 0xfe94, 0xfe93, 0xfe94],\r\n};\r\n\r\nconst RIGHT_ONLY = new Set([\r\n 0x0622, 0x0627, 0x0629, 0x062f, 0x0630, 0x0631, 0x0632, 0x0698, 0x0648,\r\n]);\r\n\r\nfunction canConnect(cp: number, side: 'left' | 'right'): boolean {\r\n if (!FORMS[cp]) return false;\r\n if (RIGHT_ONLY.has(cp)) return side === 'right';\r\n return true;\r\n}\r\n\r\nfunction isLetter(cp: number): boolean {\r\n return cp in FORMS;\r\n}\r\n\r\nexport function shapeArabic(input: string): string {\r\n const cps = [...input].map((ch) => ch.codePointAt(0) ?? 0);\r\n const out: number[] = [];\r\n for (let i = 0; i < cps.length; i += 1) {\r\n const cp = cps[i] ?? 0;\r\n const forms = FORMS[cp];\r\n if (!forms) {\r\n out.push(cp);\r\n continue;\r\n }\r\n let prev = i - 1;\r\n while (prev >= 0 && (cps[prev] === 0x0640 || cps[prev] === 0x200c)) prev -= 1;\r\n let next = i + 1;\r\n while (next < cps.length && (cps[next] === 0x0640 || cps[next] === 0x200d)) next += 1;\r\n const joinsPrev = prev >= 0 && isLetter(cps[prev] ?? 0) && canConnect(cps[prev] ?? 0, 'left');\r\n const joinsNext =\r\n next < cps.length && isLetter(cps[next] ?? 0) && canConnect(cp, 'left');\r\n const form = joinsPrev && joinsNext ? 3 : joinsNext ? 2 : joinsPrev ? 1 : 0;\r\n out.push(forms[form] ?? cp);\r\n }\r\n return String.fromCodePoint(...out);\r\n}\r\n\r\nconst LTR_RE = /^[0-9A-Za-z۰-۹.,:%/+-]+$/;\r\n\r\nfunction reverseGraphemes(s: string): string {\r\n return [...s].reverse().join('');\r\n}\r\n\r\n/** Visual order for an RTL line (Persian + Latin/digit islands). */\r\nexport function rtlVisual(input: string): string {\r\n const shaped = shapeArabic(input);\r\n const parts = shaped.split(/([0-9A-Za-z۰-۹.,:%/+-]+)/);\r\n const visual: string[] = [];\r\n for (let i = parts.length - 1; i >= 0; i -= 1) {\r\n const part = parts[i] ?? '';\r\n if (!part) continue;\r\n visual.push(LTR_RE.test(part) ? part : reverseGraphemes(part));\r\n }\r\n return visual.join('');\r\n}\r\n","import type { ExportSource } from '../../../../application/plugins/GridPlugin';\r\nimport type {\r\n PdfRenderOptions,\r\n PdfRenderer,\r\n} from '../../../../application/ports/PdfRenderer';\r\nimport { formatExportValue } from '../../excel/src/formatExportValue';\r\nimport type { DocumentPdfTemplate } from './documentTemplate';\r\nimport { PdfBuilder, pdfEscapeTextHex } from './pdfBuilder';\r\nimport { parseTtf, pdfWidth, type ParsedTtf } from './parseTtf';\r\nimport { rtlVisual } from './shapeRtl';\r\n\r\nconst PAGE_W = 595;\r\nconst PAGE_H = 842;\r\nconst MARGIN = 36;\r\nconst TITLE_SIZE = 12;\r\nconst SUB_SIZE = 9;\r\nconst CELL_SIZE = 8;\r\nconst ROW_H = 16;\r\nconst HEADER_H = 18;\r\nconst FOOTER_H = 22;\r\nconst SIGN_H = 56;\r\n\r\nfunction cellText(raw: unknown, fieldType?: string): string {\r\n if (fieldType === 'checkbox') {\r\n return raw ? 'بله' : 'خیر';\r\n }\r\n return formatExportValue(raw, fieldType);\r\n}\r\n\r\nfunction measure(font: ParsedTtf, text: string, size: number): number {\r\n let w = 0;\r\n for (const ch of text) {\r\n const cp = ch.codePointAt(0) ?? 0;\r\n const gid = font.glyphId(cp);\r\n w += pdfWidth(font.advance(gid), font.metrics.unitsPerEm);\r\n }\r\n return (w * size) / 1000;\r\n}\r\n\r\nfunction fitText(\r\n font: ParsedTtf,\r\n text: string,\r\n size: number,\r\n maxWidth: number,\r\n): string {\r\n if (measure(font, text, size) <= maxWidth) return text;\r\n const ellipsis = '...';\r\n let lo = 0;\r\n let hi = [...text].length;\r\n while (lo < hi) {\r\n const mid = Math.ceil((lo + hi) / 2);\r\n const slice = [...text].slice(0, mid).join('') + ellipsis;\r\n if (measure(font, slice, size) <= maxWidth) lo = mid;\r\n else hi = mid - 1;\r\n }\r\n if (lo <= 0) return ellipsis;\r\n return [...text].slice(0, lo).join('') + ellipsis;\r\n}\r\n\r\nfunction toGids(font: ParsedTtf, text: string): number[] {\r\n const gids: number[] = [];\r\n for (const ch of text) {\r\n const cp = ch.codePointAt(0) ?? 0;\r\n gids.push(font.glyphId(cp));\r\n }\r\n return gids;\r\n}\r\n\r\nfunction toUnicodeCmap(pairs: Array<{ gid: number; unicode: number }>): string {\r\n const unique = new Map<number, number>();\r\n for (const p of pairs) {\r\n if (!unique.has(p.gid)) unique.set(p.gid, p.unicode);\r\n }\r\n const entries = [...unique.entries()];\r\n const chunks: string[] = [];\r\n for (let i = 0; i < entries.length; i += 100) {\r\n const slice = entries.slice(i, i + 100);\r\n chunks.push(`${slice.length} beginbfchar`);\r\n for (const [gid, uni] of slice) {\r\n const g = gid.toString(16).padStart(4, '0');\r\n const u = uni.toString(16).padStart(uni > 0xffff ? 8 : 4, '0');\r\n chunks.push(`<${g}> <${u}>`);\r\n }\r\n chunks.push('endbfchar');\r\n }\r\n return `%!PS-Adobe-3.0 Resource-CMap\r\n%%BeginResource: CMap (Vazirmatn-UCS)\r\n/CIDInit /ProcSet findresource begin\r\n12 dict begin\r\nbegincmap\r\n/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def\r\n/CMapName /Vazirmatn-UCS def\r\n/CMapType 2 def\r\n1 begincodespacerange\r\n<0000> <FFFF>\r\nendcodespacerange\r\n${chunks.join('\\n')}\r\nendcmap\r\nCMapName currentdict /CMap defineresource pop\r\nend\r\nend\r\n%%EndResource\r\n`;\r\n}\r\n\r\nfunction toSumNumber(raw: unknown): number | null {\r\n if (typeof raw === 'number' && Number.isFinite(raw)) return Math.trunc(raw);\r\n if (typeof raw === 'bigint') {\r\n const n = Number(raw);\r\n return Number.isSafeInteger(n) ? n : null;\r\n }\r\n if (typeof raw === 'string') {\r\n const n = Number(\r\n raw\r\n .trim()\r\n .replace(/[۰-۹]/g, (d) => String('۰۱۲۳۴۵۶۷۸۹'.indexOf(d)))\r\n .replace(/,/g, ''),\r\n );\r\n return Number.isFinite(n) ? Math.trunc(n) : null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction readJpegSize(bytes: Uint8Array): { w: number; h: number } | null {\r\n if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8) return null;\r\n let i = 2;\r\n while (i + 9 < bytes.length) {\r\n if (bytes[i] !== 0xff) {\r\n i += 1;\r\n continue;\r\n }\r\n const marker = bytes[i + 1]!;\r\n const len = (bytes[i + 2]! << 8) | bytes[i + 3]!;\r\n if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2) {\r\n const h = (bytes[i + 5]! << 8) | bytes[i + 6]!;\r\n const w = (bytes[i + 7]! << 8) | bytes[i + 8]!;\r\n return { w, h };\r\n }\r\n i += 2 + len;\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Persian table PDF: embeds Vazirmatn (OFL) as CIDFontType2, RTL grid, no 8×40 cap.\r\n * PR-141: optional {@link DocumentPdfTemplate} for document chrome.\r\n */\r\nexport class VazirmatnPdfRenderer implements PdfRenderer {\r\n constructor(private readonly fontBytes: Uint8Array) {\r\n if (!fontBytes?.byteLength) {\r\n throw new Error(\r\n 'VazirmatnPdfRenderer requires font bytes from persian-data-grid/plugins/pdf/fonts/vazirmatn',\r\n );\r\n }\r\n }\r\n\r\n async render(\r\n source: ExportSource,\r\n options?: PdfRenderOptions,\r\n ): Promise<Blob> {\r\n const font = parseTtf(this.fontBytes);\r\n const rtl = options?.direction !== 'ltr';\r\n const template = options?.template as DocumentPdfTemplate | undefined;\r\n const title =\r\n template?.header?.title ?? options?.title ?? 'اقلام سند';\r\n const columns = source.columns.filter((c) => c.fieldName !== 'index');\r\n const colCount = Math.max(1, columns.length);\r\n const tableWidth = PAGE_W - MARGIN * 2;\r\n const colW = tableWidth / colCount;\r\n const used: Array<{ gid: number; unicode: number }> = [];\r\n\r\n const note = (text: string) => {\r\n const visual = rtl ? rtlVisual(text) : text;\r\n for (const ch of visual) {\r\n const cp = ch.codePointAt(0) ?? 0;\r\n used.push({ gid: font.glyphId(cp), unicode: cp });\r\n }\r\n return visual;\r\n };\r\n\r\n const titleVisual = note(title);\r\n const subtitleVisual = template?.header?.subtitle\r\n ? note(template.header.subtitle)\r\n : null;\r\n const metaVisuals = (template?.header?.meta ?? []).map((m) => note(m));\r\n const footerTextVisual = template?.footer?.text\r\n ? note(template.footer.text)\r\n : null;\r\n const pageFmt = template?.footer?.pageNumberFormat ?? '{page} / {pages}';\r\n const showPageNumber =\r\n template != null && template.footer?.showPageNumber !== false;\r\n const repeatHeader = template == null || template.repeatTableHeader !== false;\r\n const totalsLabelVisual = template?.pageTotals\r\n ? note(template.pageTotals.label ?? 'جمع صفحه')\r\n : null;\r\n const signLabelVisual = template?.signature\r\n ? note(template.signature.label ?? 'امضا')\r\n : null;\r\n const stampLabelVisual = template?.stamp\r\n ? note(template.stamp.label ?? 'مهر')\r\n : null;\r\n\r\n // Pre-register digits / separators used in page numbers & totals\r\n note('0123456789 /');\r\n\r\n const headers = columns.map((c) =>\r\n note(c.fieldCaption ?? c.fieldName),\r\n );\r\n const body = source.rows.map((row) =>\r\n columns.map((col) => {\r\n const cell = row.cells[col.fieldName];\r\n const raw = cell?.display ?? cell?.value ?? '';\r\n return note(cellText(raw, col.fieldType));\r\n }),\r\n );\r\n const bodyNums = source.rows.map((row) => {\r\n const map = new Map<string, number | null>();\r\n for (const col of columns) {\r\n const cell = row.cells[col.fieldName];\r\n const raw = cell?.value ?? cell?.display ?? '';\r\n map.set(col.fieldName, toSumNumber(raw));\r\n }\r\n return map;\r\n });\r\n\r\n let logoDrawW = template?.logo?.width ?? 64;\r\n let logoDrawH = template?.logo?.height ?? 48;\r\n if (template?.logo?.jpegBytes?.byteLength) {\r\n const size = readJpegSize(template.logo.jpegBytes);\r\n if (size && template.logo.height == null) {\r\n logoDrawH = Math.round((logoDrawW * size.h) / Math.max(1, size.w));\r\n }\r\n }\r\n\r\n const headerBand = template\r\n ? Math.max(\r\n logoDrawH,\r\n 28 + (subtitleVisual ? 14 : 0) + metaVisuals.length * 12,\r\n ) + 12\r\n : TITLE_SIZE + 16;\r\n const footerBand =\r\n template && (footerTextVisual || showPageNumber) ? FOOTER_H + 8 : 0;\r\n const signBand =\r\n template && (signLabelVisual || stampLabelVisual) ? SIGN_H + 8 : 0;\r\n const totalsBand = template?.pageTotals ? ROW_H + 4 : 0;\r\n\r\n const usable = (withSign: boolean) =>\r\n PAGE_H -\r\n MARGIN * 2 -\r\n headerBand -\r\n footerBand -\r\n (repeatHeader ? HEADER_H : 0) -\r\n totalsBand -\r\n (withSign ? signBand : 0);\r\n\r\n const pageRowCounts: number[] = [];\r\n let remaining = body.length;\r\n if (remaining === 0) {\r\n pageRowCounts.push(0);\r\n } else {\r\n while (remaining > 0) {\r\n const isLikelyLast = remaining <= Math.floor(usable(false) / ROW_H);\r\n const budget = Math.max(\r\n 1,\r\n Math.floor(usable(isLikelyLast && signBand > 0) / ROW_H),\r\n );\r\n const take = Math.min(remaining, budget);\r\n pageRowCounts.push(take);\r\n remaining -= take;\r\n if (pageRowCounts.length > 10_000) break;\r\n }\r\n if (signBand > 0) {\r\n const lastBudget = Math.max(1, Math.floor(usable(true) / ROW_H));\r\n const lastIdx = pageRowCounts.length - 1;\r\n if ((pageRowCounts[lastIdx] ?? 0) > lastBudget) {\r\n const overflow = (pageRowCounts[lastIdx] ?? 0) - lastBudget;\r\n pageRowCounts[lastIdx] = lastBudget;\r\n pageRowCounts.push(overflow);\r\n }\r\n }\r\n }\r\n const pageCount = Math.max(1, pageRowCounts.length);\r\n\r\n // Register page-number & totals glyph strings before embedding the font\r\n const pageLabels = Array.from({ length: pageCount }, (_, p) =>\r\n note(\r\n pageFmt\r\n .replace('{page}', String(p + 1))\r\n .replace('{pages}', String(pageCount)),\r\n ),\r\n );\r\n const pageTotalCells: string[][] = pageRowCounts.map((take, p) => {\r\n if (!template?.pageTotals || !totalsLabelVisual) return [];\r\n const start = pageRowCounts\r\n .slice(0, p)\r\n .reduce((a, n) => a + n, 0);\r\n const numSlice = bodyNums.slice(start, start + take);\r\n const sums = new Map<string, number>();\r\n for (const colId of template.pageTotals.columns) {\r\n let s = 0;\r\n for (const row of numSlice) {\r\n const n = row.get(colId);\r\n if (n != null) s += n;\r\n }\r\n sums.set(colId, s);\r\n }\r\n return columns.map((col, colIdx) => {\r\n const isTotalCol = template.pageTotals!.columns.includes(col.fieldName);\r\n if (isTotalCol) return note(String(sums.get(col.fieldName) ?? 0));\r\n const labelCol = columns.findIndex(\r\n (c) => !template.pageTotals!.columns.includes(c.fieldName),\r\n );\r\n if (colIdx === (labelCol >= 0 ? labelCol : 0)) return totalsLabelVisual;\r\n return '';\r\n });\r\n });\r\n\r\n const metrics = font.metrics;\r\n const scale = 1000 / metrics.unitsPerEm;\r\n const bbox = [\r\n Math.round(metrics.xMin * scale),\r\n Math.round(metrics.yMin * scale),\r\n Math.round(metrics.xMax * scale),\r\n Math.round(metrics.yMax * scale),\r\n ];\r\n const ascent = Math.round(metrics.ascent * scale);\r\n const descent = Math.round(metrics.descent * scale);\r\n\r\n const usedGids = [...new Set(used.map((u) => u.gid))].sort((a, b) => a - b);\r\n const wParts = usedGids.map((gid) => {\r\n const w = Math.round(pdfWidth(font.advance(gid), metrics.unitsPerEm));\r\n return `${gid} [${w}]`;\r\n });\r\n\r\n const pdf = new PdfBuilder();\r\n pdf.addAscii('<< /Type /Catalog /Pages 2 0 R >>\\n');\r\n const pagesObj = 2;\r\n pdf.addAscii('<< /Type /Pages /Kids [] /Count 0 >>\\n');\r\n\r\n const fontFile = pdf.addFlate(\r\n font.bytes,\r\n `/Length1 ${font.bytes.length} `,\r\n );\r\n const descriptor = pdf.addAscii(\r\n `<< /Type /FontDescriptor /FontName /Vazirmatn /Flags 32 /FontBBox [${bbox.join(' ')}] /ItalicAngle 0 /Ascent ${ascent} /Descent ${descent} /CapHeight ${ascent} /StemV 80 /FontFile2 ${fontFile} 0 R >>\\n`,\r\n );\r\n const cidFont = pdf.addAscii(\r\n `<< /Type /Font /Subtype /CIDFontType2 /BaseFont /Vazirmatn /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor ${descriptor} 0 R /DW 500 /W [${wParts.join(' ')}] /CIDToGIDMap /Identity >>\\n`,\r\n );\r\n const toUnicode = pdf.addFlate(\r\n new TextEncoder().encode(toUnicodeCmap(used)),\r\n );\r\n const type0 = pdf.addAscii(\r\n `<< /Type /Font /Subtype /Type0 /BaseFont /Vazirmatn /Encoding /Identity-H /DescendantFonts [${cidFont} 0 R] /ToUnicode ${toUnicode} 0 R >>\\n`,\r\n );\r\n\r\n let logoXObject: number | null = null;\r\n if (template?.logo?.jpegBytes?.byteLength) {\r\n const jpeg = template.logo.jpegBytes;\r\n const size = readJpegSize(jpeg) ?? { w: logoDrawW, h: logoDrawH };\r\n logoXObject = pdf.addRawStream(\r\n jpeg,\r\n `<< /Type /XObject /Subtype /Image /Width ${size.w} /Height ${size.h} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${jpeg.length} >>`,\r\n );\r\n }\r\n\r\n const pageObjNums: number[] = [];\r\n\r\n const drawText = (\r\n ops: string[],\r\n text: string,\r\n size: number,\r\n x: number,\r\n y: number,\r\n ) => {\r\n ops.push('BT');\r\n ops.push(`/F1 ${size} Tf`);\r\n ops.push(`${x.toFixed(2)} ${y.toFixed(2)} Td`);\r\n ops.push(`<${pdfEscapeTextHex(toGids(font, text))}> Tj`);\r\n ops.push('ET');\r\n };\r\n\r\n const drawCell = (\r\n ops: string[],\r\n col: number,\r\n top: number,\r\n height: number,\r\n text: string,\r\n header: boolean,\r\n ) => {\r\n const x = rtl\r\n ? PAGE_W - MARGIN - (col + 1) * colW\r\n : MARGIN + col * colW;\r\n if (header) {\r\n ops.push('0.92 g');\r\n ops.push(\r\n `${x.toFixed(2)} ${(top - height).toFixed(2)} ${colW.toFixed(2)} ${height.toFixed(2)} re f`,\r\n );\r\n ops.push('0 g');\r\n }\r\n ops.push('0.55 w 0.35 g');\r\n ops.push(\r\n `${x.toFixed(2)} ${(top - height).toFixed(2)} ${colW.toFixed(2)} ${height.toFixed(2)} re S`,\r\n );\r\n ops.push('0 g');\r\n if (!text) return;\r\n const fitted = fitText(font, text, CELL_SIZE, colW - 6);\r\n const tw = measure(font, fitted, CELL_SIZE);\r\n const tx = rtl ? x + colW - 3 - tw : x + 3;\r\n const ty = top - height + 4.5;\r\n drawText(ops, fitted, CELL_SIZE, tx, ty);\r\n };\r\n\r\n let rowCursor = 0;\r\n for (let p = 0; p < pageCount; p += 1) {\r\n const ops: string[] = [];\r\n const isLast = p === pageCount - 1;\r\n let y = PAGE_H - MARGIN;\r\n\r\n if (template) {\r\n if (logoXObject != null) {\r\n const lx = rtl ? PAGE_W - MARGIN - logoDrawW : MARGIN;\r\n const ly = y - logoDrawH;\r\n ops.push('q');\r\n ops.push(\r\n `${logoDrawW} 0 0 ${logoDrawH} ${lx.toFixed(2)} ${ly.toFixed(2)} cm /Im1 Do`,\r\n );\r\n ops.push('Q');\r\n }\r\n const textOriginX = rtl\r\n ? PAGE_W -\r\n MARGIN -\r\n (logoXObject != null ? logoDrawW + 10 : 0)\r\n : MARGIN + (logoXObject != null ? logoDrawW + 10 : 0);\r\n let ty = y - 12;\r\n const tw = measure(font, titleVisual, TITLE_SIZE);\r\n drawText(\r\n ops,\r\n titleVisual,\r\n TITLE_SIZE,\r\n rtl ? textOriginX - tw : textOriginX,\r\n ty,\r\n );\r\n ty -= 14;\r\n if (subtitleVisual) {\r\n const sw = measure(font, subtitleVisual, SUB_SIZE);\r\n drawText(\r\n ops,\r\n subtitleVisual,\r\n SUB_SIZE,\r\n rtl ? textOriginX - sw : textOriginX,\r\n ty,\r\n );\r\n ty -= 12;\r\n }\r\n for (const meta of metaVisuals) {\r\n const mw = measure(font, meta, SUB_SIZE);\r\n drawText(\r\n ops,\r\n meta,\r\n SUB_SIZE,\r\n rtl ? textOriginX - mw : textOriginX,\r\n ty,\r\n );\r\n ty -= 12;\r\n }\r\n y = PAGE_H - MARGIN - headerBand;\r\n } else {\r\n const titleW = measure(font, titleVisual, TITLE_SIZE);\r\n drawText(\r\n ops,\r\n titleVisual,\r\n TITLE_SIZE,\r\n rtl ? PAGE_W - MARGIN - titleW : MARGIN,\r\n y - 12,\r\n );\r\n y = PAGE_H - MARGIN - headerBand;\r\n }\r\n\r\n if (repeatHeader || p === 0) {\r\n headers.forEach((h, col) => drawCell(ops, col, y, HEADER_H, h, true));\r\n y -= HEADER_H;\r\n }\r\n\r\n const take = pageRowCounts[p] ?? 0;\r\n const slice = body.slice(rowCursor, rowCursor + take);\r\n for (const row of slice) {\r\n row.forEach((cell, col) => drawCell(ops, col, y, ROW_H, cell, false));\r\n y -= ROW_H;\r\n }\r\n\r\n const totalRow = pageTotalCells[p];\r\n if (totalRow && totalRow.length > 0) {\r\n totalRow.forEach((text, colIdx) =>\r\n drawCell(ops, colIdx, y, ROW_H, text, true),\r\n );\r\n y -= ROW_H;\r\n }\r\n\r\n if (isLast && (signLabelVisual || stampLabelVisual)) {\r\n const boxW = (tableWidth - 12) / 2;\r\n const boxH = SIGN_H - 8;\r\n const by = MARGIN + footerBand + 4;\r\n const boxes: Array<{ label: string; x: number }> = [];\r\n if (rtl) {\r\n if (signLabelVisual) {\r\n boxes.push({ label: signLabelVisual, x: PAGE_W - MARGIN - boxW });\r\n }\r\n if (stampLabelVisual) {\r\n boxes.push({\r\n label: stampLabelVisual,\r\n x: PAGE_W - MARGIN - boxW * 2 - 12,\r\n });\r\n }\r\n } else {\r\n if (signLabelVisual) boxes.push({ label: signLabelVisual, x: MARGIN });\r\n if (stampLabelVisual) {\r\n boxes.push({ label: stampLabelVisual, x: MARGIN + boxW + 12 });\r\n }\r\n }\r\n for (const box of boxes) {\r\n ops.push('0.55 w 0.35 g');\r\n ops.push(\r\n `${box.x.toFixed(2)} ${by.toFixed(2)} ${boxW.toFixed(2)} ${boxH.toFixed(2)} re S`,\r\n );\r\n ops.push('0 g');\r\n const lw = measure(font, box.label, SUB_SIZE);\r\n drawText(\r\n ops,\r\n box.label,\r\n SUB_SIZE,\r\n rtl ? box.x + boxW - 6 - lw : box.x + 6,\r\n by + boxH - 14,\r\n );\r\n const lineCount = template?.signature?.lines ?? 2;\r\n for (let li = 0; li < lineCount; li += 1) {\r\n const ly = by + 10 + li * 14;\r\n ops.push('0.4 w 0.6 g');\r\n ops.push(\r\n `${(box.x + 8).toFixed(2)} ${ly.toFixed(2)} m ${(box.x + boxW - 8).toFixed(2)} ${ly.toFixed(2)} l S`,\r\n );\r\n ops.push('0 g');\r\n }\r\n }\r\n }\r\n\r\n if (footerBand > 0) {\r\n const fy = MARGIN + 6;\r\n if (footerTextVisual) {\r\n const fw = measure(font, footerTextVisual, SUB_SIZE);\r\n drawText(\r\n ops,\r\n footerTextVisual,\r\n SUB_SIZE,\r\n rtl ? PAGE_W - MARGIN - fw : MARGIN,\r\n fy,\r\n );\r\n }\r\n if (showPageNumber) {\r\n const label = pageLabels[p]!;\r\n const pw = measure(font, label, SUB_SIZE);\r\n drawText(\r\n ops,\r\n label,\r\n SUB_SIZE,\r\n rtl ? MARGIN : PAGE_W - MARGIN - pw,\r\n fy,\r\n );\r\n }\r\n }\r\n\r\n const content = pdf.addFlate(\r\n new TextEncoder().encode(ops.join('\\n') + '\\n'),\r\n );\r\n const xobjRes =\r\n logoXObject != null ? `/XObject << /Im1 ${logoXObject} 0 R >>` : '';\r\n const pageNo = pdf.addAscii(\r\n `<< /Type /Page /Parent ${pagesObj} 0 R /MediaBox [0 0 ${PAGE_W} ${PAGE_H}] /Contents ${content} 0 R /Resources << /Font << /F1 ${type0} 0 R >> ${xobjRes} >> >>\\n`,\r\n );\r\n pageObjNums.push(pageNo);\r\n rowCursor += take;\r\n }\r\n\r\n const kids = pageObjNums.map((n) => `${n} 0 R`).join(' ');\r\n pdf.replaceAscii(\r\n pagesObj,\r\n `<< /Type /Pages /Kids [${kids}] /Count ${pageObjNums.length} >>\\n`,\r\n );\r\n\r\n const bytes = pdf.build();\r\n return new Blob([bytes] as BlobPart[], { type: 'application/pdf' });\r\n }\r\n}\r\n"]}