framefields 2.8.0 → 2.8.1

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 (285) hide show
  1. package/dist/audio/index.d.mts +4 -4
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-CxAUxVyA.d.mts → audio-Ccpl9mjV.d.mts} +3 -3
  4. package/dist/{audio-CxAUxVyA.d.mts.map → audio-Ccpl9mjV.d.mts.map} +1 -1
  5. package/dist/{audio-CGVJlZb9.mjs → audio-vatRe308.mjs} +3 -3
  6. package/dist/{audio-CGVJlZb9.mjs.map → audio-vatRe308.mjs.map} +1 -1
  7. package/dist/cli/check-worker.mjs +43 -43
  8. package/dist/components/index.d.mts +10 -10
  9. package/dist/components/index.mjs +42 -42
  10. package/dist/{dist-C5eZw8ms.mjs → dist-BbwtlSZO.mjs} +2 -2
  11. package/dist/{dist-C5eZw8ms.mjs.map → dist-BbwtlSZO.mjs.map} +1 -1
  12. package/dist/{dist-CnFcSau0.mjs → dist-CFe1fC9l.mjs} +2289 -212
  13. package/dist/dist-CFe1fC9l.mjs.map +1 -0
  14. package/dist/effects/index.d.mts +4 -4
  15. package/dist/effects/index.mjs +34 -34
  16. package/dist/{effects-DdvkiI3u.mjs → effects-CCyfjbhZ.mjs} +2 -2
  17. package/dist/{effects-DdvkiI3u.mjs.map → effects-CCyfjbhZ.mjs.map} +1 -1
  18. package/dist/fonts/index.mjs +2 -2
  19. package/dist/{fonts-k_89s1HO.mjs → fonts-C1mgtkCa.mjs} +2 -2
  20. package/dist/{fonts-k_89s1HO.mjs.map → fonts-C1mgtkCa.mjs.map} +1 -1
  21. package/dist/{gpu-BoyykRdD.mjs → gpu-CU2tEKJJ.mjs} +2 -2
  22. package/dist/{gpu-BoyykRdD.mjs.map → gpu-CU2tEKJJ.mjs.map} +1 -1
  23. package/dist/{index-CPFKis94.d.mts → index-7Z9_a_iB.d.mts} +3 -3
  24. package/dist/{index-CPFKis94.d.mts.map → index-7Z9_a_iB.d.mts.map} +1 -1
  25. package/dist/{index-CFKMZDv1.d.mts → index-BIjMAW1h.d.mts} +2 -2
  26. package/dist/{index-CFKMZDv1.d.mts.map → index-BIjMAW1h.d.mts.map} +1 -1
  27. package/dist/{index-Ds9_v60R.d.mts → index-BwRrsP_V.d.mts} +181 -13
  28. package/dist/index-BwRrsP_V.d.mts.map +1 -0
  29. package/dist/{index-BukqOGDa.d.mts → index-CFoAmh7q.d.mts} +3 -3
  30. package/dist/{index-BukqOGDa.d.mts.map → index-CFoAmh7q.d.mts.map} +1 -1
  31. package/dist/{index-CPeaSZoz.d.mts → index-CJL0JAU8.d.mts} +2 -2
  32. package/dist/{index-CPeaSZoz.d.mts.map → index-CJL0JAU8.d.mts.map} +1 -1
  33. package/dist/{index-Ced1Ry4S.d.mts → index-D5UDyVMb.d.mts} +211 -9
  34. package/dist/index-D5UDyVMb.d.mts.map +1 -0
  35. package/dist/{index-B_nooAhS.d.mts → index-UDDAfHAF.d.mts} +4 -4
  36. package/dist/{index-B_nooAhS.d.mts.map → index-UDDAfHAF.d.mts.map} +1 -1
  37. package/dist/index.d.mts +11 -11
  38. package/dist/index.mjs +49 -49
  39. package/dist/preview/index.d.mts +3 -3
  40. package/dist/preview/index.mjs +10 -10
  41. package/dist/{preview-DHqCrFhG.mjs → preview-WXbsf6Dv.mjs} +2 -2
  42. package/dist/{preview-DHqCrFhG.mjs.map → preview-WXbsf6Dv.mjs.map} +1 -1
  43. package/dist/preview-engine/{chunk-K5F4ZW6T.mjs → chunk-7U34VKNO.mjs} +1 -1
  44. package/dist/preview-engine/chunk-FKG27DVO.mjs +4 -0
  45. package/dist/preview-engine/chunk-KFNVUGNN.mjs +1974 -0
  46. package/dist/preview-engine/chunk-NKAVHU7H.mjs +480 -0
  47. package/dist/preview-engine/chunk-PYX6Q2EJ.mjs +2403 -0
  48. package/dist/preview-engine/components.mjs +1 -1
  49. package/dist/preview-engine/framefields.mjs +1 -1
  50. package/dist/preview-engine/player.mjs +1 -1
  51. package/dist/preview-engine/renderers-KPCQGBIY.mjs +228 -0
  52. package/dist/{program-CqQDWfSV.mjs → program-Cq4gP9Dd.mjs} +5 -6
  53. package/dist/program-Cq4gP9Dd.mjs.map +1 -0
  54. package/dist/renderer/index.d.mts +2 -2
  55. package/dist/renderer/index.mjs +2 -2
  56. package/dist/renderer-01zxT4CK.mjs +5 -0
  57. package/dist/renderer-35LHkj36.mjs +5 -0
  58. package/dist/{renderer-Cx2Sw9Ib.mjs → renderer-AMBVtZ_G.mjs} +3 -3
  59. package/dist/{renderer-Cx2Sw9Ib.mjs.map → renderer-AMBVtZ_G.mjs.map} +1 -1
  60. package/dist/renderer-B0OIdCGj.mjs +5 -0
  61. package/dist/renderer-B3IPtkK9.mjs +5 -0
  62. package/dist/{renderer-DCyp-jzQ.mjs → renderer-B4iCFvJh.mjs} +3 -3
  63. package/dist/{renderer-DCyp-jzQ.mjs.map → renderer-B4iCFvJh.mjs.map} +1 -1
  64. package/dist/{renderer-DsGE9qtz.mjs → renderer-BD00i68i.mjs} +3 -3
  65. package/dist/{renderer-DsGE9qtz.mjs.map → renderer-BD00i68i.mjs.map} +1 -1
  66. package/dist/{renderer-CuK1lPnA.mjs → renderer-BEuU7qlG.mjs} +2 -2
  67. package/dist/{renderer-CuK1lPnA.mjs.map → renderer-BEuU7qlG.mjs.map} +1 -1
  68. package/dist/{renderer-BuYRrBRf.mjs → renderer-BGPnCRFI.mjs} +3 -3
  69. package/dist/{renderer-BuYRrBRf.mjs.map → renderer-BGPnCRFI.mjs.map} +1 -1
  70. package/dist/{renderer-D7FuHXiz.mjs → renderer-BIGILDEA.mjs} +2 -2
  71. package/dist/{renderer-D7FuHXiz.mjs.map → renderer-BIGILDEA.mjs.map} +1 -1
  72. package/dist/{renderer-4GwADfB0.mjs → renderer-BLU0PQTB.mjs} +3 -3
  73. package/dist/{renderer-4GwADfB0.mjs.map → renderer-BLU0PQTB.mjs.map} +1 -1
  74. package/dist/renderer-BMC39abo.mjs +5 -0
  75. package/dist/{renderer-DS-Gv-3w.mjs → renderer-BNzT34UV.mjs} +2 -2
  76. package/dist/renderer-BQj3nlAI.mjs +5 -0
  77. package/dist/{renderer-DqMZiy5N.mjs → renderer-BWlMAacF.mjs} +2 -2
  78. package/dist/{renderer-DqMZiy5N.mjs.map → renderer-BWlMAacF.mjs.map} +1 -1
  79. package/dist/{renderer-DXu0nrzo.d.mts → renderer-BX7jS14r.d.mts} +2 -2
  80. package/dist/{renderer-DXu0nrzo.d.mts.map → renderer-BX7jS14r.d.mts.map} +1 -1
  81. package/dist/{renderer-DPUULdjh.mjs → renderer-BXAgUuAq.mjs} +2 -2
  82. package/dist/{renderer-DPUULdjh.mjs.map → renderer-BXAgUuAq.mjs.map} +1 -1
  83. package/dist/{renderer-Cn34qZC4.mjs → renderer-BZKkT-6Q.mjs} +2 -2
  84. package/dist/{renderer-Cn34qZC4.mjs.map → renderer-BZKkT-6Q.mjs.map} +1 -1
  85. package/dist/{renderer-BcHpcLq3.mjs → renderer-BdbGTz7z.mjs} +3 -3
  86. package/dist/{renderer-BcHpcLq3.mjs.map → renderer-BdbGTz7z.mjs.map} +1 -1
  87. package/dist/{renderer-Dhi0Q1cI.mjs → renderer-BeFiQfzV.mjs} +69 -69
  88. package/dist/{renderer-Dhi0Q1cI.mjs.map → renderer-BeFiQfzV.mjs.map} +1 -1
  89. package/dist/{renderer-kg8-ngnB.mjs → renderer-BeQrWrOa.mjs} +2 -2
  90. package/dist/{renderer-kg8-ngnB.mjs.map → renderer-BeQrWrOa.mjs.map} +1 -1
  91. package/dist/{renderer-Ca-LoeJh.mjs → renderer-BioUC9zE.mjs} +2 -2
  92. package/dist/{renderer-Ca-LoeJh.mjs.map → renderer-BioUC9zE.mjs.map} +1 -1
  93. package/dist/{renderer-wH_l-jMH.mjs → renderer-Bkqg-U2F.mjs} +3 -3
  94. package/dist/{renderer-wH_l-jMH.mjs.map → renderer-Bkqg-U2F.mjs.map} +1 -1
  95. package/dist/{renderer-Sj11W1xq.mjs → renderer-BlVmbzPs.mjs} +2 -2
  96. package/dist/renderer-BnBvSmp_.mjs +5 -0
  97. package/dist/{renderer-Qd-HCwKj.mjs → renderer-Br4UZvfL.mjs} +3 -3
  98. package/dist/{renderer-Qd-HCwKj.mjs.map → renderer-Br4UZvfL.mjs.map} +1 -1
  99. package/dist/{renderer-DX5ZpEBB.mjs → renderer-BrWOcJ9Q.mjs} +3 -3
  100. package/dist/{renderer-DX5ZpEBB.mjs.map → renderer-BrWOcJ9Q.mjs.map} +1 -1
  101. package/dist/renderer-BsDSpTpL.mjs +5 -0
  102. package/dist/renderer-BtW6_gvE.mjs +5 -0
  103. package/dist/renderer-By8U44Rt.mjs +5 -0
  104. package/dist/{renderer-XnWe1hSL.mjs → renderer-C-5RNIeX.mjs} +2 -2
  105. package/dist/{renderer-XnWe1hSL.mjs.map → renderer-C-5RNIeX.mjs.map} +1 -1
  106. package/dist/renderer-C3lDmxuX.mjs +5 -0
  107. package/dist/renderer-C6SZAE_x.mjs +5 -0
  108. package/dist/{renderer-DSM5c7UA.mjs → renderer-C8rxyjaE.mjs} +2 -2
  109. package/dist/{renderer-DSM5c7UA.mjs.map → renderer-C8rxyjaE.mjs.map} +1 -1
  110. package/dist/renderer-CA3IVeZj.mjs +5 -0
  111. package/dist/{renderer-DYT4iPi-.mjs → renderer-CAagaRag.mjs} +2 -2
  112. package/dist/{renderer-DYT4iPi-.mjs.map → renderer-CAagaRag.mjs.map} +1 -1
  113. package/dist/{renderer-CaE0rp9j.mjs → renderer-CCSzKnvs.mjs} +2 -2
  114. package/dist/{renderer-CaE0rp9j.mjs.map → renderer-CCSzKnvs.mjs.map} +1 -1
  115. package/dist/renderer-CFoCH_mO.mjs +5 -0
  116. package/dist/renderer-CLhZqJF8.mjs +6 -0
  117. package/dist/{renderer-Bw5jGUo5.mjs → renderer-COQc1jn6.mjs} +2 -2
  118. package/dist/{renderer-Bw5jGUo5.mjs.map → renderer-COQc1jn6.mjs.map} +1 -1
  119. package/dist/{renderer-DB7PM7nZ.mjs → renderer-CP2FOWyJ.mjs} +3 -3
  120. package/dist/{renderer-DB7PM7nZ.mjs.map → renderer-CP2FOWyJ.mjs.map} +1 -1
  121. package/dist/{renderer-DXsV3mZD.mjs → renderer-CUq2qgyc.mjs} +3 -3
  122. package/dist/{renderer-DXsV3mZD.mjs.map → renderer-CUq2qgyc.mjs.map} +1 -1
  123. package/dist/{renderer-DYfNgEhK.mjs → renderer-CXWAdRqn.mjs} +2 -2
  124. package/dist/{renderer-DYfNgEhK.mjs.map → renderer-CXWAdRqn.mjs.map} +1 -1
  125. package/dist/renderer-CYJXQS8E.mjs +5 -0
  126. package/dist/{renderer-JDLYPnRh.mjs → renderer-CZyJ72JZ.mjs} +2 -2
  127. package/dist/{renderer-JDLYPnRh.mjs.map → renderer-CZyJ72JZ.mjs.map} +1 -1
  128. package/dist/renderer-C_vj6_WJ.mjs +5 -0
  129. package/dist/{renderer-4F4FypvN.mjs → renderer-Ce8VPaog.mjs} +2 -2
  130. package/dist/{renderer-4F4FypvN.mjs.map → renderer-Ce8VPaog.mjs.map} +1 -1
  131. package/dist/{renderer-4a4koLCl.mjs → renderer-CeX7uUXB.mjs} +2 -2
  132. package/dist/{renderer-4a4koLCl.mjs.map → renderer-CeX7uUXB.mjs.map} +1 -1
  133. package/dist/renderer-CeqfC6OR.mjs +5 -0
  134. package/dist/{renderer-NvGahExL.mjs → renderer-Ci9x2WUd.mjs} +3 -3
  135. package/dist/{renderer-NvGahExL.mjs.map → renderer-Ci9x2WUd.mjs.map} +1 -1
  136. package/dist/{renderer-iA7rxZmR.mjs → renderer-CiMIftlS.mjs} +3 -3
  137. package/dist/{renderer-iA7rxZmR.mjs.map → renderer-CiMIftlS.mjs.map} +1 -1
  138. package/dist/{renderer-CpEU-TRR.mjs → renderer-CjklM-KD.mjs} +2 -2
  139. package/dist/{renderer-CpEU-TRR.mjs.map → renderer-CjklM-KD.mjs.map} +1 -1
  140. package/dist/{renderer-CNVzJIBz.mjs → renderer-Cjx3x7xM.mjs} +3 -3
  141. package/dist/{renderer-CNVzJIBz.mjs.map → renderer-Cjx3x7xM.mjs.map} +1 -1
  142. package/dist/renderer-CkZCGMAc.mjs +5 -0
  143. package/dist/renderer-Clxju1r9.mjs +5 -0
  144. package/dist/{renderer-l-K6iZLC.mjs → renderer-CrgfMDbh.mjs} +3 -3
  145. package/dist/{renderer-l-K6iZLC.mjs.map → renderer-CrgfMDbh.mjs.map} +1 -1
  146. package/dist/{renderer-fv9WvK0d.mjs → renderer-CsilJwL-.mjs} +3 -3
  147. package/dist/{renderer-fv9WvK0d.mjs.map → renderer-CsilJwL-.mjs.map} +1 -1
  148. package/dist/{renderer-DBN6SV8L.mjs → renderer-CxEBV-w0.mjs} +2 -2
  149. package/dist/{renderer-DBN6SV8L.mjs.map → renderer-CxEBV-w0.mjs.map} +1 -1
  150. package/dist/{renderer-Bw3tlr9I.mjs → renderer-CyWRvKUI.mjs} +2 -2
  151. package/dist/{renderer-Bw3tlr9I.mjs.map → renderer-CyWRvKUI.mjs.map} +1 -1
  152. package/dist/renderer-CyWtKBF7.mjs +5 -0
  153. package/dist/{renderer-BlUfAZyK.mjs → renderer-D-17HVPb.mjs} +3 -3
  154. package/dist/{renderer-BlUfAZyK.mjs.map → renderer-D-17HVPb.mjs.map} +1 -1
  155. package/dist/renderer-D27STGoB.mjs +5 -0
  156. package/dist/{renderer-BUV6IH0o.mjs → renderer-D2JOseb1.mjs} +2 -2
  157. package/dist/{renderer-BUV6IH0o.mjs.map → renderer-D2JOseb1.mjs.map} +1 -1
  158. package/dist/{renderer-BYIa_hnS.mjs → renderer-D3K9FEQk.mjs} +3 -3
  159. package/dist/{renderer-BYIa_hnS.mjs.map → renderer-D3K9FEQk.mjs.map} +1 -1
  160. package/dist/{renderer-bE6yZ_Ef.mjs → renderer-D41gHat4.mjs} +3 -3
  161. package/dist/{renderer-bE6yZ_Ef.mjs.map → renderer-D41gHat4.mjs.map} +1 -1
  162. package/dist/{renderer-C7SYbHgB.mjs → renderer-D6X9vWkN.mjs} +2 -2
  163. package/dist/{renderer-C7SYbHgB.mjs.map → renderer-D6X9vWkN.mjs.map} +1 -1
  164. package/dist/renderer-D78Aq9YK.mjs +5 -0
  165. package/dist/{renderer-ClxmV_id.mjs → renderer-D7Cu9OZx.mjs} +2 -2
  166. package/dist/{renderer-ClxmV_id.mjs.map → renderer-D7Cu9OZx.mjs.map} +1 -1
  167. package/dist/{renderer-DO15Nj-w.mjs → renderer-D7Kk7VxM.mjs} +3 -3
  168. package/dist/{renderer-DO15Nj-w.mjs.map → renderer-D7Kk7VxM.mjs.map} +1 -1
  169. package/dist/{renderer-DZKZup7n.mjs → renderer-D8CMakyz.mjs} +3 -3
  170. package/dist/{renderer-DZKZup7n.mjs.map → renderer-D8CMakyz.mjs.map} +1 -1
  171. package/dist/{renderer-DbO4xZBb.mjs → renderer-DEcbSNQd.mjs} +3 -3
  172. package/dist/{renderer-DbO4xZBb.mjs.map → renderer-DEcbSNQd.mjs.map} +1 -1
  173. package/dist/{renderer-DjWBBISJ.mjs → renderer-DGPaKIFf.mjs} +2 -2
  174. package/dist/renderer-DHEffABL.mjs +5 -0
  175. package/dist/{renderer-CTr_Zi08.mjs → renderer-DIPyUVX2.mjs} +3 -3
  176. package/dist/{renderer-CTr_Zi08.mjs.map → renderer-DIPyUVX2.mjs.map} +1 -1
  177. package/dist/{renderer-D_Mf-Zft.d.mts → renderer-DKgPVOLL.d.mts} +2 -2
  178. package/dist/{renderer-D_Mf-Zft.d.mts.map → renderer-DKgPVOLL.d.mts.map} +1 -1
  179. package/dist/{renderer-BrXkb-9N.mjs → renderer-DPn2DhMU.mjs} +2 -2
  180. package/dist/{renderer-BrXkb-9N.mjs.map → renderer-DPn2DhMU.mjs.map} +1 -1
  181. package/dist/{renderer-CyELq6P6.mjs → renderer-DRGa6tlX.mjs} +2 -2
  182. package/dist/{renderer-CyELq6P6.mjs.map → renderer-DRGa6tlX.mjs.map} +1 -1
  183. package/dist/{renderer-Crl8q_vD.mjs → renderer-DSpTGqUU.mjs} +3 -3
  184. package/dist/{renderer-Crl8q_vD.mjs.map → renderer-DSpTGqUU.mjs.map} +1 -1
  185. package/dist/{renderer-vVKNp3ri.mjs → renderer-DTgO5LPf.mjs} +3 -3
  186. package/dist/{renderer-vVKNp3ri.mjs.map → renderer-DTgO5LPf.mjs.map} +1 -1
  187. package/dist/renderer-DUuNCgzW.mjs +5 -0
  188. package/dist/renderer-DVD5pzRq.mjs +5 -0
  189. package/dist/{renderer-C55eLbl1.mjs → renderer-DgLt0TPo.mjs} +2 -2
  190. package/dist/{renderer-C55eLbl1.mjs.map → renderer-DgLt0TPo.mjs.map} +1 -1
  191. package/dist/{renderer-BHwbnT6S.mjs → renderer-Dk45W8Zd.mjs} +3 -3
  192. package/dist/{renderer-BHwbnT6S.mjs.map → renderer-Dk45W8Zd.mjs.map} +1 -1
  193. package/dist/{renderer-Dv5yE4LE.mjs → renderer-DlZwbO-A.mjs} +2 -2
  194. package/dist/{renderer-Dv5yE4LE.mjs.map → renderer-DlZwbO-A.mjs.map} +1 -1
  195. package/dist/{renderer-CaRPsrbX.mjs → renderer-DnPzvIHK.mjs} +2 -2
  196. package/dist/{renderer-CCnrG0Pd.mjs → renderer-DoRazdp_.mjs} +2 -2
  197. package/dist/{renderer-CCnrG0Pd.mjs.map → renderer-DoRazdp_.mjs.map} +1 -1
  198. package/dist/{renderer-CeIXVu9F.mjs → renderer-DsAoxQ8O.mjs} +2 -2
  199. package/dist/{renderer-CeIXVu9F.mjs.map → renderer-DsAoxQ8O.mjs.map} +1 -1
  200. package/dist/renderer-Dsp6xDw5.mjs +5 -0
  201. package/dist/renderer-DuC-BFXR.mjs +5 -0
  202. package/dist/renderer-DuWs_Wsv.mjs +5 -0
  203. package/dist/{renderer-8pS82_mX.mjs → renderer-DveQQCi8.mjs} +3 -3
  204. package/dist/{renderer-8pS82_mX.mjs.map → renderer-DveQQCi8.mjs.map} +1 -1
  205. package/dist/{renderer-Dypn26aP.mjs → renderer-DxHICEk3.mjs} +3 -3
  206. package/dist/{renderer-Dypn26aP.mjs.map → renderer-DxHICEk3.mjs.map} +1 -1
  207. package/dist/{renderer-DfTnsfy9.mjs → renderer-DxbFjINv.mjs} +3 -3
  208. package/dist/{renderer-DfTnsfy9.mjs.map → renderer-DxbFjINv.mjs.map} +1 -1
  209. package/dist/{renderer-jvgqy4Td.mjs → renderer-Gw1ICOJ3.mjs} +3 -3
  210. package/dist/{renderer-jvgqy4Td.mjs.map → renderer-Gw1ICOJ3.mjs.map} +1 -1
  211. package/dist/{renderer-j-3XB8YI.mjs → renderer-LY2MiIj0.mjs} +3 -3
  212. package/dist/{renderer-j-3XB8YI.mjs.map → renderer-LY2MiIj0.mjs.map} +1 -1
  213. package/dist/{renderer-BLrhcSex.mjs → renderer-LwrcnEtI.mjs} +3 -3
  214. package/dist/{renderer-BLrhcSex.mjs.map → renderer-LwrcnEtI.mjs.map} +1 -1
  215. package/dist/renderer-OSgsiIrW.mjs +5 -0
  216. package/dist/renderer-OZaMFYtZ.mjs +5 -0
  217. package/dist/renderer-T79TmHET.mjs +5 -0
  218. package/dist/{renderer-7Tx-L9Vf.mjs → renderer-U-12BOhe.mjs} +2 -2
  219. package/dist/{renderer-7Tx-L9Vf.mjs.map → renderer-U-12BOhe.mjs.map} +1 -1
  220. package/dist/renderer-UhsC9oTU.mjs +5 -0
  221. package/dist/renderer-WYZV1jWf.mjs +5 -0
  222. package/dist/renderer-Y7evDjHH.mjs +5 -0
  223. package/dist/{renderer-CQkZUsvc.mjs → renderer-cg06hb82.mjs} +3 -3
  224. package/dist/{renderer-CQkZUsvc.mjs.map → renderer-cg06hb82.mjs.map} +1 -1
  225. package/dist/{renderer-DRLtfxdW.mjs → renderer-eAVNsuX8.mjs} +95 -16
  226. package/dist/renderer-eAVNsuX8.mjs.map +1 -0
  227. package/dist/renderer-mcePkmUe.mjs +5 -0
  228. package/dist/{renderer-CT_aJBk2.mjs → renderer-uorPCWdC.mjs} +3 -3
  229. package/dist/{renderer-CT_aJBk2.mjs.map → renderer-uorPCWdC.mjs.map} +1 -1
  230. package/dist/{renderer-BMnX_-PZ.mjs → renderer-xLQ_nkmy.mjs} +3 -3
  231. package/dist/{renderer-BMnX_-PZ.mjs.map → renderer-xLQ_nkmy.mjs.map} +1 -1
  232. package/dist/{renderers-CP8CFWDs-fYqxoIKK.mjs → renderers-CP8CFWDs-ywy4xljX.mjs} +2 -2
  233. package/dist/{renderers-CP8CFWDs-fYqxoIKK.mjs.map → renderers-CP8CFWDs-ywy4xljX.mjs.map} +1 -1
  234. package/dist/signals/index.d.mts +5 -5
  235. package/dist/signals/index.mjs +4 -4
  236. package/dist/{src-DggYlKaX.mjs → src-B0KFNjj4.mjs} +289 -59
  237. package/dist/src-B0KFNjj4.mjs.map +1 -0
  238. package/package.json +58 -58
  239. package/dist/dist-CnFcSau0.mjs.map +0 -1
  240. package/dist/index-Ced1Ry4S.d.mts.map +0 -1
  241. package/dist/index-Ds9_v60R.d.mts.map +0 -1
  242. package/dist/preview-engine/chunk-3OXRGTQ2.mjs +0 -2390
  243. package/dist/preview-engine/chunk-7EYVBRN3.mjs +0 -480
  244. package/dist/preview-engine/chunk-7WBDEZ2A.mjs +0 -1974
  245. package/dist/preview-engine/chunk-HPP52AQI.mjs +0 -4
  246. package/dist/preview-engine/renderers-CCOEGTZJ.mjs +0 -228
  247. package/dist/program-CqQDWfSV.mjs.map +0 -1
  248. package/dist/renderer-68XHoE2b.mjs +0 -5
  249. package/dist/renderer-AqUForA-.mjs +0 -5
  250. package/dist/renderer-B0J-uGBG.mjs +0 -5
  251. package/dist/renderer-BF2R0rwb.mjs +0 -5
  252. package/dist/renderer-BLrO9lqK.mjs +0 -5
  253. package/dist/renderer-BMy8jXhL.mjs +0 -5
  254. package/dist/renderer-BUxENp9L.mjs +0 -5
  255. package/dist/renderer-C-ebryrM.mjs +0 -5
  256. package/dist/renderer-C8Gbs3kr.mjs +0 -5
  257. package/dist/renderer-CFZvMv2-.mjs +0 -5
  258. package/dist/renderer-CGXW7mOs.mjs +0 -5
  259. package/dist/renderer-CNq6OGbb.mjs +0 -5
  260. package/dist/renderer-CO-Ddz6-.mjs +0 -5
  261. package/dist/renderer-CRdxAsP7.mjs +0 -5
  262. package/dist/renderer-CZLo0ALi.mjs +0 -5
  263. package/dist/renderer-CdvVUkhR.mjs +0 -5
  264. package/dist/renderer-Cjg7kmTq.mjs +0 -5
  265. package/dist/renderer-CxKymhVa.mjs +0 -5
  266. package/dist/renderer-Cxlpu3pN.mjs +0 -5
  267. package/dist/renderer-Cz6qZ2Ii.mjs +0 -5
  268. package/dist/renderer-DDGvF2YA.mjs +0 -5
  269. package/dist/renderer-DFxtOKpi.mjs +0 -5
  270. package/dist/renderer-DGBNjTsB.mjs +0 -6
  271. package/dist/renderer-DRLtfxdW.mjs.map +0 -1
  272. package/dist/renderer-DUFcdZmw.mjs +0 -5
  273. package/dist/renderer-DUMu6EOH.mjs +0 -5
  274. package/dist/renderer-DdULrvJo.mjs +0 -5
  275. package/dist/renderer-DoaOOP6_.mjs +0 -5
  276. package/dist/renderer-DqmZqV-a.mjs +0 -5
  277. package/dist/renderer-LxTQ2E-G.mjs +0 -5
  278. package/dist/renderer-SpU-RddZ.mjs +0 -5
  279. package/dist/renderer-W6ahCM9z.mjs +0 -5
  280. package/dist/renderer-gGqtzw-S.mjs +0 -5
  281. package/dist/renderer-l0Wn1AoV.mjs +0 -5
  282. package/dist/renderer-rpXHvMZG.mjs +0 -5
  283. package/dist/renderer-twdsKOiz.mjs +0 -5
  284. package/dist/renderer-uJz-eIqO.mjs +0 -5
  285. package/dist/src-DggYlKaX.mjs.map +0 -1
@@ -1,2390 +0,0 @@
1
- import{o as dA,r as ra,t as eo}from"./chunk-HPP52AQI.mjs";import{c as zi}from"./chunk-CJ4CSVU3.mjs";import{a as Oi,c as Hi,i as ji,j as Ji}from"./chunk-JXUENEQO.mjs";import{h as Ki,l as Vi}from"./chunk-RECQ74RP.mjs";import{d as Xi}from"./chunk-VVY4PG5E.mjs";import{h as Li}from"./chunk-F4F2UDRX.mjs";import{A as ta,j as lr,w as Zi,x as $i,y as Xe,z as ea}from"./chunk-BJXNKMSY.mjs";import{r as Pe,s as qi,t as vt}from"./chunk-QEWDIPJ7.mjs";import{a as fA}from"./chunk-354GX6IB.mjs";import{c as Yi,e as Wi}from"./chunk-5RRKGN2U.mjs";import{o as $e}from"./chunk-BDZ3TSOT.mjs";import{b as Hn,d as $A,e as Ti,f as de,g as q}from"./chunk-Y4NIR77Z.mjs";var la=Hn((Du,ca)=>{q();var BA=()=>new Proxy(function(){},{get:(e,t)=>t==="__esModule"?!0:t===Symbol.toPrimitive?()=>"":BA(),apply:()=>BA(),construct:()=>BA()});ca.exports=BA()});var Ba=Hn((io,QA)=>{q();var U=U||{};U.scope={};U.ASSUME_ES2020=!1;U.ASSUME_ES6=U.ASSUME_ES2020;U.ASSUME_ES5=U.ASSUME_ES6;U.ASSUME_NO_NATIVE_MAP=!1;U.ASSUME_NO_NATIVE_SET=!1;U.ISOLATE_POLYFILLS=!1;U.FORCE_POLYFILL_PROMISE=!1;U.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;U.INSTRUMENT_ASYNC_CONTEXT=!0;U.objectCreate=U.ASSUME_ES5||typeof Object.create=="function"?Object.create:function(e){var t=function(){};return t.prototype=e,new t};U.defineProperty=U.ASSUME_ES5||typeof Object.defineProperties=="function"?Object.defineProperty:function(e,t,r){return e==Array.prototype||e==Object.prototype||(e[t]=r.value),e};U.getGlobal=function(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof globalThis=="object"&&globalThis];for(var t=0;t<e.length;++t){var r=e[t];if(r&&r.Math==Math)return r}throw Error("Cannot find global object")};U.global=U.ASSUME_ES2020?globalThis:U.getGlobal(io);U.IS_SYMBOL_NATIVE=typeof Symbol=="function"&&typeof Symbol("x")=="symbol";U.TRUST_ES6_POLYFILLS=!U.ISOLATE_POLYFILLS||U.IS_SYMBOL_NATIVE;U.polyfills={};U.propertyToPolyfillSymbol={};U.POLYFILL_PREFIX="$jscp$";U.TYPED_ARRAY_CLASSES=(function(){var e="Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64".split(" ");return U.global.BigInt64Array&&(e.push("BigInt64"),e.push("BigUint64")),e})();U.polyfillTypedArrayMethod=function(e,t,r,n){if(t)for(var A=0;A<U.TYPED_ARRAY_CLASSES.length;A++){var o=U.TYPED_ARRAY_CLASSES[A]+"Array.prototype."+e;U.ISOLATE_POLYFILLS?U.polyfillIsolated(o,t,r,n):U.polyfillUnisolated(o,t,r,n)}};U.polyfill=function(e,t,r,n){t&&(U.ISOLATE_POLYFILLS?U.polyfillIsolated(e,t,r,n):U.polyfillUnisolated(e,t,r,n))};U.polyfillUnisolated=function(e,t,r,n){for(r=U.global,e=e.split("."),n=0;n<e.length-1;n++){var A=e[n];if(!(A in r))return;r=r[A]}e=e[e.length-1],n=r[e],t=t(n),t!=n&&t!=null&&U.defineProperty(r,e,{configurable:!0,writable:!0,value:t})};U.polyfillIsolated=function(e,t,r,n){var A=e.split(".");e=A.length===1,n=A[0],n=!e&&n in U.polyfills?U.polyfills:U.global;for(var o=0;o<A.length-1;o++){var i=A[o];if(!(i in n))return;n=n[i]}A=A[A.length-1],r=U.IS_SYMBOL_NATIVE&&r==="es6"?n[A]:null,t=t(r),t!=null&&(e?U.defineProperty(U.polyfills,A,{configurable:!0,writable:!0,value:t}):t!==r&&(U.propertyToPolyfillSymbol[A]===void 0&&(r=Math.random()*1e9>>>0,U.propertyToPolyfillSymbol[A]=U.IS_SYMBOL_NATIVE?U.global.Symbol(A):U.POLYFILL_PREFIX+r+"$"+A),U.defineProperty(n,U.propertyToPolyfillSymbol[A],{configurable:!0,writable:!0,value:t})))};U.getConstructImplementation=function(){function e(){function r(){}return new r,Reflect.construct(r,[],function(){}),new r instanceof r}if(U.TRUST_ES6_POLYFILLS&&typeof Reflect<"u"&&Reflect.construct){if(e())return Reflect.construct;var t=Reflect.construct;return function(r,n,A){return r=t(r,n),A&&Reflect.setPrototypeOf(r,A.prototype),r}}return function(r,n,A){return A===void 0&&(A=r),A=U.objectCreate(A.prototype||Object.prototype),Function.prototype.apply.call(r,A,n)||A}};U.construct={valueOf:U.getConstructImplementation}.valueOf();U.underscoreProtoCanBeSet=function(){var e={a:!0},t={};try{return t.__proto__=e,t.a}catch{}return!1};U.setPrototypeOf=U.ASSUME_ES6||U.TRUST_ES6_POLYFILLS&&typeof Object.setPrototypeOf=="function"?Object.setPrototypeOf:U.underscoreProtoCanBeSet()?function(e,t){if(e.__proto__=t,e.__proto__!==t)throw new TypeError(e+" is not extensible");return e}:null;U.inherits=function(e,t){if(e.prototype=U.objectCreate(t.prototype),e.prototype.constructor=e,U.ASSUME_ES6||U.setPrototypeOf){var r=U.setPrototypeOf;r(e,t)}else for(r in t)if(r!="prototype")if(Object.defineProperties){var n=Object.getOwnPropertyDescriptor(t,r);n&&Object.defineProperty(e,r,n)}else e[r]=t[r];e.superClass_=t.prototype};U.arrayIteratorImpl=function(e){var t=0;return function(){return t<e.length?{done:!1,value:e[t++]}:{done:!0}}};U.arrayIterator=function(e){return{next:U.arrayIteratorImpl(e)}};U.makeIterator=function(e){var t=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];if(t)return t.call(e);if(typeof e.length=="number")return U.arrayIterator(e);throw Error(String(e)+" is not an iterable or ArrayLike")};U.arrayFromIterator=function(e){for(var t,r=[];!(t=e.next()).done;)r.push(t.value);return r};U.arrayFromIterable=function(e){return e instanceof Array?e:U.arrayFromIterator(U.makeIterator(e))};U.createTemplateTagFirstArg=function(e){return U.createTemplateTagFirstArgWithRaw(e,e)};U.createTemplateTagFirstArgWithRaw=function(e,t){return e.raw=t,Object.freeze&&(Object.freeze(e),Object.freeze(t)),e};U.generator={};U.generator.ensureIteratorResultIsObject_=function(e){if(!(e instanceof Object))throw new TypeError("Iterator result "+e+" is not an object")};U.generator.Context=function(){this.isRunning_=!1,this.yieldAllIterator_=null,this.yieldResult=void 0,this.nextAddress=1,this.finallyAddress_=this.catchAddress_=0,this.finallyContexts_=this.abruptCompletion_=null};U.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};U.generator.Context.prototype.stop_=function(){this.isRunning_=!1};U.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};U.generator.Context.prototype.next_=function(e){this.yieldResult=e};U.generator.Context.prototype.throw_=function(e){this.abruptCompletion_={exception:e,isException:!0},this.jumpToErrorHandler_()};U.generator.Context.prototype.getNextAddressJsc=function(){return this.nextAddress};U.generator.Context.prototype.getNextAddressJsc=function(){return this.nextAddress};U.generator.Context.prototype.getYieldResultJsc=function(){return this.yieldResult};U.generator.Context.prototype.getYieldResultJsc=function(){return this.yieldResult};U.generator.Context.prototype.return=function(e){this.abruptCompletion_={return:e},this.nextAddress=this.finallyAddress_};U.generator.Context.prototype.return=U.generator.Context.prototype.return;U.generator.Context.prototype.jumpThroughFinallyBlocks=function(e){this.abruptCompletion_={jumpTo:e},this.nextAddress=this.finallyAddress_};U.generator.Context.prototype.jumpThroughFinallyBlocks=U.generator.Context.prototype.jumpThroughFinallyBlocks;U.generator.Context.prototype.yield=function(e,t){return this.nextAddress=t,{value:e}};U.generator.Context.prototype.yield=U.generator.Context.prototype.yield;U.generator.Context.prototype.yieldAll=function(e,t){e=U.makeIterator(e);var r=e.next();if(U.generator.ensureIteratorResultIsObject_(r),r.done)this.yieldResult=r.value,this.nextAddress=t;else return this.yieldAllIterator_=e,this.yield(r.value,t)};U.generator.Context.prototype.yieldAll=U.generator.Context.prototype.yieldAll;U.generator.Context.prototype.jumpTo=function(e){this.nextAddress=e};U.generator.Context.prototype.jumpTo=U.generator.Context.prototype.jumpTo;U.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0};U.generator.Context.prototype.jumpToEnd=U.generator.Context.prototype.jumpToEnd;U.generator.Context.prototype.setCatchFinallyBlocks=function(e,t){this.catchAddress_=e,t!=null&&(this.finallyAddress_=t)};U.generator.Context.prototype.setCatchFinallyBlocks=U.generator.Context.prototype.setCatchFinallyBlocks;U.generator.Context.prototype.setFinallyBlock=function(e){this.catchAddress_=0,this.finallyAddress_=e||0};U.generator.Context.prototype.setFinallyBlock=U.generator.Context.prototype.setFinallyBlock;U.generator.Context.prototype.leaveTryBlock=function(e,t){this.nextAddress=e,this.catchAddress_=t||0};U.generator.Context.prototype.leaveTryBlock=U.generator.Context.prototype.leaveTryBlock;U.generator.Context.prototype.enterCatchBlock=function(e){return this.catchAddress_=e||0,e=this.abruptCompletion_.exception,this.abruptCompletion_=null,e};U.generator.Context.prototype.enterCatchBlock=U.generator.Context.prototype.enterCatchBlock;U.generator.Context.prototype.enterFinallyBlock=function(e,t,r){r?this.finallyContexts_[r]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_],this.catchAddress_=e||0,this.finallyAddress_=t||0};U.generator.Context.prototype.enterFinallyBlock=U.generator.Context.prototype.enterFinallyBlock;U.generator.Context.prototype.leaveFinallyBlock=function(e,t){if(t=this.finallyContexts_.splice(t||0)[0],t=this.abruptCompletion_=this.abruptCompletion_||t){if(t.isException)return this.jumpToErrorHandler_();t.jumpTo!=null&&this.finallyAddress_<t.jumpTo?(this.nextAddress=t.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=e};U.generator.Context.prototype.leaveFinallyBlock=U.generator.Context.prototype.leaveFinallyBlock;U.generator.Context.prototype.forIn=function(e){return new U.generator.Context.PropertyIterator(e)};U.generator.Context.prototype.forIn=U.generator.Context.prototype.forIn;U.generator.Context.PropertyIterator=function(e){this.object_=e,this.properties_=[];for(var t in e)this.properties_.push(t);this.properties_.reverse()};U.generator.Context.PropertyIterator.prototype.getNext=function(){for(;this.properties_.length>0;){var e=this.properties_.pop();if(e in this.object_)return e}return null};U.generator.Context.PropertyIterator.prototype.getNext=U.generator.Context.PropertyIterator.prototype.getNext;U.generator.Engine_=function(e){this.context_=new U.generator.Context,this.program_=e};U.generator.Engine_.prototype.next_=function(e){return this.context_.start_(),this.context_.yieldAllIterator_?this.yieldAllStep_(this.context_.yieldAllIterator_.next,e,this.context_.next_):(this.context_.next_(e),this.nextStep_())};U.generator.Engine_.prototype.return_=function(e){this.context_.start_();var t=this.context_.yieldAllIterator_;return t?this.yieldAllStep_("return"in t?t.return:function(r){return{value:r,done:!0}},e,this.context_.return):(this.context_.return(e),this.nextStep_())};U.generator.Engine_.prototype.throw_=function(e){return this.context_.start_(),this.context_.yieldAllIterator_?this.yieldAllStep_(this.context_.yieldAllIterator_.throw,e,this.context_.next_):(this.context_.throw_(e),this.nextStep_())};U.generator.Engine_.prototype.yieldAllStep_=function(e,t,r){try{var n=e.call(this.context_.yieldAllIterator_,t);if(U.generator.ensureIteratorResultIsObject_(n),!n.done)return this.context_.stop_(),n;var A=n.value}catch(o){return this.context_.yieldAllIterator_=null,this.context_.throw_(o),this.nextStep_()}return this.context_.yieldAllIterator_=null,r.call(this.context_,A),this.nextStep_()};U.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var e=this.program_(this.context_);if(e)return this.context_.stop_(),{value:e.value,done:!1}}catch(t){this.context_.yieldResult=void 0,this.context_.throw_(t)}if(this.context_.stop_(),this.context_.abruptCompletion_){if(e=this.context_.abruptCompletion_,this.context_.abruptCompletion_=null,e.isException)throw e.exception;return{value:e.return,done:!0}}return{value:void 0,done:!0}};U.generator.Generator_=function(e){this.next=function(t){return e.next_(t)},this.throw=function(t){return e.throw_(t)},this.return=function(t){return e.return_(t)},this[Symbol.iterator]=function(){return this}};U.generator.createGenerator=function(e,t){return t=new U.generator.Generator_(new U.generator.Engine_(t)),U.setPrototypeOf&&e.prototype&&U.setPrototypeOf(t,e.prototype),t};U.asyncExecutePromiseGenerator=function(e){function t(n){return e.next(n)}function r(n){return e.throw(n)}return new Promise(function(n,A){function o(i){i.done?n(i.value):Promise.resolve(i.value).then(t,r).then(o,A)}o(e.next())})};U.asyncExecutePromiseGeneratorFunction=function(e){return U.asyncExecutePromiseGenerator(e())};U.asyncExecutePromiseGeneratorProgram=function(e){return U.asyncExecutePromiseGenerator(new U.generator.Generator_(new U.generator.Engine_(e)))};U.polyfill("globalThis",function(e){return e||U.global},"es_2020","es3");U.polyfill("Reflect",function(e){return e||{}},"es6","es3");U.polyfill("Reflect.construct",function(e){return U.construct},"es6","es3");U.polyfill("Reflect.setPrototypeOf",function(e){if(e)return e;if(U.setPrototypeOf){var t=U.setPrototypeOf;return function(r,n){try{return t(r,n),!0}catch{return!1}}}return null},"es6","es5");U.initSymbol=function(){};U.polyfill("Symbol",function(e){if(e)return e;var t=function(o,i){this.$jscomp$symbol$id_=o,U.defineProperty(this,"description",{configurable:!0,writable:!0,value:i})};t.prototype.toString=function(){return this.$jscomp$symbol$id_};var r="jscomp_symbol_"+(Math.random()*1e9>>>0)+"_",n=0,A=function(o){if(this instanceof A)throw new TypeError("Symbol is not a constructor");return new t(r+(o||"")+"_"+n++,o)};return A},"es6","es3");U.polyfill("Symbol.iterator",function(e){return e||(e=Symbol("Symbol.iterator"),U.defineProperty(Array.prototype,e,{configurable:!0,writable:!0,value:function(){return U.iteratorPrototype(U.arrayIteratorImpl(this))}}),e)},"es6","es3");U.iteratorPrototype=function(e){return e={next:e},e[Symbol.iterator]=function(){return this},e};U.polyfill("Promise",function(e){function t(){this.batch_=null}function r(i){return i instanceof A?i:new A(function(a,s){a(i)})}if(e&&(!(U.FORCE_POLYFILL_PROMISE||U.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION&&typeof U.global.PromiseRejectionEvent>"u")||!U.global.Promise||U.global.Promise.toString().indexOf("[native code]")===-1))return e;t.prototype.asyncExecute=function(i){if(this.batch_==null){this.batch_=[];var a=this;this.asyncExecuteFunction(function(){a.executeBatch_()})}this.batch_.push(i)};var n=U.global.setTimeout;t.prototype.asyncExecuteFunction=function(i){n(i,0)},t.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var i=this.batch_;this.batch_=[];for(var a=0;a<i.length;++a){var s=i[a];i[a]=null;try{s()}catch(c){this.asyncThrow_(c)}}}this.batch_=null},t.prototype.asyncThrow_=function(i){this.asyncExecuteFunction(function(){throw i})};var A=function(i){this.state_=0,this.result_=void 0,this.onSettledCallbacks_=[],this.isRejectionHandled_=!1;var a=this.createResolveAndReject_();try{i(a.resolve,a.reject)}catch(s){a.reject(s)}};A.prototype.createResolveAndReject_=function(){function i(c){return function(l){s||(s=!0,c.call(a,l))}}var a=this,s=!1;return{resolve:i(this.resolveTo_),reject:i(this.reject_)}},A.prototype.resolveTo_=function(i){if(i===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(i instanceof A)this.settleSameAsPromise_(i);else{e:switch(typeof i){case"object":var a=i!=null;break e;case"function":a=!0;break e;default:a=!1}a?this.resolveToNonPromiseObj_(i):this.fulfill_(i)}},A.prototype.resolveToNonPromiseObj_=function(i){var a=void 0;try{a=i.then}catch(s){this.reject_(s);return}typeof a=="function"?this.settleSameAsThenable_(a,i):this.fulfill_(i)},A.prototype.reject_=function(i){this.settle_(2,i)},A.prototype.fulfill_=function(i){this.settle_(1,i)},A.prototype.settle_=function(i,a){if(this.state_!=0)throw Error("Cannot settle("+i+", "+a+"): Promise already settled in state"+this.state_);this.state_=i,this.result_=a,this.state_===2&&this.scheduleUnhandledRejectionCheck_(),this.executeOnSettledCallbacks_()},A.prototype.scheduleUnhandledRejectionCheck_=function(){var i=this;n(function(){if(i.notifyUnhandledRejection_()){var a=U.global.console;typeof a<"u"&&a.error(i.result_)}},1)},A.prototype.notifyUnhandledRejection_=function(){if(this.isRejectionHandled_)return!1;var i=U.global.CustomEvent,a=U.global.Event,s=U.global.dispatchEvent;return typeof s>"u"?!0:(typeof i=="function"?i=new i("unhandledrejection",{cancelable:!0}):typeof a=="function"?i=new a("unhandledrejection",{cancelable:!0}):(i=U.global.document.createEvent("CustomEvent"),i.initCustomEvent("unhandledrejection",!1,!0,i)),i.promise=this,i.reason=this.result_,s(i))},A.prototype.executeOnSettledCallbacks_=function(){if(this.onSettledCallbacks_!=null){for(var i=0;i<this.onSettledCallbacks_.length;++i)o.asyncExecute(this.onSettledCallbacks_[i]);this.onSettledCallbacks_=null}};var o=new t;return A.prototype.settleSameAsPromise_=function(i){var a=this.createResolveAndReject_();i.callWhenSettled_(a.resolve,a.reject)},A.prototype.settleSameAsThenable_=function(i,a){var s=this.createResolveAndReject_();try{i.call(a,s.resolve,s.reject)}catch(c){s.reject(c)}},A.prototype.then=function(i,a){function s(p,g){return typeof p=="function"?function(f){try{c(p(f))}catch(b){l(b)}}:g}var c,l,u=new A(function(p,g){c=p,l=g});return this.callWhenSettled_(s(i,c),s(a,l)),u},A.prototype.catch=function(i){return this.then(void 0,i)},A.prototype.callWhenSettled_=function(i,a){function s(){switch(c.state_){case 1:i(c.result_);break;case 2:a(c.result_);break;default:throw Error("Unexpected state: "+c.state_)}}var c=this;this.onSettledCallbacks_==null?o.asyncExecute(s):this.onSettledCallbacks_.push(s),this.isRejectionHandled_=!0},A.resolve=r,A.reject=function(i){return new A(function(a,s){s(i)})},A.race=function(i){return new A(function(a,s){for(var c=U.makeIterator(i),l=c.next();!l.done;l=c.next())r(l.value).callWhenSettled_(a,s)})},A.all=function(i){var a=U.makeIterator(i),s=a.next();return s.done?r([]):new A(function(c,l){function u(f){return function(b){p[f]=b,g--,g==0&&c(p)}}var p=[],g=0;do p.push(void 0),g++,r(s.value).callWhenSettled_(u(p.length-1),l),s=a.next();while(!s.done)})},A},"es6","es3");U.checkStringArgs=function(e,t,r){if(e==null)throw new TypeError("The 'this' value for String.prototype."+r+" must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype."+r+" must not be a regular expression");return e+""};U.polyfill("String.prototype.startsWith",function(e){return e||function(t,r){var n=U.checkStringArgs(this,t,"startsWith");t+="";var A=n.length,o=t.length;r=Math.max(0,Math.min(r|0,n.length));for(var i=0;i<o&&r<A;)if(n[r++]!=t[i++])return!1;return i>=o}},"es6","es3");U.polyfill("String.prototype.codePointAt",function(e){return e||function(t){var r=U.checkStringArgs(this,null,"codePointAt"),n=r.length;if(t=Number(t)||0,t>=0&&t<n){t|=0;var A=r.charCodeAt(t);return A<55296||A>56319||t+1===n?A:(t=r.charCodeAt(t+1),t<56320||t>57343?A:(A-55296)*1024+t+9216)}}},"es6","es3");var oo=(function(){var e,t,r=(e=globalThis.document)==null||(t=e.currentScript)==null?void 0:t.src;return function(n){function A(X){X&&typeof X=="object"&&(X=X.ptr),this.ptr=bn(X),V(A)[this.ptr]=this}function o(){this.ptr=cn(),V(o)[this.ptr]=this}function i(){this.ptr=Re(),V(i)[this.ptr]=this}function a(){this.ptr=I(),V(a)[this.ptr]=this}function s(){this.ptr=Gr(),V(s)[this.ptr]=this}function c(){this.ptr=Mr(),V(c)[this.ptr]=this}function l(){this.ptr=_r(),V(l)[this.ptr]=this}function u(){this.ptr=xr(),V(u)[this.ptr]=this}function p(){this.ptr=Er(),V(p)[this.ptr]=this}function g(){this.ptr=rr(),V(g)[this.ptr]=this}function f(){this.ptr=st(),V(f)[this.ptr]=this}function b(){throw"cannot construct a VoidPtr, no constructor in IDL"}function v(X){if(typeof X=="object"){for(var h=we.alloc(X,tr),E=h/4,w=0;w<X.length;w++)tr[E+w]=X[w];return h}return X}function Q(X){if(typeof X=="object"){for(var h=we.alloc(X,Rt),E=h/4,w=0;w<X.length;w++)Rt[E+w]=X[w];return h}return X}function x(X){if(typeof X=="object"){for(var h=we.alloc(X,er),E=h/2,w=0;w<X.length;w++)er[E+w]=X[w];return h}return X}function _(X){if(typeof X=="object"){for(var h=we.alloc(X,Ke),E=0;E<X.length;E++)Ke[h+E]=X[E];return h}return X}function y(X){if(typeof X=="string"){X=dt(X);for(var h=we.alloc(X,Ke),E=0;E<X.length;E++)Ke[h+E]=X[E];return h}return X}function M(X){return X.__class__}function T(X){return X.ptr}function N(X,h){return X.ptr===h.ptr}function O(X){if(!X.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";X.__destroy__(),delete V(X.__class__)[X.ptr]}function D(X,h){return H(X.ptr,h)}function H(X,h){var E=V(h),w=E[X];return w||(w=Object.create((h||P).prototype),w.ptr=X,E[X]=w)}function V(X){return(X||P).__cache__}function P(){}function z(){var X,h,E;return(0,U.asyncExecutePromiseGeneratorProgram)(function(w){if(w.getNextAddressJsc()==1)return ue(),X=F.setStatus,X?(X("Running..."),w.yield(new Promise(function(J){return setTimeout(J,1)}),3)):w.jumpTo(2);if(w.getNextAddressJsc()!=2&&setTimeout(X,1,""),Fe)return w.return();je=!0,rt(wt),Rr.e(),(E=(h=F).onRuntimeInitialized)==null||E.call(h),me(),w.jumpToEnd()})}function ee(){function X(S){return S=Rr=S.exports,F._webidl_free=S.f,F._free=S.g,F._webidl_malloc=S.h,F._malloc=S.i,mr=F._emscripten_bind_VoidPtr___destroy___0=S.j,st=F._emscripten_bind_GeometryAttribute_GeometryAttribute_0=S.k,Kt=F._emscripten_bind_GeometryAttribute___destroy___0=S.l,rr=F._emscripten_bind_PointAttribute_PointAttribute_0=S.m,ot=F._emscripten_bind_PointAttribute_size_0=S.n,Qt=F._emscripten_bind_PointAttribute_attribute_type_0=S.o,Ft=F._emscripten_bind_PointAttribute_data_type_0=S.p,Vt=F._emscripten_bind_PointAttribute_num_components_0=S.q,zt=F._emscripten_bind_PointAttribute_normalized_0=S.r,Yt=F._emscripten_bind_PointAttribute_byte_stride_0=S.s,Wt=F._emscripten_bind_PointAttribute_byte_offset_0=S.t,Br=F._emscripten_bind_PointAttribute_unique_id_0=S.u,br=F._emscripten_bind_PointAttribute___destroy___0=S.v,Er=F._emscripten_bind_PointCloud_PointCloud_0=S.w,Cr=F._emscripten_bind_PointCloud_num_attributes_0=S.x,yr=F._emscripten_bind_PointCloud_num_points_0=S.y,Qr=F._emscripten_bind_PointCloud___destroy___0=S.z,xr=F._emscripten_bind_Mesh_Mesh_0=S.A,wr=F._emscripten_bind_Mesh_num_faces_0=S.B,Dr=F._emscripten_bind_Mesh_num_attributes_0=S.C,nr=F._emscripten_bind_Mesh_num_points_0=S.D,Ut=F._emscripten_bind_Mesh_set_num_points_1=S.E,vr=F._emscripten_bind_Mesh___destroy___0=S.F,_r=F._emscripten_bind_Metadata_Metadata_0=S.G,Ar=F._emscripten_bind_Metadata___destroy___0=S.H,Mr=F._emscripten_bind_DracoInt8Array_DracoInt8Array_0=S.I,or=F._emscripten_bind_DracoInt8Array_GetValue_1=S.J,kt=F._emscripten_bind_DracoInt8Array_size_0=S.K,Sr=F._emscripten_bind_DracoInt8Array___destroy___0=S.L,Gr=F._emscripten_bind_MetadataBuilder_MetadataBuilder_0=S.M,ir=F._emscripten_bind_MetadataBuilder_AddStringEntry_3=S.N,qt=F._emscripten_bind_MetadataBuilder_AddIntEntry_3=S.O,ct=F._emscripten_bind_MetadataBuilder_AddIntEntryArray_4=S.P,Nt=F._emscripten_bind_MetadataBuilder_AddDoubleEntry_3=S.Q,ar=F._emscripten_bind_MetadataBuilder___destroy___0=S.R,I=F._emscripten_bind_PointCloudBuilder_PointCloudBuilder_0=S.S,B=F._emscripten_bind_PointCloudBuilder_AddFloatAttribute_5=S.T,G=F._emscripten_bind_PointCloudBuilder_AddInt8Attribute_5=S.U,j=F._emscripten_bind_PointCloudBuilder_AddUInt8Attribute_5=S.V,K=F._emscripten_bind_PointCloudBuilder_AddInt16Attribute_5=S.W,Z=F._emscripten_bind_PointCloudBuilder_AddUInt16Attribute_5=S.X,re=F._emscripten_bind_PointCloudBuilder_AddInt32Attribute_5=S.Y,ne=F._emscripten_bind_PointCloudBuilder_AddUInt32Attribute_5=S.Z,le=F._emscripten_bind_PointCloudBuilder_AddMetadata_2=S._,se=F._emscripten_bind_PointCloudBuilder_SetMetadataForAttribute_3=S.$,fe=F._emscripten_bind_PointCloudBuilder_SetNormalizedFlagForAttribute_3=S.aa,xe=F._emscripten_bind_PointCloudBuilder___destroy___0=S.ba,Re=F._emscripten_bind_MeshBuilder_MeshBuilder_0=S.ca,Ve=F._emscripten_bind_MeshBuilder_AddFacesToMesh_3=S.da,ke=F._emscripten_bind_MeshBuilder_AddFloatAttributeToMesh_5=S.ea,tt=F._emscripten_bind_MeshBuilder_AddInt32AttributeToMesh_5=S.fa,it=F._emscripten_bind_MeshBuilder_AddMetadataToMesh_2=S.ga,Dt=F._emscripten_bind_MeshBuilder_AddFloatAttribute_5=S.ha,lt=F._emscripten_bind_MeshBuilder_AddInt8Attribute_5=S.ia,sr=F._emscripten_bind_MeshBuilder_AddUInt8Attribute_5=S.ja,cr=F._emscripten_bind_MeshBuilder_AddInt16Attribute_5=S.ka,tn=F._emscripten_bind_MeshBuilder_AddUInt16Attribute_5=S.la,rn=F._emscripten_bind_MeshBuilder_AddInt32Attribute_5=S.ma,nn=F._emscripten_bind_MeshBuilder_AddUInt32Attribute_5=S.na,An=F._emscripten_bind_MeshBuilder_AddMetadata_2=S.oa,on=F._emscripten_bind_MeshBuilder_SetMetadataForAttribute_3=S.pa,an=F._emscripten_bind_MeshBuilder_SetNormalizedFlagForAttribute_3=S.qa,sn=F._emscripten_bind_MeshBuilder___destroy___0=S.ra,cn=F._emscripten_bind_Encoder_Encoder_0=S.sa,ln=F._emscripten_bind_Encoder_SetEncodingMethod_1=S.ta,un=F._emscripten_bind_Encoder_SetAttributeQuantization_2=S.ua,gn=F._emscripten_bind_Encoder_SetAttributeExplicitQuantization_5=S.va,pn=F._emscripten_bind_Encoder_SetSpeedOptions_2=S.wa,fn=F._emscripten_bind_Encoder_SetTrackEncodedProperties_1=S.xa,dn=F._emscripten_bind_Encoder_EncodeMeshToDracoBuffer_2=S.ya,hn=F._emscripten_bind_Encoder_EncodePointCloudToDracoBuffer_3=S.za,In=F._emscripten_bind_Encoder_GetNumberOfEncodedPoints_0=S.Aa,mn=F._emscripten_bind_Encoder_GetNumberOfEncodedFaces_0=S.Ba,Bn=F._emscripten_bind_Encoder___destroy___0=S.Ca,bn=F._emscripten_bind_ExpertEncoder_ExpertEncoder_1=S.Da,En=F._emscripten_bind_ExpertEncoder_SetEncodingMethod_1=S.Ea,Cn=F._emscripten_bind_ExpertEncoder_SetAttributeQuantization_2=S.Fa,yn=F._emscripten_bind_ExpertEncoder_SetAttributeExplicitQuantization_5=S.Ga,Qn=F._emscripten_bind_ExpertEncoder_SetSpeedOptions_2=S.Ha,xn=F._emscripten_bind_ExpertEncoder_SetTrackEncodedProperties_1=S.Ia,wn=F._emscripten_bind_ExpertEncoder_EncodeToDracoBuffer_2=S.Ja,Dn=F._emscripten_bind_ExpertEncoder_GetNumberOfEncodedPoints_0=S.Ka,vn=F._emscripten_bind_ExpertEncoder_GetNumberOfEncodedFaces_0=S.La,_n=F._emscripten_bind_ExpertEncoder___destroy___0=S.Ma,Mn=F._emscripten_enum_draco_GeometryAttribute_Type_INVALID=S.Na,Sn=F._emscripten_enum_draco_GeometryAttribute_Type_POSITION=S.Oa,Gn=F._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=S.Pa,Pn=F._emscripten_enum_draco_GeometryAttribute_Type_COLOR=S.Qa,Rn=F._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=S.Ra,Fn=F._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=S.Sa,Un=F._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=S.Ta,kn=F._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=S.Ua,Nn=F._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=S.Va,Tn=F._emscripten_enum_draco_MeshEncoderMethod_MESH_SEQUENTIAL_ENCODING=S.Wa,Ln=F._emscripten_enum_draco_MeshEncoderMethod_MESH_EDGEBREAKER_ENCODING=S.Xa,Pr=S.d,oe(),Rr}var h,E,w,J;return(0,U.asyncExecutePromiseGeneratorProgram)(function(S){return S.getNextAddressJsc()==1?(h={a:On},(E=F.instantiateWasm)?S.return(new Promise(function(Be){E(h,function(nt){return Be(X(nt))})})):(Le!=null||(Le=pe("draco_encoder.wasm")),S.yield(Y(Ge,Le,h),2))):(w=S.getYieldResultJsc(),J=X(w.instance),S.return(J))})}function Y(X,h,E){var w,J,S;return(0,U.asyncExecutePromiseGeneratorProgram)(function(Be){switch(Be.getNextAddressJsc()){case 1:if(X||De(h)||Ce){Be.jumpTo(2);break}return Be.setCatchFinallyBlocks(3),w=fetch(h,{credentials:"same-origin"}),Be.yield(WebAssembly.instantiateStreaming(w,E),5);case 5:return J=Be.getYieldResultJsc(),Be.return(J);case 3:S=Be.enterCatchBlock(),_e("wasm streaming compile failed: "+S),_e("falling back to ArrayBuffer instantiation");case 2:return Be.return($(h,E))}})}function $(X,h){var E,w,J;return(0,U.asyncExecutePromiseGeneratorProgram)(function(S){switch(S.getNextAddressJsc()){case 1:return S.setCatchFinallyBlocks(2),S.yield(W(X),4);case 4:return E=S.getYieldResultJsc(),S.yield(WebAssembly.instantiate(E,h),5);case 5:return w=S.getYieldResultJsc(),S.return(w);case 2:J=S.enterCatchBlock(),_e("failed to asynchronously prepare wasm: "+J),te(J),S.jumpToEnd()}})}function W(X){var h;return(0,U.asyncExecutePromiseGeneratorProgram)(function(E){switch(E.getNextAddressJsc()){case 1:if(Ge){E.jumpTo(2);break}return E.setCatchFinallyBlocks(3),E.yield(ce(X),5);case 5:return h=E.getYieldResultJsc(),E.return(new Uint8Array(h));case 3:E.enterCatchBlock();case 2:var w=E.return;if(X==Le&&Ge)var J=new Uint8Array(Ge);else if(he)J=he(X);else throw"both async and sync fetching of the wasm failed";return w.call(E,J)}})}function te(X){var h,E;throw(E=(h=F).onAbort)==null||E.call(h,X),X="Aborted("+X+")",_e(X),Fe=!0,new WebAssembly.RuntimeError(X+". Build with -sASSERTIONS for more info.")}function me(){var X=F.postRun;X&&(typeof X=="function"&&(X=[X]),We.push.apply(We,(0,U.arrayFromIterable)(X))),rt(We)}function ue(){var X=F.preRun;X&&(typeof X=="function"&&(X=[X]),bt.push.apply(bt,(0,U.arrayFromIterable)(X))),rt(bt)}function oe(){var X,h;!((X=Ke)==null||(h=X.buffer)==null)&&h.resizable||(X=Pr.buffer,F.HEAP8=Ke=new Int8Array(X),F.HEAP16=er=new Int16Array(X),F.HEAPU8=ft=new Uint8Array(X),F.HEAPU16=new Uint16Array(X),F.HEAP32=Rt=new Int32Array(X),F.HEAPU32=ze=new Uint32Array(X),F.HEAPF32=tr=new Float32Array(X),F.HEAPF64=new Float64Array(X))}function pe(X){return F.locateFile?F.locateFile(X,ie):ie+X}function Me(X){return typeof X!="string"?!1:(X=X.split("."),X.length<2||X.length>3?!1:X[0]==1&&X[1]>=0&&X[1]<=5?!0:!(X[0]!=0||X[1]>10))}n=n===void 0?{}:n;var F,ve,Se,Ne,Ee,m,Ce,be,ye,ie,ce,he,Qe,_e,Ge,Fe,De,He,Te,je,Le,Ke,rt,We,bt,ze,Je,Et,gt,Ct,pt,qe,It,Gt,ft,Jt,at,Pt,dt,wt,Ir,er,Rt,tr,yt,mr,st,Kt,rr,ot,Qt,Ft,Vt,zt,Yt,Wt,Br,br,Er,Cr,yr,Qr,xr,wr,Dr,nr,Ut,vr,_r,Ar,Mr,or,kt,Sr,Gr,ir,qt,ct,Nt,ar,I,B,G,j,K,Z,re,ne,le,se,fe,xe,Re,Ve,ke,tt,it,Dt,lt,sr,cr,tn,rn,nn,An,on,an,sn,cn,ln,un,gn,pn,fn,dn,hn,In,mn,Bn,bn,En,Cn,yn,Qn,xn,wn,Dn,vn,_n,Mn,Sn,Gn,Pn,Rn,Fn,Un,kn,Nn,Tn,Ln,Pr,On,Rr,we;return(0,U.asyncExecutePromiseGeneratorProgram)(function(X){if(X.getNextAddressJsc()==1){if(F=n,ve=!!globalThis.window,Se=!!globalThis.WorkerGlobalScope,Ce=((Ne=globalThis.process)==null||(Ee=Ne.versions)==null?void 0:Ee.node)&&((m=globalThis.process)==null?void 0:m.type)!="renderer",ye=be=!1,F.onRuntimeInitialized=function(){be=!0,ye&&typeof F.onModuleLoaded=="function"&&F.onModuleLoaded(F)},F.onModuleParsed=function(){ye=!0,be&&typeof F.onModuleLoaded=="function"&&F.onModuleLoaded(F)},F.isVersionSupported=Me,typeof __filename<"u"?r=__filename:Se&&(r=self.location.href),ie="",Ce)Qe=(vt(),Ti(qi)),ie=__dirname+"/",he=function(h){return h=De(h)?new URL(h):h,Qe.readFileSync(h)},ce=function(h,E){E=E===void 0?!0:E;var w;return(0,U.asyncExecutePromiseGeneratorProgram)(function(J){return h=De(h)?new URL(h):h,w=Qe.readFileSync(h,E?void 0:"utf8"),J.return(w)})},de.argv.length>1&&de.argv[1].replace(/\\/g,"/"),de.argv.slice(2);else if(ve||Se){try{ie=new URL(".",r).href}catch{}Se&&(he=function(h){var E=new XMLHttpRequest;return E.open("GET",h,!1),E.responseType="arraybuffer",E.send(null),new Uint8Array(E.response)}),ce=function(h){var E;return(0,U.asyncExecutePromiseGeneratorProgram)(function(w){if(w.getNextAddressJsc()==1)return De(h)?w.return(new Promise(function(J,S){var Be=new XMLHttpRequest;Be.open("GET",h,!0),Be.responseType="arraybuffer",Be.onload=function(){Be.status==200||Be.status==0&&Be.response?J(Be.response):S(Be.status)},Be.onerror=S,Be.send(null)})):w.yield(fetch(h,{credentials:"same-origin"}),2);if(E=w.getYieldResultJsc(),E.ok)return w.return(E.arrayBuffer());throw Error(E.status+" : "+E.url)})}}if(console.log.bind(console),_e=console.error.bind(console),Fe=!1,De=function(h){return h.startsWith("file://")},He=function(){},Te=function(){return He.apply(this,arguments)||this},U.inherits(Te,He),je=!1,rt=function(h){for(;h.length>0;)h.shift()(F)},We=[],bt=[],Je=function(h){this.excPtr=h,this.ptr=h-24},Je.prototype.set_type=function(h){ze[this.ptr+4>>2]=h},Je.prototype.get_type=function(){return ze[this.ptr+4>>2]},Je.prototype.set_destructor=function(h){ze[this.ptr+8>>2]=h},Je.prototype.get_destructor=function(){return ze[this.ptr+8>>2]},Je.prototype.set_caught=function(h){Ke[this.ptr+12]=h?1:0},Je.prototype.get_caught=function(){return Ke[this.ptr+12]!=0},Je.prototype.set_rethrown=function(h){Ke[this.ptr+13]=h?1:0},Je.prototype.get_rethrown=function(){return Ke[this.ptr+13]!=0},Je.prototype.init=function(h,E){this.set_adjusted_ptr(0),this.set_type(h),this.set_destructor(E)},Je.prototype.set_adjusted_ptr=function(h){ze[this.ptr+16>>2]=h},Je.prototype.get_adjusted_ptr=function(){return ze[this.ptr+16>>2]},Et=0,gt=function(h){te()},Ct=function(h,E,w){new Je(h).init(E,w),Et++,gt(h)},pt=function(){return te("")},qe=function(){return 2147483648},It=function(h,E){return Math.ceil(h/E)*E},Gt=function(h){var E=Pr.buffer.byteLength;try{return Pr.grow((h-E+65535)/65536|0),oe(),1}catch{}},Jt=function(h){var E=ft.length;h>>>=0;var w=qe();if(h>w)return!1;for(var J=1;J<=4;J*=2){var S=E*(1+.2/J);if(S=Math.min(S,h+100663296),S=Math.min(w,It(Math.max(h,S),65536)),Gt(S))return!0}return!1},at=function(h){for(var E=0,w=0;w<h.length;++w){var J=h.charCodeAt(w);J<=127?E++:J<=2047?E+=2:J>=55296&&J<=57343?(E+=4,++w):E+=3}return E},Pt=function(h,E,w,J){if(!(J>0))return 0;var S=w;J=w+J-1;for(var Be=0;Be<h.length;++Be){var nt=h.codePointAt(Be);if(nt<=127){if(w>=J)break;E[w++]=nt}else if(nt<=2047){if(w+1>=J)break;E[w++]=192|nt>>6,E[w++]=128|nt&63}else if(nt<=65535){if(w+2>=J)break;E[w++]=224|nt>>12,E[w++]=128|nt>>6&63,E[w++]=128|nt&63}else{if(w+3>=J)break;E[w++]=240|nt>>18,E[w++]=128|nt>>12&63,E[w++]=128|nt>>6&63,E[w++]=128|nt&63,Be++}}return E[w]=0,w-S},dt=function(h,E,w){return w=w>0?w:at(h)+1,w=Array(w),h=Pt(h,w,0,w.length),E&&(w.length=h),w},globalThis.TextDecoder&&new TextDecoder,wt=[],Ir=function(h){return wt.push(h)},F.printErr&&(_e=F.printErr),F.wasmBinary&&(Ge=F.wasmBinary),yt=F.preInit)for(typeof yt=="function"&&(F.preInit=yt=[yt]);yt.length>0;)yt.shift()();return On={a:Ct,c:pt,b:Jt},X.yield(ee(),2)}return X.getNextAddressJsc()!=3?(Rr=X.getYieldResultJsc(),X.yield(z(),3)):(P.prototype=Object.create(P.prototype),P.prototype.constructor=P,P.prototype.__class__=P,P.__cache__={},F.WrapperObject=P,F.getCache=V,F.wrapPointer=H,F.castObject=D,F.NULL=H(0),F.destroy=O,F.compare=N,F.getPointer=T,F.getClass=M,we={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(we.needed){for(var h=0;h<we.temps.length;h++)F._webidl_free(we.temps[h]);we.temps.length=0,F._webidl_free(we.buffer),we.buffer=0,we.size+=we.needed,we.needed=0}we.buffer||(we.size+=128,we.buffer=F._webidl_malloc(we.size),we.buffer||te(void 0)),we.pos=0},alloc:function(h,E){return we.buffer||te(void 0),h=h.length*E.BYTES_PER_ELEMENT,h=It(h,8),we.pos+h>=we.size?(h>0||te(void 0),we.needed+=h,E=F._webidl_malloc(h),we.temps.push(E)):(E=we.buffer+we.pos,we.pos+=h),E}},b.prototype=Object.create(P.prototype),b.prototype.constructor=b,b.prototype.__class__=b,b.__cache__={},F.VoidPtr=b,b.prototype.__destroy__=b.prototype.__destroy__=function(){mr(this.ptr)},f.prototype=Object.create(P.prototype),f.prototype.constructor=f,f.prototype.__class__=f,f.__cache__={},F.GeometryAttribute=f,f.prototype.__destroy__=f.prototype.__destroy__=function(){Kt(this.ptr)},g.prototype=Object.create(P.prototype),g.prototype.constructor=g,g.prototype.__class__=g,g.__cache__={},F.PointAttribute=g,g.prototype.size=g.prototype.size=function(){return ot(this.ptr)},g.prototype.attribute_type=g.prototype.attribute_type=function(){return Qt(this.ptr)},g.prototype.data_type=g.prototype.data_type=function(){return Ft(this.ptr)},g.prototype.num_components=g.prototype.num_components=function(){return Vt(this.ptr)},g.prototype.normalized=g.prototype.normalized=function(){return!!zt(this.ptr)},g.prototype.byte_stride=g.prototype.byte_stride=function(){return Yt(this.ptr)},g.prototype.byte_offset=g.prototype.byte_offset=function(){return Wt(this.ptr)},g.prototype.unique_id=g.prototype.unique_id=function(){return Br(this.ptr)},g.prototype.__destroy__=g.prototype.__destroy__=function(){br(this.ptr)},p.prototype=Object.create(P.prototype),p.prototype.constructor=p,p.prototype.__class__=p,p.__cache__={},F.PointCloud=p,p.prototype.num_attributes=p.prototype.num_attributes=function(){return Cr(this.ptr)},p.prototype.num_points=p.prototype.num_points=function(){return yr(this.ptr)},p.prototype.__destroy__=p.prototype.__destroy__=function(){Qr(this.ptr)},u.prototype=Object.create(P.prototype),u.prototype.constructor=u,u.prototype.__class__=u,u.__cache__={},F.Mesh=u,u.prototype.num_faces=u.prototype.num_faces=function(){return wr(this.ptr)},u.prototype.num_attributes=u.prototype.num_attributes=function(){return Dr(this.ptr)},u.prototype.num_points=u.prototype.num_points=function(){return nr(this.ptr)},u.prototype.set_num_points=u.prototype.set_num_points=function(h){var E=this.ptr;h&&typeof h=="object"&&(h=h.ptr),Ut(E,h)},u.prototype.__destroy__=u.prototype.__destroy__=function(){vr(this.ptr)},l.prototype=Object.create(P.prototype),l.prototype.constructor=l,l.prototype.__class__=l,l.__cache__={},F.Metadata=l,l.prototype.__destroy__=l.prototype.__destroy__=function(){Ar(this.ptr)},c.prototype=Object.create(P.prototype),c.prototype.constructor=c,c.prototype.__class__=c,c.__cache__={},F.DracoInt8Array=c,c.prototype.GetValue=c.prototype.GetValue=function(h){var E=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),or(E,h)},c.prototype.size=c.prototype.size=function(){return kt(this.ptr)},c.prototype.__destroy__=c.prototype.__destroy__=function(){Sr(this.ptr)},s.prototype=Object.create(P.prototype),s.prototype.constructor=s,s.prototype.__class__=s,s.__cache__={},F.MetadataBuilder=s,s.prototype.AddStringEntry=s.prototype.AddStringEntry=function(h,E,w){var J=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E=E&&typeof E=="object"?E.ptr:y(E),w=w&&typeof w=="object"?w.ptr:y(w),!!ir(J,h,E,w)},s.prototype.AddIntEntry=s.prototype.AddIntEntry=function(h,E,w){var J=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E=E&&typeof E=="object"?E.ptr:y(E),w&&typeof w=="object"&&(w=w.ptr),!!qt(J,h,E,w)},s.prototype.AddIntEntryArray=s.prototype.AddIntEntryArray=function(h,E,w,J){var S=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E=E&&typeof E=="object"?E.ptr:y(E),typeof w=="object"&&(w=Q(w)),J&&typeof J=="object"&&(J=J.ptr),!!ct(S,h,E,w,J)},s.prototype.AddDoubleEntry=s.prototype.AddDoubleEntry=function(h,E,w){var J=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E=E&&typeof E=="object"?E.ptr:y(E),w&&typeof w=="object"&&(w=w.ptr),!!Nt(J,h,E,w)},s.prototype.__destroy__=s.prototype.__destroy__=function(){ar(this.ptr)},a.prototype=Object.create(P.prototype),a.prototype.constructor=a,a.prototype.__class__=a,a.__cache__={},F.PointCloudBuilder=a,a.prototype.AddFloatAttribute=a.prototype.AddFloatAttribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=v(S)),B(Be,h,E,w,J,S)},a.prototype.AddInt8Attribute=a.prototype.AddInt8Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=_(S)),G(Be,h,E,w,J,S)},a.prototype.AddUInt8Attribute=a.prototype.AddUInt8Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=_(S)),j(Be,h,E,w,J,S)},a.prototype.AddInt16Attribute=a.prototype.AddInt16Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=x(S)),K(Be,h,E,w,J,S)},a.prototype.AddUInt16Attribute=a.prototype.AddUInt16Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=x(S)),Z(Be,h,E,w,J,S)},a.prototype.AddInt32Attribute=a.prototype.AddInt32Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=Q(S)),re(Be,h,E,w,J,S)},a.prototype.AddUInt32Attribute=a.prototype.AddUInt32Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=Q(S)),ne(Be,h,E,w,J,S)},a.prototype.AddMetadata=a.prototype.AddMetadata=function(h,E){var w=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),!!le(w,h,E)},a.prototype.SetMetadataForAttribute=a.prototype.SetMetadataForAttribute=function(h,E,w){var J=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),!!se(J,h,E,w)},a.prototype.SetNormalizedFlagForAttribute=a.prototype.SetNormalizedFlagForAttribute=function(h,E,w){var J=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),!!fe(J,h,E,w)},a.prototype.__destroy__=a.prototype.__destroy__=function(){xe(this.ptr)},i.prototype=Object.create(P.prototype),i.prototype.constructor=i,i.prototype.__class__=i,i.__cache__={},F.MeshBuilder=i,i.prototype.AddFacesToMesh=i.prototype.AddFacesToMesh=function(h,E,w){var J=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),typeof w=="object"&&(w=Q(w)),!!Ve(J,h,E,w)},i.prototype.AddFloatAttributeToMesh=i.prototype.AddFloatAttributeToMesh=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=v(S)),ke(Be,h,E,w,J,S)},i.prototype.AddInt32AttributeToMesh=i.prototype.AddInt32AttributeToMesh=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=Q(S)),tt(Be,h,E,w,J,S)},i.prototype.AddMetadataToMesh=i.prototype.AddMetadataToMesh=function(h,E){var w=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),!!it(w,h,E)},i.prototype.AddFloatAttribute=i.prototype.AddFloatAttribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=v(S)),Dt(Be,h,E,w,J,S)},i.prototype.AddInt8Attribute=i.prototype.AddInt8Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=_(S)),lt(Be,h,E,w,J,S)},i.prototype.AddUInt8Attribute=i.prototype.AddUInt8Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=_(S)),sr(Be,h,E,w,J,S)},i.prototype.AddInt16Attribute=i.prototype.AddInt16Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=x(S)),cr(Be,h,E,w,J,S)},i.prototype.AddUInt16Attribute=i.prototype.AddUInt16Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=x(S)),tn(Be,h,E,w,J,S)},i.prototype.AddInt32Attribute=i.prototype.AddInt32Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=Q(S)),rn(Be,h,E,w,J,S)},i.prototype.AddUInt32Attribute=i.prototype.AddUInt32Attribute=function(h,E,w,J,S){var Be=this.ptr;return we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),J&&typeof J=="object"&&(J=J.ptr),typeof S=="object"&&(S=Q(S)),nn(Be,h,E,w,J,S)},i.prototype.AddMetadata=i.prototype.AddMetadata=function(h,E){var w=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),!!An(w,h,E)},i.prototype.SetMetadataForAttribute=i.prototype.SetMetadataForAttribute=function(h,E,w){var J=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),!!on(J,h,E,w)},i.prototype.SetNormalizedFlagForAttribute=i.prototype.SetNormalizedFlagForAttribute=function(h,E,w){var J=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),!!an(J,h,E,w)},i.prototype.__destroy__=i.prototype.__destroy__=function(){sn(this.ptr)},o.prototype=Object.create(P.prototype),o.prototype.constructor=o,o.prototype.__class__=o,o.__cache__={},F.Encoder=o,o.prototype.SetEncodingMethod=o.prototype.SetEncodingMethod=function(h){var E=this.ptr;h&&typeof h=="object"&&(h=h.ptr),ln(E,h)},o.prototype.SetAttributeQuantization=o.prototype.SetAttributeQuantization=function(h,E){var w=this.ptr;h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),un(w,h,E)},o.prototype.SetAttributeExplicitQuantization=o.prototype.SetAttributeExplicitQuantization=function(h,E,w,J,S){var Be=this.ptr;we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),typeof J=="object"&&(J=v(J)),S&&typeof S=="object"&&(S=S.ptr),gn(Be,h,E,w,J,S)},o.prototype.SetSpeedOptions=o.prototype.SetSpeedOptions=function(h,E){var w=this.ptr;h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),pn(w,h,E)},o.prototype.SetTrackEncodedProperties=o.prototype.SetTrackEncodedProperties=function(h){var E=this.ptr;h&&typeof h=="object"&&(h=h.ptr),fn(E,h)},o.prototype.EncodeMeshToDracoBuffer=o.prototype.EncodeMeshToDracoBuffer=function(h,E){var w=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),dn(w,h,E)},o.prototype.EncodePointCloudToDracoBuffer=o.prototype.EncodePointCloudToDracoBuffer=function(h,E,w){var J=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),hn(J,h,E,w)},o.prototype.GetNumberOfEncodedPoints=o.prototype.GetNumberOfEncodedPoints=function(){return In(this.ptr)},o.prototype.GetNumberOfEncodedFaces=o.prototype.GetNumberOfEncodedFaces=function(){return mn(this.ptr)},o.prototype.__destroy__=o.prototype.__destroy__=function(){Bn(this.ptr)},A.prototype=Object.create(P.prototype),A.prototype.constructor=A,A.prototype.__class__=A,A.__cache__={},F.ExpertEncoder=A,A.prototype.SetEncodingMethod=A.prototype.SetEncodingMethod=function(h){var E=this.ptr;h&&typeof h=="object"&&(h=h.ptr),En(E,h)},A.prototype.SetAttributeQuantization=A.prototype.SetAttributeQuantization=function(h,E){var w=this.ptr;h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),Cn(w,h,E)},A.prototype.SetAttributeExplicitQuantization=A.prototype.SetAttributeExplicitQuantization=function(h,E,w,J,S){var Be=this.ptr;we.prepare(),h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),w&&typeof w=="object"&&(w=w.ptr),typeof J=="object"&&(J=v(J)),S&&typeof S=="object"&&(S=S.ptr),yn(Be,h,E,w,J,S)},A.prototype.SetSpeedOptions=A.prototype.SetSpeedOptions=function(h,E){var w=this.ptr;h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),Qn(w,h,E)},A.prototype.SetTrackEncodedProperties=A.prototype.SetTrackEncodedProperties=function(h){var E=this.ptr;h&&typeof h=="object"&&(h=h.ptr),xn(E,h)},A.prototype.EncodeToDracoBuffer=A.prototype.EncodeToDracoBuffer=function(h,E){var w=this.ptr;return h&&typeof h=="object"&&(h=h.ptr),E&&typeof E=="object"&&(E=E.ptr),wn(w,h,E)},A.prototype.GetNumberOfEncodedPoints=A.prototype.GetNumberOfEncodedPoints=function(){return Dn(this.ptr)},A.prototype.GetNumberOfEncodedFaces=A.prototype.GetNumberOfEncodedFaces=function(){return vn(this.ptr)},A.prototype.__destroy__=A.prototype.__destroy__=function(){_n(this.ptr)},(function(){function h(){F.INVALID=Mn(),F.POSITION=Sn(),F.NORMAL=Gn(),F.COLOR=Pn(),F.TEX_COORD=Rn(),F.GENERIC=Fn(),F.INVALID_GEOMETRY_TYPE=Un(),F.POINT_CLOUD=kn(),F.TRIANGULAR_MESH=Nn(),F.MESH_SEQUENTIAL_ENCODING=Tn(),F.MESH_EDGEBREAKER_ENCODING=Ln()}je?h():Ir(h)})(),typeof F.onModuleParsed=="function"&&F.onModuleParsed(),X.return(F))})}})();typeof io=="object"&&typeof QA=="object"?(QA.exports=oo,QA.exports.default=oo):typeof define=="function"&&define.amd&&define([],function(){return oo})});var ba=Hn((so,xA)=>{q();var k=k||{};k.scope={};k.ASSUME_ES2020=!1;k.ASSUME_ES6=k.ASSUME_ES2020;k.ASSUME_ES5=k.ASSUME_ES6;k.ASSUME_NO_NATIVE_MAP=!1;k.ASSUME_NO_NATIVE_SET=!1;k.ISOLATE_POLYFILLS=!1;k.FORCE_POLYFILL_PROMISE=!1;k.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;k.INSTRUMENT_ASYNC_CONTEXT=!0;k.objectCreate=k.ASSUME_ES5||typeof Object.create=="function"?Object.create:function(e){var t=function(){};return t.prototype=e,new t};k.defineProperty=k.ASSUME_ES5||typeof Object.defineProperties=="function"?Object.defineProperty:function(e,t,r){return e==Array.prototype||e==Object.prototype||(e[t]=r.value),e};k.getGlobal=function(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof globalThis=="object"&&globalThis];for(var t=0;t<e.length;++t){var r=e[t];if(r&&r.Math==Math)return r}throw Error("Cannot find global object")};k.global=k.ASSUME_ES2020?globalThis:k.getGlobal(so);k.IS_SYMBOL_NATIVE=typeof Symbol=="function"&&typeof Symbol("x")=="symbol";k.TRUST_ES6_POLYFILLS=!k.ISOLATE_POLYFILLS||k.IS_SYMBOL_NATIVE;k.polyfills={};k.propertyToPolyfillSymbol={};k.POLYFILL_PREFIX="$jscp$";k.TYPED_ARRAY_CLASSES=(function(){var e="Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64".split(" ");return k.global.BigInt64Array&&(e.push("BigInt64"),e.push("BigUint64")),e})();k.polyfillTypedArrayMethod=function(e,t,r,n){if(t)for(var A=0;A<k.TYPED_ARRAY_CLASSES.length;A++){var o=k.TYPED_ARRAY_CLASSES[A]+"Array.prototype."+e;k.ISOLATE_POLYFILLS?k.polyfillIsolated(o,t,r,n):k.polyfillUnisolated(o,t,r,n)}};k.polyfill=function(e,t,r,n){t&&(k.ISOLATE_POLYFILLS?k.polyfillIsolated(e,t,r,n):k.polyfillUnisolated(e,t,r,n))};k.polyfillUnisolated=function(e,t,r,n){for(r=k.global,e=e.split("."),n=0;n<e.length-1;n++){var A=e[n];if(!(A in r))return;r=r[A]}e=e[e.length-1],n=r[e],t=t(n),t!=n&&t!=null&&k.defineProperty(r,e,{configurable:!0,writable:!0,value:t})};k.polyfillIsolated=function(e,t,r,n){var A=e.split(".");e=A.length===1,n=A[0],n=!e&&n in k.polyfills?k.polyfills:k.global;for(var o=0;o<A.length-1;o++){var i=A[o];if(!(i in n))return;n=n[i]}A=A[A.length-1],r=k.IS_SYMBOL_NATIVE&&r==="es6"?n[A]:null,t=t(r),t!=null&&(e?k.defineProperty(k.polyfills,A,{configurable:!0,writable:!0,value:t}):t!==r&&(k.propertyToPolyfillSymbol[A]===void 0&&(r=Math.random()*1e9>>>0,k.propertyToPolyfillSymbol[A]=k.IS_SYMBOL_NATIVE?k.global.Symbol(A):k.POLYFILL_PREFIX+r+"$"+A),k.defineProperty(n,k.propertyToPolyfillSymbol[A],{configurable:!0,writable:!0,value:t})))};k.getConstructImplementation=function(){function e(){function r(){}return new r,Reflect.construct(r,[],function(){}),new r instanceof r}if(k.TRUST_ES6_POLYFILLS&&typeof Reflect<"u"&&Reflect.construct){if(e())return Reflect.construct;var t=Reflect.construct;return function(r,n,A){return r=t(r,n),A&&Reflect.setPrototypeOf(r,A.prototype),r}}return function(r,n,A){return A===void 0&&(A=r),A=k.objectCreate(A.prototype||Object.prototype),Function.prototype.apply.call(r,A,n)||A}};k.construct={valueOf:k.getConstructImplementation}.valueOf();k.underscoreProtoCanBeSet=function(){var e={a:!0},t={};try{return t.__proto__=e,t.a}catch{}return!1};k.setPrototypeOf=k.ASSUME_ES6||k.TRUST_ES6_POLYFILLS&&typeof Object.setPrototypeOf=="function"?Object.setPrototypeOf:k.underscoreProtoCanBeSet()?function(e,t){if(e.__proto__=t,e.__proto__!==t)throw new TypeError(e+" is not extensible");return e}:null;k.inherits=function(e,t){if(e.prototype=k.objectCreate(t.prototype),e.prototype.constructor=e,k.ASSUME_ES6||k.setPrototypeOf){var r=k.setPrototypeOf;r(e,t)}else for(r in t)if(r!="prototype")if(Object.defineProperties){var n=Object.getOwnPropertyDescriptor(t,r);n&&Object.defineProperty(e,r,n)}else e[r]=t[r];e.superClass_=t.prototype};k.arrayIteratorImpl=function(e){var t=0;return function(){return t<e.length?{done:!1,value:e[t++]}:{done:!0}}};k.arrayIterator=function(e){return{next:k.arrayIteratorImpl(e)}};k.makeIterator=function(e){var t=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];if(t)return t.call(e);if(typeof e.length=="number")return k.arrayIterator(e);throw Error(String(e)+" is not an iterable or ArrayLike")};k.arrayFromIterator=function(e){for(var t,r=[];!(t=e.next()).done;)r.push(t.value);return r};k.arrayFromIterable=function(e){return e instanceof Array?e:k.arrayFromIterator(k.makeIterator(e))};k.createTemplateTagFirstArg=function(e){return k.createTemplateTagFirstArgWithRaw(e,e)};k.createTemplateTagFirstArgWithRaw=function(e,t){return e.raw=t,Object.freeze&&(Object.freeze(e),Object.freeze(t)),e};k.generator={};k.generator.ensureIteratorResultIsObject_=function(e){if(!(e instanceof Object))throw new TypeError("Iterator result "+e+" is not an object")};k.generator.Context=function(){this.isRunning_=!1,this.yieldAllIterator_=null,this.yieldResult=void 0,this.nextAddress=1,this.finallyAddress_=this.catchAddress_=0,this.finallyContexts_=this.abruptCompletion_=null};k.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};k.generator.Context.prototype.stop_=function(){this.isRunning_=!1};k.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};k.generator.Context.prototype.next_=function(e){this.yieldResult=e};k.generator.Context.prototype.throw_=function(e){this.abruptCompletion_={exception:e,isException:!0},this.jumpToErrorHandler_()};k.generator.Context.prototype.getNextAddressJsc=function(){return this.nextAddress};k.generator.Context.prototype.getNextAddressJsc=function(){return this.nextAddress};k.generator.Context.prototype.getYieldResultJsc=function(){return this.yieldResult};k.generator.Context.prototype.getYieldResultJsc=function(){return this.yieldResult};k.generator.Context.prototype.return=function(e){this.abruptCompletion_={return:e},this.nextAddress=this.finallyAddress_};k.generator.Context.prototype.return=k.generator.Context.prototype.return;k.generator.Context.prototype.jumpThroughFinallyBlocks=function(e){this.abruptCompletion_={jumpTo:e},this.nextAddress=this.finallyAddress_};k.generator.Context.prototype.jumpThroughFinallyBlocks=k.generator.Context.prototype.jumpThroughFinallyBlocks;k.generator.Context.prototype.yield=function(e,t){return this.nextAddress=t,{value:e}};k.generator.Context.prototype.yield=k.generator.Context.prototype.yield;k.generator.Context.prototype.yieldAll=function(e,t){e=k.makeIterator(e);var r=e.next();if(k.generator.ensureIteratorResultIsObject_(r),r.done)this.yieldResult=r.value,this.nextAddress=t;else return this.yieldAllIterator_=e,this.yield(r.value,t)};k.generator.Context.prototype.yieldAll=k.generator.Context.prototype.yieldAll;k.generator.Context.prototype.jumpTo=function(e){this.nextAddress=e};k.generator.Context.prototype.jumpTo=k.generator.Context.prototype.jumpTo;k.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0};k.generator.Context.prototype.jumpToEnd=k.generator.Context.prototype.jumpToEnd;k.generator.Context.prototype.setCatchFinallyBlocks=function(e,t){this.catchAddress_=e,t!=null&&(this.finallyAddress_=t)};k.generator.Context.prototype.setCatchFinallyBlocks=k.generator.Context.prototype.setCatchFinallyBlocks;k.generator.Context.prototype.setFinallyBlock=function(e){this.catchAddress_=0,this.finallyAddress_=e||0};k.generator.Context.prototype.setFinallyBlock=k.generator.Context.prototype.setFinallyBlock;k.generator.Context.prototype.leaveTryBlock=function(e,t){this.nextAddress=e,this.catchAddress_=t||0};k.generator.Context.prototype.leaveTryBlock=k.generator.Context.prototype.leaveTryBlock;k.generator.Context.prototype.enterCatchBlock=function(e){return this.catchAddress_=e||0,e=this.abruptCompletion_.exception,this.abruptCompletion_=null,e};k.generator.Context.prototype.enterCatchBlock=k.generator.Context.prototype.enterCatchBlock;k.generator.Context.prototype.enterFinallyBlock=function(e,t,r){r?this.finallyContexts_[r]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_],this.catchAddress_=e||0,this.finallyAddress_=t||0};k.generator.Context.prototype.enterFinallyBlock=k.generator.Context.prototype.enterFinallyBlock;k.generator.Context.prototype.leaveFinallyBlock=function(e,t){if(t=this.finallyContexts_.splice(t||0)[0],t=this.abruptCompletion_=this.abruptCompletion_||t){if(t.isException)return this.jumpToErrorHandler_();t.jumpTo!=null&&this.finallyAddress_<t.jumpTo?(this.nextAddress=t.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=e};k.generator.Context.prototype.leaveFinallyBlock=k.generator.Context.prototype.leaveFinallyBlock;k.generator.Context.prototype.forIn=function(e){return new k.generator.Context.PropertyIterator(e)};k.generator.Context.prototype.forIn=k.generator.Context.prototype.forIn;k.generator.Context.PropertyIterator=function(e){this.object_=e,this.properties_=[];for(var t in e)this.properties_.push(t);this.properties_.reverse()};k.generator.Context.PropertyIterator.prototype.getNext=function(){for(;this.properties_.length>0;){var e=this.properties_.pop();if(e in this.object_)return e}return null};k.generator.Context.PropertyIterator.prototype.getNext=k.generator.Context.PropertyIterator.prototype.getNext;k.generator.Engine_=function(e){this.context_=new k.generator.Context,this.program_=e};k.generator.Engine_.prototype.next_=function(e){return this.context_.start_(),this.context_.yieldAllIterator_?this.yieldAllStep_(this.context_.yieldAllIterator_.next,e,this.context_.next_):(this.context_.next_(e),this.nextStep_())};k.generator.Engine_.prototype.return_=function(e){this.context_.start_();var t=this.context_.yieldAllIterator_;return t?this.yieldAllStep_("return"in t?t.return:function(r){return{value:r,done:!0}},e,this.context_.return):(this.context_.return(e),this.nextStep_())};k.generator.Engine_.prototype.throw_=function(e){return this.context_.start_(),this.context_.yieldAllIterator_?this.yieldAllStep_(this.context_.yieldAllIterator_.throw,e,this.context_.next_):(this.context_.throw_(e),this.nextStep_())};k.generator.Engine_.prototype.yieldAllStep_=function(e,t,r){try{var n=e.call(this.context_.yieldAllIterator_,t);if(k.generator.ensureIteratorResultIsObject_(n),!n.done)return this.context_.stop_(),n;var A=n.value}catch(o){return this.context_.yieldAllIterator_=null,this.context_.throw_(o),this.nextStep_()}return this.context_.yieldAllIterator_=null,r.call(this.context_,A),this.nextStep_()};k.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var e=this.program_(this.context_);if(e)return this.context_.stop_(),{value:e.value,done:!1}}catch(t){this.context_.yieldResult=void 0,this.context_.throw_(t)}if(this.context_.stop_(),this.context_.abruptCompletion_){if(e=this.context_.abruptCompletion_,this.context_.abruptCompletion_=null,e.isException)throw e.exception;return{value:e.return,done:!0}}return{value:void 0,done:!0}};k.generator.Generator_=function(e){this.next=function(t){return e.next_(t)},this.throw=function(t){return e.throw_(t)},this.return=function(t){return e.return_(t)},this[Symbol.iterator]=function(){return this}};k.generator.createGenerator=function(e,t){return t=new k.generator.Generator_(new k.generator.Engine_(t)),k.setPrototypeOf&&e.prototype&&k.setPrototypeOf(t,e.prototype),t};k.asyncExecutePromiseGenerator=function(e){function t(n){return e.next(n)}function r(n){return e.throw(n)}return new Promise(function(n,A){function o(i){i.done?n(i.value):Promise.resolve(i.value).then(t,r).then(o,A)}o(e.next())})};k.asyncExecutePromiseGeneratorFunction=function(e){return k.asyncExecutePromiseGenerator(e())};k.asyncExecutePromiseGeneratorProgram=function(e){return k.asyncExecutePromiseGenerator(new k.generator.Generator_(new k.generator.Engine_(e)))};k.polyfill("globalThis",function(e){return e||k.global},"es_2020","es3");k.polyfill("Reflect",function(e){return e||{}},"es6","es3");k.polyfill("Reflect.construct",function(e){return k.construct},"es6","es3");k.polyfill("Reflect.setPrototypeOf",function(e){if(e)return e;if(k.setPrototypeOf){var t=k.setPrototypeOf;return function(r,n){try{return t(r,n),!0}catch{return!1}}}return null},"es6","es5");k.initSymbol=function(){};k.polyfill("Symbol",function(e){if(e)return e;var t=function(o,i){this.$jscomp$symbol$id_=o,k.defineProperty(this,"description",{configurable:!0,writable:!0,value:i})};t.prototype.toString=function(){return this.$jscomp$symbol$id_};var r="jscomp_symbol_"+(Math.random()*1e9>>>0)+"_",n=0,A=function(o){if(this instanceof A)throw new TypeError("Symbol is not a constructor");return new t(r+(o||"")+"_"+n++,o)};return A},"es6","es3");k.polyfill("Symbol.iterator",function(e){return e||(e=Symbol("Symbol.iterator"),k.defineProperty(Array.prototype,e,{configurable:!0,writable:!0,value:function(){return k.iteratorPrototype(k.arrayIteratorImpl(this))}}),e)},"es6","es3");k.iteratorPrototype=function(e){return e={next:e},e[Symbol.iterator]=function(){return this},e};k.polyfill("Promise",function(e){function t(){this.batch_=null}function r(i){return i instanceof A?i:new A(function(a,s){a(i)})}if(e&&(!(k.FORCE_POLYFILL_PROMISE||k.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION&&typeof k.global.PromiseRejectionEvent>"u")||!k.global.Promise||k.global.Promise.toString().indexOf("[native code]")===-1))return e;t.prototype.asyncExecute=function(i){if(this.batch_==null){this.batch_=[];var a=this;this.asyncExecuteFunction(function(){a.executeBatch_()})}this.batch_.push(i)};var n=k.global.setTimeout;t.prototype.asyncExecuteFunction=function(i){n(i,0)},t.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var i=this.batch_;this.batch_=[];for(var a=0;a<i.length;++a){var s=i[a];i[a]=null;try{s()}catch(c){this.asyncThrow_(c)}}}this.batch_=null},t.prototype.asyncThrow_=function(i){this.asyncExecuteFunction(function(){throw i})};var A=function(i){this.state_=0,this.result_=void 0,this.onSettledCallbacks_=[],this.isRejectionHandled_=!1;var a=this.createResolveAndReject_();try{i(a.resolve,a.reject)}catch(s){a.reject(s)}};A.prototype.createResolveAndReject_=function(){function i(c){return function(l){s||(s=!0,c.call(a,l))}}var a=this,s=!1;return{resolve:i(this.resolveTo_),reject:i(this.reject_)}},A.prototype.resolveTo_=function(i){if(i===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(i instanceof A)this.settleSameAsPromise_(i);else{e:switch(typeof i){case"object":var a=i!=null;break e;case"function":a=!0;break e;default:a=!1}a?this.resolveToNonPromiseObj_(i):this.fulfill_(i)}},A.prototype.resolveToNonPromiseObj_=function(i){var a=void 0;try{a=i.then}catch(s){this.reject_(s);return}typeof a=="function"?this.settleSameAsThenable_(a,i):this.fulfill_(i)},A.prototype.reject_=function(i){this.settle_(2,i)},A.prototype.fulfill_=function(i){this.settle_(1,i)},A.prototype.settle_=function(i,a){if(this.state_!=0)throw Error("Cannot settle("+i+", "+a+"): Promise already settled in state"+this.state_);this.state_=i,this.result_=a,this.state_===2&&this.scheduleUnhandledRejectionCheck_(),this.executeOnSettledCallbacks_()},A.prototype.scheduleUnhandledRejectionCheck_=function(){var i=this;n(function(){if(i.notifyUnhandledRejection_()){var a=k.global.console;typeof a<"u"&&a.error(i.result_)}},1)},A.prototype.notifyUnhandledRejection_=function(){if(this.isRejectionHandled_)return!1;var i=k.global.CustomEvent,a=k.global.Event,s=k.global.dispatchEvent;return typeof s>"u"?!0:(typeof i=="function"?i=new i("unhandledrejection",{cancelable:!0}):typeof a=="function"?i=new a("unhandledrejection",{cancelable:!0}):(i=k.global.document.createEvent("CustomEvent"),i.initCustomEvent("unhandledrejection",!1,!0,i)),i.promise=this,i.reason=this.result_,s(i))},A.prototype.executeOnSettledCallbacks_=function(){if(this.onSettledCallbacks_!=null){for(var i=0;i<this.onSettledCallbacks_.length;++i)o.asyncExecute(this.onSettledCallbacks_[i]);this.onSettledCallbacks_=null}};var o=new t;return A.prototype.settleSameAsPromise_=function(i){var a=this.createResolveAndReject_();i.callWhenSettled_(a.resolve,a.reject)},A.prototype.settleSameAsThenable_=function(i,a){var s=this.createResolveAndReject_();try{i.call(a,s.resolve,s.reject)}catch(c){s.reject(c)}},A.prototype.then=function(i,a){function s(p,g){return typeof p=="function"?function(f){try{c(p(f))}catch(b){l(b)}}:g}var c,l,u=new A(function(p,g){c=p,l=g});return this.callWhenSettled_(s(i,c),s(a,l)),u},A.prototype.catch=function(i){return this.then(void 0,i)},A.prototype.callWhenSettled_=function(i,a){function s(){switch(c.state_){case 1:i(c.result_);break;case 2:a(c.result_);break;default:throw Error("Unexpected state: "+c.state_)}}var c=this;this.onSettledCallbacks_==null?o.asyncExecute(s):this.onSettledCallbacks_.push(s),this.isRejectionHandled_=!0},A.resolve=r,A.reject=function(i){return new A(function(a,s){s(i)})},A.race=function(i){return new A(function(a,s){for(var c=k.makeIterator(i),l=c.next();!l.done;l=c.next())r(l.value).callWhenSettled_(a,s)})},A.all=function(i){var a=k.makeIterator(i),s=a.next();return s.done?r([]):new A(function(c,l){function u(f){return function(b){p[f]=b,g--,g==0&&c(p)}}var p=[],g=0;do p.push(void 0),g++,r(s.value).callWhenSettled_(u(p.length-1),l),s=a.next();while(!s.done)})},A},"es6","es3");k.checkStringArgs=function(e,t,r){if(e==null)throw new TypeError("The 'this' value for String.prototype."+r+" must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype."+r+" must not be a regular expression");return e+""};k.polyfill("String.prototype.startsWith",function(e){return e||function(t,r){var n=k.checkStringArgs(this,t,"startsWith");t+="";var A=n.length,o=t.length;r=Math.max(0,Math.min(r|0,n.length));for(var i=0;i<o&&r<A;)if(n[r++]!=t[i++])return!1;return i>=o}},"es6","es3");k.polyfill("String.prototype.codePointAt",function(e){return e||function(t){var r=k.checkStringArgs(this,null,"codePointAt"),n=r.length;if(t=Number(t)||0,t>=0&&t<n){t|=0;var A=r.charCodeAt(t);return A<55296||A>56319||t+1===n?A:(t=r.charCodeAt(t+1),t<56320||t>57343?A:(A-55296)*1024+t+9216)}}},"es6","es3");var ao=(function(){var e,t,r=(e=globalThis.document)==null||(t=e.currentScript)==null?void 0:t.src;return function(n){function A(){this.ptr=Rn(),$(A)[this.ptr]=this}function o(){this.ptr=xn(),$(o)[this.ptr]=this}function i(){this.ptr=En(),$(i)[this.ptr]=this}function a(){this.ptr=In(),$(a)[this.ptr]=this}function s(){this.ptr=pn(),$(s)[this.ptr]=this}function c(){this.ptr=cn(),$(c)[this.ptr]=this}function l(){this.ptr=An(),$(l)[this.ptr]=this}function u(){this.ptr=cr(),$(u)[this.ptr]=this}function p(){this.ptr=it(),$(p)[this.ptr]=this}function g(){throw"cannot construct a Status, no constructor in IDL"}function f(){this.ptr=fe(),$(f)[this.ptr]=this}function b(){this.ptr=Z(),$(b)[this.ptr]=this}function v(){this.ptr=B(),$(v)[this.ptr]=this}function Q(){this.ptr=ct(),$(Q)[this.ptr]=this}function x(){this.ptr=or(),$(x)[this.ptr]=this}function _(){this.ptr=yr(),$(_)[this.ptr]=this}function y(){this.ptr=Er(),$(y)[this.ptr]=this}function M(){this.ptr=Wt(),$(M)[this.ptr]=this}function T(){this.ptr=Vt(),$(T)[this.ptr]=this}function N(){throw"cannot construct a VoidPtr, no constructor in IDL"}function O(Ae){if(typeof Ae=="object"){for(var d=Ue.alloc(Ae,Je),C=0;C<Ae.length;C++)Je[d+C]=Ae[C];return d}return Ae}function D(Ae){if(typeof Ae=="string"){Ae=tr(Ae);for(var d=Ue.alloc(Ae,Je),C=0;C<Ae.length;C++)Je[d+C]=Ae[C];return d}return Ae}function H(Ae){return Ae.__class__}function V(Ae){return Ae.ptr}function P(Ae,d){return Ae.ptr===d.ptr}function z(Ae){if(!Ae.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";Ae.__destroy__(),delete $(Ae.__class__)[Ae.ptr]}function ee(Ae,d){return Y(Ae.ptr,d)}function Y(Ae,d){var C=$(d),R=C[Ae];return R||(R=Object.create((d||W).prototype),R.ptr=Ae,C[Ae]=R)}function $(Ae){return(Ae||W).__cache__}function W(){}function te(){var Ae,d,C;return(0,k.asyncExecutePromiseGeneratorProgram)(function(R){if(R.getNextAddressJsc()==1)return ve(),Ae=m.setStatus,Ae?(Ae("Running..."),R.yield(new Promise(function(ge){return setTimeout(ge,1)}),3)):R.jumpTo(2);if(R.getNextAddressJsc()!=2&&setTimeout(Ae,1,""),Le)return R.return();bt=!0,Et(rr),pA.e(),(C=(d=m).onRuntimeInitialized)==null||C.call(d),F(),R.jumpToEnd()})}function me(){function Ae(L){return L=pA=L.exports,m._webidl_free=L.f,m._free=L.g,m._webidl_malloc=L.h,m._malloc=L.i,Ft=m._emscripten_bind_VoidPtr___destroy___0=L.j,Vt=m._emscripten_bind_DecoderBuffer_DecoderBuffer_0=L.k,zt=m._emscripten_bind_DecoderBuffer_Init_2=L.l,Yt=m._emscripten_bind_DecoderBuffer___destroy___0=L.m,Wt=m._emscripten_bind_AttributeTransformData_AttributeTransformData_0=L.n,Br=m._emscripten_bind_AttributeTransformData_transform_type_0=L.o,br=m._emscripten_bind_AttributeTransformData___destroy___0=L.p,Er=m._emscripten_bind_GeometryAttribute_GeometryAttribute_0=L.q,Cr=m._emscripten_bind_GeometryAttribute___destroy___0=L.r,yr=m._emscripten_bind_PointAttribute_PointAttribute_0=L.s,Qr=m._emscripten_bind_PointAttribute_size_0=L.t,xr=m._emscripten_bind_PointAttribute_GetAttributeTransformData_0=L.u,wr=m._emscripten_bind_PointAttribute_attribute_type_0=L.v,Dr=m._emscripten_bind_PointAttribute_data_type_0=L.w,nr=m._emscripten_bind_PointAttribute_num_components_0=L.x,Ut=m._emscripten_bind_PointAttribute_normalized_0=L.y,vr=m._emscripten_bind_PointAttribute_byte_stride_0=L.z,_r=m._emscripten_bind_PointAttribute_byte_offset_0=L.A,Ar=m._emscripten_bind_PointAttribute_unique_id_0=L.B,Mr=m._emscripten_bind_PointAttribute___destroy___0=L.C,or=m._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=L.D,kt=m._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=L.E,Sr=m._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=L.F,Gr=m._emscripten_bind_AttributeQuantizationTransform_min_value_1=L.G,ir=m._emscripten_bind_AttributeQuantizationTransform_range_0=L.H,qt=m._emscripten_bind_AttributeQuantizationTransform___destroy___0=L.I,ct=m._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=L.J,Nt=m._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=L.K,ar=m._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=L.L,I=m._emscripten_bind_AttributeOctahedronTransform___destroy___0=L.M,B=m._emscripten_bind_PointCloud_PointCloud_0=L.N,G=m._emscripten_bind_PointCloud_num_attributes_0=L.O,j=m._emscripten_bind_PointCloud_num_points_0=L.P,K=m._emscripten_bind_PointCloud___destroy___0=L.Q,Z=m._emscripten_bind_Mesh_Mesh_0=L.R,re=m._emscripten_bind_Mesh_num_faces_0=L.S,ne=m._emscripten_bind_Mesh_num_attributes_0=L.T,le=m._emscripten_bind_Mesh_num_points_0=L.U,se=m._emscripten_bind_Mesh___destroy___0=L.V,fe=m._emscripten_bind_Metadata_Metadata_0=L.W,xe=m._emscripten_bind_Metadata___destroy___0=L.X,Re=m._emscripten_bind_Status_code_0=L.Y,Ve=m._emscripten_bind_Status_ok_0=L.Z,ke=m._emscripten_bind_Status_error_msg_0=L._,tt=m._emscripten_bind_Status___destroy___0=L.$,it=m._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=L.aa,Dt=m._emscripten_bind_DracoFloat32Array_GetValue_1=L.ba,lt=m._emscripten_bind_DracoFloat32Array_size_0=L.ca,sr=m._emscripten_bind_DracoFloat32Array___destroy___0=L.da,cr=m._emscripten_bind_DracoInt8Array_DracoInt8Array_0=L.ea,tn=m._emscripten_bind_DracoInt8Array_GetValue_1=L.fa,rn=m._emscripten_bind_DracoInt8Array_size_0=L.ga,nn=m._emscripten_bind_DracoInt8Array___destroy___0=L.ha,An=m._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=L.ia,on=m._emscripten_bind_DracoUInt8Array_GetValue_1=L.ja,an=m._emscripten_bind_DracoUInt8Array_size_0=L.ka,sn=m._emscripten_bind_DracoUInt8Array___destroy___0=L.la,cn=m._emscripten_bind_DracoInt16Array_DracoInt16Array_0=L.ma,ln=m._emscripten_bind_DracoInt16Array_GetValue_1=L.na,un=m._emscripten_bind_DracoInt16Array_size_0=L.oa,gn=m._emscripten_bind_DracoInt16Array___destroy___0=L.pa,pn=m._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=L.qa,fn=m._emscripten_bind_DracoUInt16Array_GetValue_1=L.ra,dn=m._emscripten_bind_DracoUInt16Array_size_0=L.sa,hn=m._emscripten_bind_DracoUInt16Array___destroy___0=L.ta,In=m._emscripten_bind_DracoInt32Array_DracoInt32Array_0=L.ua,mn=m._emscripten_bind_DracoInt32Array_GetValue_1=L.va,Bn=m._emscripten_bind_DracoInt32Array_size_0=L.wa,bn=m._emscripten_bind_DracoInt32Array___destroy___0=L.xa,En=m._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=L.ya,Cn=m._emscripten_bind_DracoUInt32Array_GetValue_1=L.za,yn=m._emscripten_bind_DracoUInt32Array_size_0=L.Aa,Qn=m._emscripten_bind_DracoUInt32Array___destroy___0=L.Ba,xn=m._emscripten_bind_MetadataQuerier_MetadataQuerier_0=L.Ca,wn=m._emscripten_bind_MetadataQuerier_HasEntry_2=L.Da,Dn=m._emscripten_bind_MetadataQuerier_GetIntEntry_2=L.Ea,vn=m._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=L.Fa,_n=m._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=L.Ga,Mn=m._emscripten_bind_MetadataQuerier_GetStringEntry_2=L.Ha,Sn=m._emscripten_bind_MetadataQuerier_NumEntries_1=L.Ia,Gn=m._emscripten_bind_MetadataQuerier_GetEntryName_2=L.Ja,Pn=m._emscripten_bind_MetadataQuerier___destroy___0=L.Ka,Rn=m._emscripten_bind_Decoder_Decoder_0=L.La,Fn=m._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=L.Ma,Un=m._emscripten_bind_Decoder_DecodeArrayToMesh_3=L.Na,kn=m._emscripten_bind_Decoder_GetAttributeId_2=L.Oa,Nn=m._emscripten_bind_Decoder_GetAttributeIdByName_2=L.Pa,Tn=m._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=L.Qa,Ln=m._emscripten_bind_Decoder_GetAttribute_2=L.Ra,Pr=m._emscripten_bind_Decoder_GetAttributeByUniqueId_2=L.Sa,On=m._emscripten_bind_Decoder_GetMetadata_1=L.Ta,Rr=m._emscripten_bind_Decoder_GetAttributeMetadata_2=L.Ua,we=m._emscripten_bind_Decoder_GetFaceFromMesh_3=L.Va,X=m._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=L.Wa,h=m._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=L.Xa,E=m._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=L.Ya,w=m._emscripten_bind_Decoder_GetAttributeFloat_3=L.Za,J=m._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=L._a,S=m._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=L.$a,Be=m._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=L.ab,nt=m._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=L.bb,qo=m._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=L.cb,Xo=m._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=L.db,Zo=m._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=L.eb,$o=m._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=L.fb,ei=m._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=L.gb,ti=m._emscripten_bind_Decoder_SkipAttributeTransform_1=L.hb,ri=m._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=L.ib,ni=m._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=L.jb,Ai=m._emscripten_bind_Decoder_DecodeBufferToMesh_2=L.kb,oi=m._emscripten_bind_Decoder___destroy___0=L.lb,ii=m._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=L.mb,ai=m._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=L.nb,si=m._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=L.ob,ci=m._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=L.pb,li=m._emscripten_enum_draco_GeometryAttribute_Type_INVALID=L.qb,ui=m._emscripten_enum_draco_GeometryAttribute_Type_POSITION=L.rb,gi=m._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=L.sb,pi=m._emscripten_enum_draco_GeometryAttribute_Type_COLOR=L.tb,fi=m._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=L.ub,di=m._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=L.vb,hi=m._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=L.wb,Ii=m._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=L.xb,mi=m._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=L.yb,Bi=m._emscripten_enum_draco_DataType_DT_INVALID=L.zb,bi=m._emscripten_enum_draco_DataType_DT_INT8=L.Ab,Ei=m._emscripten_enum_draco_DataType_DT_UINT8=L.Bb,Ci=m._emscripten_enum_draco_DataType_DT_INT16=L.Cb,yi=m._emscripten_enum_draco_DataType_DT_UINT16=L.Db,Qi=m._emscripten_enum_draco_DataType_DT_INT32=L.Eb,xi=m._emscripten_enum_draco_DataType_DT_UINT32=L.Fb,wi=m._emscripten_enum_draco_DataType_DT_INT64=L.Gb,Di=m._emscripten_enum_draco_DataType_DT_UINT64=L.Hb,vi=m._emscripten_enum_draco_DataType_DT_FLOAT32=L.Ib,_i=m._emscripten_enum_draco_DataType_DT_FLOAT64=L.Jb,Mi=m._emscripten_enum_draco_DataType_DT_BOOL=L.Kb,Si=m._emscripten_enum_draco_DataType_DT_TYPES_COUNT=L.Lb,Gi=m._emscripten_enum_draco_StatusCode_OK=L.Mb,Pi=m._emscripten_enum_draco_StatusCode_DRACO_ERROR=L.Nb,Ri=m._emscripten_enum_draco_StatusCode_IO_ERROR=L.Ob,Fi=m._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=L.Pb,Ui=m._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=L.Qb,ki=m._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=L.Rb,gA=L.d,Se(),pA}var d,C,R,ge;return(0,k.asyncExecutePromiseGeneratorProgram)(function(L){return L.getNextAddressJsc()==1?(d={a:Ni},(C=m.instantiateWasm)?L.return(new Promise(function(Oe){C(d,function(At){return Oe(Ae(At))})})):(ze!=null||(ze=Ne("draco_decoder_gltf.wasm")),L.yield(ue(je,ze,d),2))):(R=L.getYieldResultJsc(),ge=Ae(R.instance),L.return(ge))})}function ue(Ae,d,C){var R,ge,L;return(0,k.asyncExecutePromiseGeneratorProgram)(function(Oe){switch(Oe.getNextAddressJsc()){case 1:if(Ae||Ke(d)||he){Oe.jumpTo(2);break}return Oe.setCatchFinallyBlocks(3),R=fetch(d,{credentials:"same-origin"}),Oe.yield(WebAssembly.instantiateStreaming(R,C),5);case 5:return ge=Oe.getYieldResultJsc(),Oe.return(ge);case 3:L=Oe.enterCatchBlock(),Te("wasm streaming compile failed: "+L),Te("falling back to ArrayBuffer instantiation");case 2:return Oe.return(oe(d,C))}})}function oe(Ae,d){var C,R,ge;return(0,k.asyncExecutePromiseGeneratorProgram)(function(L){switch(L.getNextAddressJsc()){case 1:return L.setCatchFinallyBlocks(2),L.yield(pe(Ae),4);case 4:return C=L.getYieldResultJsc(),L.yield(WebAssembly.instantiate(C,d),5);case 5:return R=L.getYieldResultJsc(),L.return(R);case 2:ge=L.enterCatchBlock(),Te("failed to asynchronously prepare wasm: "+ge),Me(ge),L.jumpToEnd()}})}function pe(Ae){var d;return(0,k.asyncExecutePromiseGeneratorProgram)(function(C){switch(C.getNextAddressJsc()){case 1:if(je){C.jumpTo(2);break}return C.setCatchFinallyBlocks(3),C.yield(Fe(Ae),5);case 5:return d=C.getYieldResultJsc(),C.return(new Uint8Array(d));case 3:C.enterCatchBlock();case 2:var R=C.return;if(Ae==ze&&je)var ge=new Uint8Array(je);else if(De)ge=De(Ae);else throw"both async and sync fetching of the wasm failed";return R.call(C,ge)}})}function Me(Ae){var d,C;throw(C=(d=m).onAbort)==null||C.call(d,Ae),Ae="Aborted("+Ae+")",Te(Ae),Le=!0,new WebAssembly.RuntimeError(Ae+". Build with -sASSERTIONS for more info.")}function F(){var Ae=m.postRun;Ae&&(typeof Ae=="function"&&(Ae=[Ae]),gt.push.apply(gt,(0,k.arrayFromIterable)(Ae))),Et(gt)}function ve(){var Ae=m.preRun;Ae&&(typeof Ae=="function"&&(Ae=[Ae]),Ct.push.apply(Ct,(0,k.arrayFromIterable)(Ae))),Et(Ct)}function Se(){var Ae,d;!((Ae=Je)==null||(d=Ae.buffer)==null)&&d.resizable||(Ae=gA.buffer,m.HEAP8=Je=new Int8Array(Ae),m.HEAP16=new Int16Array(Ae),m.HEAPU8=wt=new Uint8Array(Ae),m.HEAPU16=new Uint16Array(Ae),m.HEAP32=new Int32Array(Ae),m.HEAPU32=pt=new Uint32Array(Ae),m.HEAPF32=new Float32Array(Ae),m.HEAPF64=new Float64Array(Ae))}function Ne(Ae){return m.locateFile?m.locateFile(Ae,Ge):Ge+Ae}function Ee(Ae){return typeof Ae!="string"?!1:(Ae=Ae.split("."),Ae.length<2||Ae.length>3?!1:Ae[0]==1&&Ae[1]>=0&&Ae[1]<=5?!0:!(Ae[0]!=0||Ae[1]>10))}n=n===void 0?{}:n;var m,Ce,be,ye,ie,ce,he,Qe,_e,Ge,Fe,De,He,Te,je,Le,Ke,rt,We,bt,ze,Je,Et,gt,Ct,pt,qe,It,Gt,ft,Jt,at,Pt,dt,wt,Ir,er,Rt,tr,yt,mr,st,Kt,rr,ot,Qt,Ft,Vt,zt,Yt,Wt,Br,br,Er,Cr,yr,Qr,xr,wr,Dr,nr,Ut,vr,_r,Ar,Mr,or,kt,Sr,Gr,ir,qt,ct,Nt,ar,I,B,G,j,K,Z,re,ne,le,se,fe,xe,Re,Ve,ke,tt,it,Dt,lt,sr,cr,tn,rn,nn,An,on,an,sn,cn,ln,un,gn,pn,fn,dn,hn,In,mn,Bn,bn,En,Cn,yn,Qn,xn,wn,Dn,vn,_n,Mn,Sn,Gn,Pn,Rn,Fn,Un,kn,Nn,Tn,Ln,Pr,On,Rr,we,X,h,E,w,J,S,Be,nt,qo,Xo,Zo,$o,ei,ti,ri,ni,Ai,oi,ii,ai,si,ci,li,ui,gi,pi,fi,di,hi,Ii,mi,Bi,bi,Ei,Ci,yi,Qi,xi,wi,Di,vi,_i,Mi,Si,Gi,Pi,Ri,Fi,Ui,ki,gA,Ni,pA,Ue;return(0,k.asyncExecutePromiseGeneratorProgram)(function(Ae){if(Ae.getNextAddressJsc()==1){if(m=n,Ce=!!globalThis.window,be=!!globalThis.WorkerGlobalScope,he=((ye=globalThis.process)==null||(ie=ye.versions)==null?void 0:ie.node)&&((ce=globalThis.process)==null?void 0:ce.type)!="renderer",_e=Qe=!1,m.onRuntimeInitialized=function(){Qe=!0,_e&&typeof m.onModuleLoaded=="function"&&m.onModuleLoaded(m)},m.onModuleParsed=function(){_e=!0,Qe&&typeof m.onModuleLoaded=="function"&&m.onModuleLoaded(m)},m.isVersionSupported=Ee,typeof __filename<"u"?r=__filename:be&&(r=self.location.href),Ge="",he)He=(vt(),Ti(qi)),Ge=__dirname+"/",De=function(d){return d=Ke(d)?new URL(d):d,He.readFileSync(d)},Fe=function(d,C){C=C===void 0?!0:C;var R;return(0,k.asyncExecutePromiseGeneratorProgram)(function(ge){return d=Ke(d)?new URL(d):d,R=He.readFileSync(d,C?void 0:"utf8"),ge.return(R)})},de.argv.length>1&&de.argv[1].replace(/\\/g,"/"),de.argv.slice(2);else if(Ce||be){try{Ge=new URL(".",r).href}catch{}be&&(De=function(d){var C=new XMLHttpRequest;return C.open("GET",d,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),Fe=function(d){var C;return(0,k.asyncExecutePromiseGeneratorProgram)(function(R){if(R.getNextAddressJsc()==1)return Ke(d)?R.return(new Promise(function(ge,L){var Oe=new XMLHttpRequest;Oe.open("GET",d,!0),Oe.responseType="arraybuffer",Oe.onload=function(){Oe.status==200||Oe.status==0&&Oe.response?ge(Oe.response):L(Oe.status)},Oe.onerror=L,Oe.send(null)})):R.yield(fetch(d,{credentials:"same-origin"}),2);if(C=R.getYieldResultJsc(),C.ok)return R.return(C.arrayBuffer());throw Error(C.status+" : "+C.url)})}}if(console.log.bind(console),Te=console.error.bind(console),Le=!1,Ke=function(d){return d.startsWith("file://")},rt=function(){},We=function(){return rt.apply(this,arguments)||this},k.inherits(We,rt),bt=!1,Et=function(d){for(;d.length>0;)d.shift()(m)},gt=[],Ct=[],qe=function(d){this.excPtr=d,this.ptr=d-24},qe.prototype.set_type=function(d){pt[this.ptr+4>>2]=d},qe.prototype.get_type=function(){return pt[this.ptr+4>>2]},qe.prototype.set_destructor=function(d){pt[this.ptr+8>>2]=d},qe.prototype.get_destructor=function(){return pt[this.ptr+8>>2]},qe.prototype.set_caught=function(d){Je[this.ptr+12]=d?1:0},qe.prototype.get_caught=function(){return Je[this.ptr+12]!=0},qe.prototype.set_rethrown=function(d){Je[this.ptr+13]=d?1:0},qe.prototype.get_rethrown=function(){return Je[this.ptr+13]!=0},qe.prototype.init=function(d,C){this.set_adjusted_ptr(0),this.set_type(d),this.set_destructor(C)},qe.prototype.set_adjusted_ptr=function(d){pt[this.ptr+16>>2]=d},qe.prototype.get_adjusted_ptr=function(){return pt[this.ptr+16>>2]},It=0,Gt=function(d){Me()},ft=function(d,C,R){new qe(d).init(C,R),It++,Gt(d)},Jt=function(){return Me("")},at=function(){return 2147483648},Pt=function(d,C){return Math.ceil(d/C)*C},dt=function(d){var C=gA.buffer.byteLength;try{return gA.grow((d-C+65535)/65536|0),Se(),1}catch{}},Ir=function(d){var C=wt.length;d>>>=0;var R=at();if(d>R)return!1;for(var ge=1;ge<=4;ge*=2){var L=C*(1+.2/ge);if(L=Math.min(L,d+100663296),L=Math.min(R,Pt(Math.max(d,L),65536)),dt(L))return!0}return!1},er=function(d){for(var C=0,R=0;R<d.length;++R){var ge=d.charCodeAt(R);ge<=127?C++:ge<=2047?C+=2:ge>=55296&&ge<=57343?(C+=4,++R):C+=3}return C},Rt=function(d,C,R,ge){if(!(ge>0))return 0;var L=R;ge=R+ge-1;for(var Oe=0;Oe<d.length;++Oe){var At=d.codePointAt(Oe);if(At<=127){if(R>=ge)break;C[R++]=At}else if(At<=2047){if(R+1>=ge)break;C[R++]=192|At>>6,C[R++]=128|At&63}else if(At<=65535){if(R+2>=ge)break;C[R++]=224|At>>12,C[R++]=128|At>>6&63,C[R++]=128|At&63}else{if(R+3>=ge)break;C[R++]=240|At>>18,C[R++]=128|At>>12&63,C[R++]=128|At>>6&63,C[R++]=128|At&63,Oe++}}return C[R]=0,R-L},tr=function(d,C,R){return R=R>0?R:er(d)+1,R=Array(R),d=Rt(d,R,0,R.length),C&&(R.length=d),R},yt=globalThis.TextDecoder&&new TextDecoder,mr=function(d,C,R,ge){if(R=C+R,ge)return R;for(;d[C]&&!(C>=R);)++C;return C},st=function(d,C,R,ge){if(C=C===void 0?0:C,R=mr(d,C,R,ge),R-C>16&&d.buffer&&yt)return yt.decode(d.subarray(C,R));for(ge="";C<R;){var L=d[C++];if(L&128){var Oe=d[C++]&63;if((L&224)==192)ge+=String.fromCharCode((L&31)<<6|Oe);else{var At=d[C++]&63;L=(L&240)==224?(L&15)<<12|Oe<<6|At:(L&7)<<18|Oe<<12|At<<6|d[C++]&63,L<65536?ge+=String.fromCharCode(L):(L-=65536,ge+=String.fromCharCode(55296|L>>10,56320|L&1023))}}else ge+=String.fromCharCode(L)}return ge},Kt=function(d,C,R){return d?st(wt,d,C,R):""},rr=[],ot=function(d){return rr.push(d)},m.printErr&&(Te=m.printErr),m.wasmBinary&&(je=m.wasmBinary),Qt=m.preInit)for(typeof Qt=="function"&&(m.preInit=Qt=[Qt]);Qt.length>0;)Qt.shift()();return Ni={a:ft,c:Jt,b:Ir},Ae.yield(me(),2)}return Ae.getNextAddressJsc()!=3?(pA=Ae.getYieldResultJsc(),Ae.yield(te(),3)):(W.prototype=Object.create(W.prototype),W.prototype.constructor=W,W.prototype.__class__=W,W.__cache__={},m.WrapperObject=W,m.getCache=$,m.wrapPointer=Y,m.castObject=ee,m.NULL=Y(0),m.destroy=z,m.compare=P,m.getPointer=V,m.getClass=H,Ue={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(Ue.needed){for(var d=0;d<Ue.temps.length;d++)m._webidl_free(Ue.temps[d]);Ue.temps.length=0,m._webidl_free(Ue.buffer),Ue.buffer=0,Ue.size+=Ue.needed,Ue.needed=0}Ue.buffer||(Ue.size+=128,Ue.buffer=m._webidl_malloc(Ue.size),Ue.buffer||Me(void 0)),Ue.pos=0},alloc:function(d,C){return Ue.buffer||Me(void 0),d=d.length*C.BYTES_PER_ELEMENT,d=Pt(d,8),Ue.pos+d>=Ue.size?(d>0||Me(void 0),Ue.needed+=d,C=m._webidl_malloc(d),Ue.temps.push(C)):(C=Ue.buffer+Ue.pos,Ue.pos+=d),C}},N.prototype=Object.create(W.prototype),N.prototype.constructor=N,N.prototype.__class__=N,N.__cache__={},m.VoidPtr=N,N.prototype.__destroy__=N.prototype.__destroy__=function(){Ft(this.ptr)},T.prototype=Object.create(W.prototype),T.prototype.constructor=T,T.prototype.__class__=T,T.__cache__={},m.DecoderBuffer=T,T.prototype.Init=T.prototype.Init=function(d,C){var R=this.ptr;Ue.prepare(),typeof d=="object"&&(d=O(d)),C&&typeof C=="object"&&(C=C.ptr),zt(R,d,C)},T.prototype.__destroy__=T.prototype.__destroy__=function(){Yt(this.ptr)},M.prototype=Object.create(W.prototype),M.prototype.constructor=M,M.prototype.__class__=M,M.__cache__={},m.AttributeTransformData=M,M.prototype.transform_type=M.prototype.transform_type=function(){return Br(this.ptr)},M.prototype.__destroy__=M.prototype.__destroy__=function(){br(this.ptr)},y.prototype=Object.create(W.prototype),y.prototype.constructor=y,y.prototype.__class__=y,y.__cache__={},m.GeometryAttribute=y,y.prototype.__destroy__=y.prototype.__destroy__=function(){Cr(this.ptr)},_.prototype=Object.create(W.prototype),_.prototype.constructor=_,_.prototype.__class__=_,_.__cache__={},m.PointAttribute=_,_.prototype.size=_.prototype.size=function(){return Qr(this.ptr)},_.prototype.GetAttributeTransformData=_.prototype.GetAttributeTransformData=function(){return Y(xr(this.ptr),M)},_.prototype.attribute_type=_.prototype.attribute_type=function(){return wr(this.ptr)},_.prototype.data_type=_.prototype.data_type=function(){return Dr(this.ptr)},_.prototype.num_components=_.prototype.num_components=function(){return nr(this.ptr)},_.prototype.normalized=_.prototype.normalized=function(){return!!Ut(this.ptr)},_.prototype.byte_stride=_.prototype.byte_stride=function(){return vr(this.ptr)},_.prototype.byte_offset=_.prototype.byte_offset=function(){return _r(this.ptr)},_.prototype.unique_id=_.prototype.unique_id=function(){return Ar(this.ptr)},_.prototype.__destroy__=_.prototype.__destroy__=function(){Mr(this.ptr)},x.prototype=Object.create(W.prototype),x.prototype.constructor=x,x.prototype.__class__=x,x.__cache__={},m.AttributeQuantizationTransform=x,x.prototype.InitFromAttribute=x.prototype.InitFromAttribute=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),!!kt(C,d)},x.prototype.quantization_bits=x.prototype.quantization_bits=function(){return Sr(this.ptr)},x.prototype.min_value=x.prototype.min_value=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),Gr(C,d)},x.prototype.range=x.prototype.range=function(){return ir(this.ptr)},x.prototype.__destroy__=x.prototype.__destroy__=function(){qt(this.ptr)},Q.prototype=Object.create(W.prototype),Q.prototype.constructor=Q,Q.prototype.__class__=Q,Q.__cache__={},m.AttributeOctahedronTransform=Q,Q.prototype.InitFromAttribute=Q.prototype.InitFromAttribute=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),!!Nt(C,d)},Q.prototype.quantization_bits=Q.prototype.quantization_bits=function(){return ar(this.ptr)},Q.prototype.__destroy__=Q.prototype.__destroy__=function(){I(this.ptr)},v.prototype=Object.create(W.prototype),v.prototype.constructor=v,v.prototype.__class__=v,v.__cache__={},m.PointCloud=v,v.prototype.num_attributes=v.prototype.num_attributes=function(){return G(this.ptr)},v.prototype.num_points=v.prototype.num_points=function(){return j(this.ptr)},v.prototype.__destroy__=v.prototype.__destroy__=function(){K(this.ptr)},b.prototype=Object.create(W.prototype),b.prototype.constructor=b,b.prototype.__class__=b,b.__cache__={},m.Mesh=b,b.prototype.num_faces=b.prototype.num_faces=function(){return re(this.ptr)},b.prototype.num_attributes=b.prototype.num_attributes=function(){return ne(this.ptr)},b.prototype.num_points=b.prototype.num_points=function(){return le(this.ptr)},b.prototype.__destroy__=b.prototype.__destroy__=function(){se(this.ptr)},f.prototype=Object.create(W.prototype),f.prototype.constructor=f,f.prototype.__class__=f,f.__cache__={},m.Metadata=f,f.prototype.__destroy__=f.prototype.__destroy__=function(){xe(this.ptr)},g.prototype=Object.create(W.prototype),g.prototype.constructor=g,g.prototype.__class__=g,g.__cache__={},m.Status=g,g.prototype.code=g.prototype.code=function(){return Re(this.ptr)},g.prototype.ok=g.prototype.ok=function(){return!!Ve(this.ptr)},g.prototype.error_msg=g.prototype.error_msg=function(){return Kt(ke(this.ptr))},g.prototype.__destroy__=g.prototype.__destroy__=function(){tt(this.ptr)},p.prototype=Object.create(W.prototype),p.prototype.constructor=p,p.prototype.__class__=p,p.__cache__={},m.DracoFloat32Array=p,p.prototype.GetValue=p.prototype.GetValue=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),Dt(C,d)},p.prototype.size=p.prototype.size=function(){return lt(this.ptr)},p.prototype.__destroy__=p.prototype.__destroy__=function(){sr(this.ptr)},u.prototype=Object.create(W.prototype),u.prototype.constructor=u,u.prototype.__class__=u,u.__cache__={},m.DracoInt8Array=u,u.prototype.GetValue=u.prototype.GetValue=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),tn(C,d)},u.prototype.size=u.prototype.size=function(){return rn(this.ptr)},u.prototype.__destroy__=u.prototype.__destroy__=function(){nn(this.ptr)},l.prototype=Object.create(W.prototype),l.prototype.constructor=l,l.prototype.__class__=l,l.__cache__={},m.DracoUInt8Array=l,l.prototype.GetValue=l.prototype.GetValue=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),on(C,d)},l.prototype.size=l.prototype.size=function(){return an(this.ptr)},l.prototype.__destroy__=l.prototype.__destroy__=function(){sn(this.ptr)},c.prototype=Object.create(W.prototype),c.prototype.constructor=c,c.prototype.__class__=c,c.__cache__={},m.DracoInt16Array=c,c.prototype.GetValue=c.prototype.GetValue=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),ln(C,d)},c.prototype.size=c.prototype.size=function(){return un(this.ptr)},c.prototype.__destroy__=c.prototype.__destroy__=function(){gn(this.ptr)},s.prototype=Object.create(W.prototype),s.prototype.constructor=s,s.prototype.__class__=s,s.__cache__={},m.DracoUInt16Array=s,s.prototype.GetValue=s.prototype.GetValue=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),fn(C,d)},s.prototype.size=s.prototype.size=function(){return dn(this.ptr)},s.prototype.__destroy__=s.prototype.__destroy__=function(){hn(this.ptr)},a.prototype=Object.create(W.prototype),a.prototype.constructor=a,a.prototype.__class__=a,a.__cache__={},m.DracoInt32Array=a,a.prototype.GetValue=a.prototype.GetValue=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),mn(C,d)},a.prototype.size=a.prototype.size=function(){return Bn(this.ptr)},a.prototype.__destroy__=a.prototype.__destroy__=function(){bn(this.ptr)},i.prototype=Object.create(W.prototype),i.prototype.constructor=i,i.prototype.__class__=i,i.__cache__={},m.DracoUInt32Array=i,i.prototype.GetValue=i.prototype.GetValue=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),Cn(C,d)},i.prototype.size=i.prototype.size=function(){return yn(this.ptr)},i.prototype.__destroy__=i.prototype.__destroy__=function(){Qn(this.ptr)},o.prototype=Object.create(W.prototype),o.prototype.constructor=o,o.prototype.__class__=o,o.__cache__={},m.MetadataQuerier=o,o.prototype.HasEntry=o.prototype.HasEntry=function(d,C){var R=this.ptr;return Ue.prepare(),d&&typeof d=="object"&&(d=d.ptr),C=C&&typeof C=="object"?C.ptr:D(C),!!wn(R,d,C)},o.prototype.GetIntEntry=o.prototype.GetIntEntry=function(d,C){var R=this.ptr;return Ue.prepare(),d&&typeof d=="object"&&(d=d.ptr),C=C&&typeof C=="object"?C.ptr:D(C),Dn(R,d,C)},o.prototype.GetIntEntryArray=o.prototype.GetIntEntryArray=function(d,C,R){var ge=this.ptr;Ue.prepare(),d&&typeof d=="object"&&(d=d.ptr),C=C&&typeof C=="object"?C.ptr:D(C),R&&typeof R=="object"&&(R=R.ptr),vn(ge,d,C,R)},o.prototype.GetDoubleEntry=o.prototype.GetDoubleEntry=function(d,C){var R=this.ptr;return Ue.prepare(),d&&typeof d=="object"&&(d=d.ptr),C=C&&typeof C=="object"?C.ptr:D(C),_n(R,d,C)},o.prototype.GetStringEntry=o.prototype.GetStringEntry=function(d,C){var R=this.ptr;return Ue.prepare(),d&&typeof d=="object"&&(d=d.ptr),C=C&&typeof C=="object"?C.ptr:D(C),Kt(Mn(R,d,C))},o.prototype.NumEntries=o.prototype.NumEntries=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),Sn(C,d)},o.prototype.GetEntryName=o.prototype.GetEntryName=function(d,C){var R=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),Kt(Gn(R,d,C))},o.prototype.__destroy__=o.prototype.__destroy__=function(){Pn(this.ptr)},A.prototype=Object.create(W.prototype),A.prototype.constructor=A,A.prototype.__class__=A,A.__cache__={},m.Decoder=A,A.prototype.DecodeArrayToPointCloud=A.prototype.DecodeArrayToPointCloud=function(d,C,R){var ge=this.ptr;return Ue.prepare(),typeof d=="object"&&(d=O(d)),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),Y(Fn(ge,d,C,R),g)},A.prototype.DecodeArrayToMesh=A.prototype.DecodeArrayToMesh=function(d,C,R){var ge=this.ptr;return Ue.prepare(),typeof d=="object"&&(d=O(d)),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),Y(Un(ge,d,C,R),g)},A.prototype.GetAttributeId=A.prototype.GetAttributeId=function(d,C){var R=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),kn(R,d,C)},A.prototype.GetAttributeIdByName=A.prototype.GetAttributeIdByName=function(d,C){var R=this.ptr;return Ue.prepare(),d&&typeof d=="object"&&(d=d.ptr),C=C&&typeof C=="object"?C.ptr:D(C),Nn(R,d,C)},A.prototype.GetAttributeIdByMetadataEntry=A.prototype.GetAttributeIdByMetadataEntry=function(d,C,R){var ge=this.ptr;return Ue.prepare(),d&&typeof d=="object"&&(d=d.ptr),C=C&&typeof C=="object"?C.ptr:D(C),R=R&&typeof R=="object"?R.ptr:D(R),Tn(ge,d,C,R)},A.prototype.GetAttribute=A.prototype.GetAttribute=function(d,C){var R=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),Y(Ln(R,d,C),_)},A.prototype.GetAttributeByUniqueId=A.prototype.GetAttributeByUniqueId=function(d,C){var R=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),Y(Pr(R,d,C),_)},A.prototype.GetMetadata=A.prototype.GetMetadata=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),Y(On(C,d),f)},A.prototype.GetAttributeMetadata=A.prototype.GetAttributeMetadata=function(d,C){var R=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),Y(Rr(R,d,C),f)},A.prototype.GetFaceFromMesh=A.prototype.GetFaceFromMesh=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!we(ge,d,C,R)},A.prototype.GetTriangleStripsFromMesh=A.prototype.GetTriangleStripsFromMesh=function(d,C){var R=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),X(R,d,C)},A.prototype.GetTrianglesUInt16Array=A.prototype.GetTrianglesUInt16Array=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!h(ge,d,C,R)},A.prototype.GetTrianglesUInt32Array=A.prototype.GetTrianglesUInt32Array=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!E(ge,d,C,R)},A.prototype.GetAttributeFloat=A.prototype.GetAttributeFloat=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!w(ge,d,C,R)},A.prototype.GetAttributeFloatForAllPoints=A.prototype.GetAttributeFloatForAllPoints=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!J(ge,d,C,R)},A.prototype.GetAttributeIntForAllPoints=A.prototype.GetAttributeIntForAllPoints=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!S(ge,d,C,R)},A.prototype.GetAttributeInt8ForAllPoints=A.prototype.GetAttributeInt8ForAllPoints=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!Be(ge,d,C,R)},A.prototype.GetAttributeUInt8ForAllPoints=A.prototype.GetAttributeUInt8ForAllPoints=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!nt(ge,d,C,R)},A.prototype.GetAttributeInt16ForAllPoints=A.prototype.GetAttributeInt16ForAllPoints=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!qo(ge,d,C,R)},A.prototype.GetAttributeUInt16ForAllPoints=A.prototype.GetAttributeUInt16ForAllPoints=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!Xo(ge,d,C,R)},A.prototype.GetAttributeInt32ForAllPoints=A.prototype.GetAttributeInt32ForAllPoints=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!Zo(ge,d,C,R)},A.prototype.GetAttributeUInt32ForAllPoints=A.prototype.GetAttributeUInt32ForAllPoints=function(d,C,R){var ge=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),!!$o(ge,d,C,R)},A.prototype.GetAttributeDataArrayForAllPoints=A.prototype.GetAttributeDataArrayForAllPoints=function(d,C,R,ge,L){var Oe=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),R&&typeof R=="object"&&(R=R.ptr),ge&&typeof ge=="object"&&(ge=ge.ptr),L&&typeof L=="object"&&(L=L.ptr),!!ei(Oe,d,C,R,ge,L)},A.prototype.SkipAttributeTransform=A.prototype.SkipAttributeTransform=function(d){var C=this.ptr;d&&typeof d=="object"&&(d=d.ptr),ti(C,d)},A.prototype.GetEncodedGeometryType_Deprecated=A.prototype.GetEncodedGeometryType_Deprecated=function(d){var C=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),ri(C,d)},A.prototype.DecodeBufferToPointCloud=A.prototype.DecodeBufferToPointCloud=function(d,C){var R=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),Y(ni(R,d,C),g)},A.prototype.DecodeBufferToMesh=A.prototype.DecodeBufferToMesh=function(d,C){var R=this.ptr;return d&&typeof d=="object"&&(d=d.ptr),C&&typeof C=="object"&&(C=C.ptr),Y(Ai(R,d,C),g)},A.prototype.__destroy__=A.prototype.__destroy__=function(){oi(this.ptr)},(function(){function d(){m.ATTRIBUTE_INVALID_TRANSFORM=ii(),m.ATTRIBUTE_NO_TRANSFORM=ai(),m.ATTRIBUTE_QUANTIZATION_TRANSFORM=si(),m.ATTRIBUTE_OCTAHEDRON_TRANSFORM=ci(),m.INVALID=li(),m.POSITION=ui(),m.NORMAL=gi(),m.COLOR=pi(),m.TEX_COORD=fi(),m.GENERIC=di(),m.INVALID_GEOMETRY_TYPE=hi(),m.POINT_CLOUD=Ii(),m.TRIANGULAR_MESH=mi(),m.DT_INVALID=Bi(),m.DT_INT8=bi(),m.DT_UINT8=Ei(),m.DT_INT16=Ci(),m.DT_UINT16=yi(),m.DT_INT32=Qi(),m.DT_UINT32=xi(),m.DT_INT64=wi(),m.DT_UINT64=Di(),m.DT_FLOAT32=vi(),m.DT_FLOAT64=_i(),m.DT_BOOL=Mi(),m.DT_TYPES_COUNT=Si(),m.OK=Gi(),m.DRACO_ERROR=Pi(),m.IO_ERROR=Ri(),m.INVALID_PARAMETER=Fi(),m.UNSUPPORTED_VERSION=Ui(),m.UNKNOWN_VERSION=ki()}bt?d():ot(d)})(),m.Decoder.prototype.GetEncodedGeometryType=function(d){if(d.__class__&&d.__class__===m.DecoderBuffer)return m.Decoder.prototype.GetEncodedGeometryType_Deprecated(d);if(d.byteLength<8)return m.INVALID_GEOMETRY_TYPE;switch(d[7]){case 0:return m.POINT_CLOUD;case 1:return m.TRIANGULAR_MESH;default:return m.INVALID_GEOMETRY_TYPE}},typeof m.onModuleParsed=="function"&&m.onModuleParsed(),Ae.return(m))})}})();typeof so=="object"&&typeof xA=="object"?(xA.exports=ao,xA.exports.default=ao):typeof define=="function"&&define.amd&&define([],function(){return ao})});var Ca=Hn((cg,Ea)=>{q();var zs=Ba(),Ys=ba();Ea.exports={createEncoderModule:zs,createDecoderModule:Ys}});var ns=Hn((Gf,rs)=>{q();var KA=()=>new Proxy(function(){},{get:(e,t)=>t==="__esModule"?!0:t===Symbol.toPrimitive?()=>"":KA(),apply:()=>KA(),construct:()=>KA()});rs.exports=KA()});q();var Aa=new Float32Array(2048);for(let e=0;e<2048;e++)Aa[e]=.5*(1-Math.cos(2*Math.PI*e/2047));var oa=new Uint16Array(2048);for(let e=0;e<2048;e++){let t=0,r=e;for(let n=0;n<11;n++)t=t<<1|r&1,r>>=1;oa[e]=t}var ia=new Float32Array(2048/2),aa=new Float32Array(2048/2);for(let e=0;e<2048/2;e++){let t=-2*Math.PI*e/2048;ia[e]=Math.cos(t),aa[e]=Math.sin(t)}function Gs(e,t){for(let r=0;r<2048;r++){let n=oa[r]??0;if(n>r){let A=e[r]??0;e[r]=e[n]??0,e[n]=A;let o=t[r]??0;t[r]=t[n]??0,t[n]=o}}for(let r=2;r<=2048;r<<=1){let n=r>>1,A=2048/r;for(let o=0;o<2048;o+=r)for(let i=0;i<n;i++){let a=i*A,s=ia[a]??1,c=aa[a]??0,l=e[o+i]??0,u=t[o+i]??0,p=e[o+i+n]??0,g=t[o+i+n]??0,f=p*s-g*c,b=p*c+g*s;e[o+i]=l+f,t[o+i]=u+b,e[o+i+n]=l-f,t[o+i+n]=u-b}}}var hA=class e{tempReal=new Float32Array(2048);tempImag=new Float32Array(2048);previousBins=new Float32Array(1024);extractAtTime(t,r,n){let A=t.length,o=A>0?t[0]?.length??0:0,a=Math.round(n*r)-1024;for(let M=0;M<2048;M++){let T=a+M,N=0;T>=0&&T<o&&(A===1?N=t[0]?.[T]??0:A>=2&&(N=((t[0]?.[T]??0)+(t[1]?.[T]??0))*.5)),this.tempReal[M]=N*(Aa[M]??1),this.tempImag[M]=0}Gs(this.tempReal,this.tempImag);let s=new Float32Array(1024),c=2/2048;for(let M=0;M<1024;M++){let T=this.tempReal[M]??0,N=this.tempImag[M]??0;s[M]=Math.sqrt(T*T+N*N)*c*2}let l=r/2048,u=Math.max(1,Math.round(20/l)),p=Math.max(u+1,Math.round(150/l)),g=0;for(let M=u;M<=p&&M<1024;M++)g+=(s[M]??0)*(s[M]??0);let f=Math.min(1,Math.sqrt(g/(p-u+1))*4),b=0;for(let M=0;M<1024;M++){let T=(s[M]??0)-(this.previousBins[M]??0);T>0&&(b+=T),this.previousBins[M]=s[M]??0}let v=Math.min(1,b*.15),Q=Math.round(300/l),x=Math.min(1023,Math.round(3400/l)),_=0;for(let M=Q;M<=x;M++)_+=(s[M]??0)*(s[M]??0);let y=Math.min(1,Math.sqrt(_/(x-Q+1))*3.5);return{fftBins:s,bassEnergy:f,drumTransient:v,vocalEnergy:y,timeMs:n*1e3}}static packBufferData(t){let r=new Float32Array(1028);return r.set(t.fftBins,0),r[1024]=t.bassEnergy,r[1025]=t.drumTransient,r[1026]=t.vocalEnergy,r[1027]=t.timeMs,r}static createGpuBuffer(t,r){let n=r?e.packBufferData(r):new Float32Array(1028),A=t.createBuffer({label:"AudioLatentBuffer",size:4112,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});return new Float32Array(A.getMappedRange()).set(n),A.unmap(),A}static updateGpuBuffer(t,r,n){let A=e.packBufferData(n);t.queue.writeBuffer(r,0,A)}},na=class{constructor(t,r,n,A){this.channels=t;this.sampleRate=r;this.fps=n;this.totalFrames=A;let o=new hA,i=r||48e3,a=n||30,s=t[0]?.length??0,c=Math.max(10,Math.ceil(s/i*a)+10),l=typeof A=="number"&&Number.isFinite(A)&&A>0?Math.round(A):c;this.frames=new Array(l);for(let u=0;u<l;u++){let p=u/a;this.frames[u]=o.extractAtTime(t,i,p)}}channels;sampleRate;fps;totalFrames;frames=[];gpuBuffers=new WeakMap;getFrameData(t){let r=Math.max(0,Math.min(this.totalFrames-1,Math.round(t)));return this.frames[r]??{fftBins:new Float32Array(1024),bassEnergy:0,drumTransient:0,vocalEnergy:0,timeMs:r/this.fps*1e3}}getGpuBuffer(t,r){let n=this.gpuBuffers.get(t);n||(n=new Map,this.gpuBuffers.set(t,n));let A=Math.max(0,Math.min(this.totalFrames-1,Math.round(r))),o=n.get(A);if(!o){let i=this.getFrameData(A);o=hA.createGpuBuffer(t,i),n.set(A,o)}return o}};q();var ae={create(e=0,t=0,r=0){return[e,t,r]},copy(e){return[e[0],e[1],e[2]]},set(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e},add(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]},subtract(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]},multiplyScalar(e,t){return[e[0]*t,e[1]*t,e[2]*t]},dot(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},cross(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]},lengthSq(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]},length(e){return Math.hypot(e[0],e[1],e[2])},distance(e,t){return Math.hypot(e[0]-t[0],e[1]-t[1],e[2]-t[2])},normalize(e){let t=Math.hypot(e[0],e[1],e[2]);if(t===0)return[0,0,0];let r=1/t;return[e[0]*r,e[1]*r,e[2]*r]},lerp(e,t,r){return[e[0]+(t[0]-e[0])*r,e[1]+(t[1]-e[1])*r,e[2]+(t[2]-e[2])*r]},equals(e,t,r=1e-6){return Math.abs(e[0]-t[0])<=r&&Math.abs(e[1]-t[1])<=r&&Math.abs(e[2]-t[2])<=r}};q();var Ie={identity(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},copy(e){return[...e]},multiply(e,t){let r=new Array(16);for(let n=0;n<4;n++)for(let A=0;A<4;A++)r[A*4+n]=e[0+n]*t[A*4+0]+e[4+n]*t[A*4+1]+e[8+n]*t[A*4+2]+e[12+n]*t[A*4+3];return r},translate(e,t,r=0){return[1,0,0,0,0,1,0,0,0,0,1,0,e,t,r,1]},scale(e,t,r=1){return[e,0,0,0,0,t,0,0,0,0,r,0,0,0,0,1]},rotateX(e){let t=Math.cos(e),r=Math.sin(e);return[1,0,0,0,0,t,r,0,0,-r,t,0,0,0,0,1]},rotateY(e){let t=Math.cos(e),r=Math.sin(e);return[t,0,-r,0,0,1,0,0,r,0,t,0,0,0,0,1]},rotateZ(e){let t=Math.cos(e),r=Math.sin(e);return[t,r,0,0,-r,t,0,0,0,0,1,0,0,0,0,1]},rotateAxis(e,t){let r=ae.normalize(e),n=r[0],A=r[1],o=r[2],i=Math.cos(t),a=Math.sin(t),s=1-i;return[s*n*n+i,s*n*A+a*o,s*n*o-a*A,0,s*n*A-a*o,s*A*A+i,s*A*o+a*n,0,s*n*o+a*A,s*A*o-a*n,s*o*o+i,0,0,0,0,1]},lookAt(e,t,r=[0,-1,0]){let n=ae.subtract(t,e);ae.lengthSq(n)===0?n=[0,0,1]:n=ae.normalize(n);let A=ae.cross(n,r);ae.lengthSq(A)===0?A=[1,0,0]:A=ae.normalize(A);let o=ae.cross(A,n);return[A[0],o[0],n[0],0,A[1],o[1],n[1],0,A[2],o[2],n[2],0,-ae.dot(A,e),-ae.dot(o,e),-ae.dot(n,e),1]},perspective(e,t,r,n){let A=1/Math.tan(e/2),o=1/(n-r);return[A/t,0,0,0,0,A,0,0,0,0,n*o,1,0,0,-r*n*o,0]},orthographic(e,t,r,n,A,o){let i=1/(t-e),a=1/(n-r),s=1/(o-A);return[2*i,0,0,0,0,2*a,0,0,0,0,s,0,-(t+e)*i,-(n+r)*a,-A*s,1]},invert(e){let t=new Array(16);t[0]=e[5]*e[10]*e[15]-e[5]*e[11]*e[14]-e[9]*e[6]*e[15]+e[9]*e[7]*e[14]+e[13]*e[6]*e[11]-e[13]*e[7]*e[10],t[4]=-e[4]*e[10]*e[15]+e[4]*e[11]*e[14]+e[8]*e[6]*e[15]-e[8]*e[7]*e[14]-e[12]*e[6]*e[11]+e[12]*e[7]*e[10],t[8]=e[4]*e[9]*e[15]-e[4]*e[11]*e[13]-e[8]*e[5]*e[15]+e[8]*e[7]*e[13]+e[12]*e[5]*e[11]-e[12]*e[7]*e[9],t[12]=-e[4]*e[9]*e[14]+e[4]*e[10]*e[13]+e[8]*e[5]*e[14]-e[8]*e[6]*e[13]-e[12]*e[5]*e[10]+e[12]*e[6]*e[9],t[1]=-e[1]*e[10]*e[15]+e[1]*e[11]*e[14]+e[9]*e[2]*e[15]-e[9]*e[3]*e[14]-e[13]*e[2]*e[11]+e[13]*e[3]*e[10],t[5]=e[0]*e[10]*e[15]-e[0]*e[11]*e[14]-e[8]*e[2]*e[15]+e[8]*e[3]*e[14]+e[12]*e[2]*e[11]-e[12]*e[3]*e[10],t[9]=-e[0]*e[9]*e[15]+e[0]*e[11]*e[13]+e[8]*e[1]*e[15]-e[8]*e[3]*e[13]-e[12]*e[1]*e[11]+e[12]*e[3]*e[9],t[13]=e[0]*e[9]*e[14]-e[0]*e[10]*e[13]-e[8]*e[1]*e[14]+e[8]*e[2]*e[13]+e[12]*e[1]*e[10]-e[12]*e[2]*e[9],t[2]=e[1]*e[6]*e[15]-e[1]*e[7]*e[14]-e[5]*e[2]*e[15]+e[5]*e[3]*e[14]+e[13]*e[2]*e[7]-e[13]*e[3]*e[6],t[6]=-e[0]*e[6]*e[15]+e[0]*e[7]*e[14]+e[4]*e[2]*e[15]-e[4]*e[3]*e[14]-e[12]*e[2]*e[7]+e[12]*e[3]*e[6],t[10]=e[0]*e[5]*e[15]-e[0]*e[7]*e[13]-e[4]*e[1]*e[15]+e[4]*e[3]*e[13]+e[12]*e[1]*e[7]-e[12]*e[3]*e[5],t[14]=-e[0]*e[5]*e[14]+e[0]*e[6]*e[13]+e[4]*e[1]*e[14]-e[4]*e[2]*e[13]-e[12]*e[1]*e[6]+e[12]*e[2]*e[5],t[3]=-e[1]*e[6]*e[11]+e[1]*e[7]*e[10]+e[5]*e[2]*e[11]-e[5]*e[3]*e[10]-e[9]*e[2]*e[7]+e[9]*e[3]*e[6],t[7]=e[0]*e[6]*e[11]-e[0]*e[7]*e[10]-e[4]*e[2]*e[11]+e[4]*e[3]*e[10]+e[8]*e[2]*e[7]-e[8]*e[3]*e[6],t[11]=-e[0]*e[5]*e[11]+e[0]*e[7]*e[9]+e[4]*e[1]*e[11]-e[4]*e[3]*e[9]-e[8]*e[1]*e[7]+e[8]*e[3]*e[5],t[15]=e[0]*e[5]*e[10]-e[0]*e[6]*e[9]-e[4]*e[1]*e[10]+e[4]*e[2]*e[9]+e[8]*e[1]*e[6]-e[8]*e[2]*e[5];let r=e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12];if(Math.abs(r)<1e-12)return null;r=1/r;for(let n=0;n<16;n++)t[n]*=r;return t},transpose(e){return[e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15]]},projectPoint(e,t){let r=t[0],n=t[1],A=t[2],o=e[0]*r+e[4]*n+e[8]*A+e[12],i=e[1]*r+e[5]*n+e[9]*A+e[13],a=e[2]*r+e[6]*n+e[10]*A+e[14],s=e[3]*r+e[7]*n+e[11]*A+e[15],c=Math.abs(s)>1e-6?1/s:1;return[o*c,i*c,a*c]},projectRectangle(e,t,r){return[Ie.projectPoint(e,[0,0,0]),Ie.projectPoint(e,[t,0,0]),Ie.projectPoint(e,[t,r,0]),Ie.projectPoint(e,[0,r,0])]},toFloat32Array(e){return new Float32Array(e)}};q();function jn(e,t,r=3){let n=0,A=1,o=1,i=0;for(let a=0;a<r;a++){let s=Math.sin(e*A*2*Math.PI+t+a*1.7),c=Math.cos(e*A*1.414*Math.PI+t*2.1+a*.9);n+=(s*.6+c*.4)*o,i+=o,A*=2,o*=.5}return i>0?n/i:0}var jr={createDefaultCamera(e,t,r=50){let n=r*Math.PI/180,A=t/2/Math.tan(n/2);return{eye:[e/2,t/2,-A],target:[e/2,t/2,0],up:[0,-1,0],fov:r,aspect:Math.max(1e-4,e/t),near:1,far:5e4,zoom:1,focusDistance:A,fStop:2.8,maxBlurRadius:32}},computeViewMatrix(e){return Ie.lookAt(e.eye,e.target,e.up)},computeProjectionMatrix(e){let t=e.fov*Math.PI/180,r=Ie.perspective(t,e.aspect,e.near,e.far);return e.zoom!==1&&e.zoom>0&&(r[0]*=e.zoom,r[5]*=e.zoom),r},computeViewProjectionMatrix(e){let t=jr.computeViewMatrix(e),r=jr.computeProjectionMatrix(e);return Ie.multiply(r,t)},dolly(e,t,r){let n=ae.normalize(ae.subtract(t,e)),A=ae.multiplyScalar(n,r);return{eye:ae.add(e,A),target:t}},truckPedestal(e,t,r,n,A){let o=ae.normalize(ae.subtract(t,e)),i=ae.normalize(ae.cross(o,r)),a=ae.cross(i,o),s=ae.multiplyScalar(i,n),c=ae.multiplyScalar(a,A),l=ae.add(s,c);return{eye:ae.add(e,l),target:ae.add(t,l)}},orbit(e,t,r,n){let A=r*Math.PI/180,o=n*Math.PI/180,i=Math.cos(o),a=Math.sin(o),s=Math.cos(A),c=Math.sin(A),l=e[0]+t*i*c,u=e[1]-t*a,p=e[2]-t*i*s;return[l,u,p]},applyOrientation(e,t,r,n){if(t===0&&r===0&&n===0)return e;let A=ae.normalize(ae.subtract(e.target,e.eye)),o=ae.normalize(ae.cross(A,e.up)),i=ae.cross(o,A),a=ae.distance(e.eye,e.target),s=A,c=i;if(r!==0){let p=r*Math.PI/180,g=Math.cos(p),f=Math.sin(p);s=ae.normalize(ae.subtract(ae.multiplyScalar(s,g),ae.multiplyScalar(o,f)))}let l=ae.normalize(ae.cross(s,c));if(t!==0){let p=t*Math.PI/180,g=Math.cos(p),f=Math.sin(p);s=ae.normalize(ae.add(ae.multiplyScalar(s,g),ae.multiplyScalar(c,f))),c=ae.normalize(ae.cross(l,s))}if(n!==0){let p=n*Math.PI/180,g=Math.cos(p),f=Math.sin(p);c=ae.normalize(ae.add(ae.multiplyScalar(c,g),ae.multiplyScalar(l,f)))}let u=ae.add(e.eye,ae.multiplyScalar(s,a));return{...e,target:u,up:c}},applyCameraShake(e,t,r){let{translationAmplitude:n,rotationAmplitude:A,frequency:o=2.5,octaves:i=3,seed:a=42}=r;if(n<=0&&A<=0)return e;let s=t*o,c=jn(s,a,i)*n,l=jn(s,a+101.5,i)*n,u=jn(s,a+203.7,i)*(n*.5),p=jn(s,a+307.1,i)*A,g=jn(s,a+409.3,i)*A,f=ae.normalize(ae.subtract(e.target,e.eye)),b=ae.normalize(ae.cross(f,e.up)),v=ae.cross(b,f),Q=ae.add(ae.multiplyScalar(b,c),ae.add(ae.multiplyScalar(v,l),ae.multiplyScalar(f,u))),x=ae.add(e.eye,Q),_=ae.add(e.target,ae.add(ae.multiplyScalar(b,g*10),ae.multiplyScalar(v,p*10)));return{...e,eye:x,target:_}},computeCircleOfConfusion(e,t,r,n,A=32){if(t<=0||n<=0||e<=0)return 0;let o=Math.abs(e-t),i=r/n,a=o/e*i*.5;return Math.min(A,Math.max(0,a))},computeCameraFrustumPlanes(e){let t=r=>{let n=Math.hypot(r[0],r[1],r[2]);return n===0?r:[r[0]/n,r[1]/n,r[2]/n,r[3]/n]};return{left:t([e[3]+e[0],e[7]+e[4],e[11]+e[8],e[15]+e[12]]),right:t([e[3]-e[0],e[7]-e[4],e[11]-e[8],e[15]-e[12]]),bottom:t([e[3]+e[1],e[7]+e[5],e[11]+e[9],e[15]+e[13]]),top:t([e[3]-e[1],e[7]-e[5],e[11]-e[9],e[15]-e[13]]),near:t([e[2],e[6],e[10],e[14]]),far:t([e[3]-e[2],e[7]-e[6],e[11]-e[10],e[15]-e[14]])}},isBoxInFrustum(e,t,r){let n=[r.left,r.right,r.bottom,r.top,r.near,r.far];for(let A of n){let o=A[0]>0?t[0]:e[0],i=A[1]>0?t[1]:e[1],a=A[2]>0?t[2]:e[2];if(A[0]*o+A[1]*i+A[2]*a+A[3]<0)return!1}return!0}};q();var Ps={studio:{top:"#9da3ad",horizon:"#5d626b",bottom:"#202226",softboxes:3.5},soft:{top:"#f1efea",horizon:"#cfcac1",bottom:"#77726a",softboxes:1.2},sunset:{top:"#4d63a3",horizon:"#ff9a5c",bottom:"#3b2a28",softboxes:1},night:{top:"#121a3a",horizon:"#1f2950",bottom:"#05060b",softboxes:.5},neutral:{top:"#9a9a9a",horizon:"#808080",bottom:"#5c5c5c",softboxes:0}},Rs={none:0,aces:1,agx:2,neutral:3};function Fr(e){let t=Yi(e)??[0,0,0,1],r=n=>n<=.04045?n/12.92:((n+.055)/1.055)**2.4;return[r(t[0]),r(t[1]),r(t[2])]}function sa(e){let t=Ps[e.preset??"studio"],r=e.intensity??1,n=A=>[A[0]*r,A[1]*r,A[2]*r];return{top:n(Fr(e.top??t.top)),horizon:n(Fr(e.horizon??t.horizon)),bottom:n(Fr(e.bottom??t.bottom)),softboxes:(e.softboxes??t.softboxes)*r,rotationRad:(e.rotation??0)*Math.PI/180,exposureMultiplier:2**(e.exposure??0),toneMapping:Rs[e.toneMapping??"neutral"],fog:e.fog?{color:Fr(e.fog.color),start:e.fog.start,end:e.fog.end,opacity:Math.max(0,Math.min(1,e.fog.opacity??1))}:void 0,floor:e.floor?{y:e.floor.y,color:Fr(e.floor.color??"#08070a"),reflectivity:Math.max(0,Math.min(1,e.floor.reflectivity??.35)),roughness:Math.max(0,Math.min(1,e.floor.roughness??.35)),fadeDistance:Math.max(0,e.floor.fadeDistance??900),opacity:Math.max(0,Math.min(1,e.floor.opacity??1))}:void 0}}q();var IA=8,ro=768;function to(e){if(!e)return[1,1,1];if(Array.isArray(e)){let A=e[0]??1,o=e[1]??1,i=e[2]??1;return[A>1?A/255:A,o>1?o/255:o,i>1?i/255:i]}if(typeof e=="object"&&e!==null){let A=e.r??1,o=e.g??1,i=e.b??1;return[A>1?A/255:A,o>1?o/255:o,i>1?i/255:i]}if(typeof e!="string")return[1,1,1];let t=e.trim().toLowerCase();if(t.startsWith("#")){let A=t.slice(1);if(A.length===3){let o=Number.parseInt(A[0]+A[0],16)/255,i=Number.parseInt(A[1]+A[1],16)/255,a=Number.parseInt(A[2]+A[2],16)/255;return[o,i,a]}if(A.length>=6){let o=Number.parseInt(A.slice(0,2),16)/255,i=Number.parseInt(A.slice(2,4),16)/255,a=Number.parseInt(A.slice(4,6),16)/255;return[o,i,a]}}let r=t.match(/rgba?\s*\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/);if(r){let A=Number.parseFloat(r[1])/255,o=Number.parseFloat(r[2])/255,i=Number.parseFloat(r[3])/255;return[Math.max(0,Math.min(1,A)),Math.max(0,Math.min(1,o)),Math.max(0,Math.min(1,i))]}let n=t.match(/hsla?\s*\(\s*([\d.]+)\s*,\s*([\d.]+)%?\s*,\s*([\d.]+)%?/);if(n){let A=Number.parseFloat(n[1])/360,o=Number.parseFloat(n[2])/100,i=Number.parseFloat(n[3])/100;return Fs(A,o,i)}return[1,1,1]}function Fs(e,t,r){if(t===0)return[r,r,r];let n=(i,a,s)=>{let c=s;return c<0&&(c+=1),c>1&&(c-=1),c<1/6?i+(a-i)*6*c:c<1/2?a:c<2/3?i+(a-i)*(2/3-c)*6:i},A=r<.5?r*(1+t):r+t-r*t,o=2*r-A;return[n(o,A,e+1/3),n(o,A,e),n(o,A,e-1/3)]}var Tt={computeNormalMatrix(e){let t=Ie.invert(e);return t?[t[0],t[4],t[8],0,t[1],t[5],t[9],0,t[2],t[6],t[10],0,0,0,0,1]:Ie.identity()},processLight(e){let t=to(e.color),r=e.intensity??1,n=e.position?e.position[0]:e.x??0,A=e.position?e.position[1]:e.y??0,o=e.position?e.position[2]:e.z??0,i=e.lightType??e.type??"directional",a=1;i==="ambient"?a=0:i==="directional"?a=1:i==="point"?a=2:i==="spot"&&(a=3);let s=[0,0,-1];if(e.direction)s=ae.normalize(e.direction);else if(e.target||e.targetX!==void 0||e.targetY!==void 0||e.targetZ!==void 0){let Q=e.target?e.target[0]:e.targetX??n,x=e.target?e.target[1]:e.targetY??A,_=e.target?e.target[2]:e.targetZ??o,y=[Q,x,_],M=ae.subtract(y,[n,A,o]);ae.length(M)>1e-4&&(s=ae.normalize(M))}let c=Math.max(1,e.radius??1e3),l=e.decay??2,u=Math.max(.1,Math.min(180,e.angle??45)),p=Math.max(0,Math.min(1,e.penumbra??.2)),g=u*Math.PI/180,f=g*(1-p),b=Math.cos(g),v=Math.cos(f);return{posType:[n,A,o,a],dirRadius:[s[0],s[1],s[2],c],colorIntensity:[t[0],t[1],t[2],r],spotParams:[b,v,l,0]}},packLightsUniforms(e,t,r,n=!1){let A=new Float32Array(ro/4);if(Tt.packPhysicalBlock(A,e??[],t,r,n),(!e||e.length===0)&&!t)return A[4]=0,A[5]=0,A;let o=0,i=0,a=0,s=[];for(let l of e)if((l.lightType??l.type)==="ambient"){let p=to(l.color),g=l.intensity??1;o+=p[0]*g,i+=p[1]*g,a+=p[2]*g}else s.length<IA&&s.push(Tt.processLight(l));A[0]=o,A[1]=i,A[2]=a,A[3]=1,A[4]=s.length,A[5]=1;let c=8;for(let l=0;l<IA;l++){if(l<s.length){let u=s[l];A[c+0]=u.posType[0],A[c+1]=u.posType[1],A[c+2]=u.posType[2],A[c+3]=u.posType[3],A[c+4]=u.dirRadius[0],A[c+5]=u.dirRadius[1],A[c+6]=u.dirRadius[2],A[c+7]=u.dirRadius[3],A[c+8]=u.colorIntensity[0],A[c+9]=u.colorIntensity[1],A[c+10]=u.colorIntensity[2],A[c+11]=u.colorIntensity[3],A[c+12]=u.spotParams[0],A[c+13]=u.spotParams[1],A[c+14]=u.spotParams[2],A[c+15]=u.spotParams[3]}else for(let u=0;u<16;u++)A[c+u]=0;c+=16}return A},shadowCasterIndex(e){let t=0;for(let r of e){let n=r.lightType??r.type;if(n!=="ambient"){if(t>=IA)break;if(r.castShadow&&(n==="directional"||n==="spot"))return t;t++}}return-1},packPhysicalBlock(e,t,r,n,A=!1){let o=8+IA*16,i=0,a=0,s=0;for(let c of t){if((c.lightType??c.type)!=="ambient")continue;let[l,u,p]=to(c.color),g=c.intensity??1,f=b=>b<=.04045?b/12.92:((b+.055)/1.055)**2.4;i+=f(l)*g,a+=f(u)*g,s+=f(p)*g}if(e[o+0]=i,e[o+1]=a,e[o+2]=s,e[o+3]=1,r){let c=sa(r);e[6]=1,e[7]=c.toneMapping,e[o+3]=c.exposureMultiplier,e.set([...c.top,c.rotationRad],o+4),e.set([...c.horizon,c.softboxes],o+8),e.set([...c.bottom,1],o+12),c.fog&&(e.set([...c.fog.color,1],o+16),e.set([c.fog.start,c.fog.end,c.fog.opacity,0],o+20))}if(n&&n.lightIndex>=0){e.set([1,n.lightIndex,n.softness,n.mapSize],o+24),e.set([n.bias,n.normalOffset,n.darkness,0],o+28);for(let c=0;c<16;c++)e[o+32+c]=n.matrix[c]??0}r?.floor?(e[o+48]=r.floor.y,e[o+49]=r.floor.fadeDistance??900,e[o+50]=A?1:0,e[o+51]=0):(e[o+48]=0,e[o+49]=0,e[o+50]=0,e[o+51]=0)}};q();vt();q();vt();var no={".ktx2":"image/ktx2",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".tif":"image/tiff",".tiff":"image/tiff",".avif":"image/avif"};function Jn(e){return no[$e.extname(e).toLowerCase()]??"image/png"}function mA(e){let t=$e.extname(e.replace(/\\/g,"/")).toLowerCase();return!t||t in no}function Kn(e,t){if(!e||typeof Pe>"u"||!Pe.existsSync||!mA(e))return;let r=e.trim().replace(/^file:\/\//,"");try{r=decodeURIComponent(r)}catch{}let n=r.replace(/\\/g,"/"),A=n.split("/").pop()??n,o=[];if($e.isAbsolute(n)&&o.push(n),t){o.push($e.resolve(t,n)),o.push($e.join(t,A)),o.push($e.join(t,"textures",A));try{for(let i of Pe.readdirSync(t))i.toLowerCase().endsWith(".fbm")&&o.push($e.join(t,i,A))}catch{}}for(let i of o)try{if(Pe.existsSync(i)&&Pe.statSync(i).isFile())return{bytes:new Uint8Array(Pe.readFileSync(i)),mime:Jn(i)}}catch{}}function Jr(e,t,r){let n=mA(r)?"was not found":`is in an unsupported format (use ${Object.keys(no).join(", ")})`;console.warn(`[${e}] Texture "${r}" for material "${t}" ${n}; the material renders without it.`)}var Vn=class e{static parse(t,r,n){let A=typeof r=="object"&&r!==null?r:n??{},o=typeof r=="string"?r:A.mtlText,i=[],a=[],s=[],c=[],l={materialName:"default",faces:[]};c.push(l);let u={};o&&Object.assign(u,e.loadTextures(e.parseMtl(o),A.basePath));let p=t.split(/\r?\n/);for(let m=0;m<p.length;m++){let Ce=p[m]?.trim();if(!Ce||Ce.startsWith("#"))continue;let be=Ce.split(/\s+/),ye=be[0]?.toLowerCase();if(ye==="mtllib"){let ie=be.slice(1).join(" ").trim();if(A.basePath&&typeof Pe<"u"&&Pe.existsSync)try{let ce=$e.resolve(A.basePath,ie);if(Pe.existsSync(ce)){let he=Pe.readFileSync(ce,"utf-8");Object.assign(u,e.loadTextures(e.parseMtl(he),$e.dirname(ce)))}}catch{}}else if(ye==="v"){let ie=Number.parseFloat(be[1]??"0"),ce=Number.parseFloat(be[2]??"0"),he=Number.parseFloat(be[3]??"0");i.push([ie,ce,he])}else if(ye==="vn"){let ie=Number.parseFloat(be[1]??"0"),ce=Number.parseFloat(be[2]??"0"),he=Number.parseFloat(be[3]??"0");a.push([ie,ce,he])}else if(ye==="vt"){let ie=Number.parseFloat(be[1]??"0"),ce=be[2]!==void 0?Number.parseFloat(be[2]):0;s.push([ie,ce])}else if(ye==="usemtl"){let ie=be[1]??"default";l.faces.length>0?(l={materialName:ie,faces:[]},c.push(l)):l.materialName=ie}else if(ye==="f"){let ie=[];for(let ce=1;ce<be.length;ce++){let he=be[ce];if(!he)continue;let Qe=he.split("/"),_e=Number.parseInt(Qe[0]??"0",10),Ge=Qe[1]&&Qe[1].length>0?Number.parseInt(Qe[1],10):0,Fe=Qe[2]&&Qe[2].length>0?Number.parseInt(Qe[2],10):0;_e<0&&(_e=i.length+_e+1),Ge<0&&(Ge=s.length+Ge+1),Fe<0&&(Fe=a.length+Fe+1),ie.push({v:_e-1,vt:Ge-1,vn:Fe-1})}if(ie.length>=3)for(let ce=1;ce<ie.length-1;ce++){let he=ie[0],Qe=ie[ce],_e=ie[ce+1];he&&Qe&&_e&&l.faces.push([he,Qe,_e])}}}let g=1/0,f=1/0,b=1/0,v=-1/0,Q=-1/0,x=-1/0;for(let m of i){let[Ce,be,ye]=m;Ce===void 0||be===void 0||ye===void 0||(Ce<g&&(g=Ce),be<f&&(f=be),ye<b&&(b=ye),Ce>v&&(v=Ce),be>Q&&(Q=be),ye>x&&(x=ye))}Number.isFinite(g)||(g=-1,f=-1,b=-1,v=1,Q=1,x=1);let _=(g+v)*.5,y=(f+Q)*.5,M=(b+x)*.5,T=Math.max(1e-4,v-g),N=Math.max(1e-4,Q-f),O=Math.max(1e-4,x-b),D=Math.max(T,N,O),H=1;A.normalizeSize&&A.normalizeSize>0&&(H=A.normalizeSize/D),typeof A.scale=="number"&&(H*=A.scale);let V=A.center??!1,P=V?_:0,z=V?y:0,ee=V?M:0,Y=[];for(let m=0;m<c.length;m++){let Ce=c[m];if(!Ce||Ce.faces.length===0)continue;let be=new Map,ye=[],ie=[],ce=[],he=[],Qe=!1;for(let Fe of Ce.faces)for(let De of Fe){let He=`${De.v}_${De.vt}_${De.vn}`,Te=be.get(He);if(Te===void 0){Te=ye.length/3,be.set(He,Te);let je=i[De.v]??[0,0,0],Le=((je[0]??0)-P)*H,Ke=((je[1]??0)-z)*H,rt=((je[2]??0)-ee)*H;if(ye.push(Le,Ke,rt),De.vt>=0&&s[De.vt]){let We=s[De.vt];ce.push(We[0]??0,1-(We[1]??0))}else ce.push(0,0);if(De.vn>=0&&a[De.vn]){Qe=!0;let We=a[De.vn];ie.push(We[0]??0,We[1]??0,We[2]??0)}else ie.push(0,0,0)}he.push(Te)}if(!Qe||A.smoothNormals){let Fe=new Float32Array(ye.length);for(let De=0;De<he.length;De+=3){let He=he[De],Te=he[De+1],je=he[De+2],Le=[ye[He*3],ye[He*3+1],ye[He*3+2]],Ke=[ye[Te*3],ye[Te*3+1],ye[Te*3+2]],rt=[ye[je*3],ye[je*3+1],ye[je*3+2]],We=ae.subtract(Ke,Le),bt=ae.subtract(rt,Le),ze=ae.cross(We,bt);Fe[He*3]+=ze[0],Fe[He*3+1]+=ze[1],Fe[He*3+2]+=ze[2],Fe[Te*3]+=ze[0],Fe[Te*3+1]+=ze[1],Fe[Te*3+2]+=ze[2],Fe[je*3]+=ze[0],Fe[je*3+1]+=ze[1],Fe[je*3+2]+=ze[2]}for(let De=0;De<ye.length/3;De++){let He=Fe[De*3],Te=Fe[De*3+1],je=Fe[De*3+2],Le=Math.hypot(He,Te,je)||1;ie[De*3]=He/Le,ie[De*3+1]=Te/Le,ie[De*3+2]=je/Le}}let Ge=ye.length/3>65535?new Uint32Array(he):new Uint16Array(he);Y.push({id:`mesh_${m}`,name:Ce.materialName,positions:new Float32Array(ye),normals:new Float32Array(ie),uvs:new Float32Array(ce),indices:Ge,materialName:Ce.materialName})}let $=(g-P)*H,W=(f-z)*H,te=(b-ee)*H,me=(v-P)*H,ue=(Q-z)*H,oe=(x-ee)*H,pe=me-$,Me=ue-W,F=oe-te,ve=($+me)*.5,Se=(W+ue)*.5,Ne=(te+oe)*.5,Ee=Math.hypot(pe,Me,F)*.5;return{meshes:Y,materials:u,animations:[],bounds:{min:[$,W,te],max:[me,ue,oe],center:[ve,Se,Ne],size:[pe,Me,F],boundingSphereRadius:Ee}}}static parseMtl(t){let r={},n=null,A=t.split(/\r?\n/);for(let o of A){let i=o.trim();if(!i||i.startsWith("#"))continue;let a=i.split(/\s+/),s=a[0]?.toLowerCase();if(s==="newmtl"){let c=a[1]??"default";n={name:c,diffuseColor:[1,1,1,1],specularColor:[1,1,1],ambientColor:[.2,.2,.2],shininess:32,opacity:1},r[c]=n}else if(n)if(s==="kd"){let c=Number.parseFloat(a[1]??"1"),l=Number.parseFloat(a[2]??"1"),u=Number.parseFloat(a[3]??"1");n.diffuseColor=[c,l,u,n.diffuseColor?.[3]??1]}else if(s==="ks"){let c=Number.parseFloat(a[1]??"1"),l=Number.parseFloat(a[2]??"1"),u=Number.parseFloat(a[3]??"1");n.specularColor=[c,l,u],n.specularIntensity=(c+l+u)/3}else if(s==="ka"){let c=Number.parseFloat(a[1]??"0.2"),l=Number.parseFloat(a[2]??"0.2"),u=Number.parseFloat(a[3]??"0.2");n.ambientColor=[c,l,u]}else if(s==="ns")n.shininess=Number.parseFloat(a[1]??"32");else if(s==="d"||s==="tr"){let c=Number.parseFloat(a[1]??"1");n.opacity=s==="d"?c:1-c,n.diffuseColor&&(n.diffuseColor[3]=n.opacity)}else if(s==="map_kd"){n.diffuseTexture=e.mapFileName(a);let c=a.findIndex(l=>l.toLowerCase()==="-clamp");n.textureWrap=c>0&&a[c+1]?.toLowerCase()==="on"?"clamp":"repeat"}else(s==="norm"||s==="map_kn")&&(n.normalTexture=e.mapFileName(a))}return r}static MAP_OPTION_ARGS={"-blendu":1,"-blendv":1,"-cc":1,"-clamp":1,"-texres":1,"-bm":1,"-boost":1,"-imfchan":1,"-type":1,"-mm":2};static mapFileName(t){let r=1;for(;r<t.length&&t[r]?.startsWith("-");){let n=t[r].toLowerCase();if(r++,n==="-o"||n==="-s"||n==="-t")for(let A=0;A<3&&r<t.length&&!Number.isNaN(Number(t[r]));A++)r++;else r+=e.MAP_OPTION_ARGS[n]??0}return t.slice(r).join(" ")}static loadTextures(t,r){if(!r)return t;for(let n of Object.values(t)){if(n.diffuseTexture&&!n.diffuseTextureBuffer){let A=Kn(n.diffuseTexture,r);A?(n.diffuseTextureBuffer=A.bytes,n.diffuseTextureMime=A.mime):Jr("ObjLoader",n.name,n.diffuseTexture)}if(n.normalTexture&&!n.normalTextureBuffer){let A=Kn(n.normalTexture,r);A?n.normalTextureBuffer=A.bytes:Jr("ObjLoader",n.name,n.normalTexture)}}return t}};function yu(e,t,r={}){return Vn.parse(e,t,r)}function Qu(e){return Vn.parseMtl(e)}function zn(e,t,r={}){let n;if(typeof e!="string")n=new TextDecoder().decode(e);else{let A=e.trim();if(!(A.startsWith("v ")||A.startsWith("#")||A.includes(`
2
- v `)||A.includes("\rv "))&&typeof Pe<"u"&&Pe.existsSync)try{let i=e.startsWith("file://")?e.slice(7):e;try{i=decodeURIComponent(i)}catch{}Pe.existsSync(i)?(n=Pe.readFileSync(i,"utf-8"),r={basePath:r.basePath??$e.dirname(i),...r}):n=e}catch{n=e}else n=e}return Vn.parse(n,t,r)}q();vt();var ha=$A(la(),1);q();function ur(e,t,r){let n=A=>[e[A*3],e[A*3+1],e[A*3+2]];for(let A=0;A<t.length;A+=3){let o=t[A],i=t[A+1],a=t[A+2],s=n(o),c=ae.cross(ae.subtract(n(i),s),ae.subtract(n(a),s));for(let l of[o,i,a])r[l*3]+=c[0],r[l*3+1]+=c[1],r[l*3+2]+=c[2]}for(let A=0;A<r.length;A+=3){let o=r[A],i=r[A+1],a=r[A+2],s=Math.hypot(o,i,a)||1;r[A]=o/s,r[A+1]=i/s,r[A+2]=a/s}}function Lt(...e){let t=1/0,r=1/0,n=1/0,A=-1/0,o=-1/0,i=-1/0;for(let a of e)for(let s=0;s<a.length;s+=3){let c=a[s],l=a[s+1],u=a[s+2];c<t&&(t=c),c>A&&(A=c),l<r&&(r=l),l>o&&(o=l),u<n&&(n=u),u>i&&(i=u)}return Number.isFinite(t)||(t=r=n=0,A=o=i=0),{min:[t,r,n],max:[A,o,i],center:[(t+A)*.5,(r+o)*.5,(n+i)*.5],size:[A-t,o-r,i-n]}}function xt(e,t){let r=Math.max(...e.size,1e-4),n=1;t.normalizeSize&&t.normalizeSize>0&&(n=t.normalizeSize/r);let A=[n,n,n];return typeof t.scale=="number"?(A[0]*=t.scale,A[1]*=t.scale,A[2]*=t.scale):Array.isArray(t.scale)&&(A[0]*=t.scale[0],A[1]*=t.scale[1],A[2]*=t.scale[2]),{offset:t.center?e.center:[0,0,0],scale:A}}function Ot(e,{offset:t,scale:r}){let n=new Float32Array(e.length);for(let A=0;A<e.length;A+=3)n[A]=(e[A]-t[0])*r[0],n[A+1]=(e[A+1]-t[1])*r[1],n[A+2]=(e[A+2]-t[2])*r[2];return n}function Ht(e,t){return t>65535?new Uint32Array(e):new Uint16Array(e)}function jt(e,{offset:t,scale:r}){let n=[(e.min[0]-t[0])*r[0],(e.min[1]-t[1])*r[1],(e.min[2]-t[2])*r[2]],A=[(e.max[0]-t[0])*r[0],(e.max[1]-t[1])*r[1],(e.max[2]-t[2])*r[2]];return{min:n,max:A,center:[(n[0]+A[0])*.5,(n[1]+A[1])*.5,(n[2]+A[2])*.5],size:[A[0]-n[0],A[1]-n[1],A[2]-n[2]],boundingSphereRadius:Math.hypot(A[0]-n[0],A[1]-n[1],A[2]-n[2])*.5}}q();var gr=128;function Us(e,t,r){let[n,A,o,i]=t,a=n*n,s=A*A,c=o*o,l=n*A,u=n*o,p=A*o,g=i*n,f=i*A,b=i*o;return[(1-2*(s+c))*r[0],2*(l+b)*r[0],2*(u-f)*r[0],0,2*(l-b)*r[1],(1-2*(a+c))*r[1],2*(p+g)*r[1],0,2*(u+f)*r[2],2*(p-g)*r[2],(1-2*(a+s))*r[2],0,e[0],e[1],e[2],1]}function ua(e){let t=Math.hypot(e[0],e[1],e[2],e[3])||1;return[e[0]/t,e[1]/t,e[2]/t,e[3]/t]}function ks(e,t,r){let n=e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],A=n<0?-1:1;if(n*=A,n>.9995)return ua([e[0]+(A*t[0]-e[0])*r,e[1]+(A*t[1]-e[1])*r,e[2]+(A*t[2]-e[2])*r,e[3]+(A*t[3]-e[3])*r]);let o=Math.acos(n),i=Math.sin(o),a=Math.sin((1-r)*o)/i,s=A*Math.sin(r*o)/i;return[e[0]*a+t[0]*s,e[1]*a+t[1]*s,e[2]*a+t[2]*s,e[3]*a+t[3]*s]}function Ns(e,t){let r=0,n=e.length-1;for(;r<n;){let A=r+n+1>>1;(e[A]??0)<=t?r=A:n=A-1}return r}function Ur(e,t,r,n,A=1){let o=n?(t*3+A)*r:t*r;return Array.from(e.subarray(o,o+r))}function bA(e,t,r,n,A=!1){let{times:o}=e,i=e.interpolation==="cubic",a=o.length-1;if(n<=(o[0]??0))return Ur(t,0,r,i);if(n>=(o[a]??0))return Ur(t,a,r,i);let s=Ns(o,n);if(e.interpolation==="step")return Ur(t,s,r,i);let c=o[s]??0,l=(o[s+1]??c)-c,u=l>0?(n-c)/l:0,p=Ur(t,s,r,i),g=Ur(t,s+1,r,i);if(i){let f=Ur(t,s,r,!0,2),b=Ur(t,s+1,r,!0,0),v=u*u,Q=v*u,x=p.map((_,y)=>(2*Q-3*v+1)*_+(Q-2*v+u)*l*(f[y]??0)+(-2*Q+3*v)*(g[y]??0)+(Q-v)*l*(b[y]??0));return A?ua(x):x}return A?ks(p,g,u):p.map((f,b)=>f+((g[b]??f)-f)*u)}function Pu(e,t,r){let n=e.morphTargets?.length??0;if(!n)return[];let A=t?.tracks.find(o=>o.node===e.node&&o.weights&&o.times.length>0);return A?.weights?bA(A,A.weights,n,r):e.morphWeights??Array(n).fill(0)}function Ts(e,t,r){let n=e.map(a=>[...a.translation]),A=e.map(a=>[...a.rotation]),o=e.map(a=>[...a.scale]),i=new Map(e.map((a,s)=>[a.name,s]));for(let a of t?.tracks??[]){let s=a.node??i.get(a.nodeName);s===void 0||!a.times.length||(a.translations&&(n[s]=bA(a,a.translations,3,r)),a.rotations&&(A[s]=bA(a,a.rotations,4,r,!0)),a.scales&&(o[s]=bA(a,a.scales,3,r)))}return e.map((a,s)=>a.matrix??Us(n[s],A[s],o[s]))}function EA(e,t,r){let n=e.nodes??[],A=Ts(n,t,r),o=new Array(n.length),i=a=>{let s=o[a];if(s)return s;let c=n[a].parent,l=c<0?A[a]:Ie.multiply(i(c),A[a]);return o[a]=l,l};return n.map((a,s)=>i(s))}function Ru(e,t,r){let n=e.skins?.[t];if(!n)throw new Error(`model has no skin ${t}`);let A=new Float32Array(gr*16);for(let o=0;o<gr;o++){let i=n.joints[o];if(i===void 0){A.set(Ie.identity(),o*16);continue}let a=Array.from(n.inverseBindMatrices.subarray(o*16,o*16+16));A.set(Ie.multiply(r[i],a),o*16)}return A}var kr=class e{static FBX_KTIME=46186158e3;static parse(t,r={}){let n=typeof t=="string"?e.parseAscii(t):e.isBinary(t)?e.parseBinary(t):e.parseAscii(new TextDecoder().decode(t));return e.buildModelFromTree(n,r)}static isBinary(t){let r=t instanceof Uint8Array?t:new Uint8Array(t);if(r.length<27)return!1;let n="Kaydara FBX Binary \0\0";for(let A=0;A<n.length;A++)if(r[A]!==n.charCodeAt(A))return!1;return!0}static parseBinary(t){let r=t instanceof Uint8Array?t:new Uint8Array(t),n=new DataView(r.buffer,r.byteOffset,r.byteLength),o=n.getUint32(23,!0)>=7500,i=27,a={name:"Root",props:[],children:[]},s=()=>{if(i>=r.byteLength)return null;let c,l,u;if(o){if(i+25>r.byteLength)return null;c=Number(n.getBigUint64(i,!0)),l=Number(n.getBigUint64(i+8,!0)),u=n.getUint8(i+24),i+=25}else{if(i+13>r.byteLength)return null;c=n.getUint32(i,!0),l=n.getUint32(i+4,!0),u=n.getUint8(i+12),i+=13}if(c===0)return null;let p=new TextDecoder().decode(r.subarray(i,i+u));i+=u;let g=[];for(let b=0;b<l;b++){let v=String.fromCharCode(r[i]);switch(i+=1,v){case"Y":{g.push(n.getInt16(i,!0)),i+=2;break}case"C":case"B":{g.push(n.getUint8(i)!==0),i+=1;break}case"I":{g.push(n.getInt32(i,!0)),i+=4;break}case"F":{g.push(n.getFloat32(i,!0)),i+=4;break}case"D":{g.push(n.getFloat64(i,!0)),i+=8;break}case"L":{g.push(Number(n.getBigInt64(i,!0))),i+=8;break}case"S":{let Q=n.getUint32(i,!0);i+=4;let x=new TextDecoder().decode(r.subarray(i,i+Q));g.push(x),i+=Q;break}case"R":{let Q=n.getUint32(i,!0);i+=4;let x=r.subarray(i,i+Q);g.push(x),i+=Q;break}case"f":case"d":case"i":case"l":case"b":case"c":{let Q=n.getUint32(i,!0),x=n.getUint32(i+4,!0),_=n.getUint32(i+8,!0);i+=12;let y;if(x===1){let T=r.subarray(i,i+_);y=(0,ha.inflateSync)(T),i+=_}else{let N=Q*(v==="d"||v==="l"?8:v==="f"||v==="i"?4:1);y=r.subarray(i,i+N),i+=N}let M=new DataView(y.buffer,y.byteOffset,y.byteLength);if(v==="f"){let T=new Float32Array(Q);for(let N=0;N<Q;N++)T[N]=M.getFloat32(N*4,!0);g.push(T)}else if(v==="d"){let T=new Float64Array(Q);for(let N=0;N<Q;N++)T[N]=M.getFloat64(N*8,!0);g.push(T)}else if(v==="i"){let T=new Int32Array(Q);for(let N=0;N<Q;N++)T[N]=M.getInt32(N*4,!0);g.push(T)}else if(v==="l"){let T=new Float64Array(Q);for(let N=0;N<Q;N++)T[N]=Number(M.getBigInt64(N*8,!0));g.push(T)}else if(v==="b"){let T=new Uint8Array(Q);for(let N=0;N<Q;N++)T[N]=M.getUint8(N);g.push(T)}else g.push(y);break}default:break}}let f=[];for(;i<c;){let b=s();if(b)f.push(b);else break}return i=c,{name:p,props:g,children:f}};for(;i<r.byteLength-(o?25:13);){let c=s();if(c)a.children.push(c);else break}return a}static parseAscii(t){let r={name:"Root",props:[],children:[]},n=[r],A=t.split(/\r?\n/);for(let o=0;o<A.length;o++){let i=A[o]?.trim();if(!i||i.startsWith(";"))continue;if(i==="}"){n.length>1&&n.pop();continue}let a=i.indexOf(":");if(a===-1)continue;let s=i.substring(0,a).trim(),c=i.substring(a+1).trim(),l=c.endsWith("{"),u=l?c.slice(0,-1).trim():c,p=[];if(u){let b=u.split(",").map(v=>v.trim());for(let v of b)v.startsWith('"')&&v.endsWith('"')?p.push(v.slice(1,-1)):Number.isNaN(Number(v))?p.push(v):p.push(Number(v))}let g={name:s,props:p,children:[]},f=n[n.length-1];f&&f.children.push(g),l&&n.push(g)}return r}static textureSlot(t){let r=t.toLowerCase();if(r==="diffusecolor"||r==="diffuse"||r.endsWith("|basecolor")||r.endsWith("|base_color")||r==="basecolor")return"diffuse";if(r==="normalmap"||r.endsWith("|normalcamera")||r.endsWith("|bump_map"))return"normal"}static attachTextures(t,r,n,A,o){let i=(a,s)=>{let c=a?.children.find(l=>l.name===s)?.props[0];return typeof c=="string"&&c?c:void 0};for(let a of A){if(a.parentId!==r||!a.propName)continue;let s=e.textureSlot(a.propName),c=n.get(a.childId);if(!s||c?.node.name!=="Texture"||(s==="diffuse"?t.diffuseTextureBuffer:t.normalTextureBuffer))continue;let l=A.filter(f=>f.parentId===a.childId&&!f.propName).map(f=>n.get(f.childId)?.node).find(f=>f?.name==="Video"),u=i(c.node,"RelativeFilename")??i(c.node,"FileName")??i(l,"RelativeFilename")??i(l,"Filename");if(u&&!mA(u)){Jr("FbxLoader",t.name,u);continue}let p,g=l?.children.find(f=>f.name==="Content")?.props[0];if(g instanceof Uint8Array&&g.length>0?p=g:u&&(p=Kn(u,o)?.bytes),!p){u&&Jr("FbxLoader",t.name,u);continue}s==="diffuse"?(t.diffuseTextureBuffer=p,t.diffuseTextureMime=Jn(u??""),u&&(t.diffuseTexture=u),t.textureWrap="repeat"):(t.normalTextureBuffer=p,u&&(t.normalTexture=u))}}static buildModelFromTree(t,r={}){let n=t.children.find(D=>D.name==="Objects"),A=t.children.find(D=>D.name==="Connections"),o=new Map;if(n)for(let D of n.children){let H=D.props[0]??0,P=String(D.props[1]??"").split("::"),z=P.length>1?P[1]:P[0],ee=String(D.props[2]??D.name);o.set(H,{id:H,name:z,type:ee,node:D})}let i=[];if(A){for(let D of A.children)if(D.name==="C"||D.name==="Connect"){let H=String(D.props[0]),V=D.props[1]??0,P=D.props[2]??0,z=H==="OP"?String(D.props[3]):void 0;i.push({childId:V,parentId:P,propName:z})}}let a=D=>{for(let H of i){let V=H.parentId===D?o.get(H.childId):void 0;if(V?.node.name==="Material"&&!H.propName)return V.name}for(let H of i)if(!(H.childId!==D||H.propName))for(let V of i){if(V.parentId!==H.parentId||V.propName)continue;let P=o.get(V.childId);if(P?.node.name==="Material")return P.name}},s=[],c={};function l(D){if(!D)return[];if(D.props[0]instanceof Float32Array||D.props[0]instanceof Float64Array||D.props[0]instanceof Int32Array||Array.isArray(D.props[0]))return D.props[0];let H=D.children.find(V=>V.name==="a");return H&&H.props.length>0?H.props:Array.isArray(D.props)&&D.props.length>0&&typeof D.props[0]=="number"?D.props:[]}let u=[...o.values()].filter(D=>D.node.name==="Model").map(D=>D.id),p=new Map(u.map((D,H)=>[D,H])),g=u.map(D=>{let H=o.get(D),V=i.find(P=>P.childId===D&&!P.propName&&p.has(P.parentId));return{name:H.name,parent:V?p.get(V.parentId):-1,translation:Yn(H.node,"Lcl Translation",0),rotation:pa(H.node,CA(Yn(H.node,"Lcl Rotation",0),Ia(H.node))),scale:Yn(H.node,"Lcl Scaling",1)}}),f=D=>i.find(H=>H.childId===D&&!H.propName&&p.has(H.parentId))?.parentId,b=[];for(let[D,H]of o)if(H.node.name==="Geometry"&&(H.type==="Mesh"||H.node.props[2]==="Mesh"||H.type==="")){let V=H.node,P=V.children.find(ie=>ie.name==="Vertices"),z=V.children.find(ie=>ie.name==="PolygonVertexIndex");if(!P||!z)continue;let ee=l(P),Y=l(z),$=(ie,ce,he,Qe)=>{let _e=V.children.find(Ge=>Ge.name===ie);if(_e)return Ls(_e,l(_e.children.find(Ge=>Ge.name===ce)),l(_e.children.find(Ge=>Ge.name===he)),Qe)},W=$("LayerElementNormal","Normals","NormalsIndex",3),te=$("LayerElementUV","UV","UVIndex",2),me=[],ue=[],oe=0;for(let ie=0;ie<Y.length;ie++){let ce=Y[ie];if(ue.push({cp:ce<0?-(ce+1):ce,pv:ie}),!(ce>=0)){for(let he=1;he<ue.length-1;he++)for(let Qe of[ue[0],ue[he],ue[he+1]])me.push({...Qe,poly:oe});ue=[],oe++}}let pe=me.length,Me=new Float32Array(pe*3),F=new Float32Array(pe*3),ve=new Float32Array(pe*2),Se=new Array(pe);me.forEach(({cp:ie,pv:ce,poly:he},Qe)=>{Me[Qe*3]=ee[ie*3]??0,Me[Qe*3+1]=ee[ie*3+1]??0,Me[Qe*3+2]=ee[ie*3+2]??0;let _e=W?.(ie,ce,he);F.set(_e??[0,0,1],Qe*3);let Ge=te?.(ie,ce,he);ve[Qe*2]=Ge?.[0]??0,ve[Qe*2+1]=1-(Ge?.[1]??0),Se[Qe]=Qe}),(!W||r.smoothNormals)&&(F.fill(0),ur(Me,Se,F));let Ne=i.find(ie=>ie.parentId===D&&o.get(ie.childId)?.node.name==="Deformer"&&o.get(ie.childId)?.node.props[2]==="Skin"),Ee,m,Ce;if(Ne){let ie=[],ce=[],he=new Map;for(let Qe of i){let _e=o.get(Qe.childId);if(Qe.parentId!==Ne.childId||_e?.node.name!=="Deformer"||_e.node.props[2]!=="Cluster")continue;let Ge=i.find(Le=>Le.parentId===_e.id&&p.has(Le.childId))?.childId;if(Ge===void 0)continue;let Fe=ie.length;ie.push(p.get(Ge));let De=fa(_e.node,"Transform"),He=fa(_e.node,"TransformLink");ce.push(...Ie.multiply(Ie.invert(He)??Ie.identity(),De));let Te=l(_e.node.children.find(Le=>Le.name==="Indexes")),je=l(_e.node.children.find(Le=>Le.name==="Weights"));for(let Le=0;Le<Te.length;Le++){let Ke=Number(je[Le]??0);if(!(Ke>0))continue;let rt=Number(Te[Le]),We=he.get(rt)??[];We.push([Fe,Ke]),he.set(rt,We)}}if(ie.length>gr)throw new Error(`FBX skin has ${ie.length} bones; the mesh shader holds ${gr}`);ie.length>0&&(Ce=b.length,b.push({joints:ie,inverseBindMatrices:new Float32Array(ce)}),Ee=new Float32Array(pe*4),m=new Float32Array(pe*4),me.forEach(({cp:Qe},_e)=>{let Ge=(he.get(Qe)??[]).sort((De,He)=>He[1]-De[1]).slice(0,4),Fe=Ge.reduce((De,[,He])=>De+He,0);Ge.forEach(([De,He],Te)=>{Ee[_e*4+Te]=De,m[_e*4+Te]=Fe>0?He/Fe:0})}))}let be=f(D),ye=pe>65535;s.push({id:`fbx_mesh_${D}`,name:H.name,positions:Me,normals:F,uvs:ve,indices:ye?new Uint32Array(Se):new Uint16Array(Se),jointIndices:Ee,jointWeights:m,materialName:a(D)??H.name,node:be!==void 0?p.get(be):void 0,skin:Ce})}for(let[,D]of o)if(D.node.name==="Material"){let V=D.node.children.find($=>$.name==="Properties70"),P=[1,1,1,1],z=32,ee=1;if(V){for(let $ of V.children)if($.name==="P"){let W=String($.props[0]);if(W==="DiffuseColor"||W==="Color"){let te=Number($.props[4]??1),me=Number($.props[5]??1),ue=Number($.props[6]??1);P=[te,me,ue,1]}else W==="Shininess"||W==="ShininessExponent"?z=Number($.props[4]??32):W==="Opacity"&&(ee=Number($.props[4]??1),P[3]=ee)}}let Y={name:D.name,diffuseColor:P,shininess:z,opacity:ee};e.attachTextures(Y,D.id,o,i,r.basePath),c[D.name]=Y}let v=[];for(let[D,H]of o)if(H.node.name==="AnimationStack"){let V=H.name||"Take 001",P=[],z=i.find(Y=>Y.parentId===D&&o.get(Y.childId)?.node.name==="AnimationLayer");if(z){let Y=i.filter(W=>W.parentId===z.childId&&o.get(W.childId)?.node.name==="AnimationCurveNode"),$=new Map;for(let W of Y){let te=o.get(W.childId);if(!te)continue;let me=i.find(ve=>ve.childId===te.id&&o.get(ve.parentId)?.node.name==="Model"),ue=me?o.get(me.parentId):void 0,oe=da(me?.propName)??da(te.name);if(!oe)continue;let pe=`${ue?.id??te.id}|${oe}`,Me=$.get(pe);if(!Me){let ve=ue?.node;Me={nodeName:ue?.name??te.name,modelId:ue?.id,model:ve,kind:oe,defaults:Hs(ve,te.node,oe),channels:[void 0,void 0,void 0]},$.set(pe,Me)}i.filter(ve=>ve.parentId===te.id&&o.get(ve.childId)?.node.name==="AnimationCurve").forEach((ve,Se)=>{let Ne=Os(ve.propName)??Se;if(Ne>2)return;let Ee=o.get(ve.childId)?.node,m=l(Ee?.children.find(ye=>ye.name==="KeyTime")),Ce=l(Ee?.children.find(ye=>ye.name==="KeyValueFloat")),be=Math.min(m.length,Ce.length);be!==0&&(Me.channels[Ne]={times:Array.from(m.slice(0,be),ye=>Number(ye)),values:Array.from(Ce.slice(0,be),ye=>Number(ye))})})}for(let W of $.values()){let te=Ks(W);if(te){if(W.modelId!==void 0&&(te.node=p.get(W.modelId)),te.rotations&&W.model)for(let me=0;me<te.rotations.length;me+=4){let ue=Array.from(te.rotations.subarray(me,me+4));te.rotations.set(pa(W.model,ue),me)}P.push(te)}}}let ee=1;for(let Y of P)if(Y.times.length>0){let $=Y.times[Y.times.length-1]??0;$>ee&&(ee=$)}v.push({name:V,duration:ee,fps:30,tracks:P})}let Q={meshes:s,materials:c,animations:v,nodes:g,skins:b,bounds:{min:[0,0,0],max:[0,0,0],center:[0,0,0],size:[0,0,0],boundingSphereRadius:0}},x=EA(Q,void 0,0),_=[1/0,1/0,1/0],y=[-1/0,-1/0,-1/0];for(let D of s){let H=D.node!==void 0?x[D.node]:void 0;for(let V=0;V<D.positions.length;V+=3){let P=[D.positions[V],D.positions[V+1],D.positions[V+2]],z=H?Ie.projectPoint(H,P):P;for(let ee=0;ee<3;ee++)z[ee]<_[ee]&&(_[ee]=z[ee]),z[ee]>y[ee]&&(y[ee]=z[ee])}}Number.isFinite(_[0])||(_.fill(-1),y.fill(1));let{offset:M,scale:T}=xt({min:_,max:y,center:[(_[0]+y[0])*.5,(_[1]+y[1])*.5,(_[2]+y[2])*.5],size:[y[0]-_[0],y[1]-_[1],y[2]-_[2]]},r);Q.rootTransform=Ie.multiply(Ie.scale(T[0],T[1],T[2]),Ie.translate(-M[0],-M[1],-M[2]));let N=[0,1,2].map(D=>(_[D]-M[D])*T[D]),O=[0,1,2].map(D=>(y[D]-M[D])*T[D]);return Q.bounds={min:N,max:O,center:[(N[0]+O[0])*.5,(N[1]+O[1])*.5,(N[2]+O[2])*.5],size:[O[0]-N[0],O[1]-N[1],O[2]-N[2]],boundingSphereRadius:Math.hypot(O[0]-N[0],O[1]-N[1],O[2]-N[2])*.5},Q}};function Yn(e,t,r){let n=Kr(e,t);return[0,1,2].map(A=>{let o=n?.[A];return o!==void 0&&Number.isFinite(o)?o:r})}function ga(e,t){return[e[3]*t[0]+e[0]*t[3]+e[1]*t[2]-e[2]*t[1],e[3]*t[1]-e[0]*t[2]+e[1]*t[3]+e[2]*t[0],e[3]*t[2]+e[0]*t[1]-e[1]*t[0]+e[2]*t[3],e[3]*t[3]-e[0]*t[0]-e[1]*t[1]-e[2]*t[2]]}function pa(e,t){let r=Kr(e,"PreRotation"),n=Kr(e,"PostRotation"),A=t;if(r&&(A=ga(CA(Yn(e,"PreRotation",0)),A)),n){let o=CA(Yn(e,"PostRotation",0));A=ga(A,[-o[0],-o[1],-o[2],o[3]])}return A}function fa(e,t){let r=e.children.find(o=>o.name===t),n=r?.children.find(o=>o.name==="a")?.props??r?.props,A=n?.[0]instanceof Float64Array||n?.[0]instanceof Float32Array?Array.from(n[0]):(n??[]).map(Number);return A.length===16?A:Ie.identity()}function Ls(e,t,r,n){if(t.length===0)return;let A=a=>String(e.children.find(s=>s.name===a)?.props[0]??""),o=A("MappingInformationType"),i=/^Index/.test(A("ReferenceInformationType"))&&r.length>0;return(a,s,c)=>{let l=o==="ByPolygonVertex"?s:o==="ByPolygon"?c:o==="AllSame"?0:a;return i&&(l=Number(r[l]??l)),Array.from({length:n},(u,p)=>Number(t[l*n+p]??0))}}function da(e){switch(e){case"Lcl Translation":case"T":return"T";case"Lcl Rotation":case"R":return"R";case"Lcl Scaling":case"S":return"S";default:return}}function Os(e){switch(e){case"d|X":return 0;case"d|Y":return 1;case"d|Z":return 2;default:return}}function Kr(e,t){let n=e?.children.find(A=>A.name==="Properties70")?.children.find(A=>A.name==="P"&&A.props[0]===t);if(n)return n.props.slice(4).map(A=>Number(A))}function Hs(e,t,r){let n=r==="S"?1:0,A=Kr(e,r==="T"?"Lcl Translation":r==="R"?"Lcl Rotation":"Lcl Scaling"),o=[n,n,n];for(let i=0;i<3;i++){let a=A?.[i],s=Kr(t,`d|${"XYZ"[i]}`)?.[0],c=a??s;c!==void 0&&Number.isFinite(c)&&(o[i]=c)}return o}var js=["XYZ","XZY","YZX","YXZ","ZXY","ZYX"];function Ia(e){let t=Kr(e,"RotationOrder")?.[0]??0;return js[t]??"XYZ"}function CA(e,t="XYZ"){let r=[0,0,0,1];for(let n of t){let A="XYZ".indexOf(n),o=(e[A]??0)*Math.PI/360,i=Math.sin(o),a=[0,0,0,Math.cos(o)];a[A]=i,r=[a[3]*r[0]+a[0]*r[3]+a[1]*r[2]-a[2]*r[1],a[3]*r[1]-a[0]*r[2]+a[1]*r[3]+a[2]*r[0],a[3]*r[2]+a[0]*r[1]-a[1]*r[0]+a[2]*r[3],a[3]*r[3]-a[0]*r[0]-a[1]*r[1]-a[2]*r[2]]}return r}function Js(e,t){let{times:r,values:n}=e,A=r.length-1;if(t<=r[0])return n[0];if(t>=r[A])return n[A];let o=0;for(;o<A-1&&r[o+1]<=t;)o++;let i=r[o],a=r[o+1],s=a>i?(t-i)/(a-i):0;return n[o]+(n[o+1]-n[o])*s}function Ks(e){let t=new Set;for(let s of e.channels)for(let c of s?.times??[])t.add(c);if(t.size===0)return;let r=[...t].sort((s,c)=>s-c),n=new Float32Array(r.length),A=e.kind==="R",o=new Float32Array(r.length*(A?4:3)),i=A?Ia(e.model):"XYZ",a;return r.forEach((s,c)=>{n[c]=s/kr.FBX_KTIME;let l=[0,1,2].map(p=>{let g=e.channels[p];return g?Js(g,s):e.defaults[p]});if(!A){o.set(l,c*3);return}let u=CA(l,i);if(a&&a[0]*u[0]+a[1]*u[1]+a[2]*u[2]+a[3]*u[3]<0)for(let p=0;p<4;p++)u[p]=-u[p];a=u,o.set(u,c*4)}),{nodeName:e.nodeName,times:n,translations:e.kind==="T"?o:void 0,rotations:A?o:void 0,scales:e.kind==="S"?o:void 0}}function ju(e,t={}){return kr.parse(e,t)}function Wn(e,t={}){let r=e;if(typeof e=="string"){let n=e.trim();if(!(n.includes("FBXHeaderExtension")||n.includes("Kaydara FBX"))&&typeof Pe<"u"&&Pe.existsSync)try{let o=e.startsWith("file://")?e.slice(7):e;try{o=decodeURIComponent(o)}catch{}if(Pe.existsSync(o)){let i=Pe.readFileSync(o);r=new Uint8Array(i.buffer,i.byteOffset,i.byteLength),t={basePath:$e.dirname(o),...t}}}catch{}}return kr.parse(r,t)}q();q();var ma=`
3
- struct AudioLatentBuffer {
4
- fftBins : array<f32, 1024>,
5
- bassEnergy : f32,
6
- drumTransient : f32,
7
- vocalEnergy : f32,
8
- timeMs : f32,
9
- };
10
-
11
- struct DeformParams {
12
- mode : u32, // 0 = normal_extrusion, 1 = radial_pulse, 2 = harmonic_wave, 3 = twist, 4 = ripple
13
- freqMinBin : u32,
14
- freqMaxBin : u32,
15
- vertexCount : u32,
16
- amplitudeMultiplier : f32,
17
- damping : f32,
18
- timeMs : f32,
19
- pad : f32,
20
- };
21
-
22
- struct VertexData {
23
- // 16 floats = 64 bytes per vertex
24
- f : array<f32, 16>,
25
- };
26
-
27
- @group(0) @binding(0) var<storage, read> audio : AudioLatentBuffer;
28
- @group(0) @binding(1) var<uniform> params : DeformParams;
29
- @group(0) @binding(2) var<storage, read> srcVertices : array<VertexData>;
30
- @group(0) @binding(3) var<storage, read_write> dstVertices : array<VertexData>;
31
-
32
- @compute @workgroup_size(256)
33
- fn cs_displace(@builtin(global_invocation_id) gid : vec3<u32>) {
34
- let idx = gid.x;
35
- if (idx >= params.vertexCount) {
36
- return;
37
- }
38
-
39
- let src = srcVertices[idx];
40
- var outV = src;
41
-
42
- // Extract attributes
43
- let pos = vec3<f32>(src.f[0], src.f[1], src.f[2]);
44
- let uv = vec2<f32>(src.f[3], src.f[4]);
45
- var norm = vec3<f32>(src.f[5], src.f[6], src.f[7]);
46
-
47
- let normLen = length(norm);
48
- if (normLen > 0.0001) {
49
- norm = norm / normLen;
50
- } else {
51
- norm = vec3<f32>(0.0, 1.0, 0.0);
52
- }
53
-
54
- // Determine frequency bin
55
- let minBin = max(0u, params.freqMinBin);
56
- let maxBin = min(1023u, max(minBin, params.freqMaxBin));
57
- let freqNorm = clamp(uv.x, 0.0, 1.0);
58
- let binIdx = u32(clamp(f32(minBin) + freqNorm * f32(maxBin - minBin), 0.0, 1023.0));
59
- let freqAmplitude = audio.fftBins[binIdx];
60
-
61
- var displacedPos = pos;
62
- var displacedNorm = norm;
63
-
64
- if (params.mode == 0u) {
65
- // Mode 0: normal_extrusion
66
- let bassOsc = sin(params.timeMs * 0.01 + pos.y * 0.5);
67
- let displacementMag = (freqAmplitude * 45.0 + audio.bassEnergy * 20.0 * bassOsc) * params.amplitudeMultiplier;
68
- displacedPos = pos + norm * displacementMag;
69
-
70
- // Dynamic normal perturbation based on spatial gradient
71
- let tangentDelta = cos(params.timeMs * 0.01 + pos.y * 0.5) * 0.5 * audio.bassEnergy * params.amplitudeMultiplier;
72
- var perturbed = norm + vec3<f32>(0.0, -tangentDelta * 0.05, 0.0);
73
- let pLen = length(perturbed);
74
- if (pLen > 0.0001) {
75
- displacedNorm = perturbed / pLen;
76
- }
77
- } else if (params.mode == 1u) {
78
- // Mode 1: radial_pulse
79
- let rLen = length(pos);
80
- var dir = norm;
81
- if (rLen > 0.0001) {
82
- dir = pos / rLen;
83
- }
84
- let pulse = (audio.bassEnergy * 35.0 + audio.drumTransient * 45.0) * params.amplitudeMultiplier;
85
- let dampingFactor = exp(-max(0.0, params.damping) * rLen * 0.01);
86
- displacedPos = pos + dir * (pulse * dampingFactor);
87
- displacedNorm = norm;
88
- } else if (params.mode == 3u) {
89
- // Mode 3: twist. Each slice turns about Y by its height times the
90
- // twist rate; a resting twist plus the bass, so it winds on the drop.
91
- let rate = (0.35 + audio.bassEnergy) * 0.004 * params.amplitudeMultiplier;
92
- let a = pos.y * rate;
93
- let c = cos(a);
94
- let s = sin(a);
95
- displacedPos = vec3<f32>(c * pos.x - s * pos.z, pos.y, s * pos.x + c * pos.z);
96
- displacedNorm = vec3<f32>(c * norm.x - s * norm.z, norm.y, s * norm.x + c * norm.z);
97
- } else if (params.mode == 4u) {
98
- // Mode 4: ripple. Concentric waves travel out across XY from the
99
- // origin, struck harder by the drums and fading with distance.
100
- let r = length(pos.xy);
101
- let phase = r * 0.05 - params.timeMs * 0.015;
102
- let height = (6.0 + audio.drumTransient * 28.0 + audio.bassEnergy * 10.0) * params.amplitudeMultiplier;
103
- let fade = exp(-max(0.0, params.damping) * r * 0.002);
104
- displacedPos = pos + norm * (sin(phase) * height * fade);
105
- // The wave's slope tilts the normal toward the travel direction.
106
- var radial = vec3<f32>(0.0, 0.0, 0.0);
107
- if (r > 0.0001) {
108
- radial = vec3<f32>(pos.x / r, pos.y / r, 0.0);
109
- }
110
- let slope = cos(phase) * 0.05 * height * fade;
111
- var perturbed = norm - radial * slope;
112
- let pLen = length(perturbed);
113
- if (pLen > 0.0001) {
114
- displacedNorm = perturbed / pLen;
115
- }
116
- } else {
117
- // Mode 2: harmonic_wave
118
- let wavePhase = params.timeMs * 0.005 + pos.y * 0.2;
119
- let wave = (sin(wavePhase) * audio.bassEnergy * 25.0 + cos(wavePhase * 2.0 + pos.x * 0.1) * freqAmplitude * 20.0) * params.amplitudeMultiplier;
120
- displacedPos = pos + norm * wave;
121
-
122
- let dWaveDy = cos(wavePhase) * 0.2 * audio.bassEnergy * 25.0 * params.amplitudeMultiplier;
123
- var perturbed = norm - vec3<f32>(0.0, dWaveDy * 0.03, 0.0);
124
- let pLen = length(perturbed);
125
- if (pLen > 0.0001) {
126
- displacedNorm = perturbed / pLen;
127
- }
128
- }
129
-
130
- // Write deformed position and normal
131
- outV.f[0] = displacedPos.x;
132
- outV.f[1] = displacedPos.y;
133
- outV.f[2] = displacedPos.z;
134
-
135
- outV.f[5] = displacedNorm.x;
136
- outV.f[6] = displacedNorm.y;
137
- outV.f[7] = displacedNorm.z;
138
-
139
- dstVertices[idx] = outV;
140
- }
141
- `;var Vs={normal_extrusion:0,radial_pulse:1,harmonic_wave:2,twist:3,ripple:4},yA=class{device;pipeline;bindGroupLayout;uniformPool;deformedBuffers=new WeakMap;uniformData=new ArrayBuffer(32);uniformUint32=new Uint32Array(this.uniformData);uniformFloat32=new Float32Array(this.uniformData);constructor(t){this.device=t,this.uniformPool=new Xe(32,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.bindGroupLayout=t.createBindGroupLayout({label:"AudioMeshDeformBindGroupLayout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});let r=t.createShaderModule({label:"audioMeshDisplace.wgsl",code:ma}),n=t.createPipelineLayout({label:"AudioMeshDeformPipelineLayout",bindGroupLayouts:[this.bindGroupLayout]});this.pipeline=t.createComputePipeline({label:"AudioMeshDeformComputePipeline",layout:n,compute:{module:r,entryPoint:"cs_displace"}})}getOrCreateDeformedBuffer(t,r){let n=this.deformedBuffers.get(t);return(!n||n.size<r)&&(n?.destroy(),n=this.device.createBuffer({label:"DeformedMeshVertexBuffer",size:Math.max(64,Math.ceil(r/4)*4),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC}),this.deformedBuffers.set(t,n)),n}execute(t,r,n){let{config:A,audioLatentBuffer:o,vertexCount:i,timeMs:a=0,sampleRate:s=48e3}=n,c=i*64,l=this.getOrCreateDeformedBuffer(r,c),u=Vs[A.mode]??0,p=s/2048,g=A.frequencyRange?A.frequencyRange[0]:20,f=A.frequencyRange?A.frequencyRange[1]:120,b=Math.max(0,Math.min(1023,Math.round(g/p))),v=Math.max(b,Math.min(1023,Math.round(f/p))),Q=typeof A.amplitudeMultiplier=="number"?A.amplitudeMultiplier:typeof A.amplitudeMultiplier?.value=="number"?A.amplitudeMultiplier.value:1,x=A.damping??0;this.uniformUint32[0]=u,this.uniformUint32[1]=b,this.uniformUint32[2]=v,this.uniformUint32[3]=i,this.uniformFloat32[4]=Q,this.uniformFloat32[5]=x,this.uniformFloat32[6]=a,this.uniformFloat32[7]=0;let _=this.uniformPool.getBuffer(this.device,new Uint8Array(this.uniformData)),y=this.device.createBindGroup({layout:this.bindGroupLayout,entries:[{binding:0,resource:{buffer:o}},{binding:1,resource:{buffer:_}},{binding:2,resource:{buffer:r}},{binding:3,resource:{buffer:l}}]}),M=t.beginComputePass({label:"AudioMeshDeformComputePass"});M.setPipeline(this.pipeline),M.setBindGroup(0,y);let T=Math.ceil(i/256);return M.dispatchWorkgroups(T),M.end(),l}resetPools(){this.uniformPool.reset()}destroy(){this.uniformPool.destroy()}};q();q();vt();var qn=class e{static isBinary(t){let r=t instanceof Uint8Array?t:new Uint8Array(t);if(r.length<84)return!1;let A=new DataView(r.buffer,r.byteOffset,r.byteLength).getUint32(80,!0),o=84+A*50;if(r.length===o)return!0;let i=Math.min(r.length,512);for(let s=0;s<i;s++){let c=r[s];if(c>127||c<32&&c!==9&&c!==10&&c!==13)return!0}let a=new TextDecoder("utf-8").decode(r.subarray(0,80)).trim();return a.startsWith("solid")&&!a.includes(`
142
- `)?r.length>=84+A*50:!a.startsWith("solid")}static parse(t,r={}){if(typeof t=="string")return e.parseAscii(t,r);let n=t instanceof Uint8Array?t:new Uint8Array(t);if(e.isBinary(n))return e.parseBinary(n,r);let A=new TextDecoder("utf-8").decode(n);return e.parseAscii(A,r)}static parseBinary(t,r={}){let n=new DataView(t.buffer,t.byteOffset,t.byteLength),A=n.getUint32(80,!0),o=[],i=[],a=[],s=84;for(let c=0;c<A&&!(s+50>t.byteLength);c++){let l=n.getFloat32(s,!0),u=n.getFloat32(s+4,!0),p=n.getFloat32(s+8,!0);s+=12;let g=n.getFloat32(s,!0),f=n.getFloat32(s+4,!0),b=n.getFloat32(s+8,!0);s+=12;let v=n.getFloat32(s,!0),Q=n.getFloat32(s+4,!0),x=n.getFloat32(s+8,!0);s+=12;let _=n.getFloat32(s,!0),y=n.getFloat32(s+4,!0),M=n.getFloat32(s+8,!0);s+=12,s+=2;let T=l,N=u,O=p;if(T===0&&N===0&&O===0){let H=ae.subtract([v,Q,x],[g,f,b]),V=ae.subtract([_,y,M],[g,f,b]),P=ae.normalize(ae.cross(H,V));T=P[0],N=P[1],O=P[2]}let D=o.length/3;o.push(g,f,b,v,Q,x,_,y,M),i.push(T,N,O,T,N,O,T,N,O),a.push(D,D+1,D+2)}return e.finalizeModel(o,i,a,r)}static parseAscii(t,r={}){let n=[],A=[],o=[],i=t.split(/\r?\n/),a=[0,0,1],s=[];for(let c of i){let l=c.trim();if(l){if(l.startsWith("facet normal")){let u=l.split(/\s+/),p=Number.parseFloat(u[2]??"0")||0,g=Number.parseFloat(u[3]??"0")||0,f=Number.parseFloat(u[4]??"0")||0;a=[p,g,f],s=[]}else if(l.startsWith("vertex")){let u=l.split(/\s+/),p=Number.parseFloat(u[1]??"0")||0,g=Number.parseFloat(u[2]??"0")||0,f=Number.parseFloat(u[3]??"0")||0;s.push([p,g,f])}else if(l.startsWith("endfacet")){if(s.length>=3){let u=s[0],p=s[1],g=s[2],f=a;if(f[0]===0&&f[1]===0&&f[2]===0){let b=ae.subtract(p,u),v=ae.subtract(g,u);f=ae.normalize(ae.cross(b,v))}for(let b=1;b<s.length-1;b++){let v=s[b],Q=s[b+1],x=n.length/3;n.push(u[0],u[1],u[2],v[0],v[1],v[2],Q[0],Q[1],Q[2]),A.push(f[0],f[1],f[2],f[0],f[1],f[2],f[0],f[1],f[2]),o.push(x,x+1,x+2)}}s=[]}}}return e.finalizeModel(n,A,o,r)}static finalizeModel(t,r,n,A={}){let o=Lt(t),i=xt(o,A),a=Ot(t,i),[s,c]=o.min,[l,u]=o.size,p=new Float32Array(t.length/3*2);for(let v=0;v<t.length;v+=3){let Q=v/3*2;p[Q]=l>0?(t[v]-s)/l:0,p[Q+1]=u>0?(t[v+1]-c)/u:0}let g=Ht(n,a.length/3),f={name:"stl_default",diffuseColor:[.8,.8,.85,1],shininess:32,specularIntensity:.5,...A.defaultMaterial};return{name:"STL_Model",meshes:[{id:"stl_mesh_0",name:"stl_geometry",positions:a,normals:new Float32Array(r),uvs:p,indices:g,materialName:"stl_default"}],materials:{stl_default:f},animations:[],bounds:jt(o,i)}}static load(t,r={}){if(typeof t!="string")return e.parse(t,r);if(t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.startsWith("file://")){let n=t.startsWith("file://")?t.replace("file://",""):t,A=Pe.readFileSync(n);return e.parse(A,r)}return e.parse(t,r)}};function Xn(e,t={}){return qn.load(e,t)}q();vt();var Ao=class e{static parse(t,r={}){let n=typeof t=="string"?new TextEncoder().encode(t):t instanceof Uint8Array?t:new Uint8Array(t),A=e.extractHeader(n),o=e.parseHeader(A.text);if(o.format==="ascii"){let a=new TextDecoder("utf-8").decode(n.subarray(A.endOffset));return e.parseAsciiBody(o,a,r)}let i=o.format==="binary_little_endian";return e.parseBinaryBody(o,n.subarray(A.endOffset),i,r)}static extractHeader(t){let r=Math.min(t.length,1e4),n=t.subarray(0,r),A=new TextDecoder("utf-8").decode(n),o=A.indexOf("end_header");if(o===-1)throw new Error("Invalid PLY file: 'end_header' marker not found");let i=A.indexOf(`
143
- `,o);return i===-1?i=o+10:i+=1,{text:A.substring(0,i),endOffset:i}}static parseHeader(t){let r=t.split(/\r?\n/),n="ascii",A="1.0",o=[],i=null;for(let a of r){let s=a.trim();if(!s||s.startsWith("comment"))continue;let c=s.split(/\s+/),l=c[0]?.toLowerCase();if(l!=="ply"){if(l==="format"){let u=c[1]?.toLowerCase();u==="binary_little_endian"?n="binary_little_endian":u==="binary_big_endian"?n="binary_big_endian":n="ascii",A=c[2]??"1.0"}else if(l==="element"){let u=c[1]??"",p=Number.parseInt(c[2]??"0",10);i={name:u,count:p,properties:[]},o.push(i)}else if(l==="property"&&i)c[1]?.toLowerCase()==="list"?i.properties.push({name:c[4]??"",type:"list",isList:!0,countType:c[2]??"uchar",itemType:c[3]??"int"}):i.properties.push({name:c[2]??"",type:c[1]?.toLowerCase()??"float"});else if(l==="end_header")break}}return{format:n,version:A,elements:o}}static parseAsciiBody(t,r,n){let A=t.elements.find(Y=>Y.name==="vertex"),o=t.elements.find(Y=>Y.name==="face"),i=A?.count??0,a=o?.count??0,s=[],c=[],l=[],u=[],p=[],g=A?.properties??[],f=g.findIndex(Y=>Y.name==="x"),b=g.findIndex(Y=>Y.name==="y"),v=g.findIndex(Y=>Y.name==="z"),Q=g.findIndex(Y=>Y.name==="nx"),x=g.findIndex(Y=>Y.name==="ny"),_=g.findIndex(Y=>Y.name==="nz"),y=g.findIndex(Y=>Y.name==="u"||Y.name==="s"||Y.name==="texture_u"),M=g.findIndex(Y=>Y.name==="v"||Y.name==="t"||Y.name==="texture_v"),T=g.findIndex(Y=>Y.name==="red"||Y.name==="r"),N=g.findIndex(Y=>Y.name==="green"||Y.name==="g"),O=g.findIndex(Y=>Y.name==="blue"||Y.name==="b"),D=g.findIndex(Y=>Y.name==="alpha"||Y.name==="a"),H=Q!==-1&&x!==-1&&_!==-1,V=T!==-1&&N!==-1&&O!==-1,P=y!==-1&&M!==-1,z=r.trim().split(/\r?\n/),ee=0;for(let Y=0;Y<i&&!(ee>=z.length);Y++){let $=z[ee++]?.trim();if(!$)continue;let W=$.split(/\s+/),te=Number.parseFloat(W[f]??"0")||0,me=Number.parseFloat(W[b]??"0")||0,ue=Number.parseFloat(W[v]??"0")||0;if(s.push(te,me,ue),H){let oe=Number.parseFloat(W[Q]??"0")||0,pe=Number.parseFloat(W[x]??"0")||0,Me=Number.parseFloat(W[_]??"0")||0;c.push(oe,pe,Me)}else c.push(0,0,0);if(P){let oe=Number.parseFloat(W[y]??"0")||0,pe=Number.parseFloat(W[M]??"0")||0;l.push(oe,1-pe)}else l.push(0,0);if(V){let oe=(Number.parseFloat(W[T]??"255")||0)/255,pe=(Number.parseFloat(W[N]??"255")||0)/255,Me=(Number.parseFloat(W[O]??"255")||0)/255,F=D!==-1?(Number.parseFloat(W[D]??"255")||0)/255:1;u.push(oe,pe,Me,F)}}for(let Y=0;Y<a&&!(ee>=z.length);Y++){let $=z[ee++]?.trim();if(!$)continue;let W=$.split(/\s+/),te=Number.parseInt(W[0]??"0",10);if(te>=3){let me=Number.parseInt(W[1]??"0",10);for(let ue=1;ue<te-1;ue++){let oe=Number.parseInt(W[ue+1]??"0",10),pe=Number.parseInt(W[ue+2]??"0",10);p.push(me,oe,pe)}}}return e.finalizeModel(s,c,l,V?u:void 0,p,H,n)}static parseBinaryBody(t,r,n,A){let o=new DataView(r.buffer,r.byteOffset,r.byteLength),i=0,a=t.elements.find(T=>T.name==="vertex"),s=t.elements.find(T=>T.name==="face"),c=a?.count??0,l=s?.count??0,u=[],p=[],g=[],f=[],b=[],v=a?.properties??[],Q=v.some(T=>T.name==="nx"),x=v.some(T=>T.name==="red"||T.name==="r"),_=T=>{let N=0;switch(T.toLowerCase()){case"char":case"int8":N=o.getInt8(i),i+=1;break;case"uchar":case"uint8":N=o.getUint8(i),i+=1;break;case"short":case"int16":N=o.getInt16(i,n),i+=2;break;case"ushort":case"uint16":N=o.getUint16(i,n),i+=2;break;case"int":case"int32":N=o.getInt32(i,n),i+=4;break;case"uint":case"uint32":N=o.getUint32(i,n),i+=4;break;case"float":case"float32":N=o.getFloat32(i,n),i+=4;break;case"double":case"float64":N=o.getFloat64(i,n),i+=8;break;default:N=o.getFloat32(i,n),i+=4;break}return N};for(let T=0;T<c;T++){let N=0,O=0,D=0,H=0,V=0,P=0,z=0,ee=0,Y=1,$=1,W=1,te=1;for(let me of v){let ue=_(me.type),oe=me.name.toLowerCase();oe==="x"?N=ue:oe==="y"?O=ue:oe==="z"?D=ue:oe==="nx"?H=ue:oe==="ny"?V=ue:oe==="nz"?P=ue:oe==="u"||oe==="s"?z=ue:oe==="v"||oe==="t"?ee=ue:oe==="red"||oe==="r"?Y=me.type.includes("int")?ue/255:ue:oe==="green"||oe==="g"?$=me.type.includes("int")?ue/255:ue:oe==="blue"||oe==="b"?W=me.type.includes("int")?ue/255:ue:(oe==="alpha"||oe==="a")&&(te=me.type.includes("int")?ue/255:ue)}u.push(N,O,D),p.push(H,V,P),g.push(z,1-ee),x&&f.push(Y,$,W,te)}let M=(s?.properties??[]).find(T=>T.isList);for(let T=0;T<l&&!(i>=r.byteLength);T++)if(M){let N=_(M.countType??"uchar"),O=[];for(let D=0;D<N;D++)O.push(_(M.itemType??"int"));if(O.length>=3){let D=O[0];for(let H=1;H<O.length-1;H++)b.push(D,O[H],O[H+1])}}return e.finalizeModel(u,p,g,x?f:void 0,b,Q,A)}static finalizeModel(t,r,n,A,o,i,a){(!i||a.smoothNormals)&&ur(t,o,r);let s=Lt(t),c=xt(s,a),l=Ot(t,c),u=Ht(o,l.length/3),p={name:"ply_default",diffuseColor:A?[1,1,1,1]:[.8,.8,.85,1],shininess:32,specularIntensity:.5,...a.defaultMaterial};return{name:"PLY_Model",meshes:[{id:"ply_mesh_0",name:"ply_geometry",positions:l,normals:new Float32Array(r),uvs:new Float32Array(n),colors:A?new Float32Array(A):void 0,indices:u,materialName:"ply_default"}],materials:{ply_default:p},animations:[],bounds:jt(s,c)}}static load(t,r={}){if(typeof t!="string")return e.parse(t,r);if(t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.startsWith("file://")){let n=t.startsWith("file://")?t.replace("file://",""):t,A=Pe.readFileSync(n);return e.parse(A,r)}return e.parse(t,r)}};function Zn(e,t={}){return Ao.load(e,t)}q();vt();var wa=$A(Ca(),1);q();var co=(function(){var e="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuixkbeeeddddillviebeoweuecj:Gdkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WboY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbrl79IV9Rbwq;X8:kdbk:kYi5ud9:du8Jjjjjbcjq9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxcj;abad9Uc;WFbGcjdadca0EhmaialfgPar9Rgoadfhsavaoadz:jjjjbgzceVhHcbhOdndninaeaO9nmeaPax9RaD6mdamaeaO9RaOamfgoae6EgAcsfglc9WGhCaAcethXaxaDfhiaOaeaoaeao6E9RhQalcl4cifcd4hLazcjdfaAfhKcbhYabaOad2fg8AhEaHh3incbh5dnawTmbaxaYcd4fRbbh5kcbh8Eazcjdfhqinaih8Fdndndndna5a8Ecet4ciGgoc9:fPdebdkaPa8F9RaA6mrazcjdfa8EaA2fa8FaAz:jjjjb8Aa8FaAfhixdkazcjdfa8EaA2fcbaAz:kjjjb8Aa8FhixekaPa8F9RaL6mva8FaLfhidnaCTmbaPai9RcK6mbaocdtc:q:G:cjbfcj:G:cjbawEhaczhrcbhlinargoc9Wfghaqfhrdndndndndndnaaa8Fahco4fRbbalcoG4ciGcdtfydbPDbedvivvvlvkar9cb83bwar9cb83bbxlkarcbaiRbdai8Xbb9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbaqaofgrcGfcbaicdfa8J9c8N1:NfghRbbag9cjjjjjw:dg8J9qE86bbarcVfcbaha8J9c8M1:NfghRbbag9cjjjjjl:dg8J9qE86bbarc7fcbaha8J9c8L1:NfghRbbag9cjjjjjd:dg8J9qE86bbarctfcbaha8J9c8K1:NfghRbbag9cjjjjje:dg8J9qE86bbarc91fcbaha8J9c8J1:NfghRbbag9cjjjj;ab:dg8J9qE86bbarc4fcbaha8J9cg1:NfghRbbag9cjjjja:dg8J9qE86bbarc93fcbaha8J9ch1:NfghRbbag9cjjjjz:dgg9qE86bbarc94fcbahag9ca1:NfghRbbai8Xbe9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbarc95fcbaha8J9c8N1:NfgiRbbag9cjjjjjw:dg8J9qE86bbarc96fcbaia8J9c8M1:NfgiRbbag9cjjjjjl:dg8J9qE86bbarc97fcbaia8J9c8L1:NfgiRbbag9cjjjjjd:dg8J9qE86bbarc98fcbaia8J9c8K1:NfgiRbbag9cjjjjje:dg8J9qE86bbarc99fcbaia8J9c8J1:NfgiRbbag9cjjjj;ab:dg8J9qE86bbarc9:fcbaia8J9cg1:NfgiRbbag9cjjjja:dg8J9qE86bbarcufcbaia8J9ch1:NfgiRbbag9cjjjjz:dgg9qE86bbaiag9ca1:NfhixikaraiRblaiRbbghco4g8Ka8KciSg8KE86bbaqaofgrcGfaiclfa8Kfg8KRbbahcl4ciGg8La8LciSg8LE86bbarcVfa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc7fa8Ka8Lfg8KRbbahciGghahciSghE86bbarctfa8Kahfg8KRbbaiRbeghco4g8La8LciSg8LE86bbarc91fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc4fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc93fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc94fa8Kahfg8KRbbaiRbdghco4g8La8LciSg8LE86bbarc95fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc96fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc97fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc98fa8KahfghRbbaiRbigico4g8Ka8KciSg8KE86bbarc99faha8KfghRbbaicl4ciGg8Ka8KciSg8KE86bbarc9:faha8KfghRbbaicd4ciGg8Ka8KciSg8KE86bbarcufaha8KfgrRbbaiciGgiaiciSgiE86bbaraifhixdkaraiRbwaiRbbghcl4g8Ka8KcsSg8KE86bbaqaofgrcGfaicwfa8Kfg8KRbbahcsGghahcsSghE86bbarcVfa8KahfghRbbaiRbeg8Kcl4g8La8LcsSg8LE86bbarc7faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarctfaha8KfghRbbaiRbdg8Kcl4g8La8LcsSg8LE86bbarc91faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc4faha8KfghRbbaiRbig8Kcl4g8La8LcsSg8LE86bbarc93faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc94faha8KfghRbbaiRblg8Kcl4g8La8LcsSg8LE86bbarc95faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc96faha8KfghRbbaiRbvg8Kcl4g8La8LcsSg8LE86bbarc97faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc98faha8KfghRbbaiRbog8Kcl4g8La8LcsSg8LE86bbarc99faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc9:faha8KfghRbbaiRbrgicl4g8Ka8KcsSg8KE86bbarcufaha8KfgrRbbaicsGgiaicsSgiE86bbaraifhixekarai8Pbw83bwarai8Pbb83bbaiczfhikdnaoaC9pmbalcdfhlaoczfhraPai9RcL0mekkaoaC6moaimexokaCmva8FTmvkaqaAfhqa8Ecefg8Ecl9hmbkdndndndnawTmbasaYcd4fRbbgociGPlbedrbkaATmdazaYfh8Fazcjdfhhcbh8EaEhaina8FRbbhraahocbhlinaoahalfRbbgqce4cbaqceG9R7arfgr86bbaoadfhoaAalcefgl9hmbkaacefhaa8Fcefh8FahaAfhha8Ecefg8Ecl9hmbxikkaATmeazaYfhaazcjdfhhcbhoceh8EaKh8FinaEaofhlaa8Vbbhrcbhoinala8FaofRbbcwtahaofRbbgqVc;:FiGce4cbaqceG9R7arfgr87bbaladfhlaQaocefgofmbka8FaXfh8FcdhoaacdfhaahaXfhha8EceGhlcbh8EalmbxdkkaATmbaocl4h8EazaYfRbbhqcwhoa3hlinalRbbaotaqVhqalcefhlaocwfgoca9hmbkcbhhaEh8FaKhainazcjdfahfRbbhrcwhoaahlinalRbbaotarVhralaAfhlaocwfgoca9hmbkara8E94aq7hqcbhoa8Fhlinalaqao486bbalcefhlaocwfgoca9hmbka8Fadfh8FaacefhaahcefghaA9hmbkkaEclfhEa3clfh3aYclfgYad6mbkaza8AaAcufad2fadz:jjjjb8AaAaOfhOaihxaimbkc9:hoxdkcbc99aPax9RakSEhoxekc9:hokavcjqf8Kjjjjbaok:bsesu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnalaeci9UgrcHf6mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:kjjjb8Aav9cu83iUav9cu83i8Wav9cu83iyav9cu83iaav9cu83iKav9cu83izav9cu83iwav9cu83ibaialfc9WfhDaicefgiarfhqdndnaeci9pmbaqhexekcmcsawceSEhkcbhxcbhmaqhecbhlcbhoindndnaiRbbgrc;Ve0mbavc;abfaoarcu7gPcl4fcsGcitfgwydlhsawydbhzdndnarcsGgwak9pmbavalaPfcsGcdtfydbaxawEhraxawTgHfhxxekdnaeaD9nmbc9:hoxokdndnawcsSmbcehHamawcetfcWfhrxekaecefhrae8SbbgwcFeGhPdndnawcu9mmbarhexekaecvfheaPcFbGhPcrhwdninar8SbbgHcFbGawtaPVhPaHcu9kmearcefhrawcrfgwc8J9hmbxdkkarcefhekcehHaPce4cbaPceG9R7amfhrkarhmkavc;abfaocitfgwarBdbawasBdlavalcdtfarBdbavc;abfaocefcsGcitfgwazBdbawarBdlaocdfhoaHalfhldnadcd9hmbabar87elabas87edabaz87ebabcofhbxdkabarBdwabasBdlabazBdbabcxfhbxekdnarcpe0mbavalaDarcsGfRbbgwcl4gP9RcsGcdtfydbaxcefgsaPEhravalaw9RcsGcdtfydbasaPTgzfgsawcsGgPEhwaPThPdndnadcd9hmbabaw87elabar87edabax87ebcohHxekabawBdwabarBdlabaxBdbcxhHkavalcdtfaxBdbavc;abfaocitfgOarBdbaOaxBdlavalcefglcsGcdtfarBdbavc;abfaocefcsGcitfgOawBdbaOarBdlavalazfglcsGcdtfawBdbavc;abfaocdfcsGcitfgraxBdbarawBdlaocifhoabaHfhbalaPfhlasaPfhxxekdnaeaD9nmbc9:hoxlkaxcbaeRbbgwEgHarc;:eSgrfhsawcsGhOdndnawcl4gAmbascefhzxekashzavalaA9RcsGcdtfydbhskdndnaOmbazcefhxxekazhxavalaw9RcsGcdtfydbhzkdndnarTmbaecefhrxekaecdfhrae8SbegPcFeGhwdnaPcu9kmbaecofhHawcFbGhwcrhedninar8SbbgPcFbGaetawVhwaPcu9kmearcefhraecrfgec8J9hmbkaHhrxekarcefhrkawce4cbawceG9R7amfgmhHkdndnaAcsSmbarhwxekarcefhwar8SbbgecFeGhPdnaecu9kmbarcvfhsaPcFbGhPcrhedninaw8SbbgrcFbGaetaPVhParcu9kmeawcefhwaecrfgec8J9hmbkashwxekawcefhwkaPce4cbaPceG9R7amfgmhskdndnaOcsSmbawhexekawcefheaw8SbbgrcFeGhPdnarcu9kmbawcvfhzaPcFbGhPcrhrdninae8SbbgwcFbGartaPVhPawcu9kmeaecefhearcrfgrc8J9hmbkazhexekaecefhekaPce4cbaPceG9R7amfgmhzkdndnadcd9hmbabaz87elabas87edabaH87ebcohrxekabazBdwabasBdlabaHBdbcxhrkavc;abfaocitfgwasBdbawaHBdlavalcdtfaHBdbavc;abfaocefcsGcitfgwazBdbawasBdlavalcefglcsGcdtfasBdbavc;abfaocdfcsGcitfgwaHBdbawazBdlavalaATaAcsSVfglcsGcdtfazBdbalaOTaOcsSVfhlaocifhoabarfhbkaocsGhoalcsGhlaicefgiaq6mbkkcbc99aeaDSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnalaecvf9pmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk:4ioiue99dud99dud99dnaeTmbcbhiabhlindndnal8Uebgv:YgoJ:ji:1Salcof8UebgrciVgw:Y:vgDNJbbbZJbbb:;avcu9kEMgq:lJbbb9p9DTmbaq:Ohkxekcjjjj94hkkalclf8Uebhvalcdf8UebhxalarcefciGcetfak87ebdndnax:YgqaDNJbbbZJbbb:;axcu9kEMgm:lJbbb9p9DTmbam:Ohxxekcjjjj94hxkabaiarciGgkfcd7cetfax87ebdndnav:YgmaDNJbbbZJbbb:;avcu9kEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkalarcufciGcetfav87ebdndnawaw2:ZgPaPMaoaoN:taqaqN:tamamN:tgoJbbbbaoJbbbb9GE:raDNJbbbZMgD:lJbbb9p9DTmbaD:Ohrxekcjjjj94hrkalakcetfar87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk:Tvirud99eudndnadcl9hmbaeTmeindndnabRbbgiabcefgl8Sbbgvabcdfgo8Sbbgrf9R:YJbbuJabcifgwRbbgdce4adVgDcd4aDVgDcl4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax86bbdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao86bbdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai86bbdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad86bbabclfhbaecufgembxdkkaeTmbindndnab8Vebgiabcdfgl8Uebgvabclfgo8Uebgrf9R:YJbFu9habcofgw8Vebgdce4adVgDcd4aDVgDcl4aDVgDcw4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax87ebdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao87ebdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai87ebdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad87ebabcwfhbaecufgembkkk9teiucbcbyd:K:G:cjbgeabcifc98GfgbBd:K:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkk83dbcj:Gdk8Kbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbc:K:Gdkl8W:qbb",t="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuixkbbebeeddddilve9Weeeviebeoweuecj:Gdkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WbwY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbDl79IV9Rbqq:I9Dklbzik94evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaeai86b:q:W:cjbaecitab8Piw83i:q:G:cjbaecefgecjd9hmbkk:SBlEud97dur978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaialfgxar9RhodnadTgmmbavaoad;8qbbkaicefhPcj;abad9Uc;WFbGcjdadca0EhsdndndnadTmbaoadfhzcbhHinaeaH9nmdaxaP9RaD6miabaHad2fgOavcjdfasaeaH9RaHasfae6EgAaAcsfgoc9WGgCSEhXaPaDfhQaocl4cifcd4hLavcj;cbfaCcetfhKavcj;cbfaCci2fhYavcj;cbfaCfh8AcbhEaoc;ab6h3incbh5dnawTmbaPaEcd4fRbbh5kcbh8Eavcj;cbfh8Findndndndna5a8Ecet4ciGgoc9:fPdebdkaxaQ9RaC6mwdnaCTmbavcj;cbfa8EaC2faQaC;8qbbkaQaAfhQxdkaCTmeavcj;cbfa8EaC2fcbaC;8kbxekaxaQ9RaL6moaoclVcbawEhraQaLfhocbhidna3mbaxao9Rc;Gb6mbcbhlina8FalfhidndndndndndnaQalco4fRbbgqciGarfPDbedibledibkaipxbbbbbbbbbbbbbbbbpklbxlkaiaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaoclffa8JRb:q:W:cjbfhoxikaiaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaocwffa8JRb:q:W:cjbfhoxdkaiaopbbbpklbaoczfhoxekaiaopbbdaoRbbggcitpbi:q:G:cjbagRb:q:W:cjbggpsaoRbeg8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbagaocdffa8JRb:q:W:cjbfhokdndndndndndnaqcd4ciGarfPDbedibledibkaiczfpxbbbbbbbbbbbbbbbbpklbxlkaiczfaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaoclffa8JRb:q:W:cjbfhoxikaiczfaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaocwffa8JRb:q:W:cjbfhoxdkaiczfaopbbbpklbaoczfhoxekaiczfaopbbdaoRbbggcitpbi:q:G:cjbagRb:q:W:cjbggpsaoRbeg8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbagaocdffa8JRb:q:W:cjbfhokdndndndndndnaqcl4ciGarfPDbedibledibkaicafpxbbbbbbbbbbbbbbbbpklbxlkaicafaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaoclffa8JRb:q:W:cjbfhoxikaicafaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaocwffa8JRb:q:W:cjbfhoxdkaicafaopbbbpklbaoczfhoxekaicafaopbbdaoRbbggcitpbi:q:G:cjbagRb:q:W:cjbggpsaoRbeg8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbagaocdffa8JRb:q:W:cjbfhokdndndndndndnaqco4arfPDbedibledibkaic8Wfpxbbbbbbbbbbbbbbbbpklbxlkaic8Wfaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Ngicitpbi:q:G:cjbaiRb:q:W:cjbgipsaap5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbaiaoclffaqRb:q:W:cjbfhoxikaic8Wfaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Ngicitpbi:q:G:cjbaiRb:q:W:cjbgipsaap5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbaiaocwffaqRb:q:W:cjbfhoxdkaic8Wfaopbbbpklbaoczfhoxekaic8WfaopbbdaoRbbgicitpbi:q:G:cjbaiRb:q:W:cjbgipsaoRbegqcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbaiaocdffaqRb:q:W:cjbfhokalc;abfhialcjefaC0meaihlaxao9Rc;Fb0mbkkdnaiaC9pmbaici4hlinaxao9RcK6mwa8FaifhqdndndndndndnaQaico4fRbbalcoG4ciGarfPDbedibledibkaqpxbbbbbbbbbbbbbbbbpkbbxlkaqaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spkbbagaoclffa8JRb:q:W:cjbfhoxikaqaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spkbbagaocwffa8JRb:q:W:cjbfhoxdkaqaopbbbpkbbaoczfhoxekaqaopbbdaoRbbggcitpbi:q:G:cjbagRb:q:W:cjbggpsaoRbeg8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpkbbagaocdffa8JRb:q:W:cjbfhokalcdfhlaiczfgiaC6mbkkaohQaoTmoka8FaCfh8Fa8Ecefg8Ecl9hmbkdndndndnawTmbazaEcd4fRbbglciGPlbedwbkaCTmdaXaEfhlavaEfpbdbh8Kcbhoinalavcj;cbfaofpblbg8La8Aaofpblbg8MpmbzeHdOiAlCvXoQrLg8NaKaofpblbgyaYaofpblbg8PpmbzeHdOiAlCvXoQrLgIpmbezHdiOAlvCXorQLgacep9Taapxeeeeeeeeeeeeeeeeghp9op9Hp9rgaa8Kp9Ug8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp9Ug8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp9Ug8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp9Ug8Kp9Abbbaladfgla8Ka8NaIpmwDKYqk8AExm35Ps8E8Fgacep9Taaahp9op9Hp9rgap9Ug8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp9Ug8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp9Ug8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp9Ug8Kp9Abbbaladfgla8Ka8La8MpmwKDYq8AkEx3m5P8Es8Fg8Laya8PpmwKDYq8AkEx3m5P8Es8Fg8MpmbezHdiOAlvCXorQLgacep9Taaahp9op9Hp9rgap9Ug8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp9Ug8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp9Ug8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp9Ug8Kp9Abbbaladfgla8Ka8La8MpmwDKYqk8AExm35Ps8E8Fgacep9Taaahp9op9Hp9rgap9Ughp9Abbbaladfglahaaaapmlvorlvorlvorlvorp9Ughp9AbbbaladfglahaaaapmwDqkwDqkwDqkwDqkp9Ughp9AbbbaladfglahaaaapmxmPsxmPsxmPsxmPsp9Ug8Kp9AbbbaladfhlaoczfgoaC6mbxikkaCTmeaXaEfhlavaEfpbdbh8Kcbhoinalavcj;cbfaofpblbg8La8Aaofpblbg8MpmbzeHdOiAlCvXoQrLg8NaKaofpblbgyaYaofpblbg8PpmbzeHdOiAlCvXoQrLgIpmbezHdiOAlvCXorQLgacep:neaapxebebebebebebebebghp9op:bep9rgaa8Kp:oeg8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp:oeg8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp:oeg8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp:oeg8Kp9Abbbaladfgla8Ka8NaIpmwDKYqk8AExm35Ps8E8Fgacep:neaaahp9op:bep9rgap:oeg8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp:oeg8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp:oeg8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp:oeg8Kp9Abbbaladfgla8Ka8La8MpmwKDYq8AkEx3m5P8Es8Fg8Laya8PpmwKDYq8AkEx3m5P8Es8Fg8MpmbezHdiOAlvCXorQLgacep:neaaahp9op:bep9rgap:oeg8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp:oeg8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp:oeg8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp:oeg8Kp9Abbbaladfgla8Ka8La8MpmwDKYqk8AExm35Ps8E8Fgacep:neaaahp9op:bep9rgap:oeghp9Abbbaladfglahaaaapmlvorlvorlvorlvorp:oeghp9AbbbaladfglahaaaapmwDqkwDqkwDqkwDqkp:oeghp9AbbbaladfglahaaaapmxmPsxmPsxmPsxmPsp:oeg8Kp9AbbbaladfhlaoczfgoaC6mbxdkkaCTmbaXaEfhrcbhocbalcl4gl9Rc8FGhiavaEfpbdbhhinaravcj;cbfaofpblbg8Ka8Aaofpblbg8LpmbzeHdOiAlCvXoQrLg8MaKaofpblbg8NaYaofpblbgypmbzeHdOiAlCvXoQrLg8PpmbezHdiOAlvCXorQLgaaip:Reaaalp:Tep9qgaahp9rghp9Abbbaradfgrahaaaapmlvorlvorlvorlvorp9rghp9AbbbaradfgrahaaaapmwDqkwDqkwDqkwDqkp9rghp9AbbbaradfgrahaaaapmxmPsxmPsxmPsxmPsp9rghp9Abbbaradfgraha8Ma8PpmwDKYqk8AExm35Ps8E8Fgaaip:Reaaalp:Tep9qgap9rghp9Abbbaradfgrahaaaapmlvorlvorlvorlvorp9rghp9AbbbaradfgrahaaaapmwDqkwDqkwDqkwDqkp9rghp9AbbbaradfgrahaaaapmxmPsxmPsxmPsxmPsp9rghp9Abbbaradfgraha8Ka8LpmwKDYq8AkEx3m5P8Es8Fg8Ka8NaypmwKDYq8AkEx3m5P8Es8Fg8LpmbezHdiOAlvCXorQLgaaip:Reaaalp:Tep9qgap9rghp9Abbbaradfgrahaaaapmlvorlvorlvorlvorp9rghp9AbbbaradfgrahaaaapmwDqkwDqkwDqkwDqkp9rghp9AbbbaradfgrahaaaapmxmPsxmPsxmPsxmPsp9rghp9Abbbaradfgraha8Ka8LpmwDKYqk8AExm35Ps8E8Fgaaip:Reaaalp:Tep9qgap9rghp9Abbbaradfgrahaaaapmlvorlvorlvorlvorp9rghp9AbbbaradfgrahaaaapmwDqkwDqkwDqkwDqkp9rghp9AbbbaradfgrahaaaapmxmPsxmPsxmPsxmPsp9rghp9AbbbaradfhraoczfgoaC6mbkkaEclfgEad6mbkdnaXavcjdf9hmbaAad2goTmbaOavcjdfao;8qbbkdnammbavaXaAcufad2fad;8qbbkaAaHfhHc9:hoaQhPaQmbxlkkaeTmbaDalfhrcbhocuhlinaralaD9RglfaD6mdasaeao9Raoasfae6Eaofgoae6mbkaial9RhPkcbc99axaP9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaokwbz:bjjjbkpPesu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnalaeci9UgrcHf6mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbav9cu83iUav9cu83i8Wav9cu83iyav9cu83iaav9cu83iKav9cu83izav9cu83iwav9cu83ibaialfc9WfhDaicefgiarfhqdndnaeci9pmbaqhexekcmcsawceSEhkcbhxcbhmaqhecbhlcbhoindndnaiRbbgrc;Ve0mbavc;abfaoarcu7gPcl4fcsGcitfgwydlhsawydbhzdndnarcsGgwak9pmbavalaPfcsGcdtfydbaxawEhraxawTgHfhxxekdnaeaD9nmbc9:hoxokdndnawcsSmbcehHamawcetfcWfhrxekaecefhrae8SbbgwcFeGhPdndnawcu9mmbarhexekaecvfheaPcFbGhPcrhwdninar8SbbgHcFbGawtaPVhPaHcu9kmearcefhrawcrfgwc8J9hmbxdkkarcefhekcehHaPce4cbaPceG9R7amfhrkarhmkavc;abfaocitfgwarBdbawasBdlavalcdtfarBdbavc;abfaocefcsGcitfgwazBdbawarBdlaocdfhoaHalfhldnadcd9hmbabar87elabas87edabaz87ebabcofhbxdkabarBdwabasBdlabazBdbabcxfhbxekdnarcpe0mbavalaDarcsGfRbbgwcl4gP9RcsGcdtfydbaxcefgsaPEhravalaw9RcsGcdtfydbasaPTgzfgsawcsGgPEhwaPThPdndnadcd9hmbabaw87elabar87edabax87ebcohHxekabawBdwabarBdlabaxBdbcxhHkavalcdtfaxBdbavc;abfaocitfgOarBdbaOaxBdlavalcefglcsGcdtfarBdbavc;abfaocefcsGcitfgOawBdbaOarBdlavalazfglcsGcdtfawBdbavc;abfaocdfcsGcitfgraxBdbarawBdlaocifhoabaHfhbalaPfhlasaPfhxxekdnaeaD9nmbc9:hoxlkaxcbaeRbbgwEgHarc;:eSgrfhsawcsGhOdndnawcl4gAmbascefhzxekashzavalaA9RcsGcdtfydbhskdndnaOmbazcefhxxekazhxavalaw9RcsGcdtfydbhzkdndnarTmbaecefhrxekaecdfhrae8SbegPcFeGhwdnaPcu9kmbaecofhHawcFbGhwcrhedninar8SbbgPcFbGaetawVhwaPcu9kmearcefhraecrfgec8J9hmbkaHhrxekarcefhrkawce4cbawceG9R7amfgmhHkdndnaAcsSmbarhwxekarcefhwar8SbbgecFeGhPdnaecu9kmbarcvfhsaPcFbGhPcrhedninaw8SbbgrcFbGaetaPVhParcu9kmeawcefhwaecrfgec8J9hmbkashwxekawcefhwkaPce4cbaPceG9R7amfgmhskdndnaOcsSmbawhexekawcefheaw8SbbgrcFeGhPdnarcu9kmbawcvfhzaPcFbGhPcrhrdninae8SbbgwcFbGartaPVhPawcu9kmeaecefhearcrfgrc8J9hmbkazhexekaecefhekaPce4cbaPceG9R7amfgmhzkdndnadcd9hmbabaz87elabas87edabaH87ebcohrxekabazBdwabasBdlabaHBdbcxhrkavc;abfaocitfgwasBdbawaHBdlavalcdtfaHBdbavc;abfaocefcsGcitfgwazBdbawasBdlavalcefglcsGcdtfasBdbavc;abfaocdfcsGcitfgwaHBdbawazBdlavalaATaAcsSVfglcsGcdtfazBdbalaOTaOcsSVfhlaocifhoabarfhbkaocsGhoalcsGhlaicefgiaq6mbkkcbc99aeaDSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnalaecvf9pmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk;Toio97eue97aec98Ghedndnadcl9hmbaeTmecbhdinababpbbbgicKp:RecKp:Sep;6eglaicwp:RecKp:Sep;6ealp;Geaiczp:RecKp:Sep;6egvp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egralpxbbbjbbbjbbbjbbbjgwp9op9rp;Keglpxbb;:9cbb;:9cbb;:9cbb;:9calalp;Meaoaop;Meavaravawp9op9rp;Keglalp;Mep;Kep;Kep;Jep;Negvp;Mepxbbn0bbn0bbn0bbn0grp;KepxFbbbFbbbFbbbFbbbp9oaipxbbbFbbbFbbbFbbbFp9op9qalavp;Mearp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaoavp;Mearp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbabczfhbadclfgdae6mbxdkkaeTmbcbhdinabczfgDaDpbbbgipxbbbbbbFFbbbbbbFFgwp9oabpbbbgoaipmbediwDqkzHOAKY8AEgvczp:Reczp:Sep;6eglaoaipmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eavczp:Sep;6egvp;Gealp;Gep;Kep;Legipxbbbbbbbbbbbbbbbbp:2egralpxbbbjbbbjbbbjbbbjgqp9op9rp;Keglpxb;:FSb;:FSb;:FSb;:FSalalp;Meaiaip;Meavaravaqp9op9rp;Keglalp;Mep;Kep;Kep;Jep;Negvp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbp9oaiavp;Mearp;Keczp:Rep9qgialavp;Mearp;KepxFFbbFFbbFFbbFFbbp9oglpmwDKYqk8AExm35Ps8E8Fp9qpkbbabaoawp9oaialpmbezHdiOAlvCXorQLp9qpkbbabcafhbadclfgdae6mbkkk;2ileue97euo97dnaec98GgiTmbcbheinabcKfpx:ji:1S:ji:1S:ji:1S:ji:1SabpbbbglabczfgvpbbbgopmlvorxmPsCXQL358E8Fgrczp:Segwpxibbbibbbibbbibbbp9qp;6egDp;NegqaDaDp;MegDaDp;KealaopmbediwDqkzHOAKY8AEgDczp:Reczp:Sep;6eglalp;MeaDczp:Sep;6egoaop;Mearczp:Reczp:Sep;6egrarp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jep;Mepxbbn0bbn0bbn0bbn0gDp;KepxFFbbFFbbFFbbFFbbgkp9oaqaop;MeaDp;Keczp:Rep9qgoaqalp;MeaDp;Keakp9oaqarp;MeaDp;Keczp:Rep9qgDpmwDKYqk8AExm35Ps8E8Fglp5eawclp:RegqpEi:T:j83ibavalp5baqpEd:T:j83ibabcwfaoaDpmbezHdiOAlvCXorQLgDp5eaqpEe:T:j83ibabaDp5baqpEb:T:j83ibabcafhbaeclfgeai6mbkkkuee97dnadcd4ae2c98GgeTmbcbhdinababpbbbgicwp:Recwp:Sep;6eaicep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbabczfhbadclfgdae6mbkkk:Sodw97euaec98Ghedndnadcl9hmbaeTmecbhdinabpxbbuJbbuJbbuJbbuJabpbbbgicKp:TeglaicYp:Tep9qgvcdp:Teavp9qgvclp:Teavp9qgop;6ep;Negvaicwp:RecKp:SegraipxFbbbFbbbFbbbFbbbgwp9ogDp:Uep;6ep;Mepxbbn0bbn0bbn0bbn0gqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9oavaDarp:Xeaiczp:RecKp:Segip:Uep;6ep;Meaqp;Keawp9op9qavaDaraip:Uep:Xep;6ep;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qavaoalcep:Rep9oalpxebbbebbbebbbebbbp9op9qp;6ep;Meaqp;KecKp:Rep9qpkbbabczfhbadclfgdae6mbxdkkaeTmbcbhdinabczfgkpxbFu9hbFu9hbFu9hbFu9habpbbbglakpbbbgrpmlvorxmPsCXQL358E8Fgvczp:TegqavcHp:Tep9qgicdp:Teaip9qgiclp:Teaip9qgicwp:Teaip9qgop;6ep;NegialarpmbediwDqkzHOAKY8AEgDpxFFbbFFbbFFbbFFbbglp9ograDczp:Segwp:Ueavczp:Reczp:SegDp:Xep;6ep;Mepxbbn0bbn0bbn0bbn0gvp;Kealp9oaiarawaDp:Uep:Xep;6ep;Meavp;Keczp:Rep9qgwaiaoaqcep:Rep9oaqpxebbbebbbebbbebbbp9op9qp;6ep;Meavp;Keczp:ReaiaDarp:Uep;6ep;Meavp;Kealp9op9qgipmwDKYqk8AExm35Ps8E8FpkbbabawaipmbezHdiOAlvCXorQLpkbbabcafhbadclfgdae6mbkkk9teiucbcbydj:G:cjbgeabcifc98GfgbBdj:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkxebcj:Gdklz:zbb",r=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),n=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var A=WebAssembly.validate(r)?a(t):a(e),o,i=WebAssembly.instantiate(A,{}).then(function(Q){o=Q.instance,o.exports.__wasm_call_ctors()});function a(Q){for(var x=new Uint8Array(Q.length),_=0;_<Q.length;++_){var y=Q.charCodeAt(_);x[_]=y>96?y-97:y>64?y-39:y+4}for(var M=0,_=0;_<Q.length;++_)x[M++]=x[_]<60?n[x[_]]:(x[_]-60)*64+x[++_];return x.buffer.slice(0,M)}function s(Q,x,_,y,M,T,N){var O=Q.exports.sbrk,D=y+3&-4,H=O(D*M),V=O(T.length),P=new Uint8Array(Q.exports.memory.buffer);P.set(T,V);var z=x(H,y,M,V,T.length);if(z==0&&N&&N(H,D,M),_.set(P.subarray(H,H+y*M)),O(H-O(0)),z!=0)throw new Error("Malformed buffer data: "+z)}var c={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp",COLOR:"meshopt_decodeFilterColor"},l={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},u=[],p=0;function g(Q){var x={object:new Worker(Q),pending:0,requests:{}};return x.object.onmessage=function(_){var y=_.data;x.pending-=y.count,x.requests[y.id][y.action](y.value),delete x.requests[y.id]},x}function f(Q){for(var x="self.ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(A)+"]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = "+v.name+";"+s.toString()+v.toString(),_=new Blob([x],{type:"text/javascript"}),y=URL.createObjectURL(_),M=u.length;M<Q;++M)u[M]=g(y);for(var M=Q;M<u.length;++M)u[M].object.postMessage({});u.length=Q,URL.revokeObjectURL(y)}function b(Q,x,_,y,M){for(var T=u[0],N=1;N<u.length;++N)u[N].pending<T.pending&&(T=u[N]);return new Promise(function(O,D){var H=new Uint8Array(_),V=++p;T.pending+=Q,T.requests[V]={resolve:O,reject:D},T.object.postMessage({id:V,count:Q,size:x,source:H,mode:y,filter:M},[H.buffer])})}function v(Q){var x=Q.data;self.ready.then(function(_){if(!x.id)return self.close();try{var y=new Uint8Array(x.count*x.size);s(_,_.exports[x.mode],y,x.count,x.size,x.source,_.exports[x.filter]),self.postMessage({id:x.id,count:x.count,action:"resolve",value:y},[y.buffer])}catch(M){self.postMessage({id:x.id,count:x.count,action:"reject",value:M})}})}return{ready:i,supported:!0,useWorkers:function(Q){f(Q)},decodeVertexBuffer:function(Q,x,_,y,M){s(o,o.exports.meshopt_decodeVertexBuffer,Q,x,_,y,o.exports[c[M]])},decodeIndexBuffer:function(Q,x,_,y){s(o,o.exports.meshopt_decodeIndexBuffer,Q,x,_,y)},decodeIndexSequence:function(Q,x,_,y){s(o,o.exports.meshopt_decodeIndexSequence,Q,x,_,y)},decodeGltfBuffer:function(Q,x,_,y,M,T){s(o,o.exports[l[M]],Q,x,_,y,o.exports[c[T]])},decodeGltfBufferAsync:function(Q,x,_,y,M){return u.length>0?b(Q,x,_,l[y],c[M]):i.then(function(){var T=new Uint8Array(Q*x);return s(o,o.exports[l[y]],T,Q,x,_,o.exports[c[M]]),T})}}})();var lo={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},ya={5120:1,5121:1,5122:2,5123:2,5125:4,5126:4};function Qa(e,t=!1){switch(e){case 5120:return t?(r,n)=>Math.max(r.getInt8(n)/127,-1):(r,n)=>r.getInt8(n);case 5121:return t?(r,n)=>r.getUint8(n)/255:(r,n)=>r.getUint8(n);case 5122:return t?(r,n)=>Math.max(r.getInt16(n,!0)/32767,-1):(r,n)=>r.getInt16(n,!0);case 5123:return t?(r,n)=>r.getUint16(n,!0)/65535:(r,n)=>r.getUint16(n,!0);case 5125:return(r,n)=>r.getUint32(n,!0);default:return(r,n)=>r.getFloat32(n,!0)}}var Ws=new Set(["KHR_materials_unlit","KHR_materials_emissive_strength","KHR_texture_transform","KHR_texture_basisu","EXT_texture_webp"]);function qs(e,t){if(t===0)return{indices:e,topology:"point-list"};if(t===1){if(e.length%2!==0)throw new Error("glTF LINES index count must be even");return{indices:e,topology:"line-list"}}if(t===4)return{indices:e,topology:"triangle-list"};if(![2,3,5,6].includes(t))throw new Error(`Invalid glTF primitive mode ${t}`);let r=[];if(t===2||t===3){for(let n=1;n<e.length;n++)r.push(e[n-1],e[n]);t===2&&e.length>1&&r.push(e[e.length-1],e[0])}else for(let n=2;n<e.length;n++)t===6?r.push(e[0],e[n-1],e[n]):n%2===0?r.push(e[n-2],e[n-1],e[n]):r.push(e[n-1],e[n-2],e[n]);return{indices:e instanceof Uint32Array?Uint32Array.from(r):Uint16Array.from(r),topology:t<=3?"line-list":"triangle-list"}}var xa=1179937895,Xs=1313821514,Zs=5130562,pr=class e{static isGlb(t){let r=t instanceof Uint8Array?t:new Uint8Array(t);return r.length<12?!1:new DataView(r.buffer,r.byteOffset,r.byteLength).getUint32(0,!0)===xa}static parse(t,r={},n){let{doc:A,binaryBuffers:o}=e.readDocument(t,n);e.checkExtensions(A);for(let i of A.meshes??[])for(let a of i.primitives){let s=a.extensions?.KHR_draco_mesh_compression;if(s){if(a.indices!==void 0){let c=A.accessors?.[a.indices];if(!c||c.bufferView===void 0&&!c.sparse)throw new Error("Draco indices without an uncompressed fallback require GltfLoader.parseAsync")}for(let c of Object.keys(s.attributes)){let l=a.attributes[c],u=l===void 0?void 0:A.accessors?.[l];if(!u||u.bufferView===void 0&&!u.sparse)throw new Error("Draco geometry without an uncompressed fallback requires GltfLoader.parseAsync")}}}return e.buildModel(A,o,r,n)}static async parseAsync(t,r={},n){let{doc:A,binaryBuffers:o}=e.readDocument(t,n);return e.checkExtensions(A,new Set(["EXT_meshopt_compression","KHR_meshopt_compression","KHR_draco_mesh_compression"])),await e.decodeMeshopt(A,o),await e.decodeDraco(A,o),e.buildModel(A,o,r,n)}static checkExtensions(t,r=new Set){for(let n of t.extensionsRequired??[])if(!Ws.has(n)&&!r.has(n))throw new Error(`glTF file requires ${n}, which framefields cannot decode or render`)}static async decodeMeshopt(t,r){let n=(t.bufferViews??[]).filter(A=>A.extensions?.EXT_meshopt_compression||A.extensions?.KHR_meshopt_compression);if(n.length){await co.ready;for(let A of n){if(A.extensions?.EXT_meshopt_compression&&A.extensions?.KHR_meshopt_compression)throw new Error("A buffer view cannot use both EXT and KHR meshopt compression");let o=A.extensions?.KHR_meshopt_compression??A.extensions?.EXT_meshopt_compression;if(!o)continue;let i=r[o.buffer];if(!i)throw new Error(`meshopt buffer ${o.buffer} not loaded`);let a=o.byteOffset??0;if(a<0||o.byteLength<0||a+o.byteLength>i.byteLength)throw new Error("Invalid meshopt compressed buffer range");let s=o.count*o.byteStride;if(!Number.isSafeInteger(o.count)||o.count<0||!Number.isSafeInteger(o.byteStride)||o.byteStride<1||!Number.isSafeInteger(s)||s!==A.byteLength)throw new Error("Invalid meshopt decoded buffer length");if(!["ATTRIBUTES","TRIANGLES","INDICES"].includes(o.mode)||!["NONE","OCTAHEDRAL","QUATERNION","EXPONENTIAL","COLOR"].includes(o.filter??"NONE"))throw new Error("Invalid meshopt compression mode or filter");let c=new Uint8Array(s);co.decodeGltfBuffer(c,o.count,o.byteStride,i.subarray(a,a+o.byteLength),o.mode,o.filter??"NONE"),A.buffer=r.length,A.byteOffset=0,r.push(c)}}}static async decodeDraco(t,r){let n=(t.meshes??[]).flatMap(i=>i.primitives).filter(i=>i.extensions?.KHR_draco_mesh_compression);if(!n.length)return;let A=await wa.default.createDecoderModule({}),o=new A.Decoder;try{for(let i of n){let a=i.extensions?.KHR_draco_mesh_compression;if(!a)continue;let s=t.bufferViews?.[a.bufferView];if(!s)throw new Error(`Draco bufferView ${a.bufferView} not found`);let c=r[s.buffer];if(!c)throw new Error(`Draco buffer ${s.buffer} not loaded`);let l=s.byteOffset??0;if(l<0||l+s.byteLength>c.byteLength)throw new Error("Invalid Draco buffer range");let u=c.subarray(l,l+s.byteLength),p=new A.DecoderBuffer,g=new A.Mesh;try{if(p.Init(new Int8Array(u.buffer,u.byteOffset,u.byteLength),u.byteLength),o.GetEncodedGeometryType(p)!==A.TRIANGULAR_MESH)throw new Error("Draco primitive is not a triangular mesh");let f=o.DecodeBufferToMesh(p,g),b=f.ok(),v=b?"":f.error_msg();if(A.destroy(f),!b)throw new Error(`Draco decode failed: ${v}`);let Q={};for(let[y,M]of Object.entries(a.attributes)){let T=i.attributes[y],N=T===void 0?void 0:t.accessors?.[T];if(T===void 0||!N)throw new Error(`Draco ${y} accessor not found`);let O=o.GetAttributeByUniqueId(g,M);if(!O)throw new Error(`Draco ${y} attribute ${M} not found`);let D=new A.DracoFloat32Array;try{if(!o.GetAttributeFloatForAllPoints(g,O,D))throw new Error(`Failed to decode Draco ${y}`);let H=g.num_points()*(lo[N.type]??1);if(N.count!==g.num_points()||D.size()!==H)throw new Error(`Invalid Draco ${y} attribute size`);let V=new Float32Array(H);for(let P=0;P<H;P++){let z=D.GetValue(P);N.normalized&&(N.componentType===5120?z=Math.max(z/127,-1):N.componentType===5121?z/=255:N.componentType===5122?z=Math.max(z/32767,-1):N.componentType===5123&&(z/=65535)),V[P]=z}Q[T]=V}finally{A.destroy(D)}}let x=g.num_points()>65535?new Uint32Array(g.num_faces()*3):new Uint16Array(g.num_faces()*3),_=new A.DracoInt32Array;try{for(let y=0;y<g.num_faces();y++){if(!o.GetFaceFromMesh(g,y,_))throw new Error(`Failed to decode Draco face ${y}`);for(let M=0;M<3;M++)x[y*3+M]=_.GetValue(M)}}finally{A.destroy(_)}i.decodedDraco={attributes:Q,indices:x}}finally{A.destroy(g),A.destroy(p)}}}finally{A.destroy(o)}}static readDocument(t,r){let n,A=[];if(typeof t=="string")try{n=JSON.parse(t)}catch(o){throw new Error(`Failed to parse glTF JSON: ${String(o)}`)}else{let o=t instanceof Uint8Array?t:new Uint8Array(t);if(e.isGlb(o)){let i=e.unpackGlb(o);n=i.doc,i.binBuffer&&A.push(i.binBuffer)}else{let i=new TextDecoder("utf-8").decode(o);n=JSON.parse(i)}}if(n.buffers)for(let o=0;o<n.buffers.length;o++){if(o===0&&A.length>0)continue;let i=n.buffers[o];if(i.uri){if(i.uri.startsWith("data:")){let a=i.uri.indexOf("base64,");if(a!==-1){let s=i.uri.substring(a+7),c=Buffer.from(s,"base64");A[o]=new Uint8Array(c.buffer,c.byteOffset,c.byteLength)}}else if(r){let a=$e.isAbsolute(i.uri)?i.uri:$e.join(r,i.uri);if(Pe.existsSync(a)){let s=Pe.readFileSync(a);A[o]=new Uint8Array(s.buffer,s.byteOffset,s.byteLength)}}}}return{doc:n,binaryBuffers:A}}static unpackGlb(t){let r=new DataView(t.buffer,t.byteOffset,t.byteLength),n=r.getUint32(0,!0),A=r.getUint32(8,!0);if(n!==xa)throw new Error("Invalid GLB header: magic mismatch");let o=12,i=null,a;for(;o<A&&o<t.byteLength;){let s=r.getUint32(o,!0),c=r.getUint32(o+4,!0);o+=8;let l=t.subarray(o,o+s);if(o+=s,c===Xs){let u=new TextDecoder("utf-8").decode(l);i=JSON.parse(u)}else c===Zs&&(a=l)}if(!i)throw new Error("Invalid GLB: JSON chunk not found");return{doc:i,binBuffer:a}}static readFloats(t,r,n){let A=t.accessors?.[n];if(!A)throw new Error(`Accessor ${n} not found`);let o=lo[A.type]??1,i=new Float32Array(A.count*o),a=ya[A.componentType]??4,s=Qa(A.componentType,A.normalized);if(A.bufferView!==void 0){let c=t.bufferViews?.[A.bufferView];if(!c)throw new Error(`BufferView ${A.bufferView} not found`);let l=r[c.buffer];if(!l)throw new Error(`Binary buffer ${c.buffer} not loaded`);let u=c.byteStride??a*o,p=new DataView(l.buffer,l.byteOffset,l.byteLength),g=(c.byteOffset??0)+(A.byteOffset??0);for(let f=0;f<A.count;f++)for(let b=0;b<o;b++)i[f*o+b]=s(p,g+f*u+b*a)}if(A.sparse){let c=A.sparse,l=t.bufferViews?.[c.indices.bufferView],u=t.bufferViews?.[c.values.bufferView];if(!l||!u)throw new Error(`Sparse accessor ${n} references a missing buffer view`);let p=r[l.buffer],g=r[u.buffer];if(!p||!g)throw new Error(`Sparse accessor ${n} references a missing buffer`);let f=Qa(c.indices.componentType),b=ya[c.indices.componentType],v=new DataView(p.buffer,p.byteOffset,p.byteLength),Q=new DataView(g.buffer,g.byteOffset,g.byteLength),x=(l.byteOffset??0)+(c.indices.byteOffset??0),_=(u.byteOffset??0)+(c.values.byteOffset??0);for(let y=0;y<c.count;y++){let M=f(v,x+y*b);if(M>=A.count)throw new Error(`Sparse accessor ${n} index ${M} is out of range`);for(let T=0;T<o;T++)i[M*o+T]=s(Q,_+(y*o+T)*a)}}return{data:i,itemSize:o,count:A.count}}static readIndices(t,r,n){let{data:A}=e.readFloats(t,r,n);return A.reduce((i,a)=>a>i?a:i,0)>65535?Uint32Array.from(A):Uint16Array.from(A)}static imageBytes(t,r,n,A){let o=t.images?.[n];if(!o)return;if(o.bufferView!==void 0){let a=t.bufferViews?.[o.bufferView],s=a?r[a.buffer]:void 0;if(!a||!s)return;let c=a.byteOffset??0;return{bytes:s.subarray(c,c+a.byteLength),mime:o.mimeType??"image/png"}}if(!o.uri)return;if(o.uri.startsWith("data:")){let a=o.uri.indexOf(","),s=o.uri.slice(5,o.uri.indexOf(";"));return{bytes:new Uint8Array(Buffer.from(o.uri.slice(a+1),"base64")),mime:s}}if(!A)return;let i=$e.isAbsolute(o.uri)?o.uri:$e.join(A,decodeURIComponent(o.uri));if(!Pe.existsSync(i)){e.warn(`Image "${o.uri}" was not found next to the model; textures using it are skipped.`);return}return{bytes:new Uint8Array(Pe.readFileSync(i)),mime:o.mimeType??Jn(i)}}static warn(t){console.warn(`[GltfLoader] ${t}`)}static texCoordOf(t){return t.extensions?.KHR_texture_transform?.texCoord??t.texCoord??0}static textureImage(t,r,n,A,o){let i=t.textures?.[n];if(!i)return;let a=i.extensions?.KHR_texture_basisu?.source??i.extensions?.EXT_texture_webp?.source??i.source;if(a===void 0)return;let s=e.imageBytes(t,r,a,A);if(!s)return;if(!ec.has(s.mime)){e.warn(`${o} is ${s.mime}, which framefields cannot decode; it is skipped (use PNG, JPEG or WebP).`);return}let c=i.sampler!==void 0?t.samplers?.[i.sampler]:void 0;return{...s,sampler:c}}static buildMaterial(t,r,n,A,o){let i=n.pbrMetallicRoughness,a=i?.baseColorFactor??[1,1,1,1],s={name:A,diffuseColor:a,roughness:i?.roughnessFactor??.5,metallic:i?.metallicFactor??0,shininess:32*(1-(i?.roughnessFactor??.5)),twoSided:n.doubleSided??!0,alphaMode:n.alphaMode==="MASK"?"mask":n.alphaMode==="BLEND"?"blend":"opaque",alphaCutoff:n.alphaMode==="MASK"?n.alphaCutoff??.5:0},c=n.emissiveFactor;c&&(c[0]>0||c[1]>0||c[2]>0)&&(s.emissive=[c[0],c[1],c[2]],s.emissiveStrength=n.extensions?.KHR_materials_emissive_strength?.emissiveStrength??1);let l=n.extensions?.VRMC_materials_mtoon;l?(s.shading="toon",s.shadeColor=l.shadeColorFactor??[1,1,1]):n.extensions?.KHR_materials_unlit&&(s.shading="unlit");let u=(x,_)=>{if(x)return e.textureImage(t,r,x.index,o,`The ${_} map of material "${A}"`)},p=u(i?.baseColorTexture,"base color");if(p){s.diffuseTextureBuffer=p.bytes,s.diffuseTextureMime=p.mime;let x=p.sampler?.wrapS;s.textureWrap=x===33071?"clamp":x===33648?"mirror":"repeat",p.sampler?.magFilter===9728&&(s.textureFilter="nearest")}let g=(x,_)=>u(x,_)?.bytes,f=g(n.normalTexture,"normal");f&&(s.normalTextureBuffer=f,s.normalScale=n.normalTexture?.scale??1);let b=g(i?.metallicRoughnessTexture,"metallic-roughness");b&&(s.metallicRoughnessTextureBuffer=b,s.roughness=i?.roughnessFactor??1,s.metallic=i?.metallicFactor??1);let v=g(n.occlusionTexture,"occlusion");v&&(s.occlusionTextureBuffer=v,s.occlusionStrength=n.occlusionTexture?.strength??1);let Q=s.emissive&&g(n.emissiveTexture,"emissive");return Q&&(s.emissiveTextureBuffer=Q),s}static buildNodes(t){let r=(t.nodes??[]).map((n,A)=>({name:n.name??`node_${A}`,parent:-1,translation:n.translation??[0,0,0],rotation:n.rotation??[0,0,0,1],scale:n.scale??[1,1,1],matrix:n.matrix?n.matrix:void 0}));return(t.nodes??[]).forEach((n,A)=>{for(let o of n.children??[]){let i=r[o];i&&(i.parent=A)}}),r}static buildAnimations(t,r,n){return(t.animations??[]).map((A,o)=>{let i=[],a=0;for(let s of A.channels){let c=A.samplers[s.sampler],l=s.target.node;if(!c||l===void 0)continue;let u=e.readFloats(t,r,c.input).data,p=e.readFloats(t,r,c.output).data;a=Math.max(a,u[u.length-1]??0);let g={nodeName:n[l]?.name??`node_${l}`,node:l,times:u,interpolation:c.interpolation==="STEP"?"step":c.interpolation==="CUBICSPLINE"?"cubic":"linear"};s.target.path==="translation"?g.translations=p:s.target.path==="rotation"?g.rotations=p:s.target.path==="scale"?g.scales=p:g.weights=p,i.push(g)}return{name:A.name??`Animation_${o}`,duration:a>0?a:1,fps:30,tracks:i}})}static buildModel(t,r,n,A){let o=(t.materials??[]).map((P,z,ee)=>{let Y=P.name??`material_${z}`;return ee.findIndex(($,W)=>($.name??`material_${W}`)===Y)===z?Y:`${Y}#${z}`}),i={};(t.materials??[]).forEach((P,z)=>{let ee=o[z];i[ee]=e.buildMaterial(t,r,P,ee,A)});let a=e.buildNodes(t),s=(t.skins??[]).map(P=>({joints:P.joints,inverseBindMatrices:P.inverseBindMatrices!==void 0?e.readFloats(t,r,P.inverseBindMatrices).data:Float32Array.from(P.joints.flatMap(()=>Ie.identity()))})),c=e.buildAnimations(t,r,a),l=(t.nodes??[]).flatMap((P,z)=>P.mesh!==void 0?[{mesh:P.mesh,node:z,skin:P.skin}]:[]),u=l.length>0?l:(t.meshes??[]).map((P,z)=>({mesh:z})),p={name:"glTF_Model",meshes:[],materials:i,nodes:a,skins:s,animations:c,bounds:{min:[0,0,0],max:[0,0,0],center:[0,0,0],size:[0,0,0],boundingSphereRadius:0}},g=EA(p,void 0,0),f=1/0,b=1/0,v=1/0,Q=-1/0,x=-1/0,_=-1/0,y=(P,z,ee)=>{P<f&&(f=P),P>Q&&(Q=P),z<b&&(b=z),z>x&&(x=z),ee<v&&(v=ee),ee>_&&(_=ee)};for(let P of u){let z=t.meshes?.[P.mesh];z&&z.primitives.forEach((ee,Y)=>{if(ee.attributes.POSITION===void 0)throw new Error(`glTF mesh ${P.mesh} primitive ${Y} has no POSITION attribute`);let $=ie=>{if(ie===void 0)return;let ce=ee.decodedDraco?.attributes[ie];if(!ce)return e.readFloats(t,r,ie);let he=t.accessors?.[ie];if(!he)throw new Error(`Accessor ${ie} not found`);return{data:ce,itemSize:lo[he.type]??1,count:he.count}},W=$(ee.attributes.POSITION),te=W.count,me=ee.material===void 0?void 0:t.materials?.[ee.material],ue=ee.attributes,oe=ie=>{if(!ie)return;let ce=e.texCoordOf(ie),he=ue[`TEXCOORD_${ce}`];if(he===void 0)throw new Error(`glTF mesh ${P.mesh} primitive ${Y} lacks TEXCOORD_${ce} required by a texture`);let Qe=$(he);if(!Qe)throw new Error(`glTF mesh ${P.mesh} has missing texture coordinates`);if(Qe.itemSize!==2||Qe.count!==te)throw new Error(`Invalid TEXCOORD_${ce} on glTF mesh ${P.mesh} primitive ${Y}`);let _e=ie.extensions?.KHR_texture_transform;return _e&&tc(Qe.data,_e),Qe.data},pe=oe(me?.pbrMetallicRoughness?.baseColorTexture)??$(ee.attributes.TEXCOORD_0)?.data??new Float32Array(te*2),Me={normal:oe(me?.normalTexture),metallicRoughness:oe(me?.pbrMetallicRoughness?.metallicRoughnessTexture),occlusion:oe(me?.occlusionTexture),emissive:oe(me?.emissiveTexture)},F=$(ee.attributes.COLOR_0),ve;if(F){ve=new Float32Array(te*4).fill(1);for(let ie=0;ie<te;ie++)for(let ce=0;ce<F.itemSize;ce++){let he=F.data[ie*F.itemSize+ce]??1;ve[ie*4+ce]=ce<3?$s(he):he}}let Se;if(ee.decodedDraco)Se=ee.decodedDraco.indices;else if(ee.indices!==void 0)Se=e.readIndices(t,r,ee.indices);else{Se=te>65535?new Uint32Array(te):new Uint16Array(te);for(let ie=0;ie<te;ie++)Se[ie]=ie}let Ne=qs(Se,ee.mode??4);Se=Ne.indices;let Ee=P.skin!==void 0&&ee.attributes.JOINTS_0!==void 0,m=!Ee&&P.node!==void 0?g[P.node]:void 0;for(let ie=0;ie<te;ie++){let ce=W.data[ie*3],he=W.data[ie*3+1],Qe=W.data[ie*3+2];if(m){let _e=Ie.projectPoint(m,[ce,he,Qe]);y(_e[0],_e[1],_e[2])}else y(ce,he,Qe)}let Ce=ee.targets?.map(ie=>{let ce=$(ie.POSITION),he=$(ie.NORMAL);if(ce&&(ce.count!==te||ce.itemSize!==3)||he&&(he.count!==te||he.itemSize!==3))throw new Error(`Invalid morph target on glTF mesh ${P.mesh} primitive ${Y}`);return{positions:ce?.data,normals:he?.data}}),be=(P.node===void 0?void 0:t.nodes?.[P.node]?.weights)??z.weights,ye=Ce?.map((ie,ce)=>be?.[ce]??0);p.meshes.push({id:`gltf_mesh_${P.mesh}_${Y}${P.node!==void 0?`_n${P.node}`:""}`,name:z.name??`Mesh_${P.mesh}`,positions:W.data,normals:$(ee.attributes.NORMAL)?.data??new Float32Array(te*3),uvs:pe,mapUvs:Me,morphTargets:Ce,morphWeights:ye,colors:ve,jointIndices:Ee?$(ee.attributes.JOINTS_0)?.data:void 0,jointWeights:Ee?$(ee.attributes.WEIGHTS_0)?.data:void 0,indices:Se,topology:Ne.topology,materialName:ee.material!==void 0?o[ee.material]:void 0,node:P.node,skin:Ee?P.skin:void 0})})}for(let P of s)if(P.joints.length>gr)throw new Error(`glTF skin has ${P.joints.length} joints; the mesh shader holds ${gr}`);Number.isFinite(f)||(f=b=v=0,Q=x=_=0);let M=Math.max(Q-f,x-b,_-v,1e-4),T=n.normalizeSize&&n.normalizeSize>0?n.normalizeSize/M:1,N=typeof n.scale=="number"?[n.scale,n.scale,n.scale]:n.scale??[1,1,1],O=[T*N[0],T*N[1],T*N[2]],D=n.center?[(f+Q)*.5,(b+x)*.5,(v+_)*.5]:[0,0,0];p.rootTransform=Ie.multiply(Ie.scale(O[0],O[1],O[2]),Ie.translate(-D[0],-D[1],-D[2]));let H=[(f-D[0])*O[0],(b-D[1])*O[1],(v-D[2])*O[2]],V=[(Q-D[0])*O[0],(x-D[1])*O[1],(_-D[2])*O[2]];return p.bounds={min:H,max:V,center:[(H[0]+V[0])*.5,(H[1]+V[1])*.5,(H[2]+V[2])*.5],size:[V[0]-H[0],V[1]-H[1],V[2]-H[2]],boundingSphereRadius:Math.hypot(V[0]-H[0],V[1]-H[1],V[2]-H[2])*.5},p}static async loadAsync(t,r={}){if(typeof t!="string")return e.parseAsync(t,r);let n=t.startsWith("file://")?t.replace("file://",""):t;return!t.trimStart().startsWith("{")&&Pe.existsSync(n)?e.parseAsync(Pe.readFileSync(n),r,$e.dirname(n)):e.parseAsync(t,r)}static load(t,r={}){if(typeof t!="string")return e.parse(t,r);let n=t.startsWith("file://")?t.replace("file://",""):t;if(t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.startsWith("file://")||!t.trimStart().startsWith("{")&&Pe.existsSync(n)){let A=Pe.readFileSync(n),o=$e.dirname(n);return e.parse(A,r,o)}return e.parse(t,r)}};function wA(e,t={}){return pr.load(e,t)}async function uo(e,t={}){return pr.loadAsync(e,t)}function Da(e,t={}){return pr.load(e,t)}function $s(e){let t=Math.min(Math.max(e,0),1);return t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055}var ec=new Set(["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/avif","image/ktx2"]);function tc(e,{offset:t=[0,0],rotation:r=0,scale:n=[1,1]}){let A=Math.cos(r),o=Math.sin(r);for(let i=0;i<e.length;i+=2){let a=e[i]*n[0],s=e[i+1]*n[1];e[i]=A*a-o*s+t[0],e[i+1]=o*a+A*s+t[1]}}q();vt();var rc=[[0,0,0,0],...Array.from({length:255},(e,t)=>{let r=(t+1)/256;return[r,r,r,1]})],$n=class e{static isVox(t){let r=t instanceof Uint8Array?t:new Uint8Array(t);return r.length<8?!1:new TextDecoder("ascii").decode(r.subarray(0,4))==="VOX "}static parse(t,r={}){let n=t instanceof Uint8Array?t:new Uint8Array(t),A=new DataView(n.buffer,n.byteOffset,n.byteLength);if(new TextDecoder("ascii").decode(n.subarray(0,4))!=="VOX ")throw new Error("Invalid VOX file: magic mismatch");let i=8,a=16,s=16,c=16,l=[],u=[...rc];for(;i+12<=n.byteLength;){let p=new TextDecoder("ascii").decode(n.subarray(i,i+4)),g=A.getUint32(i+4,!0);i+=12;let f=i;if(p==="SIZE")a=A.getUint32(f,!0),s=A.getUint32(f+4,!0),c=A.getUint32(f+8,!0);else if(p==="XYZI"){let b=A.getUint32(f,!0),v=f+4;for(let Q=0;Q<b&&!(v+4>n.byteLength);Q++){let x=A.getUint8(v),_=A.getUint8(v+1),y=A.getUint8(v+2),M=A.getUint8(v+3);v+=4,l.push({x,y:_,z:y,colorIndex:M})}}else if(p==="RGBA")for(let b=0;b<256;b++){let v=f+b*4;if(v+4>n.byteLength)break;let Q=A.getUint8(v)/255,x=A.getUint8(v+1)/255,_=A.getUint8(v+2)/255,y=A.getUint8(v+3)/255,M=b===255?0:b+1;u[M]=[Q,x,_,y]}i+=g}return e.buildModel(l,u,a,s,c,r)}static buildModel(t,r,n,A,o,i){let a=new Set;t.forEach(y=>a.add(`${y.x},${y.y},${y.z}`));let s=[],c=[],l=[],u=[],p=[],g=(y,M,T,N,O,D)=>{let H=s.length/3;s.push(...y,...M,...T,...N),c.push(...O,...O,...O,...O),l.push(...D,...D,...D,...D),u.push(0,0,1,0,1,1,0,1),p.push(H,H+1,H+2,H,H+2,H+3)};for(let y of t){let{x:M,y:T,z:N,colorIndex:O}=y,D=r[O]??[.8,.8,.8,1],H=M,V=-N,P=T;a.has(`${M+1},${T},${N}`)||g([H+1,V,P],[H+1,V-1,P],[H+1,V-1,P+1],[H+1,V,P+1],[1,0,0],D),a.has(`${M-1},${T},${N}`)||g([H,V,P+1],[H,V-1,P+1],[H,V-1,P],[H,V,P],[-1,0,0],D),a.has(`${M},${T},${N+1}`)||g([H,V-1,P],[H+1,V-1,P],[H+1,V-1,P+1],[H,V-1,P+1],[0,-1,0],D),a.has(`${M},${T},${N-1}`)||g([H,V,P+1],[H+1,V,P+1],[H+1,V,P],[H,V,P],[0,1,0],D),a.has(`${M},${T+1},${N}`)||g([H+1,V,P+1],[H+1,V-1,P+1],[H,V-1,P+1],[H,V,P+1],[0,0,1],D),a.has(`${M},${T-1},${N}`)||g([H,V,P],[H,V-1,P],[H+1,V-1,P],[H+1,V,P],[0,0,-1],D)}let f=Lt(s),b=xt(f,i),v=Ot(s,b),Q=Ht(p,v.length/3),x={name:"vox_default",diffuseColor:[1,1,1,1],shininess:32,specularIntensity:.4,...i.defaultMaterial};return{name:"VOX_Model",meshes:[{id:"vox_mesh_0",name:"vox_geometry",positions:v,normals:new Float32Array(c),uvs:new Float32Array(u),colors:new Float32Array(l),indices:Q,materialName:"vox_default"}],materials:{vox_default:x},animations:[],bounds:jt(f,b)}}static load(t,r={}){if(typeof t!="string")return e.parse(t,r);if(t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.startsWith("file://")){let n=t.startsWith("file://")?t.replace("file://",""):t,A=Pe.readFileSync(n);return e.parse(A,r)}throw new Error("VOX files must be binary buffers or local file paths")}};function DA(e,t={}){return $n.load(e,t)}q();vt();var go=19789,nc=15677,Ac=16384,oc=16640,ic=16656,ac=16672,sc=16704,cc=45055,lc=40960,uc=40992,gc=16,pc=17,eA=class e{static is3DS(t){let r=t instanceof Uint8Array?t:new Uint8Array(t);return r.length<6?!1:new DataView(r.buffer,r.byteOffset,r.byteLength).getUint16(0,!0)===go}static parse(t,r={}){let n=t instanceof Uint8Array?t:new Uint8Array(t),A=new DataView(n.buffer,n.byteOffset,n.byteLength);if(A.getUint16(0,!0)!==go)throw new Error("Invalid 3DS file: 0x4D4D magic mismatch");let i=[],a={};return e.readChunk(A,0,n.byteLength,i,a),e.buildModel(i,a,r)}static readChunk(t,r,n,A,o,i="Object"){let a=r;for(;a+6<=n&&a+6<=t.byteLength;){let s=t.getUint16(a,!0),c=t.getUint32(a+2,!0);if(c<6)break;let l=a+c,u=a+6,p=Math.min(l,n,t.byteLength);switch(s){case go:case nc:e.readChunk(t,u,p,A,o,i);break;case Ac:{let g=u;for(;g<p&&t.getUint8(g)!==0;)g++;let f=new Uint8Array(t.buffer,t.byteOffset+u,g-u),b=new TextDecoder("ascii").decode(f)||"Object";e.readChunk(t,g+1,p,A,o,b);break}case oc:{let g={name:i,positions:[],indices:[],uvs:[]};e.readTriMesh(t,u,p,g,o),g.positions.length>0&&g.indices.length>0&&A.push(g);break}case cc:e.readMaterial(t,u,p,o);break;default:break}a=l}}static readTriMesh(t,r,n,A,o){let i=r;for(;i+6<=n;){let a=t.getUint16(i,!0),s=t.getUint32(i+2,!0);if(s<6)break;let c=i+s,l=i+6;if(a===ic){let u=t.getUint16(l,!0),p=l+2;for(let g=0;g<u&&!(p+12>n);g++){let f=t.getFloat32(p,!0),b=t.getFloat32(p+4,!0),v=t.getFloat32(p+8,!0);A.positions.push(f,b,v),p+=12}}else if(a===ac){let u=t.getUint16(l,!0),p=l+2;for(let g=0;g<u&&!(p+8>n);g++){let f=t.getUint16(p,!0),b=t.getUint16(p+2,!0),v=t.getUint16(p+4,!0);A.indices.push(f,b,v),p+=8}}else if(a===sc){let u=t.getUint16(l,!0),p=l+2;for(let g=0;g<u&&!(p+8>n);g++){let f=t.getFloat32(p,!0),b=t.getFloat32(p+4,!0);A.uvs.push(f,1-b),p+=8}}i=c}}static readMaterial(t,r,n,A){let o=r,i="Material",a=[.8,.8,.8,1];for(;o+6<=n;){let s=t.getUint16(o,!0),c=t.getUint32(o+2,!0);if(c<6)break;let l=o+c,u=o+6;if(s===lc){let p=u;for(;p<l&&t.getUint8(p)!==0;)p++;let g=new Uint8Array(t.buffer,t.byteOffset+u,p-u);i=new TextDecoder("ascii").decode(g)||i}else if(s===uc&&u+6<=l){let p=t.getUint16(u,!0);if(p===gc&&u+18<=l){let g=t.getFloat32(u+6,!0),f=t.getFloat32(u+10,!0),b=t.getFloat32(u+14,!0);a=[g,f,b,1]}else if(p===pc&&u+9<=l){let g=t.getUint8(u+6)/255,f=t.getUint8(u+7)/255,b=t.getUint8(u+8)/255;a=[g,f,b,1]}}o=l}A[i]={name:i,diffuseColor:a,shininess:32,specularIntensity:.5}}static buildModel(t,r,n){let A=Lt(...t.map(a=>a.positions)),o=xt(A,n);return{name:"3DS_Model",meshes:t.map((a,s)=>{let c=Ot(a.positions,o),l=new Float32Array(a.positions.length);ur(c,a.indices,l);let u=a.uvs.length===a.positions.length/3*2?new Float32Array(a.uvs):new Float32Array(a.positions.length/3*2),p=Ht(a.indices,c.length/3);return{id:`3ds_mesh_${s}`,name:a.name,positions:c,normals:l,uvs:u,indices:p,materialName:a.materialName}}),materials:r,animations:[],bounds:jt(A,o)}}static load(t,r={}){if(typeof t!="string")return e.parse(t,r);if(t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.startsWith("file://")){let n=t.startsWith("file://")?t.replace("file://",""):t,A=Pe.readFileSync(n);return e.parse(A,r)}throw new Error("3DS files must be binary buffers or local file paths")}};function vA(e,t={}){return eA.load(e,t)}q();vt();var po=class e{static parse(t,r={}){let A=(typeof t=="string"?t:new TextDecoder("utf-8").decode(t instanceof Uint8Array?t:new Uint8Array(t))).split(/\r?\n/),o=0;for(;o<A.length&&(!A[o].trim()||A[o].trim().startsWith("#"));)o++;if(o>=A.length)throw new Error("Empty OFF file");let i=A[o++].trim(),a=!1,s=!1;if(i.startsWith("NOFF")||i.startsWith("STOFF"))a=!0;else if(i.startsWith("COFF"))s=!0;else if(!i.startsWith("OFF"))throw new Error("Invalid OFF header: missing 'OFF'");i=i.replace(/^(?:ST|CO|NO|C|N)?OFF\s*/i,"").trim();let c=0,l=0;if(i.length>0){let O=i.split(/\s+/);c=Number.parseInt(O[0]??"0",10),l=Number.parseInt(O[1]??"0",10)}else for(;o<A.length;){let O=A[o++].trim();if(!O||O.startsWith("#"))continue;let D=O.split(/\s+/);c=Number.parseInt(D[0]??"0",10),l=Number.parseInt(D[1]??"0",10);break}let u=[],p=[],g=[],f=[],b=[],v=0;for(;o<A.length&&v<c;){let O=A[o++].trim();if(!O||O.startsWith("#"))continue;let D=O.split(/\s+/),H=Number.parseFloat(D[0]??"0")||0,V=Number.parseFloat(D[1]??"0")||0,P=Number.parseFloat(D[2]??"0")||0;u.push(H,V,P);let z=3;if(a){let ee=Number.parseFloat(D[z]??"0")||0,Y=Number.parseFloat(D[z+1]??"0")||0,$=Number.parseFloat(D[z+2]??"0")||0;p.push(ee,Y,$),z+=3}else p.push(0,0,0);if(s&&D.length>z){let ee=(Number.parseFloat(D[z]??"255")||0)/(Number.parseFloat(D[z]??"255")>1?255:1),Y=(Number.parseFloat(D[z+1]??"255")||0)/(Number.parseFloat(D[z+1]??"255")>1?255:1),$=(Number.parseFloat(D[z+2]??"255")||0)/(Number.parseFloat(D[z+2]??"255")>1?255:1),W=D.length>z+3&&Number.parseFloat(D[z+3]??"1")||1;g.push(ee,Y,$,W)}f.push(0,0),v++}let Q=0;for(;o<A.length&&Q<l;){let O=A[o++].trim();if(!O||O.startsWith("#"))continue;let D=O.split(/\s+/),H=Number.parseInt(D[0]??"0",10);if(H>=3){let V=Number.parseInt(D[1]??"0",10);for(let P=1;P<H-1;P++){let z=Number.parseInt(D[P+1]??"0",10),ee=Number.parseInt(D[P+2]??"0",10);b.push(V,z,ee)}}Q++}(!a||r.smoothNormals)&&ur(u,b,p);let x=Lt(u),_=xt(x,r),y=Ot(u,_),M=Ht(b,y.length/3),T={name:"off_default",diffuseColor:s?[1,1,1,1]:[.8,.8,.85,1],shininess:32,specularIntensity:.5,...r.defaultMaterial};return{name:"OFF_Model",meshes:[{id:"off_mesh_0",name:"off_geometry",positions:y,normals:new Float32Array(p),uvs:new Float32Array(f),colors:s?new Float32Array(g):void 0,indices:M,materialName:"off_default"}],materials:{off_default:T},animations:[],bounds:jt(x,_)}}static load(t,r={}){if(typeof t!="string")return e.parse(t,r);if(t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.startsWith("file://")){let n=t.startsWith("file://")?t.replace("file://",""):t,A=Pe.readFileSync(n,"utf-8");return e.parse(A,r)}return e.parse(t,r)}};function _A(e,t={}){return po.load(e,t)}q();var va=`
144
- struct CameraUniforms {
145
- viewMatrix : mat4x4<f32>,
146
- projMatrix : mat4x4<f32>,
147
- viewProjMatrix : mat4x4<f32>,
148
- invViewProjMatrix : mat4x4<f32>,
149
- cameraPos : vec4<f32>, // xyz = eye, w = near
150
- cameraDir : vec4<f32>, // xyz = forward, w = far
151
- dofParams : vec4<f32>, // x = focusDistance, y = fStop, z = maxBlurRadius, w = dofEnabled
152
- screenParams : vec4<f32>, // x = surfaceWidth, y = surfaceHeight, z = time, w = unused
153
- };
154
-
155
- @group(0) @binding(0) var<uniform> cam : CameraUniforms;
156
- @group(0) @binding(1) var samp : sampler;
157
- @group(0) @binding(2) var colorTex : texture_2d<f32>;
158
- @group(0) @binding(3) var depthTex : texture_2d<f32>;
159
-
160
- struct VSOut {
161
- @builtin(position) pos : vec4<f32>,
162
- @location(0) uv : vec2<f32>,
163
- };
164
-
165
- @vertex
166
- fn vs_fullscreen(@builtin(vertex_index) vid : u32) -> VSOut {
167
- var out: VSOut;
168
- // Fullscreen triangle covering [-1, 1] NDC
169
- var coord = vec2<f32>(-1.0, -1.0);
170
- if (vid == 1u) {
171
- coord = vec2<f32>(3.0, -1.0);
172
- } else if (vid == 2u) {
173
- coord = vec2<f32>(-1.0, 3.0);
174
- }
175
- out.pos = vec4<f32>(coord, 0.0, 1.0);
176
- out.uv = coord * 0.5 + 0.5;
177
- out.uv.y = 1.0 - out.uv.y; // Flip Y for texture coordinates
178
- return out;
179
- }
180
-
181
- fn computeCoC(depth: f32) -> f32 {
182
- let focusDist = cam.dofParams.x;
183
- let maxBlur = cam.dofParams.z;
184
- if (focusDist <= 0.0 || maxBlur <= 0.0) {
185
- return 0.0;
186
- }
187
- let delta = abs(depth - focusDist);
188
- // Smooth non-linear ramp around focus plane
189
- return clamp((delta / (focusDist * 0.5 + 1.0)) * maxBlur, 0.0, maxBlur);
190
- }
191
-
192
- @fragment
193
- fn fs_dof(in: VSOut) -> @location(0) vec4<f32> {
194
- let centerColor = textureSampleLevel(colorTex, samp, in.uv, 0.0);
195
- let centerDepth = textureSampleLevel(depthTex, samp, in.uv, 0.0).r;
196
- let coc = computeCoC(centerDepth);
197
-
198
- // Skip if DoF is disabled or blur is negligible
199
- if (cam.dofParams.w < 0.5 || coc < 0.5) {
200
- return centerColor;
201
- }
202
-
203
- var accumColor = centerColor;
204
- var totalWeight = 1.0;
205
-
206
- let NUM_SAMPLES = 24;
207
- let GOLDEN_ANGLE = 2.39996323;
208
- let texelSize = 1.0 / cam.screenParams.xy;
209
-
210
- for (var i = 1; i <= NUM_SAMPLES; i = i + 1) {
211
- let theta = f32(i) * GOLDEN_ANGLE;
212
- let r = sqrt(f32(i) / f32(NUM_SAMPLES)) * coc;
213
- let offset = vec2<f32>(cos(theta), sin(theta)) * r * texelSize;
214
-
215
- let sampleUV = in.uv + offset;
216
- let sampleColor = textureSampleLevel(colorTex, samp, sampleUV, 0.0);
217
- let sampleDepth = textureSampleLevel(depthTex, samp, sampleUV, 0.0).r;
218
- let sampleCoC = computeCoC(sampleDepth);
219
-
220
- // Depth-aware bilateral rejection: prevent background bleed onto sharp foreground
221
- let depthDiff = sampleDepth - centerDepth;
222
- let weight = select(
223
- smoothstep(-10.0, 0.0, depthDiff) * clamp(sampleCoC / coc, 0.2, 1.0),
224
- 1.0,
225
- depthDiff >= 0.0
226
- );
227
-
228
- accumColor = accumColor + sampleColor * weight;
229
- totalWeight = totalWeight + weight;
230
- }
231
-
232
- return accumColor / totalWeight;
233
- }
234
- `;q();var fc=`
235
- struct BloomUniforms {
236
- texel : vec2<f32>, // 1 / source size
237
- threshold : f32,
238
- knee : f32,
239
- intensity : f32,
240
- mode : f32,
241
- _pad : vec2<f32>,
242
- tint : vec4<f32>,
243
- };
244
-
245
- @group(0) @binding(0) var<uniform> u : BloomUniforms;
246
- @group(0) @binding(1) var samp : sampler;
247
- @group(0) @binding(2) var src : texture_2d<f32>;
248
- @group(0) @binding(3) var base : texture_2d<f32>;
249
-
250
- struct VsOut {
251
- @builtin(position) pos : vec4<f32>,
252
- @location(0) uv : vec2<f32>,
253
- };
254
-
255
- @vertex
256
- fn vs(@builtin(vertex_index) i : u32) -> VsOut {
257
- let p = vec2<f32>(f32((i << 1u) & 2u), f32(i & 2u));
258
- var o : VsOut;
259
- o.pos = vec4<f32>(p * 2.0 - 1.0, 0.0, 1.0);
260
- o.uv = vec2<f32>(p.x, 1.0 - p.y);
261
- return o;
262
- }
263
-
264
- fn s(uv : vec2<f32>) -> vec3<f32> {
265
- return textureSampleLevel(src, samp, uv, 0.0).rgb;
266
- }
267
-
268
- // Jimenez's 13-tap downsample (Call of Duty: AW): stable, no fireflies.
269
- fn down13(uv : vec2<f32>) -> vec3<f32> {
270
- let t = u.texel;
271
- let a = s(uv + t * vec2<f32>(-2.0, -2.0));
272
- let b = s(uv + t * vec2<f32>(0.0, -2.0));
273
- let c = s(uv + t * vec2<f32>(2.0, -2.0));
274
- let d = s(uv + t * vec2<f32>(-2.0, 0.0));
275
- let e = s(uv);
276
- let f = s(uv + t * vec2<f32>(2.0, 0.0));
277
- let g = s(uv + t * vec2<f32>(-2.0, 2.0));
278
- let h = s(uv + t * vec2<f32>(0.0, 2.0));
279
- let i = s(uv + t * vec2<f32>(2.0, 2.0));
280
- let j = s(uv + t * vec2<f32>(-1.0, -1.0));
281
- let k = s(uv + t * vec2<f32>(1.0, -1.0));
282
- let l = s(uv + t * vec2<f32>(-1.0, 1.0));
283
- let m = s(uv + t * vec2<f32>(1.0, 1.0));
284
- return e * 0.125 + (a + c + g + i) * 0.03125 + (b + d + f + h) * 0.0625 + (j + k + l + m) * 0.125;
285
- }
286
-
287
- // Soft-knee threshold (keeps hue, fades in below the threshold).
288
- fn prefilter(c : vec3<f32>) -> vec3<f32> {
289
- let br = max(c.r, max(c.g, c.b));
290
- let kneeW = u.threshold * u.knee + 1e-4;
291
- var soft = clamp(br - u.threshold + kneeW, 0.0, 2.0 * kneeW);
292
- soft = soft * soft / (4.0 * kneeW);
293
- let w = max(soft, br - u.threshold) / max(br, 1e-4);
294
- return c * max(w, 0.0);
295
- }
296
-
297
- fn srgbToLinear(c : vec3<f32>) -> vec3<f32> {
298
- let lo = c / 12.92;
299
- let hi = pow((max(c, vec3<f32>(0.0)) + 0.055) / 1.055, vec3<f32>(2.4));
300
- return select(hi, lo, c <= vec3<f32>(0.04045));
301
- }
302
-
303
- fn linearToSrgb(c : vec3<f32>) -> vec3<f32> {
304
- let x = clamp(c, vec3<f32>(0.0), vec3<f32>(1.0));
305
- let lo = x * 12.92;
306
- let hi = 1.055 * pow(x, vec3<f32>(1.0 / 2.4)) - 0.055;
307
- return select(hi, lo, x <= vec3<f32>(0.0031308));
308
- }
309
-
310
- // mode 0: the source is linear scene radiance; mode 1: display-encoded color.
311
- @fragment
312
- fn fs_prefilter(in : VsOut) -> @location(0) vec4<f32> {
313
- var c = down13(in.uv);
314
- if (u.mode > 0.5) {
315
- c = srgbToLinear(c);
316
- }
317
- return vec4<f32>(prefilter(c), 1.0);
318
- }
319
-
320
- @fragment
321
- fn fs_down(in : VsOut) -> @location(0) vec4<f32> {
322
- return vec4<f32>(down13(in.uv), 1.0);
323
- }
324
-
325
- // 3x3 tent upsample; added onto the next-larger level by the blend state.
326
- @fragment
327
- fn fs_up(in : VsOut) -> @location(0) vec4<f32> {
328
- let t = u.texel;
329
- var c = s(in.uv) * 4.0;
330
- c += (s(in.uv + vec2<f32>(-t.x, 0.0)) + s(in.uv + vec2<f32>(t.x, 0.0)) + s(in.uv + vec2<f32>(0.0, -t.y)) + s(in.uv + vec2<f32>(0.0, t.y))) * 2.0;
331
- c += s(in.uv + vec2<f32>(-t.x, -t.y)) + s(in.uv + vec2<f32>(t.x, -t.y)) + s(in.uv + vec2<f32>(-t.x, t.y)) + s(in.uv + vec2<f32>(t.x, t.y));
332
- return vec4<f32>(c / 16.0, 1.0);
333
- }
334
-
335
- // Adds the glow in linear light over the premultiplied display image.
336
- @fragment
337
- fn fs_composite(in : VsOut) -> @location(0) vec4<f32> {
338
- let orig = textureSampleLevel(base, samp, in.uv, 0.0);
339
- let glow = max(textureSampleLevel(src, samp, in.uv, 0.0).rgb * u.intensity * u.tint.rgb, vec3<f32>(0.0));
340
- var lin = vec3<f32>(0.0);
341
- if (orig.a > 0.0001) {
342
- lin = srgbToLinear(orig.rgb / orig.a) * orig.a;
343
- }
344
- let sum = lin + glow;
345
- let a = clamp(max(orig.a, max(glow.r, max(glow.g, glow.b))), 0.0, 1.0);
346
- if (a <= 0.0001) {
347
- return vec4<f32>(0.0);
348
- }
349
- return vec4<f32>(linearToSrgb(sum / a) * a, a);
350
- }
351
- `,fo="rgba16float",MA=class{device;layout;prefilterPipe;downPipe;upPipe;compositePipes=new Map;module;pipelineLayout;sampler;mips=[];mipKey="";placeholder;uniformPool=new Xe(48,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST);constructor(t){this.device=t,this.module=t.createShaderModule({label:"bloom.wgsl",code:fc}),this.layout=t.createBindGroupLayout({label:"BloomLayout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}]}),this.pipelineLayout=t.createPipelineLayout({bindGroupLayouts:[this.layout]});let r=(n,A)=>t.createRenderPipeline({label:`Bloom:${n}`,layout:this.pipelineLayout,vertex:{module:this.module,entryPoint:"vs"},fragment:{module:this.module,entryPoint:n,targets:[{format:fo,...A&&{blend:{color:{srcFactor:"one",dstFactor:"one",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one",operation:"add"}}}}]},primitive:{topology:"triangle-list"}});this.prefilterPipe=r("fs_prefilter",!1),this.downPipe=r("fs_down",!1),this.upPipe=r("fs_up",!0),this.sampler=t.createSampler({label:"BloomSampler",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),this.placeholder=t.createTexture({size:{width:1,height:1},format:fo,usage:GPUTextureUsage.TEXTURE_BINDING})}compositePipe(t){let r=this.compositePipes.get(t);return r||(r=this.device.createRenderPipeline({label:"Bloom:composite",layout:this.pipelineLayout,vertex:{module:this.module,entryPoint:"vs"},fragment:{module:this.module,entryPoint:"fs_composite",targets:[{format:t}]},primitive:{topology:"triangle-list"}}),this.compositePipes.set(t,r)),r}ensureMips(t,r,n){let A=`${t}x${r}x${n}`;if(A===this.mipKey)return;for(let a of this.mips)a.destroy();this.mips=[];let o=t,i=r;for(let a=0;a<n&&(o=Math.max(1,Math.floor(o/2)),i=Math.max(1,Math.floor(i/2)),this.mips.push(this.device.createTexture({label:`BloomMip${a}`,size:{width:o,height:i},format:fo,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING})),!(o===1&&i===1));a++);this.mipKey=A}uniforms(t,r,n){let A=new Float32Array([t,r,n.threshold,n.knee,n.intensity,n.mode,0,0,n.tint[0],n.tint[1],n.tint[2],1]);return this.uniformPool.getBuffer(this.device,A)}pass(t,r,n,A,o,i,a){let s=this.device.createBindGroup({layout:this.layout,entries:[{binding:0,resource:{buffer:i}},{binding:1,resource:this.sampler},{binding:2,resource:A.createView()},{binding:3,resource:o.createView()}]}),c=t.beginRenderPass({colorAttachments:[{view:n,loadOp:a,storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});c.setPipeline(r),c.setBindGroup(0,s),c.draw(3),c.end()}apply(t,r,n,A={},o){let i=!o,a=f=>f<=.04045?f/12.92:((f+.055)/1.055)**2.4,s=A.threshold??(i?.85:2.5),c={intensity:A.intensity??.2,threshold:i?a(s):s,knee:A.knee??.4,tint:A.tint??[1,1,1],mode:i?1:0},l=Math.max(1,Math.min(8,Math.round(A.radius??6)));this.ensureMips(r.width,r.height,l);let u=this.mips,p=(f,b)=>this.uniforms(1/f,1/b,c),g=o??r;this.pass(t,this.prefilterPipe,u[0].createView(),g,this.placeholder,p(g.width,g.height),"clear");for(let f=1;f<u.length;f++){let b=u[f-1];this.pass(t,this.downPipe,u[f].createView(),b,this.placeholder,p(b.width,b.height),"clear")}for(let f=u.length-1;f>0;f--){let b=u[f];this.pass(t,this.upPipe,u[f-1].createView(),b,this.placeholder,p(b.width,b.height),"load")}this.pass(t,this.compositePipe(n.format),n.createView(),u[0],r,p(u[0].width,u[0].height),"clear")}resetPools(){this.uniformPool.reset()}destroy(){for(let t of this.mips)t.destroy();this.placeholder.destroy(),this.uniformPool.destroy()}};q();q();var fr=`
352
- struct CameraUniforms {
353
- viewMatrix : mat4x4<f32>,
354
- projMatrix : mat4x4<f32>,
355
- viewProjMatrix : mat4x4<f32>,
356
- invViewProjMatrix : mat4x4<f32>,
357
- cameraPos : vec4<f32>, // xyz = eye, w = near
358
- cameraDir : vec4<f32>, // xyz = forward, w = far
359
- dofParams : vec4<f32>, // x = focusDistance, y = fStop, z = maxBlurRadius, w = dofEnabled
360
- screenParams : vec4<f32>, // x = surfaceWidth, y = surfaceHeight, z = time, w = unused
361
- };
362
-
363
- struct GPULight {
364
- posType : vec4<f32>, // xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot)
365
- dirRadius : vec4<f32>, // xyz = normalized direction, w = radius / range
366
- colorIntensity : vec4<f32>, // rgb = sRGB color, w = intensity
367
- spotParams : vec4<f32>, // x = cos(outer), y = cos(inner), z = decay, w = unused
368
- };
369
-
370
- struct LightsUniforms {
371
- ambientColor : vec4<f32>, // rgb = ambient color * intensity (sRGB), w = unused
372
- params : vec4<f32>, // x = numLights, y = hasLights, z = physical (1), w = tone mapping (0 none, 1 ACES, 2 AgX, 3 PBR Neutral)
373
- lights : array<GPULight, 8>,
374
- // Appended after the original layout so older readers of the prefix still line up.
375
- ambientLinear : vec4<f32>, // rgb = ambient irradiance (linear), w = exposure multiplier
376
- envTop : vec4<f32>, // rgb = sky radiance (linear), w = environment rotation (rad)
377
- envHorizon : vec4<f32>, // rgb = horizon radiance, w = softbox strength
378
- envBottom : vec4<f32>, // rgb = ground radiance, w = environment enabled
379
- fog : vec4<f32>, // rgb = fog color (display linear), w = enabled
380
- fogRange : vec4<f32>, // x = start distance, y = full distance, z = max opacity, w = unused
381
- shadowParams : vec4<f32>, // x = enabled, y = shadowed light index, z = softness (texels), w = map size
382
- shadowBias : vec4<f32>, // x = depth bias, y = normal offset (world px), z = darkness 0..1, w = unused
383
- shadowMatrix : mat4x4<f32>,
384
- floorParams : vec4<f32>, // x = floorY, y = fadeDistance, z = isReflectionPass, w = unused
385
- };
386
-
387
- const PI = 3.14159265359;
388
-
389
- fn srgbToLinear(c: vec3<f32>) -> vec3<f32> {
390
- let lo = c / 12.92;
391
- let hi = pow((max(c, vec3<f32>(0.0)) + 0.055) / 1.055, vec3<f32>(2.4));
392
- return select(hi, lo, c <= vec3<f32>(0.04045));
393
- }
394
-
395
- fn linearToSrgb(c: vec3<f32>) -> vec3<f32> {
396
- let x = clamp(c, vec3<f32>(0.0), vec3<f32>(1.0));
397
- let lo = x * 12.92;
398
- let hi = 1.055 * pow(x, vec3<f32>(1.0 / 2.4)) - 0.055;
399
- return select(hi, lo, x <= vec3<f32>(0.0031308));
400
- }
401
-
402
- // \u2500\u2500 Tone mapping (linear scene \u2192 linear display, 0..1) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
403
-
404
- fn rrtAndOdtFit(v: vec3<f32>) -> vec3<f32> {
405
- let a = v * (v + 0.0245786) - 0.000090537;
406
- let b = v * (0.983729 * v + 0.4329510) + 0.238081;
407
- return a / b;
408
- }
409
-
410
- // Stephen Hill's fitted ACES (RRT + sRGB ODT).
411
- fn toneMapAces(c: vec3<f32>) -> vec3<f32> {
412
- let x = c / 0.6;
413
- var v = vec3<f32>(
414
- dot(vec3<f32>(0.59719, 0.35458, 0.04823), x),
415
- dot(vec3<f32>(0.07600, 0.90834, 0.01566), x),
416
- dot(vec3<f32>(0.02840, 0.13383, 0.83777), x),
417
- );
418
- v = rrtAndOdtFit(v);
419
- v = vec3<f32>(
420
- dot(vec3<f32>(1.60475, -0.53108, -0.07367), v),
421
- dot(vec3<f32>(-0.10208, 1.10813, -0.00605), v),
422
- dot(vec3<f32>(-0.00327, -0.07276, 1.07602), v),
423
- );
424
- return clamp(v, vec3<f32>(0.0), vec3<f32>(1.0));
425
- }
426
-
427
- fn agxContrast(x: vec3<f32>) -> vec3<f32> {
428
- let x2 = x * x;
429
- let x4 = x2 * x2;
430
- return 15.5 * x4 * x2 - 40.14 * x4 * x + 31.96 * x4 - 6.868 * x2 * x
431
- + 0.4298 * x2 + 0.1191 * x - 0.00232;
432
- }
433
-
434
- // AgX (Troy Sobotka), base look: graceful highlight roll-off that keeps
435
- // saturated emissives from clipping to flat primaries.
436
- fn toneMapAgx(c: vec3<f32>) -> vec3<f32> {
437
- let inset = mat3x3<f32>(
438
- 0.842479062253094, 0.0423282422610123, 0.0423756549057051,
439
- 0.0784335999999992, 0.878468636469772, 0.0784336,
440
- 0.0792237451477643, 0.0791661274605434, 0.879142973793104,
441
- );
442
- let outset = mat3x3<f32>(
443
- 1.19687900512017, -0.0528968517574562, -0.0529716355144438,
444
- -0.0980208811401368, 1.15190312990417, -0.0980434501171241,
445
- -0.0990297440797205, -0.0989611768448433, 1.15107367264116,
446
- );
447
- let minEv = -12.47393;
448
- let maxEv = 4.026069;
449
- var v = inset * max(c, vec3<f32>(0.0));
450
- v = clamp(log2(max(v, vec3<f32>(1e-10))), vec3<f32>(minEv), vec3<f32>(maxEv));
451
- v = (v - minEv) / (maxEv - minEv);
452
- v = agxContrast(v);
453
- v = outset * v;
454
- return clamp(pow(max(v, vec3<f32>(0.0)), vec3<f32>(2.2)), vec3<f32>(0.0), vec3<f32>(1.0));
455
- }
456
-
457
- // Khronos PBR Neutral: base colors come out as authored (hue and
458
- // saturation kept) up to near-white; only highlights are compressed.
459
- fn toneMapNeutral(cIn: vec3<f32>) -> vec3<f32> {
460
- let startCompression = 0.8 - 0.04;
461
- let desaturation = 0.15;
462
- var c = max(cIn, vec3<f32>(0.0));
463
- let x = min(c.r, min(c.g, c.b));
464
- let offset = select(0.04, x - 6.25 * x * x, x < 0.08);
465
- c = c - offset;
466
- let peak = max(c.r, max(c.g, c.b));
467
- if (peak < startCompression) {
468
- return c;
469
- }
470
- let d = 1.0 - startCompression;
471
- let newPeak = 1.0 - d * d / (peak + d - startCompression);
472
- c = c * (newPeak / peak);
473
- let g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);
474
- return mix(c, vec3<f32>(newPeak), g);
475
- }
476
-
477
- fn toneMap(c: vec3<f32>) -> vec3<f32> {
478
- let exposed = c * lights.ambientLinear.w;
479
- let mode = lights.params.w;
480
- if (mode > 2.5) {
481
- return toneMapNeutral(exposed);
482
- }
483
- if (mode > 1.5) {
484
- return toneMapAgx(exposed);
485
- }
486
- if (mode > 0.5) {
487
- return toneMapAces(exposed);
488
- }
489
- return clamp(exposed, vec3<f32>(0.0), vec3<f32>(1.0));
490
- }
491
-
492
- // \u2500\u2500 Procedural studio environment (image-based light) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
493
-
494
- // A rectangular-ish softbox seen from the scene: bright inside its angular
495
- // radius, blurring out with roughness while keeping roughly the same energy.
496
- fn softbox(d: vec3<f32>, axis: vec3<f32>, radius: f32, rough: f32) -> f32 {
497
- let cosA = dot(d, axis);
498
- let edge = cos(radius + rough * 0.9);
499
- let width = 0.004 + rough * rough * 0.5;
500
- let lobe = smoothstep(edge - width, edge + width * 0.25, cosA);
501
- return lobe / (1.0 + rough * rough * 6.0);
502
- }
503
-
504
- /// Radiance arriving from direction d (world space; y points down), as a
505
- /// surface of the given roughness sees it.
506
- fn envRadiance(dirIn: vec3<f32>, rough: f32) -> vec3<f32> {
507
- if (lights.envBottom.w < 0.5) {
508
- return vec3<f32>(0.0);
509
- }
510
- let rot = lights.envTop.w;
511
- let c = cos(rot);
512
- let s = sin(rot);
513
- let d = normalize(vec3<f32>(c * dirIn.x + s * dirIn.z, dirIn.y, -s * dirIn.x + c * dirIn.z));
514
- let up = -d.y;
515
- let spread = 0.35 + rough * 0.9;
516
- let tUp = smoothstep(-0.05, spread, up);
517
- let tDown = smoothstep(-0.05, spread, -up);
518
- var col = mix(lights.envHorizon.rgb, lights.envTop.rgb, tUp);
519
- col = mix(col, lights.envBottom.rgb, tDown);
520
- let k = lights.envHorizon.w;
521
- if (k > 0.0) {
522
- // Key softbox overhead-front-left, a rim strip behind-right, a fill strip left.
523
- let key = softbox(d, normalize(vec3<f32>(-0.35, -0.85, -0.4)), 0.32, rough);
524
- let rim = softbox(d, normalize(vec3<f32>(0.75, -0.35, 0.55)), 0.2, rough);
525
- let fill = softbox(d, normalize(vec3<f32>(-0.92, -0.15, -0.2)), 0.16, rough);
526
- col += vec3<f32>(k * (key * 1.0 + rim * 0.7 + fill * 0.35));
527
- }
528
- return col;
529
- }
530
-
531
- // Karis' analytic approximation of the split-sum environment BRDF.
532
- fn envBrdfApprox(f0: vec3<f32>, rough: f32, nDotV: f32) -> vec3<f32> {
533
- let c0 = vec4<f32>(-1.0, -0.0275, -0.572, 0.022);
534
- let c1 = vec4<f32>(1.0, 0.0425, 1.04, -0.04);
535
- let r = rough * c0 + c1;
536
- let a004 = min(r.x * r.x, exp2(-9.28 * nDotV)) * r.x + r.y;
537
- let ab = vec2<f32>(-1.04, 1.04) * a004 + r.zw;
538
- return f0 * ab.x + ab.y;
539
- }
540
-
541
- // \u2500\u2500 Shadows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
542
-
543
- var<private> POISSON : array<vec2<f32>, 12> = array<vec2<f32>, 12>(
544
- vec2<f32>(-0.326, -0.406), vec2<f32>(-0.840, -0.074), vec2<f32>(-0.696, 0.457),
545
- vec2<f32>(-0.203, 0.621), vec2<f32>(0.962, -0.195), vec2<f32>(0.473, -0.480),
546
- vec2<f32>(0.519, 0.767), vec2<f32>(0.185, -0.893), vec2<f32>(0.507, 0.064),
547
- vec2<f32>(0.896, 0.412), vec2<f32>(-0.322, -0.933), vec2<f32>(-0.792, -0.598),
548
- );
549
-
550
- /// 1 = fully lit, 0 = fully shadowed, for light index i.
551
- fn shadowFactor(worldPos: vec3<f32>, N: vec3<f32>, i: i32) -> f32 {
552
- if (lights.shadowParams.x < 0.5 || i32(lights.shadowParams.y) != i) {
553
- return 1.0;
554
- }
555
- let p = worldPos + N * lights.shadowBias.y;
556
- let lp = lights.shadowMatrix * vec4<f32>(p, 1.0);
557
- let ndc = lp.xyz / lp.w;
558
- let uv = vec2<f32>(ndc.x * 0.5 + 0.5, 0.5 - ndc.y * 0.5);
559
- if (lp.w <= 0.0 || uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0 || ndc.z > 1.0) {
560
- return 1.0;
561
- }
562
- let texel = 1.0 / max(lights.shadowParams.w, 1.0);
563
- let radius = lights.shadowParams.z * texel;
564
- let depthRef = ndc.z - lights.shadowBias.x;
565
- var lit = 0.0;
566
- for (var k = 0; k < 12; k++) {
567
- lit += textureSampleCompareLevel(shadowMap, shadowSampler, uv + POISSON[k] * radius, depthRef);
568
- }
569
- lit = lit / 12.0;
570
- return mix(1.0, lit, lights.shadowBias.z);
571
- }
572
-
573
- // \u2500\u2500 Lights \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
574
-
575
- struct LightSample {
576
- L : vec3<f32>,
577
- attenuation : f32,
578
- valid : bool,
579
- };
580
-
581
- fn sampleLight(i: i32, worldPos: vec3<f32>) -> LightSample {
582
- var out = LightSample(vec3<f32>(0.0, 0.0, 1.0), 1.0, false);
583
- let light = lights.lights[i];
584
- let lightType = light.posType.w;
585
- if (lightType > 0.5 && lightType < 1.5) {
586
- out.L = normalize(-light.dirRadius.xyz);
587
- out.valid = true;
588
- return out;
589
- }
590
- if (lightType < 1.5) {
591
- return out;
592
- }
593
- let toLight = light.posType.xyz - worldPos;
594
- let dist = length(toLight);
595
- let radius = max(1.0, light.dirRadius.w);
596
- if (dist > radius) {
597
- return out;
598
- }
599
- out.L = normalize(toLight);
600
- let dNorm = clamp(dist / radius, 0.0, 1.0);
601
- let decay = max(0.5, light.spotParams.z);
602
- out.attenuation = pow(clamp(1.0 - dNorm, 0.0, 1.0), decay);
603
- if (lightType > 2.5) {
604
- let spotDir = normalize(light.dirRadius.xyz);
605
- let cosAngle = dot(-out.L, spotDir);
606
- if (cosAngle < light.spotParams.x) {
607
- return out;
608
- }
609
- out.attenuation *= smoothstep(light.spotParams.x, light.spotParams.y, cosAngle);
610
- }
611
- out.valid = true;
612
- return out;
613
- }
614
-
615
- // Blinn-Phong in display space: the original look, plus shadows when a
616
- // light casts them.
617
- fn applyLighting3D(worldPos: vec3<f32>, worldNormal: vec3<f32>, baseColor: vec3<f32>, material: vec4<f32>) -> vec3<f32> {
618
- if (lights.params.y < 0.5 || material.w < 0.5) {
619
- return baseColor;
620
- }
621
- var N = normalize(worldNormal);
622
- let V = normalize(cam.cameraPos.xyz - worldPos);
623
- if (dot(N, V) < 0.0) {
624
- N = -N;
625
- }
626
- let shininess = max(1.0, material.x);
627
- let specularInt = material.y;
628
- let ambientInt = material.z;
629
-
630
- var totalIllumination = baseColor * (lights.ambientColor.rgb * ambientInt);
631
- let numLights = i32(lights.params.x);
632
- for (var i = 0; i < 8; i++) {
633
- if (i >= numLights) {
634
- break;
635
- }
636
- let ls = sampleLight(i, worldPos);
637
- if (!ls.valid) {
638
- continue;
639
- }
640
- let light = lights.lights[i];
641
- let lightColor = light.colorIntensity.rgb;
642
- let intensity = light.colorIntensity.w;
643
- let NdotL = max(dot(N, ls.L), 0.0);
644
- let diffuse = baseColor * lightColor * (NdotL * intensity * ls.attenuation);
645
- var specular = vec3<f32>(0.0);
646
- if (NdotL > 0.0 && specularInt > 0.001) {
647
- let H = normalize(ls.L + V);
648
- let NdotH = max(dot(N, H), 0.0);
649
- specular = lightColor * (pow(NdotH, shininess) * specularInt * intensity * ls.attenuation);
650
- }
651
- totalIllumination += (diffuse + specular) * shadowFactor(worldPos, N, i);
652
- }
653
- return totalIllumination;
654
- }
655
-
656
- // GGX / Smith-correlated / Schlick, image-based light from envRadiance.
657
- // Returns linear scene radiance (unbounded).
658
- fn shadePhysical(worldPos: vec3<f32>, worldNormal: vec3<f32>, albedo: vec3<f32>, rough: f32, metal: f32, ambientInt: f32) -> vec3<f32> {
659
- var N = normalize(worldNormal);
660
- let V = normalize(cam.cameraPos.xyz - worldPos);
661
- if (dot(N, V) < 0.0) {
662
- N = -N;
663
- }
664
- let nDotV = max(dot(N, V), 1e-4);
665
- let r = clamp(rough, 0.03, 1.0);
666
- let a = r * r;
667
- let a2 = a * a;
668
- let f0 = mix(vec3<f32>(0.04), albedo, metal);
669
- let diffuseColor = albedo * (1.0 - metal);
670
-
671
- var lo = vec3<f32>(0.0);
672
- let numLights = i32(lights.params.x);
673
- for (var i = 0; i < 8; i++) {
674
- if (i >= numLights) {
675
- break;
676
- }
677
- let ls = sampleLight(i, worldPos);
678
- if (!ls.valid) {
679
- continue;
680
- }
681
- let light = lights.lights[i];
682
- let nDotL = max(dot(N, ls.L), 0.0);
683
- if (nDotL <= 0.0) {
684
- continue;
685
- }
686
- let H = normalize(ls.L + V);
687
- let nDotH = max(dot(N, H), 0.0);
688
- let vDotH = max(dot(V, H), 0.0);
689
- let dDen = nDotH * nDotH * (a2 - 1.0) + 1.0;
690
- let D = a2 / (PI * dDen * dDen);
691
- let gv = nDotL * sqrt(nDotV * nDotV * (1.0 - a2) + a2);
692
- let gl = nDotV * sqrt(nDotL * nDotL * (1.0 - a2) + a2);
693
- let Vis = 0.5 / max(gv + gl, 1e-5);
694
- let F = f0 + (vec3<f32>(1.0) - f0) * pow(1.0 - vDotH, 5.0);
695
- let spec = D * Vis * F;
696
- let diff = (vec3<f32>(1.0) - F) * diffuseColor / PI;
697
- // x PI so a white light of intensity 1 lights a white wall about as
698
- // brightly as the legacy shading does.
699
- let radiance = srgbToLinear(light.colorIntensity.rgb) * light.colorIntensity.w * ls.attenuation * PI;
700
- lo += (diff + spec) * radiance * nDotL * shadowFactor(worldPos, N, i);
701
- }
702
-
703
- let R = reflect(-V, N);
704
- let irradiance = envRadiance(N, 1.0) + lights.ambientLinear.rgb;
705
- let specEnv = envRadiance(R, r) * envBrdfApprox(f0, r, nDotV);
706
- lo += (diffuseColor * irradiance + specEnv) * ambientInt;
707
- return lo;
708
- }
709
-
710
- struct Shaded {
711
- /** Display-encoded (sRGB) color for the color target. */
712
- display : vec3<f32>,
713
- /** Unclamped scene-referred linear radiance, for the bloom target. */
714
- hdr : vec3<f32>,
715
- };
716
-
717
- /// Shades a surface for the scene's mode.
718
- /// material: x shininess, y specularIntensity, z ambientIntensity, w mode (0 unlit).
719
- /// pbr: x roughness (<0 = default), y metallic, z/w unused.
720
- /// emissive: rgb sRGB color, w strength.
721
- fn shadeSurfaceFull(worldPos: vec3<f32>, worldNormal: vec3<f32>, baseColor: vec3<f32>, material: vec4<f32>, pbr: vec4<f32>, emissive: vec4<f32>) -> Shaded {
722
- var out: Shaded;
723
- if (lights.params.z < 0.5) {
724
- var c = baseColor;
725
- if (material.w >= 0.5) {
726
- c = applyLighting3D(worldPos, worldNormal, baseColor, material);
727
- }
728
- c += emissive.rgb * emissive.w;
729
- out.display = c;
730
- out.hdr = srgbToLinear(clamp(c, vec3<f32>(0.0), vec3<f32>(1.0))) * max(max(c.r, max(c.g, c.b)), 1.0);
731
- return out;
732
- }
733
- var radiance: vec3<f32>;
734
- if (material.w < 0.5) {
735
- radiance = srgbToLinear(baseColor);
736
- } else {
737
- let rough = select(pbr.x, 0.5, pbr.x < 0.0);
738
- radiance = shadePhysical(worldPos, worldNormal, srgbToLinear(baseColor), rough, clamp(pbr.y, 0.0, 1.0), material.z);
739
- }
740
- radiance += srgbToLinear(emissive.rgb) * emissive.w;
741
- var display: vec3<f32>;
742
- if (material.w < 0.5) {
743
- // Unlit layers keep their exact authored colors.
744
- display = clamp(radiance, vec3<f32>(0.0), vec3<f32>(1.0));
745
- } else {
746
- display = toneMap(radiance);
747
- }
748
- var hdr = radiance * lights.ambientLinear.w;
749
- if (lights.fog.w > 0.5) {
750
- let dist = distance(worldPos, cam.cameraPos.xyz);
751
- let f = smoothstep(lights.fogRange.x, max(lights.fogRange.y, lights.fogRange.x + 1.0), dist) * lights.fogRange.z;
752
- display = mix(display, lights.fog.rgb, f);
753
- hdr = hdr * (1.0 - f);
754
- }
755
- if (lights.floorParams.z > 0.5) {
756
- if (worldPos.y > lights.floorParams.x + 0.1) {
757
- discard;
758
- }
759
- if (lights.floorParams.y > 0.0) {
760
- let deltaY = max(0.0, lights.floorParams.x - worldPos.y);
761
- let fade = exp(-deltaY / lights.floorParams.y);
762
- display = display * fade;
763
- hdr = hdr * fade;
764
- }
765
- }
766
- out.display = linearToSrgb(display);
767
- out.hdr = hdr;
768
- return out;
769
- }
770
-
771
- fn shadeSurface(worldPos: vec3<f32>, worldNormal: vec3<f32>, baseColor: vec3<f32>, material: vec4<f32>, pbr: vec4<f32>, emissive: vec4<f32>) -> vec3<f32> {
772
- return shadeSurfaceFull(worldPos, worldNormal, baseColor, material, pbr, emissive).display;
773
- }
774
- `,dr=`
775
- @group(3) @binding(0) var<uniform> lights : LightsUniforms;
776
- @group(3) @binding(1) var shadowMap : texture_depth_2d;
777
- @group(3) @binding(2) var shadowSampler : sampler_comparison;
778
- `;q();var _a="rgba16float",dc="rgba16float";function mt(e,t){let r=n=>e.createRenderPipeline({label:`${t.label}${n?"Mrt":"Single"}`,layout:t.layout,vertex:t.vertex,fragment:{module:t.module,entryPoint:n?"fs_mrt":"fs_single",targets:[{format:t.format,blend:dA},...n?[{format:_a}]:[]]},depthStencil:t.depthStencil,primitive:t.primitive,multisample:t.multisample});return{single:r(!1),mrt:r(!0)}}var ut=class{constructor(t,r){this.device=t;this.base=r}device;base;cache=new Map;get(t){let r=this.cache.get(t);if(!r){let n=this.base;r=this.device.createRenderPipeline({label:`${n.label}${t?"MrtBloom":"Bloom"}`,layout:n.layout,vertex:n.vertex,fragment:{module:n.module,entryPoint:t?"fs_mrt_bloom":"fs_single_bloom",targets:[{format:n.format,blend:dA},...t?[{format:_a}]:[],{format:dc,blend:dA}]},depthStencil:n.depthStencil,primitive:n.primitive,multisample:n.multisample}),this.cache.set(t,r)}return r}};function SA(e,t,r,n){let A=r??t,o=n??[1,1,1,1];for(let i=0;i<16;i++)e[i]=t[i]??0,e[16+i]=A[i]??0;e[32]=o[0],e[33]=o[1],e[34]=o[2],e[35]=o[3]}var hc=`
779
- struct BlurUniforms {
780
- texelStep : vec2<f32>,
781
- radius : f32,
782
- _pad : f32,
783
- };
784
-
785
- @group(0) @binding(0) var<uniform> u : BlurUniforms;
786
- @group(0) @binding(1) var samp : sampler;
787
- @group(0) @binding(2) var src : texture_2d<f32>;
788
-
789
- struct VsOut {
790
- @builtin(position) pos : vec4<f32>,
791
- @location(0) uv : vec2<f32>,
792
- };
793
-
794
- @vertex
795
- fn vs(@builtin(vertex_index) i : u32) -> VsOut {
796
- let p = vec2<f32>(f32((i << 1u) & 2u), f32(i & 2u));
797
- var o : VsOut;
798
- o.pos = vec4<f32>(p * 2.0 - 1.0, 0.0, 1.0);
799
- o.uv = vec2<f32>(p.x, 1.0 - p.y);
800
- return o;
801
- }
802
-
803
- @fragment
804
- fn fs(in : VsOut) -> @location(0) vec4<f32> {
805
- if (u.radius <= 0.01) {
806
- return textureSampleLevel(src, samp, in.uv, 0.0);
807
- }
808
- var col = vec4<f32>(0.0);
809
- var totalW = 0.0;
810
- let sigma = max(0.5, u.radius * 0.45);
811
- let inv2Sigma2 = 0.5 / (sigma * sigma);
812
- for (var k = -8; k <= 8; k = k + 1) {
813
- let fk = f32(k);
814
- let offsetFrac = fk * 0.125 * u.radius;
815
- let w = exp(-(offsetFrac * offsetFrac) * inv2Sigma2);
816
- let sampleUV = clamp(in.uv + u.texelStep * offsetFrac, vec2<f32>(0.001), vec2<f32>(0.999));
817
- col += textureSampleLevel(src, samp, sampleUV, 0.0) * w;
818
- totalW += w;
819
- }
820
- return col / max(totalW, 0.0001);
821
- }
822
- `,Ic=`
823
- ${fr}
824
-
825
- struct FloorUniforms {
826
- params0 : vec4<f32>, // x = floorY, y = reflectivity, z = roughness, w = fadeDistance
827
- params1 : vec4<f32>, // x = opacity, y = unused, z = unused, w = unused
828
- baseColor : vec4<f32>, // rgb = base linear color, a = 1.0
829
- };
830
-
831
- @group(0) @binding(0) var<uniform> cam : CameraUniforms;
832
- @group(1) @binding(0) var<uniform> floorU : FloorUniforms;
833
- @group(2) @binding(0) var reflectionTexture : texture_2d<f32>;
834
- @group(2) @binding(1) var reflectionSampler : sampler;
835
- ${dr}
836
-
837
- struct VsOut {
838
- @builtin(position) pos : vec4<f32>,
839
- @location(0) uv : vec2<f32>,
840
- };
841
-
842
- @vertex
843
- fn vs_floor(@builtin(vertex_index) vid : u32) -> VsOut {
844
- let p = vec2<f32>(f32((vid << 1u) & 2u), f32(vid & 2u));
845
- var o : VsOut;
846
- o.pos = vec4<f32>(p * 2.0 - 1.0, 0.0, 1.0);
847
- o.uv = vec2<f32>(p.x, 1.0 - p.y);
848
- return o;
849
- }
850
-
851
- struct FloorShaded {
852
- display : vec3<f32>,
853
- hdr : vec3<f32>,
854
- depth : f32,
855
- linearDepth : f32,
856
- alpha : f32,
857
- };
858
-
859
- fn shadeFloor(in: VsOut) -> FloorShaded {
860
- var out: FloorShaded;
861
-
862
- let ndcX = in.uv.x * 2.0 - 1.0;
863
- let ndcY = 1.0 - 2.0 * in.uv.y;
864
-
865
- let pNear = cam.invViewProjMatrix * vec4<f32>(ndcX, ndcY, 0.0, 1.0);
866
- let pFar = cam.invViewProjMatrix * vec4<f32>(ndcX, ndcY, 1.0, 1.0);
867
-
868
- let p0 = pNear.xyz / pNear.w;
869
- let p1 = pFar.xyz / pFar.w;
870
-
871
- let D = normalize(p1 - p0);
872
- let O = p0;
873
-
874
- let floorY = floorU.params0.x;
875
- let diffY = floorY - O.y;
876
- if (diffY * D.y <= 0.0001) {
877
- discard;
878
- }
879
-
880
- let t = diffY / D.y;
881
- let worldP = O + t * D;
882
-
883
- let clip = cam.viewProjMatrix * vec4<f32>(worldP, 1.0);
884
- let depth = clip.z / clip.w;
885
- if (depth < 0.0 || depth > 1.0) {
886
- discard;
887
- }
888
-
889
- out.depth = depth;
890
- out.linearDepth = dot(worldP - cam.cameraPos.xyz, cam.cameraDir.xyz);
891
-
892
- let N = vec3<f32>(0.0, -1.0, 0.0);
893
- let toCam = cam.cameraPos.xyz - worldP;
894
- let dist = length(toCam);
895
- let V = toCam / max(dist, 0.0001);
896
- let NdotV = max(0.0, dot(N, V));
897
-
898
- let F0 = floorU.params0.y;
899
- let fresnel = F0 + (1.0 - F0) * pow(1.0 - NdotV, 5.0);
900
-
901
- let fadeDist = max(floorU.params0.w, 1.0);
902
- let distFade = clamp(1.0 - dist / (fadeDist * 2.2), 0.0, 1.0);
903
- let horizonFade = smoothstep(0.015, 0.14, NdotV);
904
- let smoothFade = distFade * distFade * (3.0 - 2.0 * distFade) * horizonFade;
905
-
906
- let reflUV = vec2<f32>(in.uv.x, 1.0 - in.uv.y);
907
- let reflSample = textureSample(reflectionTexture, reflectionSampler, reflUV);
908
- let reflRgb = reflSample.rgb;
909
-
910
- let baseColor = floorU.baseColor.rgb;
911
- let opacity = floorU.params1.x;
912
-
913
- let baseSrgb = linearToSrgb(baseColor);
914
- let reflWeight = fresnel * floorU.params0.y * smoothFade;
915
- let reflSrgb = reflRgb * reflWeight;
916
-
917
- var displaySrgb = select(
918
- clamp(baseSrgb + reflSrgb, vec3<f32>(0.0), vec3<f32>(1.0)),
919
- reflSrgb,
920
- opacity <= 0.001,
921
- );
922
-
923
- let reflLin = pow(max(reflRgb, vec3<f32>(0.0)), vec3<f32>(2.2));
924
- let reflLum = max(reflLin.r, max(reflLin.g, reflLin.b));
925
- var hdr = reflLin * max(0.0, reflLum - 0.25) * 3.0 * reflWeight;
926
-
927
- if (lights.fog.w > 0.5) {
928
- let f = smoothstep(lights.fogRange.x, max(lights.fogRange.y, lights.fogRange.x + 1.0), dist) * lights.fogRange.z;
929
- displaySrgb = mix(displaySrgb, linearToSrgb(lights.fog.rgb), f);
930
- hdr = hdr * (1.0 - f);
931
- }
932
-
933
- let a = select(opacity * smoothFade, clamp(reflSample.a * reflWeight, 0.0, 1.0), opacity <= 0.001);
934
- out.display = displaySrgb;
935
- out.hdr = hdr;
936
- out.alpha = a;
937
- return out;
938
- }
939
-
940
- struct FsOutputSingle {
941
- @location(0) color : vec4<f32>,
942
- @builtin(frag_depth) depth : f32,
943
- };
944
-
945
- struct FsOutputMrt {
946
- @location(0) color : vec4<f32>,
947
- @location(1) linearDepth : vec4<f32>,
948
- @builtin(frag_depth) depth : f32,
949
- };
950
-
951
- struct FsOutputSingleBloom {
952
- @location(0) color : vec4<f32>,
953
- @location(1) hdr : vec4<f32>,
954
- @builtin(frag_depth) depth : f32,
955
- };
956
-
957
- struct FsOutputMrtBloom {
958
- @location(0) color : vec4<f32>,
959
- @location(1) linearDepth : vec4<f32>,
960
- @location(2) hdr : vec4<f32>,
961
- @builtin(frag_depth) depth : f32,
962
- };
963
-
964
- @fragment
965
- fn fs_single(in: VsOut) -> FsOutputSingle {
966
- var out: FsOutputSingle;
967
- let s = shadeFloor(in);
968
- out.color = vec4<f32>(s.display * s.alpha, s.alpha);
969
- out.depth = s.depth;
970
- return out;
971
- }
972
-
973
- @fragment
974
- fn fs_mrt(in: VsOut) -> FsOutputMrt {
975
- var out: FsOutputMrt;
976
- let s = shadeFloor(in);
977
- out.color = vec4<f32>(s.display * s.alpha, s.alpha);
978
- out.linearDepth = vec4<f32>(s.linearDepth, 0.0, 0.0, 1.0);
979
- out.depth = s.depth;
980
- return out;
981
- }
982
-
983
- @fragment
984
- fn fs_single_bloom(in: VsOut) -> FsOutputSingleBloom {
985
- var out: FsOutputSingleBloom;
986
- let s = shadeFloor(in);
987
- out.color = vec4<f32>(s.display * s.alpha, s.alpha);
988
- out.hdr = vec4<f32>(s.hdr * s.alpha, 1.0);
989
- out.depth = s.depth;
990
- return out;
991
- }
992
-
993
- @fragment
994
- fn fs_mrt_bloom(in: VsOut) -> FsOutputMrtBloom {
995
- var out: FsOutputMrtBloom;
996
- let s = shadeFloor(in);
997
- out.color = vec4<f32>(s.display * s.alpha, s.alpha);
998
- out.linearDepth = vec4<f32>(s.linearDepth, 0.0, 0.0, 1.0);
999
- out.hdr = vec4<f32>(s.hdr * s.alpha, 1.0);
1000
- out.depth = s.depth;
1001
- return out;
1002
- }
1003
- `,GA=class{constructor(t,r,n,A,o,i="depth24plus"){this.device=t;let a=t.createShaderModule({label:"FloorBlurShader",code:hc});this.blurBindGroupLayout=t.createBindGroupLayout({label:"FloorBlurBindGroupLayout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}]}),this.blurPipeline=t.createRenderPipeline({label:"FloorBlurPipeline",layout:t.createPipelineLayout({bindGroupLayouts:[this.blurBindGroupLayout]}),vertex:{module:a,entryPoint:"vs"},fragment:{module:a,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-list"}}),this.blurSampler=t.createSampler({label:"FloorBlurSampler",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),this.blurPool=new Xe(16,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.floorLayout=t.createBindGroupLayout({label:"FloorUniformLayout",entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.reflectionLayout=t.createBindGroupLayout({label:"FloorReflectionLayout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),this.floorSampler=t.createSampler({label:"FloorReflectionSampler",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),this.floorPool=new Xe(64,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST);let s=t.createShaderModule({label:"FloorPlaneShader",code:Ic}),l={label:"FloorPlanePipeline",layout:t.createPipelineLayout({label:"FloorPlanePipelineLayout",bindGroupLayouts:[A,this.floorLayout,this.reflectionLayout,o]}),vertex:{module:s,entryPoint:"vs_floor"},module:s,format:r,depthStencil:{format:i,depthWriteEnabled:!0,depthCompare:"less-equal"},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:n}},{single:u,mrt:p}=mt(t,l);this.pipelineSingle=u,this.pipelineMrt=p,this.bloomVariants=new ut(t,l)}device;blurPipeline;blurBindGroupLayout;blurSampler;blurPool;floorLayout;reflectionLayout;floorSampler;floorPool;pipelineSingle;pipelineMrt;bloomVariants;applyBlur(t,r,n,A,o,i,a){let s=a*24,c=a*130;{let l=new Float32Array([1/o,0,s,0]),u=this.blurPool.getBuffer(this.device,l),p=this.device.createBindGroup({layout:this.blurBindGroupLayout,entries:[{binding:0,resource:{buffer:u}},{binding:1,resource:this.blurSampler},{binding:2,resource:r.createView()}]}),g=t.beginRenderPass({colorAttachments:[{view:n.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});g.setPipeline(this.blurPipeline),g.setBindGroup(0,p),g.draw(3),g.end()}{let l=new Float32Array([0,1/i,c,0]),u=this.blurPool.getBuffer(this.device,l),p=this.device.createBindGroup({layout:this.blurBindGroupLayout,entries:[{binding:0,resource:{buffer:u}},{binding:1,resource:this.blurSampler},{binding:2,resource:n.createView()}]}),g=t.beginRenderPass({colorAttachments:[{view:A.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});g.setPipeline(this.blurPipeline),g.setBindGroup(0,p),g.draw(3),g.end()}}draw(t,r,n,A,o,i=!1,a=!1){let s=Fr(o.color??"#08070a"),c=new Float32Array([o.y,o.reflectivity??.35,o.roughness??.35,o.fadeDistance??900,o.opacity??1,0,0,0,s[0],s[1],s[2],1,0,0,0,0]),l=this.floorPool.getBuffer(this.device,c),u=this.device.createBindGroup({layout:this.floorLayout,entries:[{binding:0,resource:{buffer:l}}]}),p=this.device.createBindGroup({layout:this.reflectionLayout,entries:[{binding:0,resource:A.createView()},{binding:1,resource:this.floorSampler}]});t.setPipeline(a?this.bloomVariants.get(i):i?this.pipelineMrt:this.pipelineSingle),t.setBindGroup(0,r),t.setBindGroup(1,u),t.setBindGroup(2,p),t.setBindGroup(3,n),t.draw(3)}destroy(){this.blurPool.destroy(),this.floorPool.destroy()}};q();q();function _t(e,t){return{ok:!1,error:{code:e,expected:"valid compressed data or supported compression scheme",hint:{"decompression-failed":"Check catalog row compression field and asset binary consistency; re-run asset import.","codec-init-failed":"Uncompressed assets are still loadable. Verify the codec module is installed correctly.","ktx2-parse-failed":"Check that the KTX2 file is valid and not truncated. Re-import the texture asset.","ktx2-unsupported-scheme":"This supercompression scheme requires a future codec upgrade. Check the codec README Loop 2 extension points.","transcode-failed":"Basis transcode failed for this source/target format pair. Verify the KTX2 payload is a valid Basis (ETC1S / UASTC) texture and re-import the asset.","ktx2-encode-failed":"Basis encode failed for this compression mode. Verify the source image dimensions / pixel format match the mode (LDR rgba8 vs HDR rgba16float) and retry the asset import."}[e],detail:t}}}var Ma=new URL("../pkg/basis_transcoder.mjs",import.meta.url),Sa=new URL("../pkg/basis_transcoder.wasm",import.meta.url);function Mt(e,t){let r=globalThis.__forgeaxAssetLoadTrace;if(r!==void 0)try{r({phase:`codec.${e}`,at:Date.now(),...t===void 0?{}:{detail:t}})}catch{}}var mc=async()=>{Mt("basis.glue.import.start",{url:Ma.href});let e=(await import(Ma.href)).default;Mt("basis.glue.import.complete"),Mt("basis.wasm.factory.start",{url:Sa.href});let t=await e({locateFile:()=>Sa.href});return Mt("basis.wasm.factory.complete"),Mt("basis.initialize.start"),t.initializeBasis(),Mt("basis.initialize.complete"),t},Bc=mc,tA=null;function bc(){return tA!==null||(Mt("basis.init.start"),tA=Bc().catch(e=>{throw tA=null,new Error("codec-init-failed",{cause:e})})),tA}function Ec(e,t){let r=e.transcoder_texture_format;switch(t){case"bc7-rgba-unorm":case"bc7-rgba-unorm-srgb":return r.cTFBC7_RGBA.value;case"bc5-rg-unorm":return r.cTFBC5_RG.value;case"bc4-r-unorm":return r.cTFBC4_R.value;case"bc6h-rgb-ufloat":return r.cTFBC6H.value;case"etc2-rgba8unorm":case"etc2-rgba8unorm-srgb":return r.cTFETC2_RGBA.value;case"astc-4x4-unorm":case"astc-4x4-unorm-srgb":return r.cTFASTC_4x4_RGBA.value;case"rgba16float":return r.cTFRGBA_HALF.value;case"rgba8unorm":case"rgba8unorm-srgb":case"rg8unorm":case"r8unorm":return r.cTFRGBA32.value;default:return null}}async function Ga(e,t){Mt("ktx2.transcode.start",{targetFormat:t});let r;try{r=await bc()}catch{return _t("codec-init-failed",{stage:"dynamic-import-basis-transcoder"})}let n=Ec(r,t);if(n===null)return _t("transcode-failed",{sourceFormat:`dfd-model-${e.dfd?.colorModel??"unknown"}`,targetFormat:t});let A=new r.KTX2File(e.rawBytes);try{if(Mt("ktx2.file.start"),!A.isValid())return _t("transcode-failed",{sourceFormat:"invalid-ktx2-file",targetFormat:t});if(A.startTranscoding()===0)return _t("transcode-failed",{sourceFormat:"start-transcoding-failed",targetFormat:t});let o=A.getLevels();Mt("ktx2.file.ready",{levels:o});let i=[];for(let a=0;a<o;a++){let s=A.getImageLevelInfo(a,0,0),c=A.getImageTranscodedSizeInBytes(a,0,0,n),l=new Uint8Array(c);if(A.transcodeImage(l,a,0,0,n,0,-1,-1)===0)return _t("transcode-failed",{sourceFormat:`dfd-model-${e.dfd?.colorModel??"unknown"}-level-${a}`,targetFormat:t});Mt("ktx2.mip.complete",{level:a}),i.push({level:a,width:s.origWidth,height:s.origHeight,data:l})}return{ok:!0,value:{format:t,width:A.getWidth(),height:A.getHeight(),mips:i}}}finally{A.close()}}var PA=new Uint8Array([171,75,84,88,32,50,48,187,13,10,26,10]);var Cc=new TextDecoder;function Ye(e,t){return new DataView(e.buffer,e.byteOffset+t,4).getUint32(0,!0)}function rA(e,t){return Number(new DataView(e.buffer,e.byteOffset+t,8).getBigUint64(0,!0))}function hr(e,t,r,n){if(t+r>e.length)throw new Error(`KTX2 parse ${n}: OOB (offset=${t}, length=${r}, fileSize=${e.length})`)}function yc(e,t,r){hr(e,t,4,"DFD-totalSize");let n=Ye(e,t);hr(e,t,n,"DFD-block");let A=t+4,o=Ye(e,A),i=o&131071,a=o>>>17&32767,s=Ye(e,A+4),c=s&65535,l=s>>>16&65535,u=Ye(e,A+8),p=u&255,g=u>>>8&255,f=u>>>16&255,b=u>>>24&255,v=Ye(e,A+12),Q=v&255,x=v>>>8&255,_=v>>>16&255,y=v>>>24&255,M=Ye(e,A+16),T=Ye(e,A+20),N=[M&255,M>>>8&255,M>>>16&255,M>>>24&255,T&255,T>>>8&255,T>>>16&255,T>>>24&255],O=A+24,D=(l-24)/16,H=[];for(let V=0;V<D;V++){let P=O+V*16,z=Ye(e,P),ee=Ye(e,P+4),Y=Ye(e,P+8),$=Ye(e,P+12);H.push({qualifiers:z&15,channelType:z>>>4&255,bitLength:(z>>>12&4095)+1,bitOffset:z>>>24&255,samplePosition:[ee&255,ee>>>8&255,ee>>>16&255,ee>>>24&255],sampleLower:Y,sampleUpper:$})}return{totalSize:n,vendorId:i,descriptorType:a,versionNumber:c,descriptorBlockSize:l,colorModel:p,colorPrimaries:g,transferFunction:f,flags:b,texelBlockDimension:[Q,x,_,y],bytesPlane:N,samples:H}}function Qc(e,t,r){if(r===0)return[];let n=[],A=t,o=t+r;for(;A<o;){hr(e,A,4,"KV-keyAndValueByteLength");let i=Ye(e,A);A+=4,hr(e,A,i,"KV-payload");let a=e.slice(A,A+i),s=a.indexOf(0);s===-1&&(s=a.length);let c=Cc.decode(a.slice(0,s)),l=a.slice(s+1);n.push({key:c,value:l}),A+=i;let u=A&3;u!==0&&(A+=4-u)}return n}async function Pa(e){try{if(e.length<12)return _t("ktx2-parse-failed",{reason:"truncated-identifier: file shorter than 12-byte KTX2 magic"});for(let l=0;l<12;l++){let u=PA[l];if(u===void 0||e[l]!==u)return _t("ktx2-parse-failed",{reason:"invalid-identifier: not a KTX2 2.0 file"})}if(e.length<80)return _t("ktx2-parse-failed",{reason:"truncated-header: file too short for KTX2 header + index (min 80 bytes)"});let t={vkFormat:Ye(e,12),typeSize:Ye(e,16),pixelWidth:Ye(e,20),pixelHeight:Ye(e,24),pixelDepth:Ye(e,28),layerCount:Ye(e,32),faceCount:Ye(e,36),levelCount:Ye(e,40),supercompressionScheme:Ye(e,44)},r={dfdByteOffset:Ye(e,48),dfdByteLength:Ye(e,52),kvdByteOffset:Ye(e,56),kvdByteLength:Ye(e,60),sgdByteOffset:rA(e,64),sgdByteLength:rA(e,72)},n=t.supercompressionScheme;if(n!==0&&n!==1&&n!==2)return _t("ktx2-unsupported-scheme",{scheme:n});let A=Math.max(1,t.levelCount),o=80;hr(e,o,A*24,"level-index");let i=[];for(let l=0;l<A;l++){let u=o+l*24,p=rA(e,u),g=rA(e,u+8),f=rA(e,u+16);if(p+g>e.length)return _t("ktx2-parse-failed",{reason:`level-index-OOB: level ${l} byteOffset=${p} byteLength=${g} exceeds file size=${e.length}`});i.push({byteOffset:p,byteLength:g,uncompressedByteLength:f})}let a=null;r.dfdByteLength>0&&(hr(e,r.dfdByteOffset,r.dfdByteLength,"DFD"),a=yc(e,r.dfdByteOffset,r.dfdByteLength));let s=[];r.kvdByteLength>0&&(hr(e,r.kvdByteOffset,r.kvdByteLength,"KVD"),s=Qc(e,r.kvdByteOffset,r.kvdByteLength));let c=null;return r.sgdByteLength>0&&(hr(e,r.sgdByteOffset,r.sgdByteLength,"SGD"),c=e.slice(r.sgdByteOffset,r.sgdByteOffset+r.sgdByteLength)),{ok:!0,value:{header:t,index:r,levelIndex:i,dfd:a,kvEntries:s,sgd:c,rawBytes:e}}}catch(t){let r=t instanceof Error?t.message:String(t);return _t("ktx2-parse-failed",{reason:`internal: ${r}`})}}function Ra(e){return e.length>=PA.length&&PA.every((t,r)=>e[r]===t)}async function Fa(e){let t=await Pa(e);if(!t.ok)throw new Error(`KTX2 parse failed: ${t.error.code}`);let{pixelDepth:r,layerCount:n,faceCount:A}=t.value.header;if(r>1||n>1||A!==1)throw new Error("Only 2D KTX2 textures are supported");let o=await Ga(t.value,"rgba8unorm");if(!o.ok)throw new Error(`KTX2 transcode failed: ${o.error.code}`);let{width:i,height:a,mips:s}=o.value;if(!s.length||s.some((c,l)=>c.level!==l||c.width!==Math.max(1,i>>l)||c.height!==Math.max(1,a>>l)||c.data.length!==c.width*c.height*4))throw new Error("KTX2 transcoder returned an invalid mip chain");return{width:i,height:a,levels:s.map(c=>c.data)}}q();q();q();function Vr(e,t){return`
1004
- @group(${e}) @binding(${t}) var matteTex : texture_2d<f32>;
1005
-
1006
- fn matteCoverage(fragPos : vec2<f32>) -> f32 {
1007
- let dims = vec2<f32>(textureDimensions(matteTex));
1008
- let p = floor(fragPos * dims / max(cam.screenParams.xy, vec2<f32>(1.0)));
1009
- return textureLoad(matteTex, vec2<i32>(clamp(p, vec2<f32>(0.0), dims - 1.0)), 0).a;
1010
- }
1011
- `}var Ua=`
1012
- ${fr}
1013
-
1014
- struct ModelUniforms {
1015
- modelMatrix : mat4x4<f32>,
1016
- normalMatrix : mat4x4<f32>,
1017
- colorTint : vec4<f32>,
1018
- params : vec4<f32>, // x = opacity, y = twoSided, z = isSkinned, w = flags (bit 0 instanced, bit 1 map UVs)
1019
- materialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit, 2=toon)
1020
- shade : vec4<f32>, // rgb = toon shadow-side color multiplier, a = alpha cutoff (0 = none)
1021
- pbr : vec4<f32>, // x = roughness (<0 = default), y = metallic
1022
- emissive : vec4<f32>, // rgb = sRGB emissive color, w = strength
1023
- maps : vec4<f32>, // x = normal scale (0 = no map), y = occlusion strength, z = has metallic-roughness map, w = has emissive map
1024
- };
1025
-
1026
- struct SkinningUniforms {
1027
- jointMatrices : array<mat4x4<f32>, 128>,
1028
- };
1029
-
1030
- struct InstanceData {
1031
- posScale : vec4<f32>, // xyz = translation, w = scale
1032
- quat : vec4<f32>, // xyzw = unit rotation quaternion
1033
- color : vec4<f32>, // rgba = color multiplier
1034
- emissive : vec4<f32>, // rgb = sRGB emissive color, w = emissiveIntensity
1035
- };
1036
-
1037
- @group(0) @binding(0) var<uniform> cam : CameraUniforms;
1038
- @group(1) @binding(0) var<uniform> model : ModelUniforms;
1039
- @group(1) @binding(1) var<uniform> skinning : SkinningUniforms;
1040
- ${Vr(1,2)}@group(1) @binding(3) var backdropTex : texture_2d<f32>;
1041
- @group(1) @binding(4) var<storage, read> instances : array<InstanceData>;
1042
- @group(2) @binding(0) var texSampler : sampler;
1043
- @group(2) @binding(1) var mainTex : texture_2d<f32>;
1044
- @group(2) @binding(2) var normalTex : texture_2d<f32>;
1045
- @group(2) @binding(3) var metalRoughTex : texture_2d<f32>;
1046
- @group(2) @binding(4) var occlusionTex : texture_2d<f32>;
1047
- @group(2) @binding(5) var emissiveTex : texture_2d<f32>;
1048
- ${dr}
1049
-
1050
- struct VertexInput {
1051
- @location(0) position : vec3<f32>,
1052
- @location(1) uv : vec2<f32>,
1053
- @location(2) normal : vec3<f32>,
1054
- @location(3) joints : vec4<f32>,
1055
- @location(4) weights : vec4<f32>,
1056
- @location(5) color : vec4<f32>, // vertex color (display / sRGB), white when absent
1057
- @location(6) normalUv : vec2<f32>,
1058
- @location(7) mrUv : vec2<f32>,
1059
- @location(8) aoUv : vec2<f32>,
1060
- @location(9) emissiveUv : vec2<f32>,
1061
- };
1062
-
1063
- struct VertexOutput {
1064
- @builtin(position) clipPos : vec4<f32>,
1065
- @location(0) uv : vec2<f32>,
1066
- @location(1) worldPos : vec3<f32>,
1067
- @location(2) worldNormal : vec3<f32>,
1068
- @location(3) linearDepth : f32,
1069
- @location(4) color : vec4<f32>,
1070
- @location(5) normalUv : vec2<f32>,
1071
- @location(6) mrUv : vec2<f32>,
1072
- @location(7) aoUv : vec2<f32>,
1073
- @location(8) emissiveUv : vec2<f32>,
1074
- @location(9) emissive : vec4<f32>,
1075
- };
1076
-
1077
- fn rotateVecByQuat(v: vec3<f32>, q: vec4<f32>) -> vec3<f32> {
1078
- let t = 2.0 * cross(q.xyz, v);
1079
- return v + q.w * t + cross(q.xyz, t);
1080
- }
1081
-
1082
- @vertex
1083
- fn vs_main(
1084
- in: VertexInput,
1085
- @builtin(instance_index) instanceIndex: u32,
1086
- ) -> VertexOutput {
1087
- var out: VertexOutput;
1088
-
1089
- var localPos = in.position;
1090
- var localNorm = in.normal;
1091
-
1092
- // Linear Blend Skinning (LBS) on GPU
1093
- if (model.params.z > 0.5) {
1094
- let j0 = i32(in.joints.x);
1095
- let j1 = i32(in.joints.y);
1096
- let j2 = i32(in.joints.z);
1097
- let j3 = i32(in.joints.w);
1098
-
1099
- let w0 = in.weights.x;
1100
- let w1 = in.weights.y;
1101
- let w2 = in.weights.z;
1102
- let w3 = in.weights.w;
1103
-
1104
- let totalWeight = w0 + w1 + w2 + w3;
1105
- if (totalWeight > 0.001) {
1106
- let skinMat = skinning.jointMatrices[j0] * w0 +
1107
- skinning.jointMatrices[j1] * w1 +
1108
- skinning.jointMatrices[j2] * w2 +
1109
- skinning.jointMatrices[j3] * w3;
1110
-
1111
- let pos4 = skinMat * vec4<f32>(in.position, 1.0);
1112
- localPos = pos4.xyz;
1113
-
1114
- let norm4 = skinMat * vec4<f32>(in.normal, 0.0);
1115
- localNorm = normalize(norm4.xyz);
1116
- }
1117
- }
1118
-
1119
- // Hardware instancing: transform local vertex by instance transform
1120
- // Static read prevents Tint from dropping the storage buffer binding
1121
- let dummyInst = instances[0].posScale.x;
1122
- var instColor = vec4<f32>(1.0);
1123
- var instEmissive = vec4<f32>(0.0);
1124
-
1125
- if ((u32(model.params.w) & 1u) != 0u) {
1126
- let inst = instances[instanceIndex];
1127
- let scaledPos = localPos * inst.posScale.w;
1128
- localPos = rotateVecByQuat(scaledPos, inst.quat) + inst.posScale.xyz;
1129
- localNorm = rotateVecByQuat(localNorm, inst.quat);
1130
- instColor = inst.color;
1131
- instEmissive = inst.emissive;
1132
- } else {
1133
- localPos.x += dummyInst * 0.0;
1134
- }
1135
-
1136
- let worldPos4 = model.modelMatrix * vec4<f32>(localPos, 1.0);
1137
- out.worldPos = worldPos4.xyz;
1138
-
1139
- let norm4 = model.normalMatrix * vec4<f32>(localNorm, 0.0);
1140
- out.worldNormal = normalize(norm4.xyz);
1141
-
1142
- out.clipPos = cam.viewProjMatrix * worldPos4;
1143
- out.uv = in.uv;
1144
- let hasMapUvs = (u32(model.params.w) & 2u) != 0u;
1145
- out.normalUv = select(in.uv, in.normalUv, hasMapUvs);
1146
- out.mrUv = select(in.uv, in.mrUv, hasMapUvs);
1147
- out.aoUv = select(in.uv, in.aoUv, hasMapUvs);
1148
- out.emissiveUv = select(in.uv, in.emissiveUv, hasMapUvs);
1149
- out.color = in.color * instColor;
1150
- out.emissive = instEmissive;
1151
-
1152
- out.linearDepth = dot(worldPos4.xyz - cam.cameraPos.xyz, cam.cameraDir.xyz);
1153
- return out;
1154
- }
1155
-
1156
- // Toon (MToon-style): the base color as authored where the light reaches,
1157
- // the shade color past a soft terminator. Highlights stay out: the texture
1158
- // already paints them.
1159
- fn toonLighting(in: VertexOutput, baseColor: vec3<f32>) -> vec3<f32> {
1160
- var N = normalize(in.worldNormal);
1161
- let V = normalize(cam.cameraPos.xyz - in.worldPos);
1162
- if (dot(N, V) < 0.0) {
1163
- N = -N;
1164
- }
1165
- var lit = 0.0;
1166
- let numLights = i32(lights.params.x);
1167
- for (var i = 0; i < 8; i++) {
1168
- if (i >= numLights) {
1169
- break;
1170
- }
1171
- let light = lights.lights[i];
1172
- let lightType = light.posType.w;
1173
- var L = vec3<f32>(0.0, 0.0, 1.0);
1174
- if (lightType > 0.5 && lightType < 1.5) {
1175
- L = normalize(-light.dirRadius.xyz);
1176
- } else if (lightType >= 1.5) {
1177
- L = normalize(light.posType.xyz - in.worldPos);
1178
- } else {
1179
- continue;
1180
- }
1181
- let terminator = smoothstep(-0.05, 0.2, dot(N, L));
1182
- lit = max(lit, terminator * min(light.colorIntensity.w, 1.0));
1183
- }
1184
- return baseColor * mix(model.shade.rgb, vec3<f32>(1.0), lit);
1185
- }
1186
-
1187
- struct MeshFragment {
1188
- color : vec4<f32>, // premultiplied display color
1189
- hdr : vec4<f32>, // premultiplied scene radiance (bloom source)
1190
- };
1191
-
1192
- // Normal mapping without tangents: a cotangent frame from screen-space
1193
- // derivatives (Sch\xFCler, "Followup: Normal Mapping Without Precomputed Tangents").
1194
- fn perturbNormal(N: vec3<f32>, p: vec3<f32>, uv: vec2<f32>, tn: vec3<f32>, dp1: vec3<f32>, dp2: vec3<f32>, duv1: vec2<f32>, duv2: vec2<f32>) -> vec3<f32> {
1195
- let dp2perp = cross(dp2, N);
1196
- let dp1perp = cross(N, dp1);
1197
- // The derivation assumes cross(dp1, dp2) points along N; with this
1198
- // engine's y-down view basis it can point away, mirroring the frame.
1199
- let handed = select(1.0, -1.0, dot(cross(dp1, dp2), N) < 0.0);
1200
- let T = (dp2perp * duv1.x + dp1perp * duv2.x) * handed;
1201
- let B = (dp2perp * duv1.y + dp1perp * duv2.y) * handed;
1202
- let invmax = inverseSqrt(max(max(dot(T, T), dot(B, B)), 1e-20));
1203
- // glTF maps are +Y up while v grows down the image: green points along -B.
1204
- return normalize(T * (tn.x * invmax) - B * (tn.y * invmax) + N * tn.z);
1205
- }
1206
-
1207
- // Glass: what is behind the 3D batch on screen (backdrop), bent by
1208
- // refraction along the surface normal with a red/blue split, frosted by a
1209
- // disc blur, tinted by the color, under Fresnel-weighted reflections.
1210
- // shade.rgb = (dispersion, thickness px, frost), pbr.w = ior.
1211
- fn backdropAt(uv: vec2<f32>) -> vec3<f32> {
1212
- return textureSampleLevel(backdropTex, texSampler, clamp(uv, vec2<f32>(0.001), vec2<f32>(0.999)), 0.0).rgb;
1213
- }
1214
-
1215
- // rimWidth: how much 1 - N\xB7V changes across this pixel (fwidth, taken in
1216
- // uniform control flow by the caller). Rim effects narrower than a pixel are
1217
- // faded out, or per-pixel shading turns them into stair-stepped lines that
1218
- // MSAA (coverage only) cannot smooth.
1219
- fn shadeGlass(in: VertexOutput, Nin: vec3<f32>, tint: vec3<f32>, alpha: f32, rimWidth: f32) -> MeshFragment {
1220
- let V = normalize(cam.cameraPos.xyz - in.worldPos);
1221
- var N = Nin;
1222
- if (dot(N, V) < 0.0) { N = -N; }
1223
- let NdotV = clamp(dot(N, V), 0.0, 1.0);
1224
- // Also fade toward edge-on: a face seen at a grazing angle is a sliver
1225
- // under a pixel tall (a slab's bottom), which would alias the same way.
1226
- let rimAA = clamp(1.0 - rimWidth * 2.5, 0.0, 1.0) * smoothstep(0.03, 0.22, NdotV);
1227
- let rim = (1.0 - NdotV) * rimAA;
1228
- let ior = max(model.pbr.w, 1.0001);
1229
- let screen = max(cam.screenParams.xy, vec2<f32>(1.0));
1230
- let uv = in.clipPos.xy / screen;
1231
- // Screen-space bend: the normal's in-plane part, stronger toward the rim.
1232
- let bend = N.xy * model.shade.g * (1.0 - 1.0 / ior) * (0.6 + rim) * rimAA / screen;
1233
- let disp = model.shade.r;
1234
- let frost = model.shade.b * 22.0 / screen;
1235
- var col = vec3<f32>(0.0);
1236
- let taps = select(1, 8, model.shade.b > 0.001);
1237
- for (var i = 0; i < taps; i++) {
1238
- let a = f32(i) * 2.399963;
1239
- let r = sqrt((f32(i) + 0.5) / f32(taps));
1240
- let o = select(vec2<f32>(0.0), vec2<f32>(cos(a), sin(a)) * r * frost, taps > 1);
1241
- col += vec3<f32>(
1242
- backdropAt(uv - bend * (1.0 + disp * 6.0) + o).r,
1243
- backdropAt(uv - bend + o).g,
1244
- backdropAt(uv - bend * (1.0 - disp * 6.0) + o).b,
1245
- );
1246
- }
1247
- col /= f32(taps);
1248
- // Light travels further through the glass toward the rim: the tint
1249
- // deepens and the body darkens there, which is what outlines glass.
1250
- let depthTint = mix(vec3<f32>(1.0), tint, 0.55 + 0.45 * rim);
1251
- let transmitted = col * depthTint * (1.0 - 0.45 * rim * rim);
1252
- let f0 = pow((ior - 1.0) / (ior + 1.0), 2.0);
1253
- let F = f0 + (1.0 - f0) * pow(rim, 5.0);
1254
- let lit = shadeSurfaceFull(in.worldPos, N, vec3<f32>(0.0), model.materialParams, vec4<f32>(model.pbr.x, 0.0, 0.0, 0.0), vec4<f32>(0.0));
1255
- // Grazing faces mirror the room; keep that faint so dark scenes stay dark
1256
- // and the studio highlights below carry the shape.
1257
- let sheen = vec3<f32>(0.9, 0.94, 1.0) * F * 0.22 + tint * 0.05 * (0.4 + rim);
1258
- // A studio in the reflection: a sharp key and two strip softboxes, which
1259
- // is most of what makes glass read as glass.
1260
- let R = reflect(-V, N);
1261
- // Tight: a flat face only flashes as it turns through the light.
1262
- let key = pow(max(dot(R, normalize(vec3<f32>(-0.45, -0.75, -0.5))), 0.0), 600.0) * 1.8;
1263
- // Two tall softboxes: narrow bands in the reflection, brightest above.
1264
- let strips = (1.0 - smoothstep(0.03, 0.07, abs(R.x + 0.45))) * smoothstep(0.3, -0.5, R.y) * 1.1
1265
- + (1.0 - smoothstep(0.02, 0.05, abs(R.x - 0.6))) * smoothstep(0.4, -0.3, R.y) * 0.7;
1266
- let studio = vec3<f32>(1.0, 0.98, 0.95) * (key + strips * (0.25 + F));
1267
- // A thin bright line where the surface turns away: glass silhouettes.
1268
- let edge = vec3<f32>(1.0, 0.99, 0.97) * smoothstep(0.8, 0.97, rim) * 0.55;
1269
- let rgb = transmitted * (1.0 - F) + lit.display + sheen + studio + edge;
1270
- var out: MeshFragment;
1271
- out.color = vec4<f32>(rgb * alpha, alpha);
1272
- out.hdr = vec4<f32>(srgbToLinear(transmitted * (1.0 - F)) * alpha + lit.hdr * alpha + srgbToLinear(sheen + studio + edge) * alpha, alpha);
1273
- return out;
1274
- }
1275
-
1276
- fn shadeMesh(in: VertexOutput, isFront: bool) -> MeshFragment {
1277
- // Every sample and derivative up front, in uniform control flow.
1278
- var texColor = textureSample(mainTex, texSampler, in.uv);
1279
- let normalSample = textureSample(normalTex, texSampler, in.normalUv).xyz;
1280
- let mrSample = textureSample(metalRoughTex, texSampler, in.mrUv);
1281
- let aoSample = textureSample(occlusionTex, texSampler, in.aoUv).r;
1282
- let emissiveSample = textureSample(emissiveTex, texSampler, in.emissiveUv).rgb;
1283
- let dp1 = dpdx(in.worldPos);
1284
- let dp2 = dpdy(in.worldPos);
1285
- let duv1 = dpdx(in.normalUv);
1286
- let duv2 = dpdy(in.normalUv);
1287
- let rimWidth = fwidth(1.0 - abs(dot(normalize(in.worldNormal), normalize(cam.cameraPos.xyz - in.worldPos))));
1288
-
1289
- if (!isFront && model.params.y < 0.5) {
1290
- discard;
1291
- }
1292
- if (texColor.a < model.shade.a) {
1293
- discard;
1294
- }
1295
- let alpha = texColor.a * in.color.a * model.params.x * model.colorTint.a * matteCoverage(in.clipPos.xy);
1296
- if (alpha <= 0.001) {
1297
- discard;
1298
- }
1299
-
1300
- let baseRgb = texColor.rgb * in.color.rgb * model.colorTint.rgb;
1301
- var out: MeshFragment;
1302
- if (model.materialParams.w > 1.5) {
1303
- var toon = baseRgb;
1304
- if (lights.params.y >= 0.5) {
1305
- toon = toonLighting(in, baseRgb);
1306
- }
1307
- if (model.params.w > 0.5 && (in.emissive.w > 0.0 || dot(in.emissive.rgb, in.emissive.rgb) > 0.0)) {
1308
- toon += in.emissive.rgb * in.emissive.w;
1309
- }
1310
- out.color = vec4<f32>(toon * alpha, alpha);
1311
- out.hdr = vec4<f32>(srgbToLinear(toon) * alpha, alpha);
1312
- return out;
1313
- }
1314
-
1315
- var N = normalize(in.worldNormal);
1316
- if (model.maps.x > 0.0) {
1317
- var tn = normalSample * 2.0 - 1.0;
1318
- tn = vec3<f32>(tn.xy * model.maps.x, tn.z);
1319
- // The frame follows the surface side the camera sees.
1320
- var Nf = N;
1321
- if (dot(Nf, cam.cameraPos.xyz - in.worldPos) < 0.0) {
1322
- Nf = -Nf;
1323
- }
1324
- N = perturbNormal(Nf, in.worldPos, in.normalUv, tn, dp1, dp2, duv1, duv2);
1325
- }
1326
- var pbr = model.pbr;
1327
- if (model.maps.z > 0.5) {
1328
- pbr.x = select(pbr.x, 1.0, pbr.x < 0.0) * mrSample.g;
1329
- pbr.y = pbr.y * mrSample.b;
1330
- }
1331
- if (model.pbr.z > 0.5) {
1332
- return shadeGlass(in, N, baseRgb, alpha, rimWidth);
1333
- }
1334
- var material = model.materialParams;
1335
- material.z = material.z * mix(1.0, aoSample, clamp(model.maps.y, 0.0, 1.0));
1336
- var emissive = model.emissive;
1337
- if (model.maps.w > 0.5) {
1338
- // Linear multiply in display space is close enough for an 8-bit map.
1339
- emissive = vec4<f32>(emissive.rgb * emissiveSample, emissive.w);
1340
- }
1341
- if (model.params.w > 0.5 && (in.emissive.w > 0.0 || dot(in.emissive.rgb, in.emissive.rgb) > 0.0)) {
1342
- emissive = in.emissive;
1343
- }
1344
- let shaded = shadeSurfaceFull(in.worldPos, N, baseRgb, material, pbr, emissive);
1345
- out.color = vec4<f32>(shaded.display * alpha, alpha);
1346
- out.hdr = vec4<f32>(shaded.hdr * alpha, alpha);
1347
- return out;
1348
- }
1349
-
1350
- struct MrtOutput {
1351
- @location(0) color : vec4<f32>,
1352
- @location(1) depth : vec4<f32>,
1353
- };
1354
-
1355
- struct BloomOutput {
1356
- @location(0) color : vec4<f32>,
1357
- @location(1) hdr : vec4<f32>,
1358
- };
1359
-
1360
- struct MrtBloomOutput {
1361
- @location(0) color : vec4<f32>,
1362
- @location(1) depth : vec4<f32>,
1363
- @location(2) hdr : vec4<f32>,
1364
- };
1365
-
1366
- @fragment
1367
- fn fs_single(in: VertexOutput, @builtin(front_facing) isFront: bool) -> @location(0) vec4<f32> {
1368
- return shadeMesh(in, isFront).color;
1369
- }
1370
-
1371
- @fragment
1372
- fn fs_mrt(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtOutput {
1373
- var out: MrtOutput;
1374
- out.color = shadeMesh(in, isFront).color;
1375
- out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);
1376
- return out;
1377
- }
1378
-
1379
- @fragment
1380
- fn fs_single_bloom(in: VertexOutput, @builtin(front_facing) isFront: bool) -> BloomOutput {
1381
- let f = shadeMesh(in, isFront);
1382
- var out: BloomOutput;
1383
- out.color = f.color;
1384
- out.hdr = f.hdr;
1385
- return out;
1386
- }
1387
-
1388
- @fragment
1389
- fn fs_mrt_bloom(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtBloomOutput {
1390
- let f = shadeMesh(in, isFront);
1391
- var out: MrtBloomOutput;
1392
- out.color = f.color;
1393
- out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);
1394
- out.hdr = f.hdr;
1395
- return out;
1396
- }
1397
- `;q();function Nr(e){return{binding:e,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}}var ka=new WeakMap;function Tr(e){let t=ka.get(e);if(!t){let r=e.createTexture({label:"Matte3DFullCoverage",size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});e.queue.writeTexture({texture:r},new Uint8Array([255,255,255,255]),{bytesPerRow:4},[1,1]),t=r.createView(),ka.set(e,t)}return t}q();q();var Na=`
1398
- ${fr}
1399
- struct ModelUniforms {
1400
- modelMatrix : mat4x4<f32>,
1401
- normalMatrix : mat4x4<f32>,
1402
- colorTint : vec4<f32>,
1403
- borderColor : vec4<f32>,
1404
- params : vec4<f32>, // x = opacity, y = borderRadius, z = twoSided (1.0 = yes), w = borderWidth
1405
- dimensions : vec4<f32>, // x = width, y = height, zw = texture extent the layer covers (0 = whole texture)
1406
- materialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit)
1407
- pbr : vec4<f32>, // x = roughness (<0 = default), y = metallic
1408
- emissive : vec4<f32>, // rgb = sRGB emissive color, w = strength
1409
- };
1410
-
1411
- @group(0) @binding(0) var<uniform> cam : CameraUniforms;
1412
- @group(1) @binding(0) var<uniform> model : ModelUniforms;
1413
- ${Vr(1,1)}@group(2) @binding(0) var texSampler : sampler;
1414
- @group(2) @binding(1) var mainTex : texture_2d<f32>;
1415
- ${dr}
1416
-
1417
- struct VertexInput {
1418
- @location(0) position : vec3<f32>,
1419
- @location(1) uv : vec2<f32>,
1420
- @location(2) normal : vec3<f32>,
1421
- };
1422
-
1423
- struct VertexOutput {
1424
- @builtin(position) clipPos : vec4<f32>,
1425
- @location(0) uv : vec2<f32>,
1426
- @location(1) worldPos : vec3<f32>,
1427
- @location(2) worldNormal : vec3<f32>,
1428
- @location(3) linearDepth : f32,
1429
- @location(4) localPos : vec2<f32>,
1430
- };
1431
-
1432
- @vertex
1433
- fn vs_main(in: VertexInput) -> VertexOutput {
1434
- var out: VertexOutput;
1435
-
1436
- let hasDimensions = model.dimensions.x > 0.0 && model.dimensions.y > 0.0;
1437
- var pad = 0.0;
1438
- if (hasDimensions) {
1439
- let viewPos = cam.viewMatrix * model.modelMatrix * vec4<f32>(0.0, 0.0, 0.0, 1.0);
1440
- let viewDepth = max(abs(viewPos.z), 0.1);
1441
- let projScale = max(cam.projMatrix[1][1], 0.001);
1442
- let worldPx = (2.0 * viewDepth) / max(cam.screenParams.y * projScale, 0.001);
1443
- pad = max(4.0 * worldPx, 4.0);
1444
- }
1445
- let scalePad = select(vec2<f32>(1.0), 1.0 + vec2<f32>(2.0 * pad) / model.dimensions.xy, hasDimensions);
1446
-
1447
- let paddedPos = vec3<f32>(in.position.xy * scalePad, in.position.z);
1448
- let worldPos4 = model.modelMatrix * vec4<f32>(paddedPos, 1.0);
1449
- out.worldPos = worldPos4.xyz;
1450
-
1451
- // Normal transformed by 3x3 normal matrix
1452
- let norm4 = model.normalMatrix * vec4<f32>(in.normal, 0.0);
1453
- out.worldNormal = normalize(norm4.xyz);
1454
-
1455
- out.clipPos = cam.viewProjMatrix * worldPos4;
1456
-
1457
- out.localPos = in.position.xy * (model.dimensions.xy + vec2<f32>(2.0 * pad));
1458
- // A layer of fractional size renders into a texture rounded up to whole
1459
- // pixels: map the quad onto the part it covers, not the whole texture,
1460
- // or the content is stretched by up to a pixel and resampled off-grid.
1461
- let uvExtent = select(model.dimensions.zw, vec2<f32>(1.0), model.dimensions.zw <= vec2<f32>(0.0));
1462
- out.uv = select(in.uv, (out.localPos / model.dimensions.xy + vec2<f32>(0.5)) * uvExtent, hasDimensions);
1463
-
1464
- // Linear camera depth along optical viewing axis
1465
- out.linearDepth = dot(worldPos4.xyz - cam.cameraPos.xyz, cam.cameraDir.xyz);
1466
- return out;
1467
- }
1468
-
1469
- fn sdRoundedRectWithNormal(p: vec2<f32>, b: vec2<f32>, r: f32) -> vec3<f32> {
1470
- let q = abs(p) - b + vec2<f32>(r);
1471
- let sx = select(1.0, -1.0, p.x < 0.0);
1472
- let sy = select(1.0, -1.0, p.y < 0.0);
1473
- let s = vec2<f32>(sx, sy);
1474
-
1475
- // Outside corner arc region
1476
- if (q.x > 0.0 && q.y > 0.0) {
1477
- let l = length(q);
1478
- let n = select(vec2<f32>(0.0, 1.0), q / l, l > 0.0001);
1479
- return vec3<f32>(l - r, s * n);
1480
- }
1481
-
1482
- // Straight edges or interior
1483
- if (q.x > q.y) {
1484
- let dist = q.x - r;
1485
- return vec3<f32>(dist, s.x, 0.0);
1486
- } else {
1487
- let dist = q.y - r;
1488
- return vec3<f32>(dist, 0.0, s.y);
1489
- }
1490
- }
1491
-
1492
- struct QuadFragment {
1493
- color : vec4<f32>, // premultiplied display color
1494
- hdr : vec4<f32>, // premultiplied scene radiance (bloom source)
1495
- };
1496
-
1497
- fn shadeQuad(in: VertexOutput, isFront: bool) -> QuadFragment {
1498
- // One-sided quads cull against their declared normal, not the hardware
1499
- // winding: the Y-down view basis mirrors winding, so front_facing reads
1500
- // camera-facing quads as back faces.
1501
- if (model.params.z < 0.5 && dot(in.worldNormal, cam.cameraPos.xyz - in.worldPos) < 0.0) {
1502
- discard;
1503
- }
1504
-
1505
- var outerAlpha = 1.0;
1506
- var borderFactor = 0.0;
1507
- let br = model.params.y;
1508
- let borderWidth = model.params.w;
1509
- let hasDimensions = model.dimensions.x > 0.0 && model.dimensions.y > 0.0;
1510
-
1511
- if (hasDimensions) {
1512
- let halfSize = model.dimensions.xy * 0.5;
1513
- let normData = sdRoundedRectWithNormal(in.localPos, halfSize, br);
1514
-
1515
- let uvDx = dpdx(in.localPos);
1516
- let uvDy = dpdy(in.localPos);
1517
-
1518
- let dPdx = normData.y * uvDx.x + normData.z * uvDx.y;
1519
- let dPdy = normData.y * uvDy.x + normData.z * uvDy.y;
1520
- let gradLen = max(sqrt(dPdx * dPdx + dPdy * dPdy), 0.001);
1521
-
1522
- let distPixel = normData.x / gradLen;
1523
- outerAlpha = clamp(0.5 - distPixel, 0.0, 1.0);
1524
- if (outerAlpha <= 0.001) {
1525
- discard;
1526
- }
1527
-
1528
- if (borderWidth > 0.0 && model.borderColor.a > 0.0) {
1529
- let borderWidthPixel = max(borderWidth / gradLen, 0.0);
1530
- let innerAlpha = clamp(0.5 - (distPixel + borderWidthPixel), 0.0, 1.0);
1531
- borderFactor = clamp(outerAlpha - innerAlpha, 0.0, 1.0) * model.borderColor.a;
1532
- }
1533
- }
1534
-
1535
- let clampedUv = clamp(in.uv, vec2<f32>(0.0), vec2<f32>(1.0));
1536
- let dxUV = dpdx(in.uv);
1537
- let dyUV = dpdy(in.uv);
1538
- var texColor = textureSampleGrad(mainTex, texSampler, clampedUv, dxUV, dyUV);
1539
- let texAlpha = texColor.a;
1540
-
1541
- let unmultipliedRgb = select(texColor.rgb / texAlpha, texColor.rgb, texAlpha < 0.001);
1542
- let baseRgb = mix(unmultipliedRgb * model.colorTint.rgb, model.borderColor.rgb, borderFactor);
1543
- let alpha = mix(texAlpha, 1.0, borderFactor) * model.params.x * model.colorTint.a * outerAlpha * matteCoverage(in.clipPos.xy);
1544
- if (alpha <= 0.001) {
1545
- discard;
1546
- }
1547
-
1548
- let shaded = shadeSurfaceFull(in.worldPos, in.worldNormal, baseRgb, model.materialParams, model.pbr, model.emissive);
1549
- var out: QuadFragment;
1550
- out.color = vec4<f32>(shaded.display * alpha, alpha);
1551
- out.hdr = vec4<f32>(shaded.hdr * alpha, alpha);
1552
- return out;
1553
- }
1554
-
1555
- struct MrtOutput {
1556
- @location(0) color : vec4<f32>,
1557
- @location(1) depth : vec4<f32>,
1558
- };
1559
-
1560
- struct BloomOutput {
1561
- @location(0) color : vec4<f32>,
1562
- @location(1) hdr : vec4<f32>,
1563
- };
1564
-
1565
- struct MrtBloomOutput {
1566
- @location(0) color : vec4<f32>,
1567
- @location(1) depth : vec4<f32>,
1568
- @location(2) hdr : vec4<f32>,
1569
- };
1570
-
1571
- @fragment
1572
- fn fs_single(in: VertexOutput, @builtin(front_facing) isFront: bool) -> @location(0) vec4<f32> {
1573
- return shadeQuad(in, isFront).color;
1574
- }
1575
-
1576
- @fragment
1577
- fn fs_mrt(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtOutput {
1578
- var out: MrtOutput;
1579
- out.color = shadeQuad(in, isFront).color;
1580
- out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);
1581
- return out;
1582
- }
1583
-
1584
- @fragment
1585
- fn fs_single_bloom(in: VertexOutput, @builtin(front_facing) isFront: bool) -> BloomOutput {
1586
- let f = shadeQuad(in, isFront);
1587
- var out: BloomOutput;
1588
- out.color = f.color;
1589
- out.hdr = f.hdr;
1590
- return out;
1591
- }
1592
-
1593
- @fragment
1594
- fn fs_mrt_bloom(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtBloomOutput {
1595
- let f = shadeQuad(in, isFront);
1596
- var out: MrtBloomOutput;
1597
- out.color = f.color;
1598
- out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);
1599
- out.hdr = f.hdr;
1600
- return out;
1601
- }
1602
-
1603
- // Shadow-map pass: depth only, alpha-tested so a cut-out casts its shape.
1604
- @fragment
1605
- fn fs_shadow(in: VertexOutput) {
1606
- let clampedUv = clamp(in.uv, vec2<f32>(0.0), vec2<f32>(1.0));
1607
- let a = textureSampleLevel(mainTex, texSampler, clampedUv, 0.0).a * model.params.x * model.colorTint.a;
1608
- if (a < 0.5) {
1609
- discard;
1610
- }
1611
- }
1612
- `;q();var RA="depth32float",zr={format:RA,depthWriteEnabled:!0,depthCompare:"less-equal",depthBias:2,depthBiasSlopeScale:2.5,depthBiasClamp:.01};q();var Xt=8;function Yr(e,t,r){t[r]=e.roughness??-1,t[r+1]=e.metallic??0,t[r+2]=0,t[r+3]=0;let n=e.emissive;if(n==null){t.fill(0,r+4,r+8);return}let A;if(Array.isArray(n))A=[n[0],n[1],n[2]];else{let o=fA(n);A=[o.r*o.a,o.g*o.a,o.b*o.a]}t[r+4]=A[0],t[r+5]=A[1],t[r+6]=A[2],t[r+7]=e.emissiveIntensity??1}function ho(e,t="Lights3DLayout"){return e.createBindGroupLayout({label:t,entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}}]})}function Io(e){let t=e.roughness!==void 0?Math.max(1,(1-e.roughness)*128):e.shininess??32,r=e.metallic!==void 0?e.metallic:e.specularIntensity??.5,n=e.ambientIntensity??1,A=e.material==="unlit"?0:1;return[t,r,n,A]}var FA=class{device;pipelineSingle;pipelineMrt;bloomVariants;pipelineShadow;cameraLayout;modelLayout;textureLayout;lightsLayout;modelPool;vertexBuffer;indexBuffer;modelData=new Float32Array(52+Xt);constructor(t,r,n="depth24plus",A=1){this.device=t,this.modelPool=new Xe((52+Xt)*4,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST);let o=t.createShaderModule({label:"quad3d.wgsl",code:Na});this.cameraLayout=t.createBindGroupLayout({label:"Quad3DCameraLayout",entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.modelLayout=t.createBindGroupLayout({label:"Quad3DModelLayout",entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},Nr(1)]}),this.textureLayout=t.createBindGroupLayout({label:"Quad3DTextureLayout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}]}),this.lightsLayout=ho(t,"Quad3DLightsLayout");let i=t.createPipelineLayout({bindGroupLayouts:[this.cameraLayout,this.modelLayout,this.textureLayout,this.lightsLayout]}),a={module:o,entryPoint:"vs_main",buffers:[{arrayStride:32,attributes:[{shaderLocation:0,offset:0,format:"float32x3"},{shaderLocation:1,offset:12,format:"float32x2"},{shaderLocation:2,offset:20,format:"float32x3"}]}]},s={label:"Quad3DPipeline",layout:i,vertex:a,module:o,format:r,depthStencil:{format:n,depthWriteEnabled:!0,depthCompare:"less-equal"},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:A}},{single:c,mrt:l}=mt(t,s);this.pipelineSingle=c,this.pipelineMrt=l,this.bloomVariants=new ut(t,s),this.pipelineShadow=t.createRenderPipeline({label:"Quad3DPipelineShadow",layout:t.createPipelineLayout({bindGroupLayouts:[this.cameraLayout,this.modelLayout,this.textureLayout]}),vertex:a,fragment:{module:o,entryPoint:"fs_shadow",targets:[]},depthStencil:zr,primitive:{topology:"triangle-list",cullMode:"none"}});let u=new Float32Array([-.5,-.5,0,0,0,0,0,-1,.5,-.5,0,1,0,0,0,-1,.5,.5,0,1,1,0,0,-1,-.5,.5,0,0,1,0,0,-1]),p=new Uint16Array([0,1,2,0,2,3]);this.vertexBuffer=t.createBuffer({size:u.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),new Float32Array(this.vertexBuffer.getMappedRange()).set(u),this.vertexBuffer.unmap(),this.indexBuffer=t.createBuffer({size:p.byteLength,usage:GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),new Uint16Array(this.indexBuffer.getMappedRange()).set(p),this.indexBuffer.unmap()}resetPools(){this.modelPool.reset()}packModel(t){SA(this.modelData,t.modelMatrix,t.normalMatrix,t.colorTint);let r=t.borderColor??[0,0,0,0];this.modelData[36]=r[0],this.modelData[37]=r[1],this.modelData[38]=r[2],this.modelData[39]=r[3],this.modelData[40]=t.opacity??1,this.modelData[41]=t.borderRadius??0,this.modelData[42]=t.twoSided?1:0,this.modelData[43]=t.borderWidth??0,this.modelData[44]=t.width??0,this.modelData[45]=t.height??0,this.modelData[46]=t.textureExtent?.[0]??0,this.modelData[47]=t.textureExtent?.[1]??0,this.modelData.set(Io(t),48),Yr(t,this.modelData,52);let n=this.modelPool.getBuffer(this.device,this.modelData);return this.device.createBindGroup({layout:this.modelLayout,entries:[{binding:0,resource:{buffer:n}},{binding:1,resource:t.matte?.createView()??Tr(this.device)}]})}textureBindGroup(t,r){return this.device.createBindGroup({layout:this.textureLayout,entries:[{binding:0,resource:r},{binding:1,resource:t.createView()}]})}draw(t,r,n,A,o,i,a=!1,s=!1){let c=this.packModel(i),l=this.textureBindGroup(A,o);t.setPipeline(s?this.bloomVariants.get(a):a?this.pipelineMrt:this.pipelineSingle),t.setBindGroup(0,r),t.setBindGroup(1,c),t.setBindGroup(2,l),t.setBindGroup(3,n),t.setVertexBuffer(0,this.vertexBuffer),t.setIndexBuffer(this.indexBuffer,"uint16"),t.drawIndexed(6)}drawShadow(t,r,n,A,o){t.setPipeline(this.pipelineShadow),t.setBindGroup(0,r),t.setBindGroup(1,this.packModel(o)),t.setBindGroup(2,this.textureBindGroup(n,A)),t.setVertexBuffer(0,this.vertexBuffer),t.setIndexBuffer(this.indexBuffer,"uint16"),t.drawIndexed(6)}destroy(){this.modelPool.destroy(),this.vertexBuffer.destroy(),this.indexBuffer.destroy()}};var UA=class{device;pipelineSingle;pipelineMrt;bloomVariants;wireSingle;wireMrt;wireBloom;wireShadow;pointPipelines;transparentPointPipelines;pointShadow;transparentPipelines;transparentWirePipelines;pipelineShadow;cameraLayout;modelLayout;textureLayout;lightsLayout;modelPool;skinningPool;defaultWhiteTexture;flatNormalTexture;defaultSkinningBuffer;defaultInstanceBuffer;whiteColorBuffer=null;whiteColorCapacity=0;retiredColorBuffers=[];modelData=new Float32Array(52+Xt);constructor(t,r,n="depth24plus",A,o,i=1){this.device=t,this.modelPool=new Xe((52+Xt)*4,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.skinningPool=new Xe(8192,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST);let a=t.createShaderModule({label:"mesh3d.wgsl",code:Ua});this.cameraLayout=A??t.createBindGroupLayout({label:"Mesh3DCameraLayout",entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.modelLayout=t.createBindGroupLayout({label:"Mesh3DModelLayout",entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},Nr(2),Nr(3),{binding:4,visibility:GPUShaderStage.VERTEX,buffer:{type:"read-only-storage"}}]}),this.textureLayout=t.createBindGroupLayout({label:"Mesh3DTextureLayout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},...[1,2,3,4,5].map(M=>({binding:M,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}))]}),this.lightsLayout=o??ho(t,"Mesh3DLightsLayout");let s=t.createPipelineLayout({bindGroupLayouts:[this.cameraLayout,this.modelLayout,this.textureLayout,this.lightsLayout]}),c={module:a,entryPoint:"vs_main",buffers:[{arrayStride:64,attributes:[{shaderLocation:0,offset:0,format:"float32x3"},{shaderLocation:1,offset:12,format:"float32x2"},{shaderLocation:2,offset:20,format:"float32x3"},{shaderLocation:3,offset:32,format:"float32x4"},{shaderLocation:4,offset:48,format:"float32x4"}]},{arrayStride:16,attributes:[{shaderLocation:5,offset:0,format:"float32x4"}]},{arrayStride:32,attributes:[{shaderLocation:6,offset:0,format:"float32x2"},{shaderLocation:7,offset:8,format:"float32x2"},{shaderLocation:8,offset:16,format:"float32x2"},{shaderLocation:9,offset:24,format:"float32x2"}]}]},l={label:"Mesh3DPipeline",layout:s,vertex:c,module:a,format:r,depthStencil:{format:n,depthWriteEnabled:!0,depthCompare:"less-equal"},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:i}},{single:u,mrt:p}=mt(t,l);this.pipelineSingle=u,this.pipelineMrt=p,this.bloomVariants=new ut(t,l);let g={...l,label:"Mesh3DWireframe",primitive:{topology:"line-list"}},f=mt(t,g);this.wireSingle=f.single,this.wireMrt=f.mrt,this.wireBloom=new ut(t,g);let b={...l,label:"Mesh3DTransparent",depthStencil:{...l.depthStencil,depthWriteEnabled:!1}},v={...b,label:"Mesh3DTransparentWireframe",primitive:g.primitive};this.transparentPipelines={...mt(t,b),bloom:new ut(t,b)},this.transparentWirePipelines={...mt(t,v),bloom:new ut(t,v)};let Q={...l,label:"Mesh3DPoints",primitive:{topology:"point-list"}},x={...Q,label:"Mesh3DTransparentPoints",depthStencil:{...l.depthStencil,depthWriteEnabled:!1}};this.pointPipelines={...mt(t,Q),bloom:new ut(t,Q)},this.transparentPointPipelines={...mt(t,x),bloom:new ut(t,x)},this.pointShadow=t.createRenderPipeline({label:"Mesh3DPointShadow",layout:t.createPipelineLayout({bindGroupLayouts:[this.cameraLayout,this.modelLayout]}),vertex:c,depthStencil:{format:zr.format,depthWriteEnabled:!0,depthCompare:"less-equal"},primitive:{topology:"point-list"}}),this.wireShadow=t.createRenderPipeline({label:"Mesh3DWireframeShadow",layout:t.createPipelineLayout({bindGroupLayouts:[this.cameraLayout,this.modelLayout]}),vertex:c,depthStencil:{format:zr.format,depthWriteEnabled:!0,depthCompare:"less-equal"},primitive:{topology:"line-list"}}),this.pipelineShadow=t.createRenderPipeline({label:"Mesh3DPipelineShadow",layout:t.createPipelineLayout({bindGroupLayouts:[this.cameraLayout,this.modelLayout]}),vertex:c,depthStencil:zr,primitive:{topology:"triangle-list",cullMode:"none"}}),this.defaultWhiteTexture=t.createTexture({label:"Mesh3DDefaultWhiteTexture",size:{width:1,height:1},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST}),t.queue.writeTexture({texture:this.defaultWhiteTexture},new Uint8Array([255,255,255,255]),{bytesPerRow:4,rowsPerImage:1},{width:1,height:1}),this.flatNormalTexture=t.createTexture({label:"Mesh3DFlatNormalTexture",size:{width:1,height:1},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST}),t.queue.writeTexture({texture:this.flatNormalTexture},new Uint8Array([128,128,255,255]),{bytesPerRow:4,rowsPerImage:1},{width:1,height:1});let _=new Float32Array(2048);for(let M=0;M<128;M++)_[M*16]=1,_[M*16+5]=1,_[M*16+10]=1,_[M*16+15]=1;this.defaultSkinningBuffer=t.createBuffer({size:8192,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),new Float32Array(this.defaultSkinningBuffer.getMappedRange()).set(_),this.defaultSkinningBuffer.unmap(),this.defaultInstanceBuffer=t.createBuffer({label:"Mesh3DDefaultInstanceBuffer",size:64,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});let y=new Float32Array(this.defaultInstanceBuffer.getMappedRange());y[0]=0,y[1]=0,y[2]=0,y[3]=1,y[4]=0,y[5]=0,y[6]=0,y[7]=1,y[8]=1,y[9]=1,y[10]=1,y[11]=1,y[12]=0,y[13]=0,y[14]=0,y[15]=0,this.defaultInstanceBuffer.unmap()}resetPools(){this.modelPool.reset(),this.skinningPool.reset()}packModel(t){SA(this.modelData,t.modelMatrix,t.normalMatrix,t.colorTint),this.modelData[36]=t.opacity??1,this.modelData[37]=t.twoSided?1:0,this.modelData[38]=t.isSkinned?1:0,this.modelData[39]=(t.isInstanced||t.instanceBuffer?1:0)+(t.hasMapUvs?2:0);let r=t.roughness!==void 0?Math.max(1,(1-t.roughness)*128):t.shininess??32,n=t.metallic!==void 0?t.metallic:t.specularIntensity??.5,A=t.ambientIntensity??1,o=t.material==="unlit"?0:t.material==="toon"?2:1;this.modelData[40]=r,this.modelData[41]=n,this.modelData[42]=A,this.modelData[43]=o;let i=t.shadeColor??[1,1,1];this.modelData[44]=i[0],this.modelData[45]=i[1],this.modelData[46]=i[2],this.modelData[47]=t.alphaCutoff??0,Yr(t,this.modelData,48);let a=t.maps;this.modelData[56]=a?.normal?a.normalScale??1:0,this.modelData[57]=a?.occlusion?a.occlusionStrength??1:0,this.modelData[58]=a?.metallicRoughness?1:0,this.modelData[59]=a?.emissive?1:0;let s=t.glass;s&&(this.modelData[44]=s.dispersion,this.modelData[45]=s.thickness,this.modelData[46]=s.frost,this.modelData[50]=1,this.modelData[51]=s.ior);let c=this.modelPool.getBuffer(this.device,this.modelData),l=t.isSkinned&&t.skinningMatrices?this.skinningPool.getBuffer(this.device,t.skinningMatrices):this.defaultSkinningBuffer;return this.device.createBindGroup({layout:this.modelLayout,entries:[{binding:0,resource:{buffer:c}},{binding:1,resource:{buffer:l}},{binding:2,resource:t.matte?.createView()??Tr(this.device)},{binding:3,resource:t.glass&&t.backdrop?.createView()||Tr(this.device)},{binding:4,resource:{buffer:t.instanceBuffer??this.defaultInstanceBuffer}}]})}draw(t,r,n,A,o,i,a,s=!1,c=!1,l=1,u=0){let p=this.packModel({...a,hasMapUvs:!!A.mapUvBuffer}),g=this.defaultWhiteTexture,f=a.maps,b=this.device.createBindGroup({layout:this.textureLayout,entries:[{binding:0,resource:i},{binding:1,resource:(o??g).createView()},{binding:2,resource:(f?.normal??this.flatNormalTexture).createView()},{binding:3,resource:(f?.metallicRoughness??g).createView()},{binding:4,resource:(f?.occlusion??g).createView()},{binding:5,resource:(f?.emissive??g).createView()}]}),v=a.wireframe===!0&&(!A.topology||A.topology==="triangle-list");if(v&&!A.wireIndexBuffer)throw new Error("Wireframe requires mesh buffers with edge indices");let Q=v||A.topology==="line-list",x=A.topology==="point-list"?a.transparent?this.transparentPointPipelines:this.pointPipelines:a.transparent?Q?this.transparentWirePipelines:this.transparentPipelines:Q?{single:this.wireSingle,mrt:this.wireMrt,bloom:this.wireBloom}:{single:this.pipelineSingle,mrt:this.pipelineMrt,bloom:this.bloomVariants};t.setPipeline(c?x.bloom.get(s):s?x.mrt:x.single),t.setBindGroup(0,r),t.setBindGroup(1,p),t.setBindGroup(2,b),t.setBindGroup(3,n),t.setVertexBuffer(0,A.vertexBuffer),t.setVertexBuffer(1,this.colorsFor(A)),t.setVertexBuffer(2,A.mapUvBuffer??A.vertexBuffer),t.setIndexBuffer(v?A.wireIndexBuffer:A.indexBuffer,A.indexFormat),l>1||a.isInstanced?t.drawIndexed(v?A.wireIndexCount:A.indexCount,l,0,0,u):t.drawIndexed(v?A.wireIndexCount:A.indexCount)}drawShadow(t,r,n,A,o=1,i=0){let a=A.wireframe===!0&&(!n.topology||n.topology==="triangle-list");if(a&&!n.wireIndexBuffer)throw new Error("Wireframe requires mesh buffers with edge indices");t.setPipeline(n.topology==="point-list"?this.pointShadow:a||n.topology==="line-list"?this.wireShadow:this.pipelineShadow),t.setBindGroup(0,r),t.setBindGroup(1,this.packModel(A)),t.setVertexBuffer(0,n.vertexBuffer),t.setVertexBuffer(1,this.colorsFor(n)),t.setVertexBuffer(2,n.mapUvBuffer??n.vertexBuffer),t.setIndexBuffer(a?n.wireIndexBuffer:n.indexBuffer,n.indexFormat),o>1||A.isInstanced?t.drawIndexed(a?n.wireIndexCount:n.indexCount,o,0,0,i):t.drawIndexed(a?n.wireIndexCount:n.indexCount)}colorsFor(t){if(t.colorBuffer)return t.colorBuffer;let r=Math.max(1,Math.ceil(t.vertexBuffer.size/64));if(!this.whiteColorBuffer||this.whiteColorCapacity<r){this.whiteColorBuffer&&this.retiredColorBuffers.push(this.whiteColorBuffer);let n=2**Math.ceil(Math.log2(r));this.whiteColorBuffer=this.device.createBuffer({label:"Mesh3DWhiteVertexColors",size:n*16,usage:GPUBufferUsage.VERTEX,mappedAtCreation:!0}),new Float32Array(this.whiteColorBuffer.getMappedRange()).fill(1),this.whiteColorBuffer.unmap(),this.whiteColorCapacity=n}return this.whiteColorBuffer}destroy(){this.whiteColorBuffer?.destroy();for(let t of this.retiredColorBuffers)t.destroy();this.modelPool.destroy(),this.skinningPool.destroy(),this.defaultWhiteTexture.destroy(),this.flatNormalTexture.destroy(),this.defaultSkinningBuffer.destroy(),this.defaultInstanceBuffer.destroy()}};q();var xc=`
1613
- struct Counts { vertices: u32, targets: u32, pad0: u32, pad1: u32 };
1614
- @group(0) @binding(0) var<storage, read> source: array<f32>;
1615
- @group(0) @binding(1) var<storage, read> deltas: array<f32>;
1616
- @group(0) @binding(2) var<storage, read> weights: array<f32>;
1617
- @group(0) @binding(3) var<uniform> counts: Counts;
1618
- @group(0) @binding(4) var<storage, read_write> dest: array<f32>;
1619
- @compute @workgroup_size(128)
1620
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
1621
- let vertex = gid.x;
1622
- if (vertex >= counts.vertices) { return; }
1623
- let v = vertex * 16u;
1624
- for (var c = 0u; c < 16u; c++) { dest[v + c] = source[v + c]; }
1625
- var position = vec3<f32>(source[v], source[v + 1u], source[v + 2u]);
1626
- var normal = vec3<f32>(source[v + 5u], source[v + 6u], source[v + 7u]);
1627
- for (var t = 0u; t < counts.targets; t++) {
1628
- let d = (t * counts.vertices + vertex) * 6u;
1629
- let w = weights[t];
1630
- position += vec3<f32>(deltas[d], deltas[d + 1u], deltas[d + 2u]) * w;
1631
- normal += vec3<f32>(deltas[d + 3u], deltas[d + 4u], deltas[d + 5u]) * w;
1632
- }
1633
- dest[v] = position.x; dest[v + 1u] = position.y; dest[v + 2u] = position.z;
1634
- dest[v + 5u] = normal.x; dest[v + 6u] = normal.y; dest[v + 7u] = normal.z;
1635
- }`,kA=class{constructor(t){this.device=t;this.layout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]}),this.pipeline=t.createComputePipeline({label:"MeshMorphPipeline",layout:t.createPipelineLayout({bindGroupLayouts:[this.layout]}),compute:{module:t.createShaderModule({code:xc}),entryPoint:"main"}})}device;pipeline;layout;weights=new Xe(16,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST);counts=new Xe(16,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST);targets=new WeakMap;outputs=[];outputIndex=0;targetBuffer(t){let r=this.targets.get(t);if(r)return r;let n=t.morphTargets??[],A=t.positions.length/3,o=new Float32Array(A*n.length*6);for(let a=0;a<n.length;a++){let s=n[a];for(let c=0;c<A;c++)for(let l=0;l<3;l++)o[(a*A+c)*6+l]=s.positions?.[c*3+l]??0,o[(a*A+c)*6+3+l]=s.normals?.[c*3+l]??0}let i=this.device.createBuffer({label:"MeshMorphTargets",size:Math.max(4,o.byteLength),usage:GPUBufferUsage.STORAGE,mappedAtCreation:!0});return new Float32Array(i.getMappedRange()).set(o),i.unmap(),this.targets.set(t,i),i}execute(t,r,n,A){let o=r.positions.length/3,i=r.morphTargets?.length??0,a=Math.max(64,o*64),s=this.outputs[this.outputIndex];if(!s||s.size<a){if(s){let p=s;this.device.queue.onSubmittedWorkDone().then(()=>p.destroy())}s=this.device.createBuffer({label:"MeshMorphOutput",size:a,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.VERTEX}),this.outputs[this.outputIndex]=s}this.outputIndex++;let c=new Float32Array(Math.max(4,i));for(let p=0;p<i;p++)c[p]=A[p]??0;let l=this.device.createBindGroup({layout:this.layout,entries:[{binding:0,resource:{buffer:n}},{binding:1,resource:{buffer:this.targetBuffer(r)}},{binding:2,resource:{buffer:this.weights.getBuffer(this.device,c)}},{binding:3,resource:{buffer:this.counts.getBuffer(this.device,new Uint32Array([o,i,0,0]))}},{binding:4,resource:{buffer:s}}]}),u=t.beginComputePass({label:"MeshMorphPass"});return u.setPipeline(this.pipeline),u.setBindGroup(0,l),u.dispatchWorkgroups(Math.ceil(o/128)),u.end(),s}resetPools(){this.outputIndex=0,this.weights.reset(),this.counts.reset()}destroy(){this.weights.destroy(),this.counts.destroy();for(let t of this.outputs)t.destroy()}};q();function mo(e){let{min:t,max:r}=e;return[[t[0],t[1],t[2]],[r[0],t[1],t[2]],[t[0],r[1],t[2]],[r[0],r[1],t[2]],[t[0],t[1],r[2]],[r[0],t[1],r[2]],[t[0],r[1],r[2]],[r[0],r[1],r[2]]]}function Bo(e,t){let r=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let[A,o,i]of mo(e)){let a=[t[0]*A+t[4]*o+t[8]*i+t[12],t[1]*A+t[5]*o+t[9]*i+t[13],t[2]*A+t[6]*o+t[10]*i+t[14]];for(let s=0;s<3;s++)a[s]<r[s]&&(r[s]=a[s]),a[s]>n[s]&&(n[s]=a[s])}return{min:r,max:n}}function NA(e,t){return[e[0]*t[0]+e[4]*t[1]+e[8]*t[2]+e[12],e[1]*t[0]+e[5]*t[1]+e[9]*t[2]+e[13],e[2]*t[0]+e[6]*t[1]+e[10]*t[2]+e[14]]}function Ta(e){return Math.abs(e[1])>.98?[0,0,1]:[0,-1,0]}function La(e,t,r,n){if(t.length===0)return null;let A=ae.normalize(e.direction),o=t.flatMap(mo),i=[...o,...r.flatMap(mo)];if(e.type==="directional"){let f=[0,0,0];for(let P of o)f[0]+=P[0]/o.length,f[1]+=P[1]/o.length,f[2]+=P[2]/o.length;let b=ae.subtract(f,ae.multiplyScalar(A,1)),v=Ie.lookAt(b,f,Ta(A)),Q=1/0,x=-1/0,_=1/0,y=-1/0;for(let P of o){let z=NA(v,P);Q=Math.min(Q,z[0]),x=Math.max(x,z[0]),_=Math.min(_,z[1]),y=Math.max(y,z[1])}let M=1/0,T=-1/0;for(let P of i){let z=NA(v,P)[2];M=Math.min(M,z),T=Math.max(T,z)}let N=Math.max(x-Q,y-_)*.5*1.08+4,O=(Q+x)/2,D=(_+y)/2,H=Math.max(10,(T-M)*.02),V=Ie.orthographic(O-N,O+N,D-N,D+N,M-H,T+H);return{viewProj:Ie.multiply(V,v),texelWorldSize:2*N/n}}let a=e.position,s=Ie.lookAt(a,ae.add(a,A),Ta(A)),c=1/0,l=0,u=0;for(let f of i){let b=NA(s,f)[2];b>0&&(c=Math.min(c,b),l=Math.max(l,b))}for(let f of o)u=Math.max(u,NA(s,f)[2]);if(!Number.isFinite(c)||l<=0)return null;c=Math.max(1,c*.9),l=l*1.05+1;let p=Math.min(170,2*(e.angle??45)+4)*Math.PI/180,g=Ie.perspective(p,1,c,l);return{viewProj:Ie.multiply(g,s),texelWorldSize:2*Math.tan(p/2)*Math.max(u,c)/n}}q();q();var Oa=`
1636
- ${fr}
1637
-
1638
- struct TextModelUniforms {
1639
- modelMatrix : mat4x4<f32>, // paragraph px -> world
1640
- normalMatrix : mat4x4<f32>,
1641
- params : vec4<f32>, // x = opacity, y = slant, z = twoSided (1.0 = yes), w = pull toward the eye
1642
- materialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit)
1643
- pbr : vec4<f32>, // x = roughness (<0 = default), y = metallic
1644
- emissive : vec4<f32>, // rgb = sRGB emissive color, w = strength
1645
- };
1646
-
1647
- @group(0) @binding(0) var<uniform> cam : CameraUniforms;
1648
- @group(1) @binding(0) var<uniform> model : TextModelUniforms;
1649
- ${Vr(1,1)}@group(2) @binding(0) var curvesTex : texture_2d<f32>;
1650
- @group(2) @binding(1) var bandsTex : texture_2d<u32>;
1651
- ${dr}
1652
-
1653
- ${ta}
1654
-
1655
- struct VSOut {
1656
- @builtin(position) pos : vec4<f32>,
1657
- @location(0) uv : vec2<f32>,
1658
- @location(1) @interpolate(flat) glyphScale : vec2<f32>,
1659
- @location(2) @interpolate(flat) bandScale : vec2<f32>,
1660
- @location(3) @interpolate(flat) bandMax : vec2<u32>,
1661
- @location(4) @interpolate(flat) bandsTexCoords : vec2<u32>,
1662
- @location(5) color : vec4<f32>,
1663
- @location(6) @interpolate(flat) fx : vec4<f32>, // x = blur, y = chromatic shift, z = dissolve, w = vfx
1664
- @location(7) worldPos : vec3<f32>,
1665
- @location(8) @interpolate(flat) worldNormal : vec3<f32>,
1666
- @location(9) linearDepth : f32,
1667
- };
1668
-
1669
- var<private> pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
1670
- vec2<f32>(-1.0, -1.0),
1671
- vec2<f32>(1.0, 1.0),
1672
- vec2<f32>(-1.0, 1.0),
1673
- vec2<f32>(-1.0, -1.0),
1674
- vec2<f32>(1.0, -1.0),
1675
- vec2<f32>(1.0, 1.0)
1676
- );
1677
-
1678
- // Screen pixels moved per paragraph unit along the axis whose clip-space step
1679
- // is dc, at clip position c: the derivative of the perspective divide.
1680
- fn pixelsPerUnitAlong(c: vec4<f32>, dc: vec4<f32>) -> vec2<f32> {
1681
- let w = max(c.w, 1e-4);
1682
- return (dc.xy * w - c.xy * dc.w) / (w * w) * 0.5 * cam.screenParams.xy;
1683
- }
1684
-
1685
- @vertex fn vs(
1686
- @builtin(vertex_index) vertex_index : u32,
1687
- @location(0) aScaleBias : vec4<f32>,
1688
- @location(1) aGlyphBandScale : vec4<f32>,
1689
- @location(2) aBandMaxTexCoords : vec4<f32>,
1690
- @location(3) aAnim : vec4<f32>, // x = rotation, y = scale_mult, zw = translation
1691
- @location(4) aColor : vec4<f32>,
1692
- @location(5) aExtraParams : vec4<f32>,
1693
- ) -> VSOut {
1694
- let quad_pos = pos[vertex_index];
1695
- let angle = aAnim.x;
1696
- let scale_mult = aAnim.y;
1697
- let origin = aScaleBias.zw + aAnim.zw;
1698
- let slant = model.params.y;
1699
- let rot = mat2x2<f32>(cos(angle), sin(angle), -sin(angle), cos(angle));
1700
- let shear = mat2x2<f32>(1.0, 0.0, -slant, 1.0);
1701
- let glyphToParagraph = rot * shear;
1702
-
1703
- let clipFromParagraph = cam.viewProjMatrix * model.modelMatrix;
1704
-
1705
- // Slug's dynamic dilation, under perspective: grow the quad by one screen
1706
- // pixel so edge pixels whose centres fall just outside the outline's box
1707
- // are still shaded. The pixel is measured at this corner through the
1708
- // projection's Jacobian, along the paragraph direction that gets the fewest
1709
- // pixels (its smallest singular value), so foreshortened sides are covered.
1710
- let corner = origin + glyphToParagraph * (quad_pos * aScaleBias.xy * scale_mult);
1711
- let cornerClip = clipFromParagraph * vec4<f32>(corner, 0.0, 1.0);
1712
- let jx = pixelsPerUnitAlong(cornerClip, clipFromParagraph[0]);
1713
- let jy = pixelsPerUnitAlong(cornerClip, clipFromParagraph[1]);
1714
- let e = dot(jx, jx) + dot(jy, jy);
1715
- let det = jx.x * jy.y - jx.y * jy.x;
1716
- let minPixelsPerUnit = sqrt(max(0.5 * (e - sqrt(max(e * e - 4.0 * det * det, 0.0))), 0.0));
1717
- let halfSize = max(abs(aScaleBias.xy * scale_mult), vec2<f32>(1e-4));
1718
- // Bounded at three times the glyph: seen nearly edge-on a pixel spans
1719
- // most of the paragraph, and the glyph is a sliver either way.
1720
- let dilation = min(vec2<f32>(1.0 / max(minPixelsPerUnit, 1e-6)), halfSize * 2.0);
1721
- let grow = vec2<f32>(1.0) + dilation / halfSize;
1722
-
1723
- let paragraphPos = origin + glyphToParagraph * (quad_pos * aScaleBias.xy * scale_mult * grow);
1724
- let world4 = model.modelMatrix * vec4<f32>(paragraphPos, 0.0, 1.0);
1725
- // Slide toward the eye along the view ray: the same pixel, a nearer depth.
1726
- // Passes stacked on one plane (shadow, stroke, fill, a backdrop) resolve
1727
- // by draw order instead of z-fighting.
1728
- let world = world4.xyz + (cam.cameraPos.xyz - world4.xyz) * model.params.w;
1729
-
1730
- var out : VSOut;
1731
- out.pos = cam.viewProjMatrix * vec4<f32>(world, 1.0);
1732
- out.uv = vec2<f32>(
1733
- quad_pos.x * grow.x * 0.5 + 0.5,
1734
- 1.0 - (quad_pos.y * grow.y * 0.5 + 0.5),
1735
- );
1736
- out.glyphScale = aGlyphBandScale.xy;
1737
- out.bandScale = aGlyphBandScale.zw;
1738
- out.bandMax = vec2<u32>(aBandMaxTexCoords.xy);
1739
- out.bandsTexCoords = vec2<u32>(aBandMaxTexCoords.zw);
1740
- out.color = aColor;
1741
- out.fx = aExtraParams;
1742
- out.worldPos = world4.xyz;
1743
- out.worldNormal = normalize((model.normalMatrix * vec4<f32>(0.0, 0.0, -1.0, 0.0)).xyz);
1744
- out.linearDepth = dot(world4.xyz - cam.cameraPos.xyz, cam.cameraDir.xyz);
1745
- return out;
1746
- }
1747
-
1748
- struct TextFragment {
1749
- color : vec4<f32>, // premultiplied display color; alpha 0 = discard
1750
- hdr : vec4<f32>, // premultiplied scene radiance (bloom source)
1751
- };
1752
-
1753
- fn shadeText(in : VSOut, fw : vec2<f32>) -> TextFragment {
1754
- var out : TextFragment;
1755
- out.color = vec4<f32>(0.0);
1756
- out.hdr = vec4<f32>(0.0);
1757
- // One-sided text culls against its plane's normal, as one-sided quads do.
1758
- if (model.params.z < 0.5 && dot(in.worldNormal, cam.cameraPos.xyz - in.worldPos) < 0.0) {
1759
- return out;
1760
- }
1761
- let glyph = SlugGlyph(in.glyphScale, in.bandScale, in.bandMax, in.bandsTexCoords);
1762
- let shaded = shadeSlugGlyph(
1763
- in.uv,
1764
- fw,
1765
- in.pos.xy,
1766
- glyph,
1767
- in.color,
1768
- model.params.x,
1769
- in.fx.x,
1770
- in.fx.y,
1771
- in.fx.z,
1772
- );
1773
- if (shaded.a < 0.0001) {
1774
- return out;
1775
- }
1776
- let lit = shadeSurfaceFull(in.worldPos, in.worldNormal, shaded.rgb / shaded.a, model.materialParams, model.pbr, model.emissive);
1777
- out.color = vec4<f32>(lit.display * shaded.a, shaded.a);
1778
- out.hdr = vec4<f32>(lit.hdr * shaded.a, shaded.a);
1779
- return out;
1780
- }
1781
-
1782
- fn textFragment(in : VSOut) -> TextFragment {
1783
- let fw = max(abs(dpdx(in.uv)) + abs(dpdy(in.uv)), vec2<f32>(0.000001));
1784
- let m = matteCoverage(in.pos.xy);
1785
- var f = shadeText(in, fw);
1786
- f.color *= m;
1787
- f.hdr *= m;
1788
- if (f.color.a < 0.0001) {
1789
- discard;
1790
- }
1791
- return f;
1792
- }
1793
-
1794
- @fragment fn fs_single(in : VSOut) -> @location(0) vec4<f32> {
1795
- return textFragment(in).color;
1796
- }
1797
-
1798
- struct MrtOutput {
1799
- @location(0) color : vec4<f32>,
1800
- @location(1) depth : vec4<f32>,
1801
- };
1802
-
1803
- struct BloomOutput {
1804
- @location(0) color : vec4<f32>,
1805
- @location(1) hdr : vec4<f32>,
1806
- };
1807
-
1808
- struct MrtBloomOutput {
1809
- @location(0) color : vec4<f32>,
1810
- @location(1) depth : vec4<f32>,
1811
- @location(2) hdr : vec4<f32>,
1812
- };
1813
-
1814
- @fragment fn fs_mrt(in : VSOut) -> MrtOutput {
1815
- var out : MrtOutput;
1816
- out.color = textFragment(in).color;
1817
- out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);
1818
- return out;
1819
- }
1820
-
1821
- @fragment fn fs_single_bloom(in : VSOut) -> BloomOutput {
1822
- let f = textFragment(in);
1823
- var out : BloomOutput;
1824
- out.color = f.color;
1825
- out.hdr = f.hdr;
1826
- return out;
1827
- }
1828
-
1829
- @fragment fn fs_mrt_bloom(in : VSOut) -> MrtBloomOutput {
1830
- let f = textFragment(in);
1831
- var out : MrtBloomOutput;
1832
- out.color = f.color;
1833
- out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);
1834
- out.hdr = f.hdr;
1835
- return out;
1836
- }
1837
- `;var Ha=24,TA=class{device;pipelineSingle;pipelineMrt;bloomVariants;modelLayout;fontLayout;modelPool;instancePool;fontBindGroups=new WeakMap;modelData=new Float32Array(40+Xt);constructor(t,r,n,A,o,i=1){this.device=t,this.modelPool=new Xe((40+Xt)*4,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.instancePool=new Xe(65536,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let a=t.createShaderModule({label:"slug3d.wgsl",code:Oa});this.modelLayout=t.createBindGroupLayout({label:"Slug3DModelLayout",entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},Nr(1)]}),this.fontLayout=t.createBindGroupLayout({label:"Slug3DFontLayout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"unfilterable-float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"uint"}}]});let s=t.createPipelineLayout({bindGroupLayouts:[A,this.modelLayout,this.fontLayout,o]}),c={module:a,entryPoint:"vs",buffers:[{arrayStride:Ha*4,stepMode:"instance",attributes:[{shaderLocation:0,offset:0,format:"float32x4"},{shaderLocation:1,offset:16,format:"float32x4"},{shaderLocation:2,offset:32,format:"float32x4"},{shaderLocation:3,offset:48,format:"float32x4"},{shaderLocation:4,offset:64,format:"float32x4"},{shaderLocation:5,offset:80,format:"float32x4"}]}]},g={label:"Slug3DPipeline",layout:s,vertex:c,module:a,format:r,depthStencil:{format:n,depthWriteEnabled:!0,depthCompare:"less-equal"},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:i}},{single:f,mrt:b}=mt(t,g);this.pipelineSingle=f,this.pipelineMrt=b,this.bloomVariants=new ut(t,g)}resetPools(){this.modelPool.reset(),this.instancePool.reset()}draw(t,r,n,A,o,i,a,s=!1,c=!1){if(i===0||!A.curvesTex||!A.bandsTex)return;this.modelData.set(a.modelMatrix,0),this.modelData.set(a.normalMatrix,16),this.modelData[32]=a.opacity,this.modelData[33]=a.slant,this.modelData[34]=a.twoSided?1:0,this.modelData[35]=a.depthPull,this.modelData.set(Io(a),36),Yr(a,this.modelData,40);let l=this.modelPool.getBuffer(this.device,this.modelData),u=this.device.createBindGroup({layout:this.modelLayout,entries:[{binding:0,resource:{buffer:l}},{binding:1,resource:a.matte?.createView()??Tr(this.device)}]}),p=this.instancePool.getBuffer(this.device,o.subarray(0,i*Ha));t.setPipeline(c?this.bloomVariants.get(s):s?this.pipelineMrt:this.pipelineSingle),t.setBindGroup(0,r),t.setBindGroup(1,u),t.setBindGroup(2,this.fontBindGroup(A.curvesTex,A.bandsTex)),t.setBindGroup(3,n),t.setVertexBuffer(0,p),t.draw(6,i)}fontBindGroup(t,r){let n=this.fontBindGroups.get(t);return n||(n=this.device.createBindGroup({layout:this.fontLayout,entries:[{binding:0,resource:t.createView()},{binding:1,resource:r.createView()}]}),this.fontBindGroups.set(t,n)),n}destroy(){this.modelPool.destroy(),this.instancePool.destroy()}};q();var wc=`
1838
- struct SwarmParticle3D {
1839
- pos : vec3<f32>, // world-space position (px, y down)
1840
- age : f32, // seconds alive
1841
- vel : vec3<f32>, // world-space velocity (px/s)
1842
- life : f32, // total lifetime (seconds; <= 0 means dead)
1843
- quat : vec4<f32>, // unit orientation quaternion
1844
- angVel : vec3<f32>, // angular velocity (rad/s)
1845
- heat : f32, // smoothed kinetic/friction heat [0..1+]
1846
- scale : f32, // size multiplier (for sparks: radius in px)
1847
- variant : u32, // mesh variant index
1848
- seed : u32, // per-particle deterministic random id
1849
- contact : f32, // floor contact factor [0..1]
1850
- };
1851
-
1852
- struct InstanceData {
1853
- posScale : vec4<f32>, // xyz = translation, w = mesh scale
1854
- quat : vec4<f32>, // xyzw = orientation quaternion
1855
- color : vec4<f32>, // rgba = color multiplier
1856
- emissive : vec4<f32>, // rgb = sRGB emissive color, w = emissiveIntensity
1857
- };
1858
-
1859
- struct Params { v : array<vec4<f32>, 32> };
1860
-
1861
- @group(0) @binding(0) var<uniform> P : Params;
1862
- @group(0) @binding(1) var<storage, read_write> particles : array<SwarmParticle3D>;
1863
- @group(0) @binding(2) var<storage, read_write> instances : array<InstanceData>;
1864
-
1865
- fn pcg(v : u32) -> u32 {
1866
- let state = v * 747796405u + 2891336453u;
1867
- let word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
1868
- return (word >> 22u) ^ word;
1869
- }
1870
-
1871
- fn rnd(idx : u32, channel : u32, seed : u32) -> f32 {
1872
- return f32(pcg(idx * 16u + channel + pcg(seed))) / 4294967295.0;
1873
- }
1874
-
1875
- fn hash3(p : vec3<f32>) -> f32 {
1876
- let q = fract(p * vec3<f32>(0.1031, 0.1030, 0.0973));
1877
- let r = q + dot(q, q.yzx + 33.33);
1878
- return fract((r.x + r.y) * r.z);
1879
- }
1880
-
1881
- fn vnoise3(p : vec3<f32>) -> f32 {
1882
- let i = floor(p);
1883
- let f = fract(p);
1884
- let u = f * f * (3.0 - 2.0 * f);
1885
- let n000 = hash3(i);
1886
- let n100 = hash3(i + vec3<f32>(1.0, 0.0, 0.0));
1887
- let n010 = hash3(i + vec3<f32>(0.0, 1.0, 0.0));
1888
- let n110 = hash3(i + vec3<f32>(1.0, 1.0, 0.0));
1889
- let n001 = hash3(i + vec3<f32>(0.0, 0.0, 1.0));
1890
- let n101 = hash3(i + vec3<f32>(1.0, 0.0, 1.0));
1891
- let n011 = hash3(i + vec3<f32>(0.0, 1.0, 1.0));
1892
- let n111 = hash3(i + vec3<f32>(1.0, 1.0, 1.0));
1893
- return mix(
1894
- mix(mix(n000, n100, u.x), mix(n010, n110, u.x), u.y),
1895
- mix(mix(n001, n101, u.x), mix(n011, n111, u.x), u.y),
1896
- u.z
1897
- );
1898
- }
1899
-
1900
- fn fbm3(p : vec3<f32>) -> f32 {
1901
- return vnoise3(p) * 0.6 + vnoise3(p * 2.02 + 13.5) * 0.3 + vnoise3(p * 4.05 + 31.7) * 0.1;
1902
- }
1903
-
1904
- fn curl3(p : vec3<f32>) -> vec3<f32> {
1905
- let e = 0.02;
1906
- let dx = vec3<f32>(e, 0.0, 0.0);
1907
- let dy = vec3<f32>(0.0, e, 0.0);
1908
- let dz = vec3<f32>(0.0, 0.0, e);
1909
-
1910
- let p0 = p;
1911
- let p1 = p + vec3<f32>(31.4, 15.9, 26.5);
1912
- let p2 = p + vec3<f32>(65.3, 58.9, 79.3);
1913
-
1914
- let dAy_dz = (fbm3(p1 + dz) - fbm3(p1 - dz)) / (2.0 * e);
1915
- let dAz_dy = (fbm3(p2 + dy) - fbm3(p2 - dy)) / (2.0 * e);
1916
-
1917
- let dAz_dx = (fbm3(p2 + dx) - fbm3(p2 - dx)) / (2.0 * e);
1918
- let dAx_dz = (fbm3(p0 + dz) - fbm3(p0 - dz)) / (2.0 * e);
1919
-
1920
- let dAx_dy = (fbm3(p0 + dy) - fbm3(p0 - dy)) / (2.0 * e);
1921
- let dAy_dx = (fbm3(p1 + dx) - fbm3(p1 - dx)) / (2.0 * e);
1922
-
1923
- return vec3<f32>(dAz_dy - dAy_dz, dAx_dz - dAz_dx, dAy_dx - dAx_dy);
1924
- }
1925
-
1926
- fn quatMul(a: vec4<f32>, b: vec4<f32>) -> vec4<f32> {
1927
- return vec4<f32>(
1928
- a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y,
1929
- a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x,
1930
- a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w,
1931
- a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z,
1932
- );
1933
- }
1934
-
1935
- fn spawn3D(i : u32, idx : u32, birthFrac : f32) {
1936
- let baseSeed = u32(P.v[1].y);
1937
- let timeSalt = u32(max(0.0, P.v[0].y + 100.0) * 997.0);
1938
- let seed = baseSeed + timeSalt;
1939
- let shape = u32(P.v[4].x); // 0=point, 1=box, 2=sphere, 3=shell, 4=ring, 5=disc
1940
- let ex = P.v[4].y; let ey = P.v[4].z; let ez = P.v[4].w;
1941
- let ew = P.v[5].x; let eh = P.v[5].y; let ed = P.v[5].z; let er = P.v[5].w;
1942
-
1943
- let r0 = rnd(idx, 0u, seed);
1944
- let r1 = rnd(idx, 1u, seed);
1945
- let r2 = rnd(idx, 2u, seed);
1946
-
1947
- var pos = vec3<f32>(ex, ey, ez);
1948
- if (shape == 1u) {
1949
- pos = vec3<f32>(ex + (r0 - 0.5) * ew, ey + (r1 - 0.5) * eh, ez + (r2 - 0.5) * ed);
1950
- } else if (shape == 2u) {
1951
- let phi = r0 * 6.2831853;
1952
- let cosTheta = (r1 * 2.0) - 1.0;
1953
- let sinTheta = sqrt(max(0.0, 1.0 - cosTheta * cosTheta));
1954
- let rad = er * pow(r2, 0.33333);
1955
- pos = vec3<f32>(ex + cos(phi) * sinTheta * rad, ey + sin(phi) * sinTheta * rad, ez + cosTheta * rad);
1956
- } else if (shape == 3u) {
1957
- let phi = r0 * 6.2831853;
1958
- let cosTheta = (r1 * 2.0) - 1.0;
1959
- let sinTheta = sqrt(max(0.0, 1.0 - cosTheta * cosTheta));
1960
- pos = vec3<f32>(ex + cos(phi) * sinTheta * er, ey + sin(phi) * sinTheta * er, ez + cosTheta * er);
1961
- } else if (shape == 4u || shape == 5u) {
1962
- let phi = r0 * 6.2831853;
1963
- let ringJitter = 1.0 + (r1 - 0.5) * 0.35;
1964
- let rad = select(er * ringJitter, er * sqrt(r1), shape == 5u);
1965
- pos = vec3<f32>(ex + cos(phi) * rad, ey + (r2 - 0.5) * eh, ez + sin(phi) * rad);
1966
- }
1967
-
1968
- let dir = P.v[6].xyz;
1969
- let spread = P.v[6].w;
1970
- let speedMin = P.v[7].x;
1971
- let speedMax = P.v[7].y;
1972
- let spd = mix(speedMin, speedMax, rnd(idx, 3u, seed));
1973
-
1974
- var vDir = normalize(dir);
1975
- if (length(dir) < 0.001) {
1976
- vDir = vec3<f32>(0.0, -1.0, 0.0);
1977
- }
1978
- if (spread > 0.001) {
1979
- let theta = (rnd(idx, 4u, seed) - 0.5) * spread;
1980
- let phi = rnd(idx, 5u, seed) * 6.2831853;
1981
- var tangent = cross(vDir, vec3<f32>(0.0, 1.0, 0.0));
1982
- if (length(tangent) < 0.01) {
1983
- tangent = cross(vDir, vec3<f32>(1.0, 0.0, 0.0));
1984
- }
1985
- tangent = normalize(tangent);
1986
- let bitangent = cross(vDir, tangent);
1987
- vDir = normalize(vDir + (tangent * cos(phi) + bitangent * sin(phi)) * tan(theta));
1988
- }
1989
-
1990
- // If vortex is active, give newly spawned shards an initial orbital velocity component
1991
- var initVel = vDir * spd;
1992
- let vortexSwirl = P.v[14].w;
1993
- if (abs(vortexSwirl) > 0.001) {
1994
- let vCenter = P.v[14].xyz;
1995
- let vAxis = normalize(P.v[15].xyz);
1996
- let r = pos - vCenter;
1997
- let rPerp = r - vAxis * dot(r, vAxis);
1998
- if (length(rPerp) > 1.0) {
1999
- let orbTangent = normalize(cross(vAxis, rPerp));
2000
- initVel += orbTangent * (spd * 0.85 * sign(vortexSwirl));
2001
- }
2002
- }
2003
-
2004
- let lifeMin = P.v[7].z;
2005
- let lifeMax = P.v[7].w;
2006
- let life = mix(lifeMin, lifeMax, rnd(idx, 6u, seed));
2007
-
2008
- let angSpeed = mix(P.v[8].x, P.v[8].y, rnd(idx, 7u, seed));
2009
- let angAxis = normalize(vec3<f32>(
2010
- rnd(idx, 8u, seed) - 0.5,
2011
- rnd(idx, 9u, seed) - 0.5,
2012
- rnd(idx, 10u, seed) - 0.5,
2013
- ));
2014
-
2015
- let qAngle = rnd(idx, 11u, seed) * 6.2831853;
2016
- let qAxis = normalize(vec3<f32>(
2017
- rnd(idx, 12u, seed) - 0.5,
2018
- rnd(idx, 13u, seed) - 0.5,
2019
- rnd(idx, 14u, seed) - 0.5,
2020
- ));
2021
- let initQuat = vec4<f32>(qAxis * sin(qAngle * 0.5), cos(qAngle * 0.5));
2022
-
2023
- let sizeJitter = P.v[16].w;
2024
- let pScale = max(0.25, 1.0 + (rnd(idx, 15u, seed) - 0.5) * sizeJitter * 2.0);
2025
-
2026
- var p: SwarmParticle3D;
2027
- p.pos = pos;
2028
- p.age = birthFrac * P.v[0].x;
2029
- p.vel = initVel;
2030
- p.life = life;
2031
- p.quat = initQuat;
2032
- p.angVel = angAxis * angSpeed;
2033
- p.heat = 0.0;
2034
- p.scale = pScale;
2035
- p.variant = idx % max(1u, u32(P.v[8].z));
2036
- p.seed = pcg(idx + seed);
2037
- p.contact = 0.0;
2038
-
2039
- particles[i] = p;
2040
- }
2041
-
2042
- fn spawnSpark3D(i : u32, sparkIdx : u32, maxParticles : u32, birthFrac : f32) {
2043
- let baseSeed = u32(P.v[1].y);
2044
- let timeSalt = u32(max(0.0, P.v[0].y + 100.0) * 1319.0);
2045
- let seed = baseSeed ^ timeSalt;
2046
-
2047
- // Search up to 6 candidate shards to find a hot or scraping parent shard
2048
- var parentIdx = pcg(sparkIdx * 7u + seed) % maxParticles;
2049
- var parent = particles[parentIdx];
2050
- let threshold = P.v[29].x;
2051
- for (var attempt = 1u; attempt < 6u; attempt = attempt + 1u) {
2052
- if (parent.life > 0.0 && (parent.heat >= threshold || parent.contact > 0.5)) {
2053
- break;
2054
- }
2055
- let candIdx = pcg(sparkIdx * 13u + attempt * 37u + seed) % maxParticles;
2056
- let cand = particles[candIdx];
2057
- if (cand.life > 0.0 && (cand.heat > parent.heat || parent.life <= 0.0)) {
2058
- parent = cand;
2059
- parentIdx = candIdx;
2060
- }
2061
- }
2062
-
2063
- if (parent.life <= 0.0) {
2064
- return;
2065
- }
2066
-
2067
- let r0 = rnd(sparkIdx, 0u, seed) - 0.5;
2068
- let r1 = rnd(sparkIdx, 1u, seed) - 0.5;
2069
- let r2 = rnd(sparkIdx, 2u, seed) - 0.5;
2070
- let scatterDir = normalize(vec3<f32>(r0, r1 - 0.25, r2));
2071
- let sparkSpd = mix(P.v[29].w, P.v[30].w, rnd(sparkIdx, 3u, seed));
2072
-
2073
- var p: SwarmParticle3D;
2074
- p.pos = parent.pos + scatterDir * 8.0;
2075
- p.age = birthFrac * P.v[0].x;
2076
- p.vel = parent.vel * 0.6 + scatterDir * sparkSpd;
2077
- p.life = mix(P.v[30].x, P.v[30].y, rnd(sparkIdx, 4u, seed));
2078
- p.quat = parent.quat;
2079
- p.angVel = vec3<f32>(r0, r1, r2) * 18.0;
2080
- p.heat = max(0.75, parent.heat * 1.25);
2081
- p.scale = mix(P.v[29].y, P.v[29].z, rnd(sparkIdx, 5u, seed));
2082
- p.variant = 0u;
2083
- p.seed = pcg(sparkIdx + seed);
2084
- p.contact = 0.0;
2085
-
2086
- particles[i] = p;
2087
- }
2088
-
2089
- @compute @workgroup_size(64)
2090
- fn stepSimulation(@builtin(global_invocation_id) id : vec3<u32>) {
2091
- let idx = id.x;
2092
- let maxParticles = u32(P.v[1].x);
2093
- let sparkMax = u32(P.v[1].w);
2094
- let totalSlots = maxParticles + sparkMax;
2095
- if (idx >= totalSlots) { return; }
2096
-
2097
- let isSpark = idx >= maxParticles;
2098
-
2099
- if (!isSpark) {
2100
- let emitStart = u32(P.v[0].z);
2101
- let emitCount = u32(P.v[0].w);
2102
- if (emitCount > 0u) {
2103
- let end = emitStart + emitCount;
2104
- var spawned = false;
2105
- if (end <= maxParticles) {
2106
- if (idx >= emitStart && idx < end) {
2107
- let birthFrac = f32(idx - emitStart) / f32(emitCount);
2108
- spawn3D(idx, idx, birthFrac);
2109
- spawned = true;
2110
- }
2111
- } else {
2112
- if (idx >= emitStart || idx < (end % maxParticles)) {
2113
- let slot = select(idx - emitStart, idx + (maxParticles - emitStart), idx < emitStart);
2114
- let birthFrac = f32(slot) / f32(emitCount);
2115
- spawn3D(idx, idx, birthFrac);
2116
- spawned = true;
2117
- }
2118
- }
2119
- if (spawned) { return; }
2120
- }
2121
- } else if (sparkMax > 0u) {
2122
- let sparkIdx = idx - maxParticles;
2123
- let sEmitStart = u32(P.v[2].w);
2124
- let sEmitCount = u32(P.v[16].z);
2125
- if (sEmitCount > 0u) {
2126
- let end = sEmitStart + sEmitCount;
2127
- var spawned = false;
2128
- if (end <= sparkMax) {
2129
- if (sparkIdx >= sEmitStart && sparkIdx < end) {
2130
- let birthFrac = f32(sparkIdx - sEmitStart) / f32(sEmitCount);
2131
- spawnSpark3D(idx, sparkIdx, maxParticles, birthFrac);
2132
- spawned = true;
2133
- }
2134
- } else {
2135
- if (sparkIdx >= sEmitStart || sparkIdx < (end % sparkMax)) {
2136
- let slot = select(sparkIdx - sEmitStart, sparkIdx + (sparkMax - sEmitStart), sparkIdx < sEmitStart);
2137
- let birthFrac = f32(slot) / f32(sEmitCount);
2138
- spawnSpark3D(idx, sparkIdx, maxParticles, birthFrac);
2139
- spawned = true;
2140
- }
2141
- }
2142
- if (spawned) { return; }
2143
- }
2144
- }
2145
-
2146
- var p = particles[idx];
2147
- if (p.life <= 0.0) { return; }
2148
-
2149
- let dt = P.v[0].x;
2150
- p.age += dt;
2151
- if (p.age >= p.life) {
2152
- p.life = 0.0;
2153
- particles[idx] = p;
2154
- return;
2155
- }
2156
-
2157
- var acc = P.v[2].xyz * select(1.0, 0.55, isSpark);
2158
-
2159
- // Linear Drag
2160
- let drag = P.v[3].x * select(1.0, 2.2, isSpark);
2161
- acc -= p.vel * drag;
2162
-
2163
- // 3D Curl Noise
2164
- let noiseStrength = P.v[3].y * select(1.0, 1.35, isSpark);
2165
- if (noiseStrength > 0.001) {
2166
- let noiseScale = max(P.v[3].z, 1.0);
2167
- let noiseSpeed = P.v[3].w;
2168
- let time = P.v[0].y;
2169
- let noisePos = (p.pos / noiseScale) + vec3<f32>(0.0, time * noiseSpeed, 0.0);
2170
- let curl = curl3(noisePos);
2171
- acc += curl * noiseStrength;
2172
- }
2173
-
2174
- // Attractors (up to 5)
2175
- let numAttractors = min(5u, u32(P.v[8].w));
2176
- for (var a = 0u; a < numAttractors; a = a + 1u) {
2177
- let attr = P.v[9u + a];
2178
- let toAttr = attr.xyz - p.pos;
2179
- let dist = length(toAttr);
2180
- let maxRadius = attr.w;
2181
- if (dist > 0.1 && (maxRadius <= 0.0 || dist < maxRadius)) {
2182
- var strength = 0.0;
2183
- if (a == 0u) { strength = P.v[17].x; }
2184
- else if (a == 1u) { strength = P.v[17].y; }
2185
- else if (a == 2u) { strength = P.v[17].z; }
2186
- else if (a == 3u) { strength = P.v[17].w; }
2187
- else { strength = P.v[21].w; }
2188
- let factor = select(1.0, 1.0 - dist / maxRadius, maxRadius > 0.0);
2189
- acc += (toAttr / dist) * (strength * factor);
2190
- }
2191
- }
2192
-
2193
- // 3D Vortex / Cyclone Field with Hollow Eye & Orbital Belt Equilibrium
2194
- let vortexSwirl = P.v[14].w;
2195
- if (abs(vortexSwirl) > 0.001 || abs(P.v[15].w) > 0.001) {
2196
- let vCenter = P.v[14].xyz;
2197
- let vAxis = normalize(P.v[15].xyz);
2198
- let vPull = P.v[15].w;
2199
- let vAxial = P.v[16].x;
2200
- let vRadius = P.v[16].y;
2201
-
2202
- let r = p.pos - vCenter;
2203
- let h = dot(r, vAxis);
2204
- let rPerp = r - (vAxis * h);
2205
- let dPerp = length(rPerp);
2206
-
2207
- if (dPerp > 0.1 && (vRadius <= 0.0 || dPerp < vRadius * 1.35)) {
2208
- let effRadius = select(650.0, vRadius, vRadius > 0.0);
2209
- let eyeRadius = max(effRadius * 0.24, 145.0);
2210
- let bandWidth = max(effRadius * 0.54, 240.0);
2211
- let bandRadius = eyeRadius + rnd(idx, 13u, p.seed) * bandWidth;
2212
-
2213
- let falloff = clamp(1.0 - (dPerp / (effRadius * 1.25)), 0.18, 1.0);
2214
- let tangent = normalize(cross(vAxis, rPerp));
2215
- let radialInward = -rPerp / dPerp;
2216
- let vTan = dot(p.vel, tangent);
2217
- let vRadOut = dot(p.vel, -radialInward);
2218
-
2219
- // Target tangential speed for this orbital band so shards don't accelerate to infinity
2220
- let targetVTan = vortexSwirl * (0.55 + 0.45 * falloff);
2221
- let swirlAcc = (targetVTan - vTan) * 2.2;
2222
-
2223
- // Centripetal balance outside the hollow eye + spring toward each shard's orbital band
2224
- let eyeMask = smoothstep(eyeRadius * 0.55, eyeRadius * 1.15, dPerp);
2225
- let centripetal = ((vTan * vTan) / max(dPerp, 80.0)) * eyeMask * 0.92;
2226
- let bandPull = ((dPerp - bandRadius) / bandWidth) * vPull * 2.4;
2227
- let eyeRepel = select(0.0, -vPull * 3.8 * (1.0 - dPerp / eyeRadius), dPerp < eyeRadius);
2228
- let radialAcc = centripetal + bandPull + eyeRepel - vRadOut * 2.1;
2229
-
2230
- acc += tangent * swirlAcc + radialInward * radialAcc + vAxis * (vAxial * falloff);
2231
- }
2232
- }
2233
-
2234
- // Integrate velocity
2235
- p.vel += acc * dt;
2236
-
2237
- // Floor Collision with Coulomb Sliding Friction & Angular Roll
2238
- p.contact = 0.0;
2239
- if (P.v[18].w > 0.5) {
2240
- let floorY = P.v[18].x;
2241
- let bounce = P.v[18].y;
2242
- let friction = P.v[18].z;
2243
- let progress = clamp(p.age / max(p.life, 0.001), 0.0, 1.0);
2244
- let shardRadius = select(mix(P.v[19].x, P.v[19].y, progress) * p.scale, p.scale, isSpark);
2245
-
2246
- if (p.pos.y + shardRadius >= floorY) {
2247
- let impactSpeed = max(0.0, p.vel.y);
2248
- p.pos.y = floorY - shardRadius;
2249
- p.contact = 1.0;
2250
-
2251
- if (p.vel.y > 0.0) {
2252
- p.vel.y = -p.vel.y * select(bounce, min(0.55, bounce + 0.2), isSpark);
2253
- }
2254
-
2255
- let vSlide = length(vec2<f32>(p.vel.x, p.vel.z));
2256
- let fDamp = exp(-friction * dt * 0.85);
2257
- p.vel.x *= fDamp;
2258
- p.vel.z *= fDamp;
2259
-
2260
- let normal = vec3<f32>(0.0, -1.0, 0.0);
2261
- let vTan = vec3<f32>(p.vel.x, 0.0, p.vel.z);
2262
- let rollTorque = cross(normal, vTan) / max(shardRadius, 1.0);
2263
- p.angVel += rollTorque * clamp(friction * dt * 2.5, 0.0, 1.0);
2264
-
2265
- let heatGain = P.v[25].x;
2266
- let thermal = pow(rnd(idx, 14u, p.seed), 2.4);
2267
- let slideHeat = max(0.0, vSlide - 180.0) * friction * dt * 0.0032;
2268
- let impactHeat = smoothstep(30.0, 260.0, impactSpeed) * 0.45;
2269
- p.heat = min(1.35, p.heat + (slideHeat + impactHeat) * heatGain * (0.15 + 1.35 * thermal));
2270
- }
2271
- }
2272
-
2273
- // Integrate position
2274
- p.pos += p.vel * dt;
2275
-
2276
- // Angular drag & Quaternion integration
2277
- let angDrag = P.v[25].y;
2278
- p.angVel *= exp(-angDrag * dt);
2279
- let omega = p.angVel;
2280
- let dq = quatMul(vec4<f32>(omega * (0.5 * dt), 0.0), p.quat);
2281
- p.quat = normalize(p.quat + dq);
2282
-
2283
- // Heat cooldown exponential decay
2284
- let heatDecay = max(P.v[25].z, 0.05);
2285
- p.heat *= exp(-dt / heatDecay);
2286
-
2287
- particles[idx] = p;
2288
- }
2289
-
2290
- @compute @workgroup_size(64)
2291
- fn packInstances(@builtin(global_invocation_id) id : vec3<u32>) {
2292
- let idx = id.x;
2293
- let maxParticles = u32(P.v[1].x);
2294
- let sparkMax = u32(P.v[1].w);
2295
- let totalSlots = maxParticles + sparkMax;
2296
- if (idx >= totalSlots) { return; }
2297
-
2298
- let isSpark = idx >= maxParticles;
2299
- let numVariants = max(1u, u32(P.v[8].z));
2300
- let sliceCount = max(1u, u32(P.v[20].y));
2301
- let meshRadius = max(0.001, P.v[20].x);
2302
-
2303
- var outIdx = idx;
2304
- if (!isSpark) {
2305
- let vIdx = idx % numVariants;
2306
- let localIdx = idx / numVariants;
2307
- outIdx = vIdx * sliceCount + localIdx;
2308
- } else {
2309
- let sparkIdx = idx - maxParticles;
2310
- outIdx = (numVariants * sliceCount) + sparkIdx;
2311
- }
2312
-
2313
- let p = particles[idx];
2314
- var out: InstanceData;
2315
-
2316
- if (p.life <= 0.0 || p.age >= p.life) {
2317
- out.posScale = vec4<f32>(0.0, 0.0, 0.0, 0.0);
2318
- out.quat = vec4<f32>(0.0, 0.0, 0.0, 1.0);
2319
- out.color = vec4<f32>(0.0);
2320
- out.emissive = vec4<f32>(0.0);
2321
- instances[outIdx] = out;
2322
- return;
2323
- }
2324
-
2325
- let progress = p.age / p.life;
2326
- let fadeIn = smoothstep(0.0, max(0.001, P.v[19].z), progress);
2327
- let fadeOut = 1.0 - smoothstep(max(0.0, 1.0 - P.v[19].w), 1.0, progress);
2328
-
2329
- if (isSpark) {
2330
- let sparkRadius = max(0.0, p.scale * fadeIn * fadeOut);
2331
- out.posScale = vec4<f32>(p.pos, sparkRadius / meshRadius);
2332
- out.quat = p.quat;
2333
- let sparkCol = mix(P.v[28].rgb, P.v[31].rgb, smoothstep(0.0, 0.55, progress));
2334
- out.color = vec4<f32>(sparkCol, 1.0);
2335
- out.emissive = vec4<f32>(sparkCol, P.v[30].z * fadeOut);
2336
- instances[outIdx] = out;
2337
- return;
2338
- }
2339
-
2340
- let lifeRadius = mix(P.v[19].x, P.v[19].y, progress) * fadeIn * fadeOut;
2341
- let worldRadius = max(0.0, p.scale * lifeRadius);
2342
-
2343
- out.posScale = vec4<f32>(p.pos, worldRadius / meshRadius);
2344
- out.quat = p.quat;
2345
-
2346
- // Base color palette interpolation
2347
- let numColors = u32(P.v[21].x);
2348
- var baseCol = P.v[22];
2349
- if (numColors > 1u) {
2350
- let colorT = progress * f32(numColors - 1u);
2351
- let cIdx = min(u32(floor(colorT)), numColors - 2u);
2352
- let cFrac = colorT - f32(cIdx);
2353
- baseCol = mix(P.v[22u + cIdx], P.v[23u + cIdx], cFrac);
2354
- }
2355
-
2356
- // Dynamic emissive from friction heat and/or speed, modulated per-shard for natural rock/glow contrast
2357
- let heatSource = u32(P.v[20].z); // 0=both, 1=friction, 2=speed
2358
- let maxSpd = max(P.v[20].w, 1.0);
2359
- let thermal = pow(rnd(idx, 14u, p.seed), 2.2);
2360
- let speedFactor = smoothstep(0.62, 1.0, length(p.vel) / maxSpd) * thermal;
2361
- var heatVal = p.heat;
2362
- if (heatSource == 0u) {
2363
- heatVal = max(p.heat, speedFactor);
2364
- } else if (heatSource == 2u) {
2365
- heatVal = speedFactor;
2366
- }
2367
-
2368
- let heatCurve = P.v[21].y;
2369
- let curvedHeat = pow(clamp(heatVal, 0.0, 1.0), select(1.0, heatCurve, heatCurve > 0.0));
2370
- let heatRamp = mix(
2371
- P.v[26].rgb,
2372
- mix(P.v[27].rgb, P.v[28].rgb, smoothstep(0.55, 0.95, curvedHeat)),
2373
- smoothstep(0.08, 0.55, curvedHeat),
2374
- );
2375
- let heatIntensity = curvedHeat * P.v[21].z * smoothstep(0.08, 0.65, curvedHeat);
2376
-
2377
- // Blend base albedo color toward the hot color only for significantly heated shards
2378
- out.color = vec4<f32>(mix(baseCol.rgb, heatRamp, smoothstep(0.12, 0.75, curvedHeat)), baseCol.a);
2379
-
2380
- if (heatIntensity > 0.01) {
2381
- out.emissive = vec4<f32>(heatRamp, heatIntensity);
2382
- } else {
2383
- out.emissive = vec4<f32>(0.0);
2384
- }
2385
-
2386
- instances[outIdx] = out;
2387
- }
2388
- `,LA=class{device;simPipeline;packPipeline;bindGroupLayout;constructor(t){this.device=t;let r=t.createShaderModule({label:"swarm3d.wgsl",code:wc});this.bindGroupLayout=t.createBindGroupLayout({label:"Swarm3DBindGroupLayout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});let n=t.createPipelineLayout({bindGroupLayouts:[this.bindGroupLayout]});this.simPipeline=t.createComputePipeline({label:"Swarm3DSimPipeline",layout:n,compute:{module:r,entryPoint:"stepSimulation"}}),this.packPipeline=t.createComputePipeline({label:"Swarm3DPackPipeline",layout:n,compute:{module:r,entryPoint:"packInstances"}})}createState(t){let r=Math.max(1,t.variants),n=Math.ceil(t.max/r),A=t.sparks?.max??0,o=t.max+A,i=n*r+A,a=o*80,s=i*64;return{device:this.device,particles:this.device.createBuffer({label:"Swarm3DParticles",size:a,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),instances:this.device.createBuffer({label:"Swarm3DInstances",size:s,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),ubo:this.device.createBuffer({label:"Swarm3DUbo",size:512,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),frame:-999999,emitted:0,carry:0,sparkEmitted:0,sparkCarry:0,sliceCount:n,totalParticleSlots:o,totalInstanceSlots:i,snapshots:new Map}}packParams(t,r,n,A){n.fill(0);let o=(b,v,Q,x,_)=>n.set([v,Q,x,_],b*4),i=t.sparks?.max??0;o(0,A.dt,A.time,A.emitStart,A.emitCount),o(1,t.max,t.seed,A.frameDt,i),o(2,r.gravity[0],r.gravity[1],r.gravity[2],A.sparkEmitStart),o(3,r.drag,r.noise.strength,r.noise.scale,r.noise.speed);let a=t.emitter.shape==="box"?1:t.emitter.shape==="sphere"?2:t.emitter.shape==="shell"?3:t.emitter.shape==="ring"?4:t.emitter.shape==="disc"?5:0,s=r.emitterPos?r.emitterPos[0]:t.emitter.x,c=r.emitterPos?r.emitterPos[1]:t.emitter.y,l=r.emitterPos?r.emitterPos[2]:t.emitter.z;o(4,a,s,c,l),o(5,t.emitter.width,t.emitter.height,t.emitter.depth,t.emitter.radius),o(6,t.direction[0],t.direction[1],t.direction[2],t.spread),o(7,t.speed[0],t.speed[1],t.lifetime[0],t.lifetime[1]);let u=r.attractors.slice(0,5);o(8,t.angularSpeed[0],t.angularSpeed[1],t.variants,u.length);let p=[0,0,0,0,0];for(let b=0;b<u.length;b++){let v=u[b];v&&(o(9+b,v.x,v.y,v.z,v.radius??0),p[b]=v.strength)}o(17,p[0],p[1],p[2],p[3]),r.vortex?(o(14,r.vortex.x,r.vortex.y,r.vortex.z,r.vortex.swirl),o(15,r.vortex.axis[0],r.vortex.axis[1],r.vortex.axis[2],r.vortex.pull),o(16,r.vortex.axial,r.vortex.radius,A.sparkEmitCount,t.sizeJitter)):o(16,0,0,A.sparkEmitCount,t.sizeJitter),r.floor?o(18,r.floor.y,r.floor.bounce,r.floor.friction,1):o(18,0,0,0,0),o(19,t.size[0],t.size[1],t.fade[0],t.fade[1]);let g=t.heat.source==="friction"?1:t.heat.source==="speed"?2:0;o(20,t.meshRadius??20,A.sliceCount,g,t.heat.maxSpeed);let f=t.colors.slice(0,3);o(21,f.length,t.heat.curve,t.heat.intensity,p[4]);for(let b=0;b<f.length;b++){let v=f[b];v&&o(22+b,v[0],v[1],v[2],v[3])}o(25,r.floor?.heatGain??1,t.angularDrag,r.floor?.heatDecay??.45,0),o(26,t.heat.colors[0][0],t.heat.colors[0][1],t.heat.colors[0][2],1),o(27,t.heat.colors[1][0],t.heat.colors[1][1],t.heat.colors[1][2],1),o(28,t.heat.colors[2][0],t.heat.colors[2][1],t.heat.colors[2][2],1),t.sparks&&(o(29,t.sparks.threshold,t.sparks.size[0],t.sparks.size[1],t.sparks.speed[0]),o(30,t.sparks.lifetime[0],t.sparks.lifetime[1],t.sparks.intensity,t.sparks.speed[1]),o(31,t.sparks.color[0],t.sparks.color[1],t.sparks.color[2],1))}advance(t,r,n,A,o){let{device:i}=t,a=Math.max(0,Math.round((r.prewarm??0)*A));if(n<t.frame||t.frame<-a-1){let x=-999999;for(let y of t.snapshots.keys())y<=n&&y>x&&(x=y);let _=i.createCommandEncoder({label:"swarm3d_restore"});if(x>=0){let y=t.snapshots.get(x);y&&(_.copyBufferToBuffer(y.buffer,0,t.particles,0,t.totalParticleSlots*80),t.emitted=y.emitted,t.carry=y.carry,t.sparkEmitted=y.sparkEmitted,t.sparkCarry=y.sparkCarry,t.frame=x)}else _.clearBuffer(t.particles),_.clearBuffer(t.instances),t.emitted=0,t.carry=0,t.sparkEmitted=0,t.sparkCarry=0,t.frame=-1-a;i.queue.submit([_.finish()])}let s=new Float32Array(128),c=Math.max(1,Math.round(r.substeps)),l=1/A,u=l/c,p=i.createBindGroup({layout:this.bindGroupLayout,entries:[{binding:0,resource:{buffer:t.ubo}},{binding:1,resource:{buffer:t.particles}},{binding:2,resource:{buffer:t.instances}}]}),g=Math.ceil(t.totalParticleSlots/64),f=r.sparks?.max??0,b=r.sparks?.rate??0;for(let x=t.frame+1;x<=n;x++){let _=o(Math.max(0,x)),y=_.rate*l+t.carry,M=Math.floor(y);t.carry=y-M;let T=Math.floor(M/c),N=M%c,O=f>0?b*l+t.sparkCarry:0,D=Math.floor(O);t.sparkCarry=O-D;let H=Math.floor(D/c),V=D%c;for(let P=0;P<c;P++){let z=T+(N>0?1:0);N>0&&N--;let ee=t.emitted%r.max;t.emitted+=z;let Y=H+(V>0?1:0);V>0&&V--;let $=f>0?t.sparkEmitted%f:0;t.sparkEmitted+=Y,this.packParams(r,_,s,{dt:u,time:x*l+P*u,emitStart:ee,emitCount:z,sparkEmitStart:$,sparkEmitCount:Y,frameDt:l,sliceCount:t.sliceCount}),i.queue.writeBuffer(t.ubo,0,s);let W=i.createCommandEncoder({label:`swarm3d_step_${x}_${P}`}),te=W.beginComputePass();te.setPipeline(this.simPipeline),te.setBindGroup(0,p),te.dispatchWorkgroups(g),te.end(),i.queue.submit([W.finish()])}if(t.frame=x,x>=0&&x%24===0&&t.snapshots.size<64){let P=t.snapshots.get(x);P||(P={buffer:i.createBuffer({label:`swarm3d_snap_${x}`,size:t.totalParticleSlots*80,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),emitted:t.emitted,carry:t.carry,sparkEmitted:t.sparkEmitted,sparkCarry:t.sparkCarry},t.snapshots.set(x,P));let z=i.createCommandEncoder({label:`swarm3d_snap_save_${x}`});z.copyBufferToBuffer(t.particles,0,P.buffer,0,t.totalParticleSlots*80),i.queue.submit([z.finish()])}}let v=i.createCommandEncoder({label:"swarm3d_pack_instances"}),Q=v.beginComputePass();Q.setPipeline(this.packPipeline),Q.setBindGroup(0,p),Q.dispatchWorkgroups(g),Q.end(),i.queue.submit([v.finish()])}destroyState(t){t.particles.destroy(),t.instances.destroy(),t.ubo.destroy();for(let r of t.snapshots.values())r.buffer.destroy();t.snapshots.clear()}};var Dc={repeat:"repeat",clamp:"clamp-to-edge",mirror:"mirror-repeat"},vc=5e-4,ja=class{device;format;quad3dPipeline;slug3dPipeline;mesh3dPipeline;audioMeshDeformPipeline;morphPipeline;swarm3dPipeline;floorReflectionPipeline;dofPipeline;dofBindGroupLayout;cameraPool;lightsPool;instancePool;cameraUniformBindGroupCache=new ea;samplerCache=new ra;depthTexture=null;linearDepthTexture=null;reflectionColorTexture=null;reflectionMsaaColorTexture=null;reflectionDepthTexture=null;reflectionTempTexture=null;reflectionBlurredTexture=null;msaaColorTexture=null;msaaLinearDepthTexture=null;msaaHdrTexture=null;hdrTexture=null;passWritesHdr=!1;cameraUniformData=new Float32Array(80);meshBuffersCache=new WeakMap;materialTextures=new WeakMap;materialMapCache=new WeakMap;modelCache=new Map;lastCameraPose=null;shadowTexture=null;placeholderShadowTexture=null;shadowSampler=null;meshBounds=new WeakMap;bloomPipeline=null;lastCameraBuffer=null;sampleCount;constructor(t,r,n=4){this.device=t,this.format=r,this.sampleCount=n,this.quad3dPipeline=new FA(t,r,"depth24plus",n),this.slug3dPipeline=new TA(t,r,"depth24plus",this.quad3dPipeline.cameraLayout,this.quad3dPipeline.lightsLayout,n),this.mesh3dPipeline=new UA(t,r,"depth24plus",this.quad3dPipeline.cameraLayout,this.quad3dPipeline.lightsLayout,n),this.audioMeshDeformPipeline=new yA(t),this.morphPipeline=new kA(t),this.swarm3dPipeline=new LA(t),this.floorReflectionPipeline=new GA(t,r,n,this.quad3dPipeline.cameraLayout,this.quad3dPipeline.lightsLayout,"depth24plus"),this.cameraPool=new Xe(320,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.lightsPool=new Xe(ro,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.instancePool=new Xe(65536,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST);let A=t.createShaderModule({label:"dof-bokeh.wgsl",code:va});this.dofBindGroupLayout=t.createBindGroupLayout({label:"DoFBindGroupLayout",entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}]}),this.dofPipeline=t.createRenderPipeline({label:"DoFBokehPipeline",layout:t.createPipelineLayout({bindGroupLayouts:[this.dofBindGroupLayout]}),vertex:{module:A,entryPoint:"vs_fullscreen"},fragment:{module:A,entryPoint:"fs_dof",targets:[{format:r}]},primitive:{topology:"triangle-list"}})}resetPools(){this.bloomPipeline?.resetPools(),this.cameraPool.reset(),this.lastCameraPose=null,this.lastCameraBuffer=null,this.lightsPool.reset(),this.instancePool.reset(),this.quad3dPipeline.resetPools(),this.slug3dPipeline.resetPools(),this.mesh3dPipeline.resetPools(),this.audioMeshDeformPipeline.resetPools(),this.morphPipeline.resetPools()}getOrCreateDepthTexture(t,r){return(!this.depthTexture||this.depthTexture.width!==t||this.depthTexture.height!==r)&&(this.depthTexture?.destroy(),this.depthTexture=this.device.createTexture({label:"Renderer3DDepthTexture",size:{width:t,height:r},format:"depth24plus",sampleCount:this.sampleCount,usage:GPUTextureUsage.RENDER_ATTACHMENT})),this.depthTexture}getOrCreateMsaaTexture(t,r,n,A,o){return t&&t.width===A&&t.height===o?t:(t?.destroy(),this.device.createTexture({label:r,size:{width:A,height:o},format:n,sampleCount:this.sampleCount,usage:GPUTextureUsage.RENDER_ATTACHMENT}))}hdrSource(){return this.hdrTexture}getOrCreateHdrTexture(t,r){return(!this.hdrTexture||this.hdrTexture.width!==t||this.hdrTexture.height!==r)&&(this.hdrTexture?.destroy(),this.hdrTexture=this.device.createTexture({label:"Renderer3DHdrRadiance",size:{width:t,height:r},format:"rgba16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING})),this.hdrTexture}getOrCreateLinearDepthTexture(t,r){return(!this.linearDepthTexture||this.linearDepthTexture.width!==t||this.linearDepthTexture.height!==r)&&(this.linearDepthTexture?.destroy(),this.linearDepthTexture=this.device.createTexture({label:"Renderer3DLinearDepthTexture",size:{width:t,height:r},format:"rgba16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING})),this.linearDepthTexture}getOrCreateReflectionTexture(t,r){return(!this.reflectionColorTexture||this.reflectionColorTexture.width!==t||this.reflectionColorTexture.height!==r)&&(this.reflectionColorTexture?.destroy(),this.reflectionColorTexture=this.device.createTexture({label:"Renderer3DReflectionColor",size:{width:t,height:r},format:this.format,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING})),this.reflectionColorTexture}getOrCreateReflectionMsaaTexture(t,r){return(!this.reflectionMsaaColorTexture||this.reflectionMsaaColorTexture.width!==t||this.reflectionMsaaColorTexture.height!==r)&&(this.reflectionMsaaColorTexture?.destroy(),this.reflectionMsaaColorTexture=this.device.createTexture({label:"Renderer3DReflectionMsaaColor",size:{width:t,height:r},format:this.format,sampleCount:this.sampleCount,usage:GPUTextureUsage.RENDER_ATTACHMENT})),this.reflectionMsaaColorTexture}getOrCreateReflectionDepthTexture(t,r){return(!this.reflectionDepthTexture||this.reflectionDepthTexture.width!==t||this.reflectionDepthTexture.height!==r)&&(this.reflectionDepthTexture?.destroy(),this.reflectionDepthTexture=this.device.createTexture({label:"Renderer3DReflectionDepth",size:{width:t,height:r},format:"depth24plus",sampleCount:this.sampleCount,usage:GPUTextureUsage.RENDER_ATTACHMENT})),this.reflectionDepthTexture}getOrCreateReflectionTempTexture(t,r){return(!this.reflectionTempTexture||this.reflectionTempTexture.width!==t||this.reflectionTempTexture.height!==r)&&(this.reflectionTempTexture?.destroy(),this.reflectionTempTexture=this.device.createTexture({label:"Renderer3DReflectionTemp",size:{width:t,height:r},format:this.format,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING})),this.reflectionTempTexture}getOrCreateReflectionBlurredTexture(t,r){return(!this.reflectionBlurredTexture||this.reflectionBlurredTexture.width!==t||this.reflectionBlurredTexture.height!==r)&&(this.reflectionBlurredTexture?.destroy(),this.reflectionBlurredTexture=this.device.createTexture({label:"Renderer3DReflectionBlurred",size:{width:t,height:r},format:this.format,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING})),this.reflectionBlurredTexture}packCameraUniforms(t,r,n,A=0){if(this.lastCameraPose&&this.lastCameraBuffer&&this.lastCameraPose.eye[0]===t.eye[0]&&this.lastCameraPose.eye[1]===t.eye[1]&&this.lastCameraPose.eye[2]===t.eye[2]&&this.lastCameraPose.target[0]===t.target[0]&&this.lastCameraPose.target[1]===t.target[1]&&this.lastCameraPose.target[2]===t.target[2]&&this.lastCameraPose.up[0]===t.up[0]&&this.lastCameraPose.up[1]===t.up[1]&&this.lastCameraPose.up[2]===t.up[2]&&this.lastCameraPose.fov===t.fov&&this.lastCameraPose.near===t.near&&this.lastCameraPose.far===t.far)return this.lastCameraBuffer;let o=jr.computeViewMatrix(t),i=jr.computeProjectionMatrix(t),a=jr.computeViewProjectionMatrix(t),s=Ie.invert(a)??Ie.identity();this.cameraUniformData.set(o,0),this.cameraUniformData.set(i,16),this.cameraUniformData.set(a,32),this.cameraUniformData.set(s,48),this.cameraUniformData[64]=t.eye[0],this.cameraUniformData[65]=t.eye[1],this.cameraUniformData[66]=t.eye[2],this.cameraUniformData[67]=t.near;let c=ae.normalize(ae.subtract(t.target,t.eye));this.cameraUniformData[68]=c[0],this.cameraUniformData[69]=c[1],this.cameraUniformData[70]=c[2],this.cameraUniformData[71]=t.far,this.cameraUniformData[72]=t.focusDistance??1e3,this.cameraUniformData[73]=t.fStop??2.8,this.cameraUniformData[74]=t.maxBlurRadius??32,this.cameraUniformData[75]=t.focusDistance!==void 0?1:0,this.cameraUniformData[76]=r,this.cameraUniformData[77]=n,this.cameraUniformData[78]=A,this.cameraUniformData[79]=0;let l=this.cameraPool.getBuffer(this.device,this.cameraUniformData);return this.lastCameraPose=t,this.lastCameraBuffer=l,l}createCameraBindGroup(t){return this.cameraUniformBindGroupCache.getBindGroup(this.device,this.quad3dPipeline.cameraLayout,t)}getOrCreateLightsBuffer(t,r){let n=Tt.packLightsUniforms(t??[],r?.environment,r?.shadow);return this.lightsPool.getBuffer(this.device,n)}createLightsBindGroup(t,r){this.shadowSampler??=this.device.createSampler({label:"ShadowComparisonSampler",compare:"less-equal",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),this.placeholderShadowTexture??=this.device.createTexture({label:"ShadowMapPlaceholder",size:{width:1,height:1},format:RA,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT});let n=r&&this.shadowTexture?this.shadowTexture:this.placeholderShadowTexture;return this.device.createBindGroup({label:"Lights3DBindGroup",layout:this.quad3dPipeline.lightsLayout,entries:[{binding:0,resource:{buffer:t}},{binding:1,resource:n.createView()},{binding:2,resource:this.shadowSampler}]})}meshAabb(t){let r=this.meshBounds.get(t);if(!r){let n=[1/0,1/0,1/0],A=[-1/0,-1/0,-1/0],o=t.positions;for(let i=0;i+2<o.length;i+=3)for(let a=0;a<3;a++){let s=o[i+a];s<n[a]&&(n[a]=s),s>A[a]&&(A[a]=s)}r=Number.isFinite(n[0])?{min:n,max:A}:{min:[0,0,0],max:[0,0,0]},this.meshBounds.set(t,r)}return r}worldBounds(t){return t.kind==="mesh"?t.opts.bounds?t.opts.bounds:Bo(this.meshAabb(t.mesh),this.meshModelMatrix(t.opts)):Bo({min:[-.5,-.5,0],max:[.5,.5,0]},this.quadModelMatrix(t.opts))}renderShadowMap(t,r,n,A,o,i={}){let a=r.lightType??r.type;if(a!=="directional"&&a!=="spot")return null;let s=Tt.processLight(r),c=[s.posType[0],s.posType[1],s.posType[2]],l=[s.dirRadius[0],s.dirRadius[1],s.dirRadius[2]],u=i.mapSize??2048,p=A.map(x=>this.worldBounds(x)),g=La({type:a,position:c,direction:l,angle:r.angle},p,o,u);if(!g)return null;(!this.shadowTexture||this.shadowTexture.width!==u)&&(this.shadowTexture?.destroy(),this.shadowTexture=this.device.createTexture({label:"ShadowMap",size:{width:u,height:u},format:RA,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING}));let f=new Float32Array(80);f.set(g.viewProj,32),f.set(g.viewProj,0),f[5]=1,f.set(g.viewProj,16),f[64]=c[0],f[65]=c[1],f[66]=c[2],f[68]=l[0],f[69]=l[1],f[70]=l[2],f[76]=u,f[77]=u;let b=this.createCameraBindGroup(this.cameraPool.getBuffer(this.device,f)),v=t.beginRenderPass({label:"ShadowMapPass",colorAttachments:[],depthStencilAttachment:{view:this.shadowTexture.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}}),Q=this.samplerCache.getSampler(this.device);for(let x of A)if(x.kind==="mesh"){let _=this.meshModelMatrix(x.opts);this.mesh3dPipeline.drawShadow(v,b,x.buffers??this.getOrCreateMeshBuffers(x.mesh,x.opts.wireframe),{modelMatrix:_,normalMatrix:x.opts.normalMatrix??Tt.computeNormalMatrix(_),wireframe:x.opts.wireframe,isSkinned:x.opts.isSkinned,skinningMatrices:x.opts.skinningMatrices,isInstanced:!!(x.opts.instanceBuffer||x.opts.instanceCount&&x.opts.instanceCount>1),instanceBuffer:x.opts.instanceBuffer},x.opts.instanceCount??1,x.opts.firstInstance??0)}else{let _=this.quadModelMatrix(x.opts);this.quad3dPipeline.drawShadow(v,b,x.texture,Q,{modelMatrix:_,normalMatrix:_,width:x.opts.width,height:x.opts.height,textureExtent:x.opts.textureExtent,opacity:x.opts.opacity,colorTint:x.opts.colorTint})}return v.end(),{matrix:g.viewProj,lightIndex:n,mapSize:u,softness:i.softness??r.shadowSoftness??2.5,bias:a==="directional"?6e-4:8e-5,normalOffset:g.texelWorldSize*1.5,darkness:i.darkness??r.shadowDarkness??1}}beginPass(t,r,n,A,o,i="clear",a={r:0,g:0,b:0,a:0},s,c,l,u=!1){let p=this.getOrCreateDepthTexture(n,A),g=this.packCameraUniforms(o,n,A),f=this.createCameraBindGroup(g),b=this.getOrCreateLightsBuffer(c,l),v=this.createLightsBindGroup(b,!!l?.shadow),Q=this.sampleCount>1;if(Q&&i==="load")throw new Error("Renderer3D.beginPass: loadOp 'load' needs a Renderer3D built with sampleCount 1");let x=(M,T,N,O)=>T?{view:T.createView(),resolveTarget:M,loadOp:"clear",storeOp:"discard",clearValue:N}:{view:M,loadOp:O,storeOp:"store",clearValue:N};Q&&(this.msaaColorTexture=this.getOrCreateMsaaTexture(this.msaaColorTexture,"Renderer3DMsaaColor",this.format,n,A));let _=[x(r,Q?this.msaaColorTexture:null,a,i)];return s&&(Q&&(this.msaaLinearDepthTexture=this.getOrCreateMsaaTexture(this.msaaLinearDepthTexture,"Renderer3DMsaaLinearDepth","rgba16float",n,A)),_.push(x(s,Q?this.msaaLinearDepthTexture:null,{r:o.far,g:0,b:0,a:1},"clear"))),this.passWritesHdr=u,u&&(this.hdrTexture=this.getOrCreateHdrTexture(n,A),Q&&(this.msaaHdrTexture=this.getOrCreateMsaaTexture(this.msaaHdrTexture,"Renderer3DMsaaHdr","rgba16float",n,A)),_.push(x(this.hdrTexture.createView(),Q?this.msaaHdrTexture:null,{r:0,g:0,b:0,a:0},"clear"))),{pass:t.beginRenderPass({colorAttachments:_,depthStencilAttachment:{view:p.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:Q?"discard":"store"}}),cameraBindGroup:f,cameraBuffer:g,lightsBindGroup:v}}beginReflectionPass(t,r,n,A,o,i){this.passWritesHdr=!1;let a=Math.max(1,Math.floor(r/2)),s=Math.max(1,Math.floor(n/2)),c=this.getOrCreateReflectionTexture(a,s),l=this.getOrCreateReflectionDepthTexture(a,s),u=this.packCameraUniforms(A,a,s),p=this.createCameraBindGroup(u),g=Tt.packLightsUniforms(o??[],i?.environment,i?.shadow,!0),f=this.lightsPool.getBuffer(this.device,g),b=this.createLightsBindGroup(f,!!i?.shadow),v=this.sampleCount>1,Q=v?this.getOrCreateReflectionMsaaTexture(a,s):null,x=[Q?{view:Q.createView(),resolveTarget:c.createView(),loadOp:"clear",storeOp:"discard",clearValue:{r:0,g:0,b:0,a:0}}:{view:c.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}];return{pass:t.beginRenderPass({colorAttachments:x,depthStencilAttachment:{view:l.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:v?"discard":"store"}}),cameraBindGroup:p,lightsBindGroup:b,reflectionTexture:c}}blurReflection(t,r,n){if(n<=.001)return r;let A=r.width,o=r.height,i=this.getOrCreateReflectionTempTexture(A,o),a=this.getOrCreateReflectionBlurredTexture(A,o);return this.floorReflectionPipeline.applyBlur(t,r,i,a,A,o,n),a}drawFloor(t,r,n,A,o,i=!1,a=!1){this.floorReflectionPipeline.draw(t,r,n,A,o,i,a)}quadModelMatrix(t){if(t.modelMatrix)return t.modelMatrix;let{position:r,width:n,height:A,rotation:o=[0,0,0],scale:i=[1,1,1],anchor:a=[.5,.5]}=t,s=Ie.identity();s=Ie.multiply(s,Ie.translate(r[0],r[1],r[2]));let c=o[0]*Math.PI/180,l=o[1]*Math.PI/180,u=o[2]*Math.PI/180;u!==0&&(s=Ie.multiply(s,Ie.rotateZ(u))),l!==0&&(s=Ie.multiply(s,Ie.rotateY(l))),c!==0&&(s=Ie.multiply(s,Ie.rotateX(c)));let p=n*i[0],g=A*i[1],f=i[2];s=Ie.multiply(s,Ie.scale(p,g,f));let b=.5-a[0],v=.5-a[1];return(b!==0||v!==0)&&(s=Ie.multiply(s,Ie.translate(b,v,0))),s}drawSlugText(t,r,n,A,o,i=0,a=!1){let{width:s,height:c}=o;if(!(s>0&&c>0))return;let l=this.quadModelMatrix(o),u=o.normalMatrix??Tt.computeNormalMatrix(l),p=Ie.multiply(l,Ie.multiply(Ie.translate(-.5,-.5,0),Ie.scale(1/s,1/c,1)));for(let g=0;g<A.length;g++){let f=A[g],[b,v,Q,x,_,y]=f.transform,M=[b,v,0,0,Q,x,0,0,0,0,1,0,_,y,0,1];this.slug3dPipeline.draw(t,r,n,f.font,f.instances,f.instanceCount,{modelMatrix:Ie.multiply(p,M),normalMatrix:u,opacity:f.opacity*(o.opacity??1),slant:f.slant,twoSided:o.twoSided??!0,depthPull:vc*(i+g+1),material:o.material,shininess:o.shininess??32,roughness:o.roughness,specularIntensity:o.specularIntensity??.5,ambientIntensity:o.ambientIntensity??1,metallic:o.metallic,emissive:o.emissive,emissiveIntensity:o.emissiveIntensity,matte:o.matte},a,this.passWritesHdr)}}drawTextureQuad(t,r,n,A,o,i=!1){let{width:a,height:s,opacity:c=1,colorTint:l=[1,1,1,1],borderColor:u,borderWidth:p=0,borderRadius:g=0,twoSided:f=!0,material:b="lit",shininess:v=32,roughness:Q,specularIntensity:x=.5,ambientIntensity:_=1,metallic:y}=o,M=this.quadModelMatrix(o),T=o.normalMatrix??Tt.computeNormalMatrix(M),N=this.samplerCache.getSampler(this.device),O;if(u)if(Array.isArray(u))O=u;else{let D=fA(u);O=[D.r,D.g,D.b,D.a]}this.quad3dPipeline.draw(t,r,n,A,N,{modelMatrix:M,normalMatrix:T,colorTint:l,borderColor:O,borderWidth:p,opacity:c,borderRadius:g,twoSided:f,width:a,height:s,textureExtent:o.textureExtent,material:b,shininess:v,roughness:Q,specularIntensity:x,ambientIntensity:_,metallic:y,emissive:o.emissive,emissiveIntensity:o.emissiveIntensity,matte:o.matte},i,this.passWritesHdr)}meshModelMatrix(t){if(t.modelMatrix)return t.modelMatrix;let{position:r=[0,0,0],rotation:n=[0,0,0],scale:A=[1,1,1]}=t,o=Ie.translate(r[0],r[1],r[2]),i=n[0]*Math.PI/180,a=n[1]*Math.PI/180,s=n[2]*Math.PI/180;return s!==0&&(o=Ie.multiply(o,Ie.rotateZ(s))),a!==0&&(o=Ie.multiply(o,Ie.rotateY(a))),i!==0&&(o=Ie.multiply(o,Ie.rotateX(i))),Ie.multiply(o,Ie.scale(A[0],A[1],A[2]))}getOrCreateMeshBuffers(t,r=!1){let n=this.meshBuffersCache.get(t);if(n)return r&&(!t.topology||t.topology==="triangle-list")&&this.ensureWireIndices(t,n),n;let A=t.positions.length/3,o=new Float32Array(A*16);for(let g=0;g<A;g++){let f=g*16;o[f]=t.positions[g*3]??0,o[f+1]=t.positions[g*3+1]??0,o[f+2]=t.positions[g*3+2]??0,o[f+3]=t.uvs[g*2]??0,o[f+4]=t.uvs[g*2+1]??0,o[f+5]=t.normals[g*3]??0,o[f+6]=t.normals[g*3+1]??0,o[f+7]=t.normals[g*3+2]??1,t.jointIndices?(o[f+8]=t.jointIndices[g*4]??0,o[f+9]=t.jointIndices[g*4+1]??0,o[f+10]=t.jointIndices[g*4+2]??0,o[f+11]=t.jointIndices[g*4+3]??0):(o[f+8]=0,o[f+9]=0,o[f+10]=0,o[f+11]=0),t.jointWeights?(o[f+12]=t.jointWeights[g*4]??0,o[f+13]=t.jointWeights[g*4+1]??0,o[f+14]=t.jointWeights[g*4+2]??0,o[f+15]=t.jointWeights[g*4+3]??0):(o[f+12]=0,o[f+13]=0,o[f+14]=0,o[f+15]=0)}let i=Math.ceil(o.byteLength/4)*4,a=this.device.createBuffer({size:Math.max(4,i),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,mappedAtCreation:!0});new Float32Array(a.getMappedRange()).set(o),a.unmap();let s=t.indices instanceof Uint32Array,c=Math.ceil(t.indices.byteLength/4)*4,l=this.device.createBuffer({size:Math.max(4,c),usage:GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});s?new Uint32Array(l.getMappedRange()).set(t.indices):new Uint16Array(l.getMappedRange()).set(t.indices),l.unmap();let u;t.colors&&t.colors.length>=A*4&&(u=this.device.createBuffer({label:"Mesh3DVertexColors",size:Math.max(16,A*16),usage:GPUBufferUsage.VERTEX,mappedAtCreation:!0}),new Float32Array(u.getMappedRange()).set(t.colors.subarray(0,A*4)),u.unmap());let p;if(t.mapUvs&&Object.values(t.mapUvs).some(Boolean)){let g=new Float32Array(A*8),f=[t.mapUvs.normal,t.mapUvs.metallicRoughness,t.mapUvs.occlusion,t.mapUvs.emissive];for(let b=0;b<A;b++)for(let v=0;v<f.length;v++){let Q=f[v]??t.uvs;g[b*8+v*2]=Q[b*2]??0,g[b*8+v*2+1]=Q[b*2+1]??0}p=this.device.createBuffer({label:"Mesh3DMapUvs",size:Math.max(32,g.byteLength),usage:GPUBufferUsage.VERTEX,mappedAtCreation:!0}),new Float32Array(p.getMappedRange()).set(g),p.unmap()}return n={vertexBuffer:a,indexBuffer:l,indexCount:t.indices.length,indexFormat:s?"uint32":"uint16",topology:t.topology,colorBuffer:u,mapUvBuffer:p},this.meshBuffersCache.set(t,n),r&&(!t.topology||t.topology==="triangle-list")&&this.ensureWireIndices(t,n),n}ensureWireIndices(t,r){if(r.wireIndexBuffer)return;let n=new Set,A=[];for(let a=0;a+2<t.indices.length;a+=3){let s=[t.indices[a],t.indices[a+1],t.indices[a+2]];for(let c=0;c<3;c++){let l=s[c],u=s[(c+1)%3];if(l===u)continue;let p=l<u?`${l},${u}`:`${u},${l}`;n.has(p)||(n.add(p),A.push(l,u))}}let o=r.indexFormat==="uint32"?new Uint32Array(A):new Uint16Array(A),i=this.device.createBuffer({label:"Mesh3DWireIndices",size:Math.max(4,Math.ceil(o.byteLength/4)*4),usage:GPUBufferUsage.INDEX,mappedAtCreation:!0});o instanceof Uint32Array?new Uint32Array(i.getMappedRange()).set(o):new Uint16Array(i.getMappedRange()).set(o),i.unmap(),r.wireIndexBuffer=i,r.wireIndexCount=o.length}morphMesh(t,r,n,A=!1){let o=this.getOrCreateMeshBuffers(r,A);return!r.morphTargets?.length||!n.some(i=>i!==0)?o:{...o,vertexBuffer:this.morphPipeline.execute(t,r,o.vertexBuffer,n)}}deformMesh(t,r,n,A=!1,o){let i=o??this.getOrCreateMeshBuffers(r,A),a=r.positions.length/3;return{vertexBuffer:this.audioMeshDeformPipeline.execute(t,i.vertexBuffer,{config:n.config,audioLatentBuffer:n.latentBuffer,vertexCount:a,timeMs:n.timeMs,sampleRate:n.sampleRate}),indexBuffer:i.indexBuffer,indexCount:i.indexCount,indexFormat:i.indexFormat,topology:i.topology,colorBuffer:i.colorBuffer,mapUvBuffer:i.mapUvBuffer,wireIndexBuffer:i.wireIndexBuffer,wireIndexCount:i.wireIndexCount}}drawMesh3D(t,r,n,A,o,i={},a=!1){let s="vertexBuffer"in A?A:this.getOrCreateMeshBuffers(A,i.wireframe),{opacity:c=1,colorTint:l=[1,1,1,1],twoSided:u=!0,wireframe:p=!1,isSkinned:g=!1,skinningMatrices:f,material:b="lit",shadeColor:v,alphaCutoff:Q,textureWrap:x="clamp",textureFilter:_="linear",shininess:y=32,roughness:M,specularIntensity:T=.5,ambientIntensity:N=1,metallic:O}=i,D=this.meshModelMatrix(i),H=i.normalMatrix??Tt.computeNormalMatrix(D),V=Dc[x],P=this.samplerCache.getSampler(this.device,{addressModeU:V,addressModeV:V,magFilter:_,..._==="nearest"&&{maxAnisotropy:1}}),z=b==="glass"||b==="acrylic"||b==="frosted",ee=z?{ior:i.ior??(b==="acrylic"?1.49:1.5),dispersion:i.dispersion??(b==="glass"?.04:.015),thickness:i.thickness??80,frost:b==="frosted"?M??.5:0}:void 0;this.mesh3dPipeline.draw(t,r,n,s,o,P,{glass:ee,backdrop:i.backdrop,modelMatrix:D,normalMatrix:H,colorTint:l,opacity:c,twoSided:u,wireframe:p,transparent:i.transparent??(c<1||l[3]<1),isSkinned:g,skinningMatrices:f,material:b==="unlit"||b==="toon"?b:"lit",shadeColor:v,alphaCutoff:Q,shininess:y,roughness:z?Math.min(M??.05,.3):M,specularIntensity:T,ambientIntensity:N,metallic:O,emissive:i.emissive,emissiveIntensity:i.emissiveIntensity,matte:i.matte,maps:i.maps,isInstanced:!!(i.instanceBuffer||i.instanceCount&&i.instanceCount>1),instanceBuffer:i.instanceBuffer},a,this.passWritesHdr,i.instanceCount??1,i.firstInstance??0)}loadModel(t,r="auto",n={}){if(typeof t!="string")return Ja(t,r,n);let A=`${r}|${JSON.stringify(n)}|${t}`,o=this.modelCache.get(A);return o||(o=Ja(t,r,n),this.modelCache.set(A,o)),o}async loadModelAsync(t,r="auto",n={}){if(!(r==="gltf"||r==="glb"||r==="auto"&&(typeof t=="string"?/\.(gltf|glb)$/i.test(t)||t.trimStart().startsWith("{"):pr.isGlb(t))))return this.loadModel(t,r,n);if(typeof t!="string")return uo(t,n);let o=`${r}|${JSON.stringify(n)}|${t}`,i=this.modelCache.get(o);if(i)return i;let a=await uo(t,n);return this.modelCache.set(o,a),a}materialTexture(t){let r=this.materialTextures.get(t);return r||(r=this.uploadMaterialTexture(t),this.materialTextures.set(t,r)),r}materialMaps(t){let r=this.materialMapCache.get(t);return r||(r=(async()=>{let n=t.name,[A,o,i,a]=await Promise.all([this.uploadImage(t.normalTextureBuffer,`${n}:normal`),this.uploadImage(t.metallicRoughnessTextureBuffer,`${n}:metallicRoughness`),this.uploadImage(t.occlusionTextureBuffer,`${n}:occlusion`),this.uploadImage(t.emissiveTextureBuffer,`${n}:emissive`)]);return{...A&&{normal:A,normalScale:t.normalScale??1},...o&&{metallicRoughness:o},...i&&{occlusion:i,occlusionStrength:t.occlusionStrength??1},...a&&{emissive:a}}})(),this.materialMapCache.set(t,r)),r}uploadMaterialTexture(t){return this.uploadImage(t.diffuseTextureBuffer,`Material:${t.name}`)}async uploadImage(t,r){if(!t)return;let n=t instanceof Uint8Array?t:new Uint8Array(t);if(Ra(n)){let l=await Fa(n),u=this.device.createTexture({label:r,size:{width:l.width,height:l.height},mipLevelCount:l.levels.length,format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});for(let[p,g]of l.levels.entries()){let f=Math.max(1,l.width>>p),b=Math.max(1,l.height>>p);this.device.queue.writeTexture({texture:u,mipLevel:p},g,{bytesPerRow:f*4,rowsPerImage:b},{width:f,height:b})}return u}let A=(await import("./sharp-O7VCPA7A.mjs")).default,o=Buffer.from(t instanceof Uint8Array?t:new Uint8Array(t)),i,a;try{({width:i,height:a}=await A(o).metadata())}catch(l){console.warn(`[Renderer3D] Could not decode texture "${r}"; drawing without it:`,l instanceof Error?l.message:l);return}if(!i||!a)return;let s=Math.floor(Math.log2(Math.max(i,a)))+1,c=this.device.createTexture({label:r,size:{width:i,height:a},mipLevelCount:s,format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});for(let l=0;l<s;l++){let u=Math.max(1,i>>l),p=Math.max(1,a>>l),g=await A(o).ensureAlpha().resize(u,p,{fit:"fill"}).raw().toBuffer();this.device.queue.writeTexture({texture:c,mipLevel:l},g,{bytesPerRow:u*4,rowsPerImage:p},{width:u,height:p})}return c}applyBloom(t,r,n,A={},o){this.bloomPipeline??=new MA(this.device),this.bloomPipeline.apply(t,r,n,A,o??void 0)}applyDepthOfField(t,r,n,A,o){let i=this.samplerCache.getSampler(this.device),a=this.device.createBindGroup({layout:this.dofBindGroupLayout,entries:[{binding:0,resource:{buffer:o}},{binding:1,resource:i},{binding:2,resource:r.createView()},{binding:3,resource:n.createView()}]}),s=t.beginRenderPass({colorAttachments:[{view:A,loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});s.setPipeline(this.dofPipeline),s.setBindGroup(0,a),s.draw(3),s.end()}uploadInstanceData(t){return this.instancePool.getBuffer(this.device,t)}drawMesh3DInstanced(t,r,n,A,o,i,a=void 0,s={},c=!1){this.drawMesh3D(t,r,n,A,a,{...s,instanceBuffer:o,instanceCount:i},c)}destroy(){this.bloomPipeline?.destroy(),this.depthTexture?.destroy(),this.shadowTexture?.destroy(),this.placeholderShadowTexture?.destroy(),this.linearDepthTexture?.destroy(),this.msaaColorTexture?.destroy(),this.msaaLinearDepthTexture?.destroy(),this.msaaHdrTexture?.destroy(),this.hdrTexture?.destroy(),this.quad3dPipeline.destroy(),this.slug3dPipeline.destroy(),this.mesh3dPipeline.destroy(),this.morphPipeline.destroy(),this.floorReflectionPipeline.destroy(),this.reflectionColorTexture?.destroy(),this.reflectionMsaaColorTexture?.destroy(),this.reflectionDepthTexture?.destroy(),this.reflectionTempTexture?.destroy(),this.reflectionBlurredTexture?.destroy(),this.cameraPool.destroy(),this.lightsPool.destroy(),this.instancePool.destroy(),this.cameraUniformBindGroupCache.destroy()}};function Ja(e,t="auto",r={}){if(t==="gltf"||t==="glb")return wA(e,r);if(t==="stl")return Xn(e,r);if(t==="ply")return Zn(e,r);if(t==="vox")return DA(e,r);if(t==="3ds")return vA(e,r);if(t==="off")return _A(e,r);if(t==="fbx")return Wn(e,r);if(t==="obj")return zn(e,void 0,r);let n=typeof e!="string",A=typeof e=="string"?e.trim():"",o=A.toLowerCase();if(o.endsWith(".glb")||o.endsWith(".gltf"))return wA(e,r);if(o.endsWith(".stl"))return Xn(e,r);if(o.endsWith(".ply"))return Zn(e,r);if(o.endsWith(".vox"))return DA(e,r);if(o.endsWith(".3ds"))return vA(e,r);if(o.endsWith(".off"))return _A(e,r);if(o.endsWith(".fbx"))return Wn(e,r);if(o.endsWith(".obj"))return zn(e,void 0,r);if(n){let i=e instanceof Uint8Array?e:new Uint8Array(e);return pr.isGlb(i)?Da(i,r):kr.isBinary(i)?Wn(i,r):$n.isVox(i)?DA(i,r):eA.is3DS(i)?vA(i,r):i.length>=3&&i[0]===112&&i[1]===108&&i[2]===121?Zn(i,r):qn.isBinary(i)?Xn(i,r):zn(i,void 0,r)}return A.startsWith("{")&&(A.includes('"asset"')||A.includes('"meshes"'))?wA(A,r):A.startsWith("ply")||A.startsWith("PLY")?Zn(A,r):A.startsWith("OFF")||A.startsWith("NOFF")||A.startsWith("COFF")?_A(A,r):A.includes("FBXHeaderExtension")||A.includes("Kaydara FBX")?Wn(A,r):A.startsWith("solid")&&A.includes("facet")?Xn(A,r):zn(e,void 0,r)}q();var{cbrt:bo,sqrt:Eo,PI:Wr}=Math,_c=(e,t,r,n,A)=>{let o=t+r*e,i=o**2+n;if(i>0){let l=Eo(i);return bo(o+l)+bo(o-l)-A}let a=bo(Eo(o*o-i)),s=o?Math.atan(Eo(-i)/o):-Wr/2,c;return r<0?c=(o>0?2*Wr:Wr)-s:A<0?c=(o>0?2*Wr:-3*Wr)+s:c=(o>0?0:Wr)+s,2*a*Math.cos(c/3)-A},Mc=(e,t,r,n)=>((t*e+3*r)*e+n)*e,Co=e=>e;function Ka(e,t,r,n){if(!(0<=e&&e<=1&&0<=r&&r<=1))throw new Error("bezier x values must be in [0, 1] range");if(e===t&&r===n)return Co;let A=6*(3*e-3*r+1),o=6*(r-2*e),i=3*e,a=A*A,s=o*o,c=o/A,l=3*o*i/a-s*o/(a*A),u=2*i/A-s/a,p=u*u*u,g=3/A,f=3*t-3*n+1,b=n-2*t,v=3*t,Q=A?_c:Co;return function(_){return _===0||_===1?_:Mc(Q(_,l,g,p,c),f,b,v)}}var yf={linear:Co,ease:Ka(.25,.1,.25,1),quad:e=>e*e,cubic:e=>e*e*e,poly:e=>t=>t**e,sin:e=>1-Math.cos(e*Math.PI/2),circle:e=>1-Math.sqrt(1-e*e),exp:e=>2**(10*(e-1)),elastic:(e=1)=>{let t=e*Math.PI;return r=>1-Math.cos(r*Math.PI/2)**3*Math.cos(r*t)},back:(e=1.70158)=>t=>t*t*((e+1)*t-e),bounce:e=>{if(e<1/2.75)return 7.5625*e*e;if(e<2/2.75){let r=e-.5454545454545454;return 7.5625*r*r+.75}if(e<2.5/2.75){let r=e-.8181818181818182;return 7.5625*r*r+.9375}let t=e-2.625/2.75;return 7.5625*t*t+.984375},bezier:Ka,in:e=>e,out:e=>t=>1-e(1-t),inOut:e=>t=>t<.5?e(t*2)/2:1-e((1-t)*2)/2};function Va(e,t,r,n){let A=n?.extrapolateLeft??"extend",o=n?.extrapolateRight??"extend";if(t.length!==r.length)throw new Error("inputRange and outputRange must have the same length");if(t.length<2)throw new Error("inputRange must have at least 2 elements");let i=t[0],a=t[t.length-1];if(e<i){if(A==="clamp")return r[0];if(A==="identity")return e}if(e>a){if(o==="clamp")return r[r.length-1];if(o==="identity")return e}let s=1;for(;s<t.length-1&&!(e<t[s]);s++);let c=t[s-1],l=t[s],u=r[s-1],p=r[s];if(c===l)return u;let g=(e-c)/(l-c);return n?.easing&&(g=n.easing(g)),u+g*(p-u)}q();var Sc={damping:10,mass:1,stiffness:100,overshootClamping:!1},yo={};function Gc({animation:e,now:t,config:r}){let{toValue:n,lastTimestamp:A,current:o,velocity:i}=e,a=Math.min(t-A,64);if(r.damping<=0)throw new Error("Spring damping must be greater than 0, otherwise the spring() animation will never end, causing an infinite loop.");if(r.stiffness<=0)throw new Error("Spring stiffness must be greater than 0.");if(r.mass<=0)throw new Error("Spring mass must be greater than 0.");let s=r.damping,c=r.mass,l=r.stiffness,u=[n,A,o,i,s,c,l,t].join("-");if(yo[u])return yo[u];let p=-i,g=n-o,f=s/(2*Math.sqrt(l*c)),b=Math.sqrt(l/c),v=b*Math.sqrt(1-f**2),Q=a/1e3,x=Math.sin(v*Q),_=Math.cos(v*Q),y=Math.exp(-f*b*Q),M=y*(x*((p+f*b*g)/v)+g*_),T=n-M,N=f*b*M-y*(_*(p+f*b*g)-v*g*x),O=Math.exp(-b*Q),D=n-O*(g+(p+b*g)*Q),H=O*(p*(Q*b-1)+Q*g*b*b),V={toValue:n,prevPosition:o,lastTimestamp:t,current:f<1?T:D,velocity:f<1?N:H};return yo[u]=V,V}var Qo={};function za({frame:e,fps:t,config:r={}}){let o=[e,t,r.damping,r.mass,r.overshootClamping,r.stiffness].join("-");if(Qo[o])return Qo[o];let i={lastTimestamp:0,current:0,toValue:1,velocity:0,prevPosition:0},a=Math.max(0,e),s=a%1;for(let c=0;c<=Math.floor(a);c++){c===Math.floor(a)&&(c+=s);let l=c/t*1e3;i=Gc({animation:i,now:l,config:{...Sc,...r}})}return Qo[o]=i,i}var xo=new Map;function Pc({fps:e,config:t={},threshold:r=.005}){if(typeof r!="number")throw new TypeError(`threshold must be a number, got ${r}`);if(r===0)return 1/0;if(r===1)return 0;if(Number.isNaN(r))throw new TypeError("Threshold is NaN");if(!Number.isFinite(r))throw new TypeError("Threshold is not finite");if(r<0)throw new TypeError("Threshold is below 0");let n=[e,t.damping,t.mass,t.overshootClamping,t.stiffness,r].join("-");if(xo.has(n))return xo.get(n);let A=0,o=0,i=()=>za({fps:e,frame:A,config:t}),a=i(),s=()=>Math.abs(a.current-a.toValue),c=s();for(;c>=r;)A++,a=i(),c=s();o=A;for(let l=0;l<20;l++)A++,a=i(),c=s(),c>=r&&(l=0,o=A+1);return xo.set(n,o),o}function Df({frame:e,fps:t,config:r={},from:n=0,to:A=1,durationInFrames:o,durationRestThreshold:i,delay:a=0,reverse:s=!1}){let c=s||typeof o<"u",l=c?Pc({fps:t,config:r,threshold:i}):void 0,u=c?{get:()=>l}:{get:()=>{throw new Error("did not calculate natural duration")}},g=(s?(o??u.get())-e:e)+(s?a:-a),f=o===void 0?g:g/(o/u.get());if(o&&g>o)return A;let b=za({fps:t,frame:f,config:r}),v=r.overshootClamping?A>=n?Math.min(b.current,A):Math.max(b.current,A):b.current;return n===0&&A===1?v:Va(v,[0,1],[n,A])}q();q();q();q();var oA=new Set,wo=!1;function Po(e,t,r=2){let n=t&&t.length,A=n?t[0]*r:e.length;oA.size&&oA.clear();let o=Xa(e,0,A,r,!0),i=[];if(!o||o.next===o.prev)return i;let a=0,s=0,c=0;if(n&&(o=Nc(e,t,o,r)),e.length>80*r){a=e[0],s=e[1];let l=a,u=s;for(let p=r;p<A;p+=r){let g=e[p],f=e[p+1];g<a&&(a=g),f<s&&(s=f),g>l&&(l=g),f>u&&(u=f)}c=Math.max(l-a,u-s),c=c!==0?32767/c:0}return Do(o,i,a,s,c),i}function Xa(e,t,r,n,A){let o=null;if(A===Xc(e,t,r,n)>0)for(let i=t;i<r;i+=n)o=qa(i/n|0,e[i],e[i+1],o);else for(let i=r-n;i>=t;i-=n)o=qa(i/n|0,e[i],e[i+1],o);return o&&iA(o,o.next)&&(sA(o),o=o.next),o}function Or(e,t=e){let r=t===e,n=e,A;do A=!1,n!==n.next&&(oA.size===0||!oA.has(n))&&(iA(n,n.next)||et(n.prev,n,n.next)===0)?((r||n===t)&&(t=n.prev),wo=!0,sA(n),n=n.prev,A=!0):(r||n!==t)&&(n=n.next,A=!r);while(A||n!==t);return t}function Do(e,t,r,n,A){A&&Kc(e,r,n,A);let o=e,i=!1;for(;e.prev!==e.next;){let a=e.prev,s=e.next;if(et(a,e,s)<0&&(A?Fc(e,r,n,A):Rc(e))){t.push(a.i,e.i,s.i),sA(e),e=s,o=s;continue}if(e=s,e===o){if(wo=!1,e=Or(e),wo){o=e;continue}if(!i){e=Uc(e,t),o=e,i=!0;continue}kc(e,t,r,n,A);break}}}function Rc(e){let t=e.prev,r=e,n=e.next,A=t.x,o=r.x,i=n.x,a=t.y,s=r.y,c=n.y,l=Math.min(A,o,i),u=Math.min(a,s,c),p=Math.max(A,o,i),g=Math.max(a,s,c),f=n.next;for(;f!==t;){if(f.x>=l&&f.x<=p&&f.y>=u&&f.y<=g&&!(A===f.x&&a===f.y)&&JA(A,a,o,s,i,c,f.x,f.y)&&et(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function Fc(e,t,r,n){let A=e.prev,o=e,i=e.next,a=A.x,s=o.x,c=i.x,l=A.y,u=o.y,p=i.y,g=Math.min(a,s,c),f=Math.min(l,u,p),b=Math.max(a,s,c),v=Math.max(l,u,p),Q=So(g,f,t,r,n),x=So(b,v,t,r,n),_=e.prevZ;for(;_&&_.z>=Q;){if(_.x>=g&&_.x<=b&&_.y>=f&&_.y<=v&&_!==i&&!(a===_.x&&l===_.y)&&JA(a,l,s,u,c,p,_.x,_.y)&&et(_.prev,_,_.next)>=0)return!1;_=_.prevZ}let y=e.nextZ;for(;y&&y.z<=x;){if(y.x>=g&&y.x<=b&&y.y>=f&&y.y<=v&&y!==i&&!(a===y.x&&l===y.y)&&JA(a,l,s,u,c,p,y.x,y.y)&&et(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function Uc(e,t){let r=e,n=!1;do{let A=r.prev,o=r.next.next;es(A,r,r.next,o,!1)&&aA(A,o)&&aA(o,A)&&(t.push(A.i,r.i,o.i),sA(r),sA(r.next),r=e=o,n=!0),r=r.next}while(r!==e);return n?Or(r):r}function kc(e,t,r,n,A){let o=e;do{let i=o.next.next;for(;i!==o.prev;){if(o.i!==i.i&&Yc(o,i)){let a=ts(o,i);o=Or(o,o.next),a=Or(a,a.next),Do(o,t,r,n,A),Do(a,t,r,n,A);return}i=i.next}o=o.next}while(o!==e)}var vo=!1;function Nc(e,t,r,n){let A=[];for(let o=0,i=t.length;o<i;o++){let a=t[o]*n,s=o<i-1?t[o+1]*n:e.length,c=Xa(e,a,s,n,!1);c===c.next&&oA.add(c),A.push(zc(c))}A.sort(Tc),Oc(e.length/n,t.length),$a(r,r),vo=!0;for(let o=0;o<A.length;o++)r=Lc(A[o],r);return vo=!1,Or(r)}function Tc(e,t){return e.x-t.x||e.y-t.y||(e.next.y-e.y)/(e.next.x-e.x)-(t.next.y-t.y)/(t.next.x-t.x)}function Lc(e,t){let r=jc(e,t);if(!r)return t;let n=ts(r,e),A=n.next;return $a(r,A.next),Or(n,n.next),Or(r,r.next)}var Za=16,Ze=new Float64Array(0),jA=0,_o=[],Mo=[];function Oc(e,t){let r=Math.ceil((e+2*t)/Za)+t+2;Ze.length<r*4&&(Ze=new Float64Array(r*4)),jA=0}function $a(e,t){let r=e;do{let n=jA++;_o[n]=r;let A=r.x,o=r.y,i=r.x,a=r.y,s=0;do{let l=r.next;r.z=n,l.x<A&&(A=l.x),l.x>i&&(i=l.x),l.y<o&&(o=l.y),l.y>a&&(a=l.y),r=l}while(++s<Za&&r!==t);Mo[n]=r;let c=n*4;Ze[c]=A,Ze[c+1]=o,Ze[c+2]=i,Ze[c+3]=a}while(r!==t)}function Hc(e,t){let r=e.z*4;t.x<Ze[r]&&(Ze[r]=t.x),t.y<Ze[r+1]&&(Ze[r+1]=t.y),t.x>Ze[r+2]&&(Ze[r+2]=t.x),t.y>Ze[r+3]&&(Ze[r+3]=t.y)}function Ya(e){let t=Mo[e];for(;t.prev.next!==t;)t=t.next;return Mo[e]=t,t}function Wa(e){let t=_o[e];for(;t.prev.next!==t;)t=t.next;return _o[e]=t,t}function jc(e,t){let r=t,n=e.x,A=e.y,o=-1/0,i;if(iA(e,r))return r;for(let p=0,g=0;p<jA;p++,g+=4){if(A<Ze[g+1]||A>Ze[g+3]||Ze[g]>n||Ze[g+2]<=o)continue;let f=Ya(p);r=Wa(p);do{if(r.prev.next===r){if(iA(e,r.next))return r.next;if(A<=r.y&&A>=r.next.y&&r.next.y!==r.y){let b=r.x+(A-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(b<=n&&b>o&&(o=b,i=r.x<r.next.x?r:r.next,b===n))return i}}r=r.next}while(r!==f)}if(!i)return null;let a=i.x,s=i.y,c=Math.min(A,s),l=Math.max(A,s),u=1/0;for(let p=0,g=0;p<jA;p++,g+=4){if(Ze[g+2]<a||Ze[g]>n||Ze[g+3]<c||Ze[g+1]>l)continue;let f=Ya(p);r=Wa(p);do{if(r.prev.next===r&&n>=r.x&&r.x>=a&&n!==r.x&&JA(A<s?n:o,A,a,s,A<s?o:n,A,r.x,r.y)){let b=Math.abs(A-r.y)/(n-r.x);(aA(r,e)||r.y===A&&r.next.y===A&&r.next.x>n)&&(b<u||b===u&&(r.x>i.x||r.x===i.x&&Jc(i,r)))&&(i=r,u=b)}r=r.next}while(r!==f)}return i}function Jc(e,t){return et(e.prev,e,t.prev)<0&&et(t.next,e,e.next)<0}var Bt=[],qr=[],Lr=new Uint32Array(0),nA=new Uint32Array(0),AA=new Uint32Array(256);function Kc(e,t,r,n){let A=e,o=0;do A.z=So(A.x,A.y,t,r,n),Bt[o++]=A,A=A.next;while(A!==e);Vc(o);let i=null;for(let a=0;a<o;a++){let s=Bt[a];s.prevZ=i,i&&(i.nextZ=s),i=s}i.nextZ=null,Bt.fill(null,0,o),qr.fill(null,0,o)}function Vc(e){if(e<=32){for(let t=1;t<e;t++){let r=Bt[t],n=r.z,A=t-1;for(;A>=0&&Bt[A].z>n;)Bt[A+1]=Bt[A],A--;Bt[A+1]=r}return}Lr.length<e&&(Lr=new Uint32Array(e),nA=new Uint32Array(e),qr=new Array(e));for(let t=0;t<e;t++)Lr[t]=Bt[t].z;OA(e,Bt,Lr,qr,nA,0),OA(e,qr,nA,Bt,Lr,8),OA(e,Bt,Lr,qr,nA,16),OA(e,qr,nA,Bt,Lr,24)}function OA(e,t,r,n,A,o){AA.fill(0);for(let a=0;a<e;a++)AA[r[a]>>>o&255]++;let i=0;for(let a=0;a<256;a++){let s=AA[a];AA[a]=i,i+=s}for(let a=0;a<e;a++){let s=r[a],c=AA[s>>>o&255]++;n[c]=t[a],A[c]=s}}function So(e,t,r,n,A){return e=(e-r)*A|0,t=(t-n)*A|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function zc(e){let t=e,r=e;do(t.x<r.x||t.x===r.x&&t.y<r.y)&&(r=t),t=t.next;while(t!==e);return r}function JA(e,t,r,n,A,o,i,a){return(A-i)*(t-a)>=(e-i)*(o-a)&&(e-i)*(n-a)>=(r-i)*(t-a)&&(r-i)*(o-a)>=(A-i)*(n-a)}function Yc(e,t){let r=iA(e,t)&&et(e.prev,e,e.next)>0&&et(t.prev,t,t.next)>0;return e.next.i!==t.i&&(r||aA(e,t)&&aA(t,e)&&(et(e.prev,e,t.prev)!==0||et(e,t.prev,t)!==0))&&!Wc(e,t)&&(r||qc(e,t))}function et(e,t,r){return(t.y-e.y)*(r.x-t.x)-(t.x-e.x)*(r.y-t.y)}function iA(e,t){return e.x===t.x&&e.y===t.y}function es(e,t,r,n,A=!0){let o=et(e,t,r),i=et(e,t,n),a=et(r,n,e),s=et(r,n,t);return(o>0&&i<0||o<0&&i>0)&&(a>0&&s<0||a<0&&s>0)?!0:A?!!(o===0&&HA(e,r,t)||i===0&&HA(e,n,t)||a===0&&HA(r,e,n)||s===0&&HA(r,t,n)):!1}function HA(e,t,r){return t.x<=Math.max(e.x,r.x)&&t.x>=Math.min(e.x,r.x)&&t.y<=Math.max(e.y,r.y)&&t.y>=Math.min(e.y,r.y)}function Wc(e,t){let r=Math.min(e.x,t.x),n=Math.max(e.x,t.x),A=Math.min(e.y,t.y),o=Math.max(e.y,t.y),i=e;do{let a=i.next;if(i.x>n&&a.x>n||i.x<r&&a.x<r||i.y>o&&a.y>o||i.y<A&&a.y<A){i=a;continue}if(i.i!==e.i&&a.i!==e.i&&i.i!==t.i&&a.i!==t.i&&es(i,a,e,t))return!0;i=a}while(i!==e);return!1}function aA(e,t){return et(e.prev,e,e.next)<0?et(e,t,e.next)>=0&&et(e,e.prev,t)>=0:et(e,t,e.prev)<0||et(e,e.next,t)<0}function qc(e,t){let r=e,n=!1,A=(e.x+t.x)/2,o=(e.y+t.y)/2;do{let i=r.next;r.y>o!=i.y>o&&A<(i.x-r.x)*(o-r.y)/(i.y-r.y)+r.x&&(n=!n),r=i}while(r!==e);return n}function ts(e,t){let r=Go(e.i,e.x,e.y),n=Go(t.i,t.x,t.y),A=e.next,o=t.prev;return e.next=t,t.prev=e,r.next=A,A.prev=r,n.next=r,r.prev=n,o.next=n,n.prev=o,n}function qa(e,t,r,n){let A=Go(e,t,r);return n?(A.next=n.next,A.prev=n,n.next.prev=A,n.next=A):(A.prev=A,A.next=A),A}function sA(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ),vo&&Hc(e.prev,e.next)}function Go(e,t,r){return{i:e,x:t,y:r,prev:null,next:null,z:0,prevZ:null,nextZ:null}}function Xc(e,t,r,n){let A=0;for(let o=t,i=r-n;o<r;o+=n)A+=(e[i]-e[o])*(e[o+1]+e[i+1]),i=o;return A}var is=$A(ns(),1);function VA(e){let t=e.trim();if(t.startsWith("#")){let r=t.slice(1);if(r.length===3){let n=Number.parseInt(r[0]+r[0],16)/255,A=Number.parseInt(r[1]+r[1],16)/255,o=Number.parseInt(r[2]+r[2],16)/255;return[n,A,o,1]}if(r.length===6){let n=Number.parseInt(r.slice(0,2),16)/255,A=Number.parseInt(r.slice(2,4),16)/255,o=Number.parseInt(r.slice(4,6),16)/255;return[n,A,o,1]}if(r.length===8){let n=Number.parseInt(r.slice(0,2),16)/255,A=Number.parseInt(r.slice(2,4),16)/255,o=Number.parseInt(r.slice(4,6),16)/255,i=Number.parseInt(r.slice(6,8),16)/255;return[n,A,o,i]}}if(t.startsWith("rgb")){let r=t.replace(/rgba?\(/,"").replace(/\)/,"").split(",").map(a=>Number.parseFloat(a.trim())),n=(r[0]??0)/255,A=(r[1]??0)/255,o=(r[2]??0)/255,i=r[3]!==void 0?r[3]:1;return[n,A,o,i]}return[1,1,1,1]}function Xr(e){let t=0,r=e.length;for(let n=0;n<r;n++){let A=(n+1)%r;t+=e[n].x*e[A].y-e[A].x*e[n].y}return t/2}function zA(e,t){let r=!1,n=t.length;for(let A=0,o=n-1;A<n;o=A++){let i=t[A].x,a=t[A].y,s=t[o].x,c=t[o].y;a>e.y!=c>e.y&&e.x<(s-i)*(e.y-a)/(c-a)+i&&(r=!r)}return r}var Zc=.1,$c=64;function as(e,t){if(t.segments!==void 0)return t.segments;let r=Math.ceil(Math.sqrt(e/(8*t.tolerance)));return Math.min($c,Math.max(1,r))}function el(e,t,r,n,A){let o=as(2*Math.hypot(e.x-2*t.x+r.x,e.y-2*t.y+r.y),n);for(let i=1;i<=o;i++){let a=i/o,s=1-a;A.push({x:s*s*e.x+2*s*a*t.x+a*a*r.x,y:s*s*e.y+2*s*a*t.y+a*a*r.y})}}function tl(e,t,r,n,A,o){let i=as(6*Math.max(Math.hypot(e.x-2*t.x+r.x,e.y-2*t.y+r.y),Math.hypot(t.x-2*r.x+n.x,t.y-2*r.y+n.y)),A);for(let a=1;a<=i;a++){let s=a/i,c=1-s;o.push({x:c*c*c*e.x+3*c*c*s*t.x+3*c*s*s*r.x+s*s*s*n.x,y:c*c*c*e.y+3*c*c*s*t.y+3*c*s*s*r.y+s*s*s*n.y})}}function rl(e){try{let t=new is.Path2D(e).simplify().edges;return Array.isArray(t)?t:null}catch{return null}}function nl(e,t,r,n,A){let o=e.path?.toSVG();if(!o)return{contours:[],simplified:!0};let i=rl(o),a=i!==null;i??=(e.path?.commands??[]).map(p=>[p.command,...p.args]);let s=[],c={x:0,y:0},l=[],u=()=>{if(l.length>=3){let p=l[0],g=l[l.length-1];Math.hypot(g.x-p.x,g.y-p.y)<1e-4&&l.pop(),l.length>=3&&s.push(l)}l=[]};for(let p of i){let g=p[0],f=p.slice(1);if(g==="moveTo")u(),c={x:(t+f[0])*n,y:-(r+f[1])*n},l=[c];else if(g==="lineTo")c={x:(t+f[0])*n,y:-(r+f[1])*n},l.push(c);else if(g==="quadraticCurveTo"){let b={x:(t+f[0])*n,y:-(r+f[1])*n},v={x:(t+f[2])*n,y:-(r+f[3])*n};el(c,b,v,A,l),c=v}else if(g==="bezierCurveTo"){let b={x:(t+f[0])*n,y:-(r+f[1])*n},v={x:(t+f[2])*n,y:-(r+f[3])*n},Q={x:(t+f[4])*n,y:-(r+f[5])*n};tl(c,b,v,Q,A,l),c=Q}else g==="closePath"&&u()}return u(),{contours:s,simplified:a}}var Al=Math.cos(30*Math.PI/180);function ol({contours:e,simplified:t}){if(!t)return sl(e);let r=e.map(i=>({contour:i,area:Math.abs(Xr(i))}));r.sort((i,a)=>a.area-i.area);let n=r.map(()=>[]);for(let i=0;i<r.length;i++){let a=r[i].contour,s=a[Math.floor(a.length/2)];for(let c=0;c<i;c++){if(r[c].area<=r[i].area)continue;let l=r[c].contour;(zA(a[0],l)||zA(s,l))&&n[i].push(c)}}let A=[],o=new Map;for(let i=0;i<r.length;i++){let a=n[i];if(a.length%2===0){let s={outer:r[i].contour,holes:[]};A.push(s),o.set(i,s)}else o.get(a[a.length-1])?.holes.push(r[i].contour)}return A}function il(e,t,r,n){let A=t.x-e.x,o=t.y-e.y,i=n.x-r.x,a=n.y-r.y,s=A*a-o*i;if(Math.abs(s)<1e-12)return null;let c=((r.x-e.x)*a-(r.y-e.y)*i)/s,l=((r.x-e.x)*o-(r.y-e.y)*A)/s,u=1e-9;return c<=u||c>=1-u||l<=u||l>=1-u?null:{x:e.x+A*c,y:e.y+o*c}}function Ro(e,t=0){let r=e.length;if(r<3)return[];if(t>64)return[e];for(let n=0;n<r;n++){let A=e[n],o=e[(n+1)%r];for(let i=n+2;i<r;i++){if(n===0&&i===r-1)continue;let a=il(A,o,e[i],e[(i+1)%r]);if(!a)continue;let s=[a,...e.slice(n+1,i+1)],c=[a,...e.slice(i+1),...e.slice(0,n+1)];return[...Ro(s,t+1),...Ro(c,t+1)]}}return Math.abs(Xr(e))>1e-9?[e]:[]}function al(e,t){let r=0;for(let n of t)for(let A=0;A<n.length;A++){let o=n[A],i=n[(A+1)%n.length],a=(i.x-o.x)*(e.y-o.y)-(e.x-o.x)*(i.y-o.y);o.y<=e.y?i.y>e.y&&a>0&&r++:i.y<=e.y&&a<0&&r--}return r}function As(e){let t=0,r=-1;for(let u=0;u<e.length;u++){let p=e[u],g=e[(u+1)%e.length],f=Math.hypot(g.x-p.x,g.y-p.y);f>r&&(r=f,t=u)}let n=e[t],A=e[(t+1)%e.length],o=(n.x+A.x)/2,i=(n.y+A.y)/2,a=Math.max(1e-4,Math.min(.01,r*.001)),s=-(A.y-n.y)/r*a,c=(A.x-n.x)/r*a,l={x:o+s,y:i+c};return zA(l,e)?l:{x:o-s,y:i-c}}function sl(e){let t=e.flatMap(A=>Ro(A)),r=[],n=[];for(let A of t)al(As(A),e)!==0?r.push({outer:A,holes:[]}):n.push(A);for(let A of n){let o=Math.abs(Xr(A)),i=As(A),a,s=Number.POSITIVE_INFINITY;for(let c of r){let l=Math.abs(Xr(c.outer));l>o&&l<s&&zA(i,c.outer)&&(a=c,s=l)}a?.holes.push(A)}return r}var os=new WeakMap;function cl(e,t,r,n,A,o){let i=os.get(e);i||(i=new Map,os.set(e,i));let a=`${t.id}|${A}|${o.segments??""}|${o.tolerance}`,s=i.get(a);s||(s=ol(nl(t,0,0,A,o)),i.set(a,s));let c=r*A,l=-n*A,u=p=>p.map(g=>({x:g.x+c,y:g.y+l}));return s.map(p=>({outer:u(p.outer),holes:p.holes.map(u)}))}function Uf(e){let t=e.font,r=e.fontSize??48,n=e.depth??20,A=n/2,o={segments:e.curveSegments!==void 0?Math.max(2,e.curveSegments):void 0,tolerance:Math.max(.001,e.curveTolerance??Zc)},i=t.unitsPerEm||1e3,a=r/i,s=Zi(t,e.text.replace(/\n/g," "),{direction:e.direction,letterSpacing:e.letterSpacing?e.letterSpacing/a:0}),c=[];for(let ue of s.glyphs){let oe=t.getGlyph(ue.glyphId),pe=cl(t,oe,ue.x,ue.y,a,o);for(let Me of pe)c.push(Me)}let l=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY,p=Number.POSITIVE_INFINITY,g=Number.NEGATIVE_INFINITY;for(let ue of c){for(let oe of ue.outer)oe.x<l&&(l=oe.x),oe.x>u&&(u=oe.x),oe.y<p&&(p=oe.y),oe.y>g&&(g=oe.y);for(let oe of ue.holes)for(let pe of oe)pe.x<l&&(l=pe.x),pe.x>u&&(u=pe.x),pe.y<p&&(p=pe.y),pe.y>g&&(g=pe.y)}Number.isFinite(l)||(l=0,u=0,p=0,g=0);let f=u-l,b=g-p,v=(s.baseLevel&1)===1,Q=e.align==="start"?v?"right":"left":e.align==="end"?v?"left":"right":e.align,x=(l+u)/2;Q==="left"&&(x=l),Q==="right"&&(x=u);let _=(p+g)/2;e.verticalAlign==="top"&&(_=p),e.verticalAlign==="bottom"&&(_=g);for(let ue of c){for(let oe of ue.outer)oe.x-=x,oe.y-=_;for(let oe of ue.holes)for(let pe of oe)pe.x-=x,pe.y-=_}l-=x,u-=x,p-=_,g-=_;let y=[],M=[],T=[],N=[],O=[],D=[],H=[],V=[],P=(ue,oe,pe)=>{let Me=O.length/3;return O.push(ue.x,ue.y,A,ue.x,ue.y,-A),D.push(oe.x,oe.y,0,oe.x,oe.y,0),H.push(pe,0,pe,1),Me},z=ue=>{let oe=ue.filter((m,Ce)=>{let be=ue[(Ce+1)%ue.length];return Math.hypot(be.x-m.x,be.y-m.y)>=1e-6}),pe=oe.length;if(pe<2)return;let Me=[],F=oe.map((m,Ce)=>{let be=oe[(Ce+1)%pe],ye=Math.hypot(be.x-m.x,be.y-m.y);return Me.push(ye),{x:(be.y-m.y)/ye,y:-(be.x-m.x)/ye}}),ve=Me.reduce((m,Ce)=>m+Ce,0),Se=[],Ne=[],Ee=0;for(let m=0;m<pe;m++){let Ce=F[(m-1+pe)%pe],be=F[m],ye=Ee/ve,ie=Ce.x+be.x,ce=Ce.y+be.y,Qe=Ce.x*be.x+Ce.y*be.y>=Al?{x:ie/Math.hypot(ie,ce),y:ce/Math.hypot(ie,ce)}:null;Qe&&m>0?Se[m]=Ne[m]=P(oe[m],Qe,ye):(Ne[m]=P(oe[m],Qe??Ce,m===0?1:ye),Se[m]=P(oe[m],Qe??be,ye)),Ee+=Me[m]}for(let m=0;m<pe;m++){let Ce=Se[m],be=Ne[(m+1)%pe];V.push(Ce,be+1,be),V.push(Ce,Ce+1,be+1)}};for(let ue of c){let oe=ue.outer;Xr(oe)<0&&oe.reverse();for(let Ee of ue.holes)Xr(Ee)>0&&Ee.reverse();let pe=[],Me=[];for(let Ee of oe)pe.push(Ee.x,Ee.y);for(let Ee of ue.holes){Me.push(pe.length/2);for(let m of Ee)pe.push(m.x,m.y)}let F=Po(pe,Me,2),ve=pe.length/2,Se=y.length/3;for(let Ee=0;Ee<ve;Ee++){let m=pe[Ee*2],Ce=pe[Ee*2+1];y.push(m,Ce,-A),M.push(0,0,-1),T.push((m-l)/(f||1),(Ce-p)/(b||1))}for(let Ee=0;Ee<F.length;Ee+=3)N.push(Se+F[Ee],Se+F[Ee+2],Se+F[Ee+1]);let Ne=y.length/3;for(let Ee=0;Ee<ve;Ee++){let m=pe[Ee*2],Ce=pe[Ee*2+1];y.push(m,Ce,A),M.push(0,0,1),T.push((m-l)/(f||1),(Ce-p)/(b||1))}for(let Ee=0;Ee<F.length;Ee+=3)N.push(Ne+F[Ee],Ne+F[Ee+1],Ne+F[Ee+2]);z(oe);for(let Ee of ue.holes)z(Ee)}let ee=VA(e.fill??"#ffffff"),Y=VA(e.bevelColor??e.fill??"#ffffff"),$={name:"front-material",diffuseColor:ee,shading:e.material??"lit",shininess:e.shininess??32,roughness:e.roughness,metallic:e.metallic,twoSided:!0},W={name:"side-material",diffuseColor:Y,shading:e.material??"lit",shininess:e.shininess??32,roughness:e.roughness,metallic:e.metallic,twoSided:!0},te=[];return N.length>0&&te.push({id:"text-front-mesh",name:"front",positions:new Float32Array(y),normals:new Float32Array(M),uvs:new Float32Array(T),indices:y.length/3>65535?new Uint32Array(N):new Uint16Array(N),materialName:"front-material"}),V.length>0&&te.push({id:"text-side-mesh",name:"side",positions:new Float32Array(O),normals:new Float32Array(D),uvs:new Float32Array(H),indices:O.length/3>65535?new Uint32Array(V):new Uint16Array(V),materialName:"side-material"}),{modelData:{name:`extruded-text-${e.text}`,meshes:te,materials:{"front-material":$,"side-material":W},animations:[],bounds:{min:[l,p,-A],max:[u,g,A],center:[(l+u)/2,(p+g)/2,0],size:[f,b,n],boundingSphereRadius:Math.hypot(f,b,n)/2}},bounds:{minX:l,maxX:u,minY:p,maxY:g,width:f,height:b,depth:n}}}var Uo=class{positions=[];normals=[];uvs=[];indices=[];vertex(t,r,n){return this.positions.push(t[0],t[1],t[2]),this.normals.push(r[0],r[1],r[2]),this.uvs.push(n[0],n[1]),this.positions.length/3-1}grid(t,r,n,A=!1){for(let o=0;o<n;o++)for(let i=0;i<r;i++){let a=t+o*(r+1)+i,s=a+1,c=a+r+1,l=c+1;A?this.indices.push(a,s,c,s,l,c):this.indices.push(a,c,s,s,c,l)}}build(t){let r=this.positions.length/3;return{id:`${t}-mesh`,name:t,positions:new Float32Array(this.positions),normals:new Float32Array(this.normals),uvs:new Float32Array(this.uvs),indices:r>65535?new Uint32Array(this.indices):new Uint16Array(this.indices),materialName:`${t}-material`}}};function cA(e){let t=Math.hypot(e[0],e[1],e[2]);return t>1e-12?[e[0]/t,e[1]/t,e[2]/t]:[0,0,0]}function Fo(e,t,r){if(t<=0)return[-e,e];let n=e-t,A=[];for(let o=0;o<=r;o++)A.push(-n-t*Math.cos(o/r*Math.PI/2));for(let o=n>1e-9?0:1;o<=r;o++)A.push(n+t*Math.sin(o/r*Math.PI/2));return A}function ll(e,t){let r=e.width/2,n=e.height/2,A=e.depth/2,o=Math.max(0,Math.min(e.radius??0,r,n,A)),i=Math.max(1,Math.round(e.segments??4)),a=e.taper??1,s=r-o,c=n-o,l=A-o,u=Fo(r,o,i),p=Fo(n,o,i),g=Fo(A,o,i),f=e.height>0?(1-a)/e.height:0,b=y=>a+f*(y+n),v=(y,M)=>{let T=[Math.max(-s,Math.min(s,y[0])),Math.max(-c,Math.min(c,y[1])),Math.max(-l,Math.min(l,y[2]))],N=o>0?cA([y[0]-T[0],y[1]-T[1],y[2]-T[2]]):M;N[0]===0&&N[1]===0&&N[2]===0&&(N=M);let O=[T[0]+N[0]*o,T[1]+N[1]*o,T[2]+N[2]*o];if(a===1)return{p:O,n:N};let D=b(O[1]);return{p:[O[0]*D,O[1],O[2]*D],n:cA([N[0]/D,N[1]-O[0]*f*N[0]/D-O[2]*f*N[2]/D,N[2]/D])}},Q=[{axis:2,sign:-1,u:0,v:1},{axis:2,sign:1,u:0,v:1},{axis:0,sign:-1,u:2,v:1},{axis:0,sign:1,u:2,v:1},{axis:1,sign:-1,u:0,v:2},{axis:1,sign:1,u:0,v:2}],x=[r,n,A],_=[u,p,g];for(let y of Q){let M=_[y.u],T=_[y.v],N=[0,0,0];N[y.axis]=y.sign;let O=t.positions.length/3;for(let H=0;H<T.length;H++)for(let V=0;V<M.length;V++){let P=[0,0,0];P[y.axis]=y.sign*x[y.axis],P[y.u]=M[V],P[y.v]=T[H];let{p:z,n:ee}=v(P,N);t.vertex(z,ee,[(M[V]/x[y.u]+1)/2,(T[H]/x[y.v]+1)/2])}let D=(y.v+1)%3===y.u;t.grid(O,M.length-1,T.length-1,(D?1:-1)!==y.sign)}}function ul(e,t){let r=Math.max(3,Math.round(e.segments??32)),n=Math.max(2,Math.round(r/2));for(let A=0;A<=n;A++){let o=A/n*Math.PI;for(let i=0;i<=r;i++){let a=i/r*Math.PI*2,s=[Math.sin(o)*Math.cos(a),-Math.cos(o),Math.sin(o)*Math.sin(a)];t.vertex([s[0]*e.radius,s[1]*e.radius,s[2]*e.radius],s,[i/r,A/n])}}t.grid(0,r,n)}function gl(e,t){let r=Math.max(3,Math.round(e.segments??32)),n=e.radiusTop??e.radius??50,A=e.radiusBottom??e.radius??50,o=e.height/2,i=e.height>0?(A-n)/e.height:0;for(let a=0;a<=1;a++){let s=a===0?n:A,c=a===0?-o:o;for(let l=0;l<=r;l++){let u=l/r*Math.PI*2,p=Math.cos(u),g=Math.sin(u);t.vertex([p*s,c,g*s],cA([p,-i,g]),[l/r,a])}}if(t.grid(0,r,1),!e.openEnded)for(let[a,s,c]of[[-o,n,-1],[o,A,1]]){if(s<=0)continue;let l=t.vertex([0,a,0],[0,c,0],[.5,.5]),u=t.positions.length/3;for(let p=0;p<=r;p++){let g=p/r*Math.PI*2,f=Math.cos(g),b=Math.sin(g);t.vertex([f*s,a,b*s],[0,c,0],[(f+1)/2,(b+1)/2])}for(let p=0;p<r;p++)c<0?t.indices.push(l,u+p,u+p+1):t.indices.push(l,u+p+1,u+p)}}function pl(e,t){let r=e.radius??50,n=(e.size?e.size[0]:r)||50,A=(e.size?e.size[1]:r)||50,o=(e.size?e.size[2]:r)||50,i=Math.max(n,A,o),a=Math.max(4,Math.min(64,Math.round(e.facets??14))),s=Math.round(e.seed??1)>>>0,c=Math.max(0,Math.min(.85,e.irregularity??.35)),l=BigInt(s)*6364136223846793005n+1442695040888963407n,u=()=>{l=l*6364136223846793005n+1442695040888963407n;let O=Number((l>>18n^l)>>27n)>>>0,D=Number(l>>59n)>>>0;return((O>>>D|O<<(32-D&31))>>>0)/4294967296},p=(O,D)=>[O[0]-D[0],O[1]-D[1],O[2]-D[2]],g=(O,D)=>O[0]*D[0]+O[1]*D[1]+O[2]*D[2],f=(O,D)=>[O[1]*D[2]-O[2]*D[1],O[2]*D[0]-O[0]*D[2],O[0]*D[1]-O[1]*D[0]],b=[[[-n,-A,-o],[n,-A,-o],[n,A,-o],[-n,A,-o]],[[n,-A,o],[-n,-A,o],[-n,A,o],[n,A,o]],[[-n,-A,o],[-n,-A,-o],[-n,A,-o],[-n,A,o]],[[n,-A,-o],[n,-A,o],[n,A,o],[n,A,-o]],[[-n,-A,o],[n,-A,o],[n,-A,-o],[-n,-A,-o]],[[-n,A,-o],[n,A,-o],[n,A,o],[-n,A,o]]],v=(1+Math.sqrt(5))/2;for(let O=0;O<a;O++){let D=2*Math.PI*O/v+(u()-.5)*.4,H=1-2*(O+.5)/a,V=Math.sqrt(Math.max(0,1-H*H)),P=[Math.cos(D)*V,Math.sin(D)*V,H];P[0]+=(u()-.5)*.2,P[1]+=(u()-.5)*.2,P[2]+=(u()-.5)*.2;let z=Math.hypot(P[0],P[1],P[2]);if(z<1e-6)continue;P=[P[0]/z,P[1]/z,P[2]/z];let Y=Math.hypot(P[0]*n,P[1]*A,P[2]*o)*(1-c*(.2+.8*u())),$=[],W=[];for(let te of b){let me=[],ue=te.length;for(let oe=0;oe<ue;oe++){let pe=te[oe],Me=te[(oe+1)%ue],F=g(P,pe)-Y,ve=g(P,Me)-Y;if(F<=1e-5&&me.push(pe),F>1e-5&&ve<-1e-5||F<-1e-5&&ve>1e-5){let Se=F/(F-ve),Ne=[pe[0]+(Me[0]-pe[0])*Se,pe[1]+(Me[1]-pe[1])*Se,pe[2]+(Me[2]-pe[2])*Se];me.push(Ne),W.push(Ne)}}me.length>=3&&$.push(me)}if(W.length>=3){let te=[];for(let me of W){let ue=!1;for(let oe of te)if(Math.hypot(me[0]-oe[0],me[1]-oe[1],me[2]-oe[2])<.001){ue=!0;break}ue||te.push(me)}if(te.length>=3){let me=0,ue=0,oe=0;for(let Se of te)me+=Se[0],ue+=Se[1],oe+=Se[2];let pe=[me/te.length,ue/te.length,oe/te.length],Me=Math.abs(P[1])<.9?[0,1,0]:[1,0,0],F=cA(f(Me,P)),ve=f(P,F);te.sort((Se,Ne)=>{let Ee=Math.atan2(g(p(Se,pe),ve),g(p(Se,pe),F)),m=Math.atan2(g(p(Ne,pe),ve),g(p(Ne,pe),F));return Ee-m}),$.push(te)}}$.length>=4&&(b=$)}let Q=Number.POSITIVE_INFINITY,x=Number.POSITIVE_INFINITY,_=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,M=Number.NEGATIVE_INFINITY,T=Number.NEGATIVE_INFINITY;for(let O of b)for(let D of O)D[0]<Q&&(Q=D[0]),D[0]>y&&(y=D[0]),D[1]<x&&(x=D[1]),D[1]>M&&(M=D[1]),D[2]<_&&(_=D[2]),D[2]>T&&(T=D[2]);let N=[(Q+y)/2,(x+M)/2,(_+T)/2];for(let O of b)for(let D=0;D<O.length;D++){let H=O[D];O[D]=[H[0]-N[0],H[1]-N[1],H[2]-N[2]]}for(let O of b){if(O.length<3)continue;let D=[0,0,0];for(let W=0;W<O.length;W++){let te=O[W],me=O[(W+1)%O.length];D[0]+=(te[1]-me[1])*(te[2]+me[2]),D[1]+=(te[2]-me[2])*(te[0]+me[0]),D[2]+=(te[0]-me[0])*(te[1]+me[1])}let H=Math.hypot(D[0],D[1],D[2]);if(H<1e-6)continue;D=[D[0]/H,D[1]/H,D[2]/H];let V=[O.reduce((W,te)=>W+te[0],0)/O.length,O.reduce((W,te)=>W+te[1],0)/O.length,O.reduce((W,te)=>W+te[2],0)/O.length];g(D,V)<0&&(O.reverse(),D=[-D[0],-D[1],-D[2]]);let P=Math.abs(D[1])<.9?[0,1,0]:[1,0,0],z=cA(f(P,D)),ee=f(D,z),Y=O.map(W=>[.5+g(W,z)/(2*i),.5+g(W,ee)/(2*i)]),$=t.positions.length/3;for(let W=0;W<O.length;W++)t.vertex(O[W],D,Y[W]);for(let W=1;W<O.length-1;W++)t.indices.push($,$+W,$+W+1)}}function fl(e){let t=new Uo;if(e.type==="roundedBox")ll(e,t);else if(e.type==="sphere")ul(e,t);else if(e.type==="cylinder")gl(e,t);else if(e.type==="shard")pl(e,t);else throw new Error(`Unknown 3D primitive: ${e.type}`);let r=e.type,n=t.build(r),A={name:`${r}-material`,diffuseColor:VA(e.color??"#ffffff"),shading:e.material??"lit",shininess:e.shininess??32,roughness:e.roughness,metallic:e.metallic},o=[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY],i=[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],a=n.positions;for(let c=0;c<a.length;c+=3)for(let l=0;l<3;l++){let u=a[c+l];u<o[l]&&(o[l]=u),u>i[l]&&(i[l]=u)}let s=[i[0]-o[0],i[1]-o[1],i[2]-o[2]];return{name:`primitive-${r}`,meshes:[n],materials:{[A.name]:A},animations:[],bounds:{min:o,max:i,center:[(o[0]+i[0])/2,(o[1]+i[1])/2,(o[2]+i[2])/2],size:s,boundingSphereRadius:Math.hypot(...s)/2}}}var YA=new Map;function Lf(e){let t=JSON.stringify(e),r=YA.get(t);return r||(r=fl(e),YA.size>512&&YA.clear(),YA.set(t,r)),r}var ko=new Map;function dl(e,t){return JSON.stringify({text:e,...t})}function No(e,t){let r=e?String(e):" ",n=dl(r,t),A=ko.get(n);if(A)return A;let o=t.fontSize??48,i=t.fontFamily??"Inter";lr.isFailed(i)&&(i="Inter");let a=t.letterSpacing??0,s=t.lineHeight!==void 0&&t.lineHeight<10?t.lineHeight*o:t.lineHeight??o*1.2,c=lr.getFont(i,t.fontWeight,null,void 0,o),l=t.padding??0;if(!c){lr.isFailed(i)||lr.preloadSlugFont(null,i,eo(i)).catch(()=>{});let g=r.split(`
2389
- `),f=0,b=t.width!==void 0?Math.max(10,t.width-l*2):0;for(let x of g)if(b>0){let _=x.length*o*.55+a*x.length,y=Math.max(1,Math.ceil(_/b));f+=y}else f+=1;let v=Math.max(0,r.length-1),Q={width:t.width!==void 0?t.width:Math.ceil(r.length*o*.6+a*v)+l*2,height:t.height!==void 0?t.height:Math.ceil(f*s)+l*2};return ko.set(n,Q),Q}let u=$i.measure(r,c,o,a,s,t.width!==void 0?Math.max(0,t.width-l*2):void 0,t.spans,t.direction),p={width:t.width!==void 0&&!t.keepNaturalWidth?t.width:Math.ceil(u.width)+l*2,height:t.height!==void 0?t.height:Math.ceil(u.height)+l*2};return ko.set(n,p),p}function Kf(e,t){let r=t.fontFamily??"Inter";return lr.isFailed(r)&&(r="Inter"),lr.isFailed(r)?Promise.resolve(No(e,t)):lr.preloadSlugFont(null,r,eo(r)).then(()=>No(e,t)).catch(()=>No(e,t))}q();q();q();var hl=(()=>{var e=import.meta.url;return(function(t){t=t||{};var r;r||(r=typeof t<"u"?t:{});var n,A;r.ready=new Promise(function(I,B){n=I,A=B});var o=Object.assign({},r),i="";typeof document<"u"&&document.currentScript&&(i=document.currentScript.src),e&&(i=e),i.indexOf("blob:")!==0?i=i.substr(0,i.replace(/[?#].*/,"").lastIndexOf("/")+1):i="";var a=r.print||console.log.bind(console),s=r.printErr||console.warn.bind(console);Object.assign(r,o),o=null;var c;r.wasmBinary&&(c=r.wasmBinary);var l=r.noExitRuntime||!0;typeof WebAssembly!="object"&&$("no native wasm support detected");var u,p=!1;function g(I,B,G){G=B+G;for(var j="";!(B>=G);){var K=I[B++];if(!K)break;if(K&128){var Z=I[B++]&63;if((K&224)==192)j+=String.fromCharCode((K&31)<<6|Z);else{var re=I[B++]&63;K=(K&240)==224?(K&15)<<12|Z<<6|re:(K&7)<<18|Z<<12|re<<6|I[B++]&63,65536>K?j+=String.fromCharCode(K):(K-=65536,j+=String.fromCharCode(55296|K>>10,56320|K&1023))}}else j+=String.fromCharCode(K)}return j}var f,b,v,Q,x,_,y,M,T;function N(){var I=u.buffer;f=I,r.HEAP8=b=new Int8Array(I),r.HEAP16=Q=new Int16Array(I),r.HEAP32=_=new Int32Array(I),r.HEAPU8=v=new Uint8Array(I),r.HEAPU16=x=new Uint16Array(I),r.HEAPU32=y=new Uint32Array(I),r.HEAPF32=M=new Float32Array(I),r.HEAPF64=T=new Float64Array(I)}var O,D=[],H=[],V=[];function P(){var I=r.preRun.shift();D.unshift(I)}var z=0,ee=null,Y=null;function $(I){throw r.onAbort&&r.onAbort(I),I="Aborted("+I+")",s(I),p=!0,I=new WebAssembly.RuntimeError(I+". Build with -sASSERTIONS for more info."),A(I),I}function W(I){return I.startsWith("data:application/octet-stream;base64,")}var te;if(te="data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAEBAQBAQEICAEBAQEBAQEBCAgBAQEAAg4CAgUBAR4DBAcBcAHUAdQBBQcBAYACgIACBg0CfwFBkMQEC38BQQALByQIAUUCAAFGAG0BRwCwAQFIAK8BAUkAYQFKAQABSwAjAUwApgEJjQMBAEEBC9MBqwGqAaUB5QHiAZwB0AFazwHOAVlZWpsBmgGZAc0BzAHLAcoBWpgByQFZWVqbAZoBmQHIAccBxgGjAZcBpAGWAaMBvQKVAbwCxQG7Ajq6Ajq5ApQBuAI+twI+xAFqwwFqwgFqaWjBAcABvwGhAZcBtgK+AbUClgGhAbQCmAGzAjqxAjqwAr0BrwKuAq0CrAKrAqoCqAKnAqYCpQKkAqMCogKhArwBoAKfAp4CnQKcApsCmgKZApgClwKWApUClAKTApICkQKQAo8CjgKyAo0CjAKLAooCiAKHAqkChQI+hAK7AYMCggKBAoAC/gH9AfwB+QG6AfgBuQH3AfYB9QH0AfMB8gHxAYYC8AHvAbgB+wH6Ae4B7QG3AesBlQHqATrpAT7oAT7nAZQB0QE67AE+iQLmATrkAeMBOuEB4AHfAT7eAd0B3AG2AdsB2gHZAdgB1wHWAdUBtQHUAdMB0gH/AWloaWiPAZABsgGxAZEBhQGSAbQBswGRAa4BrQGsAakBqAGnAYUBCtj+A6ACMwEBfyAAQQEgABshAAJAA0AgABBhIgENAUGIxAAoAgAiAQRAIAERCQAMAQsLEAIACyABC+0BAgJ9A39DAADAfyEEAkACQAJAAkAgAkEHcSIGDgUCAQEBAAELQQMhBQwBCyAGQQFrQQJPDQEgAkHw/wNxQQR2IQcCfSACQQhxBEAgASAHEJ4BvgwBC0EAIAdB/w9xIgFrIAEgAsFBAEgbsgshAyAGQQFGBEAgAyADXA0BQwAAwH8gAyADQwAAgH9bIANDAACA/1tyIgEbIQQgAUUhBQwBCyADIANcDQBBAEECIANDAACAf1sgA0MAAID/W3IiARshBUMAAMB/IAMgARshBAsgACAFOgAEIAAgBDgCAA8LQfQNQakYQTpB+RYQCwALZwIBfQF/QwAAwH8hAgJAAkACQCABQQdxDgQCAAABAAtBxBJBqRhByQBBuhIQCwALIAFB8P8DcUEEdiEDIAFBCHEEQCAAIAMQngG+DwtBACADQf8PcSIAayAAIAHBQQBIG7IhAgsgAgt4AgF/AX0jAEEQayIEJAAgBEEIaiAAQQMgAkECR0EBdCABQf4BcUECRxsgAhAoQwAAwH8hBQJAAkACQCAELQAMQQFrDgIAAQILIAQqAgghBQwBCyAEKgIIIAOUQwrXIzyUIQULIARBEGokACAFQwAAAAAgBSAFWxsLeAIBfwF9IwBBEGsiBCQAIARBCGogAEEBIAJBAkZBAXQgAUH+AXFBAkcbIAIQKEMAAMB/IQUCQAJAAkAgBC0ADEEBaw4CAAECCyAEKgIIIQUMAQsgBCoCCCADlEMK1yM8lCEFCyAEQRBqJAAgBUMAAAAAIAUgBVsbC8wCAQV/IAAEQCAAQQRrIgEoAgAiBSEDIAEhAiAAQQhrKAIAIgAgAEF+cSIERwRAIAEgBGsiAigCBCIAIAIoAgg2AgggAigCCCAANgIEIAQgBWohAwsgASAFaiIEKAIAIgEgASAEakEEaygCAEcEQCAEKAIEIgAgBCgCCDYCCCAEKAIIIAA2AgQgASADaiEDCyACIAM2AgAgA0F8cSACakEEayADQQFyNgIAIAICfyACKAIAQQhrIgFB/wBNBEAgAUEDdkEBawwBCyABQR0gAWciAGt2QQRzIABBAnRrQe4AaiABQf8fTQ0AGkE/IAFBHiAAa3ZBAnMgAEEBdGtBxwBqIgAgAEE/TxsLIgFBBHQiAEHgMmo2AgQgAiAAQegyaiIAKAIANgIIIAAgAjYCACACKAIIIAI2AgRB6DpB6DopAwBCASABrYaENwMACwsOAEHYMigCABEJABBYAAunAQIBfQJ/IABBFGoiByACIAFBAkkiCCAEIAUQNSEGAkAgByACIAggBCAFEC0iBEMAAAAAYCADIARecQ0AIAZDAAAAAGBFBEAgAyEEDAELIAYgAyADIAZdGyEECyAAQRRqIgAgASACIAUQOCAAIAEgAhAwkiAAIAEgAiAFEDcgACABIAIQL5KSIgMgBCADIAReGyADIAQgBCAEXBsgBCAEWyADIANbcRsLvwEBA38gAC0AAEEgcUUEQAJAIAEhAwJAIAIgACIBKAIQIgAEfyAABSABEJ0BDQEgASgCEAsgASgCFCIFa0sEQCABIAMgAiABKAIkEQYAGgwCCwJAIAEoAlBBAEgNACACIQADQCAAIgRFDQEgAyAEQQFrIgBqLQAAQQpHDQALIAEgAyAEIAEoAiQRBgAgBEkNASADIARqIQMgAiAEayECIAEoAhQhBQsgBSADIAIQKxogASABKAIUIAJqNgIUCwsLCwYAIAAQIwtQAAJAAkACQAJAAkAgAg4EBAABAgMLIAAgASABQQxqEEMPCyAAIAEgAUEMaiADEEQPCyAAIAEgAUEMahBCDwsQJAALIAAgASABQQxqIAMQRQttAQF/IwBBgAJrIgUkACAEQYDABHEgAiADTHJFBEAgBSABQf8BcSACIANrIgNBgAIgA0GAAkkiARsQKhogAUUEQANAIAAgBUGAAhAmIANBgAJrIgNB/wFLDQALCyAAIAUgAxAmCyAFQYACaiQAC/ICAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIBNgIAIAMgAiAEa0F8cSIEaiICQQRrIAE2AgAgBEEJSQ0AIAMgATYCCCADIAE2AgQgAkEIayABNgIAIAJBDGsgATYCACAEQRlJDQAgAyABNgIYIAMgATYCFCADIAE2AhAgAyABNgIMIAJBEGsgATYCACACQRRrIAE2AgAgAkEYayABNgIAIAJBHGsgATYCACAEIANBBHFBGHIiBGsiAkEgSQ0AIAGtQoGAgIAQfiEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkEgayICQR9LDQALCyAAC4AEAQN/IAJBgARPBEAgACABIAIQFyAADwsgACACaiEDAkAgACABc0EDcUUEQAJAIABBA3FFBEAgACECDAELIAJFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAtIAQF/IwBBEGsiBCQAIAQgAzYCDAJAIABFBEBBAEEAIAEgAiAEKAIMEHEMAQsgACgC9AMgACABIAIgBCgCDBBxCyAEQRBqJAALkwECAX0BfyMAQRBrIgYkACAGQQhqIABB6ABqIAAgAkEBdGovAWIQH0MAAMB/IQUCQAJAAkAgBi0ADEEBaw4CAAECCyAGKgIIIQUMAQsgBioCCCADlEMK1yM8lCEFCyAALQADQRB0QYCAwABxBEAgBSAAIAEgAiAEEFQiA0MAAAAAIAMgA1sbkiEFCyAGQRBqJAAgBQu1AQECfyAAKAIEQQFqIgEgACgCACICKALsAyACKALoAyICa0ECdU8EQANAIAAoAggiAUUEQCAAQQA2AgggAEIANwIADwsgACABKAIENgIAIAAgASgCCDYCBCAAIAEoAgA2AgggARAjIAAoAgRBAWoiASAAKAIAIgIoAuwDIAIoAugDIgJrQQJ1Tw0ACwsgACABNgIEIAIgAUECdGooAgAtABdBEHRBgIAwcUGAgCBGBEAgABB9CwuBAQIBfwF9IwBBEGsiAyQAIANBCGogAEEDIAJBAkdBAXQgAUH+AXFBAkcbIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC4EBAgF/AX0jAEEQayIDJAAgA0EIaiAAQQEgAkECRkEBdCABQf4BcUECRxsgAhBTQwAAwH8hBAJAAkACQCADLQAMQQFrDgIAAQILIAMqAgghBAwBCyADKgIIQwAAAACUQwrXIzyUIQQLIANBEGokACAEQwAAAACXQwAAAAAgBCAEWxsLeAICfQF/IAAgAkEDdGoiByoC+AMhBkMAAMB/IQUCQAJAAkAgBy0A/ANBAWsOAgABAgsgBiEFDAELIAYgA5RDCtcjPJQhBQsgAC0AF0EQdEGAgMAAcQR9IAUgAEEUaiABIAIgBBBUIgNDAAAAACADIANbG5IFIAULC1EBAX8CQCABKALoAyICIAEoAuwDRwRAIABCADcCBCAAIAE2AgAgAigCAC0AF0EQdEGAgDBxQYCAIEcNASAAEH0PCyAAQgA3AgAgAEEANgIICwvoAgECfwJAIAAgAUYNACABIAAgAmoiBGtBACACQQF0a00EQCAAIAEgAhArDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkEBayECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkEBayICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQQRrIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkEBayICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AA0AgAyABKAIANgIAIAFBBGohASADQQRqIQMgAkEEayICQQNLDQALCyACRQ0AA0AgAyABLQAAOgAAIANBAWohAyABQQFqIQEgAkEBayICDQALCyAAC5QCAgF8AX8CQCAAIAGiIgAQbCIERAAAAAAAAPA/oCAEIAREAAAAAAAAAABjGyIEIARiIgUgBJlELUMc6+I2Gj9jRXJFBEAgACAEoSEADAELIAUgBEQAAAAAAADwv6CZRC1DHOviNho/Y0VyRQRAIAAgBKFEAAAAAAAA8D+gIQAMAQsgACAEoSEAIAIEQCAARAAAAAAAAPA/oCEADAELIAMNACAAAnxEAAAAAAAAAAAgBQ0AGkQAAAAAAADwPyAERAAAAAAAAOA/ZA0AGkQAAAAAAADwP0QAAAAAAAAAACAERAAAAAAAAOC/oJlELUMc6+I2Gj9jGwugIQALIAAgAGIgASABYnIEQEMAAMB/DwsgACABo7YLkwECAX0BfyMAQRBrIgYkACAGQQhqIABB6ABqIAAgAkEBdGovAV4QH0MAAMB/IQUCQAJAAkAgBi0ADEEBaw4CAAECCyAGKgIIIQUMAQsgBioCCCADlEMK1yM8lCEFCyAALQADQRB0QYCAwABxBEAgBSAAIAEgAiAEEFQiA0MAAAAAIAMgA1sbkiEFCyAGQRBqJAAgBQtQAAJAAkACQAJAAkAgAg4EBAABAgMLIAAgASABQR5qEEMPCyAAIAEgAUEeaiADEEQPCyAAIAEgAUEeahBCDwsQJAALIAAgASABQR5qIAMQRQt+AgF/AX0jAEEQayIEJAAgBEEIaiAAQQMgAkECR0EBdCABQf4BcUECRxsgAhBQQwAAwH8hBQJAAkACQCAELQAMQQFrDgIAAQILIAQqAgghBQwBCyAEKgIIIAOUQwrXIzyUIQULIARBEGokACAFQwAAAACXQwAAAAAgBSAFWxsLfgIBfwF9IwBBEGsiBCQAIARBCGogAEEBIAJBAkZBAXQgAUH+AXFBAkcbIAIQUEMAAMB/IQUCQAJAAkAgBC0ADEEBaw4CAAECCyAEKgIIIQUMAQsgBCoCCCADlEMK1yM8lCEFCyAEQRBqJAAgBUMAAAAAl0MAAAAAIAUgBVsbC08AAkACQAJAIANB/wFxIgMOBAACAgECCyABIAEvAABB+P8DcTsAAA8LIAEgAS8AAEH4/wNxQQRyOwAADwsgACABIAJBAUECIANBAUYbEEwLNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEBAAtiAgJ9An8CQCAAKALkA0UNACAAQfwAaiIDIABBGmoiBC8BABAgIgIgAlwEQCADIABBGGoiBC8BABAgIgIgAlwNASADIAAvARgQIEMAAAAAXkUNAQsgAyAELwEAECAhAQsgAQtfAQN/IAEEQEEMEB4iAyABKQIENwIEIAMhAiABKAIAIgEEQCADIQQDQEEMEB4iAiABKQIENwIEIAQgAjYCACACIQQgASgCACIBDQALCyACIAAoAgA2AgAgACADNgIACwvXawMtfxx9AX4CfwJAIAAtAABBBHEEQCAAKAKgASAMRw0BCyAAKAKkASAAKAL0AygCDEcNAEEAIAAtAKgBIANGDQEaCyAAQoCAgPyLgIDAv383AoADIABCgYCAgBA3AvgCIABCgICA/IuAgMC/fzcC8AIgAEEANgKsAUEBCyErAkACQAJAAkAgACgCCARAIABBFGoiDkECQQEgBhAiIT4gDkECQQEgBhAhITwgDkEAQQEgBhAiITsgDkEAQQEgBhAhIUAgBCABIAUgAiAAKAL4AiAAQfACaiIOKgIAIAAoAvwCIAAqAvQCIAAqAoADIAAqAoQDID4gPJIiPiA7IECSIjwgACgC9AMiEBB7DQEgACgCrAEiEUUNAyAAQbABaiETA0AgBCABIAUgAiATIB1BGGxqIg4oAgggDioCACAOKAIMIA4qAgQgDioCECAOKgIUID4gPCAQEHsNAiAdQQFqIh0gEUcNAAsMAgsgCEUEQCAAKAKsASITRQ0CIABBsAFqIRADQAJAAkAgECAdQRhsIhFqIg4qAgAiPiA+XCABIAFcckUEQCA+IAGTi0MXt9E4XQ0BDAILIAEgAVsgPiA+W3INAQsCQCAQIBFqIhEqAgQiPiA+XCACIAJcckUEQCA+IAKTi0MXt9E4XQ0BDAILIAIgAlsgPiA+W3INAQsgESgCCCAERw0AIBEoAgwgBUYNAwsgEyAdQQFqIh1HDQALDAILAkAgAEHwAmoiDioCACI+ID5cIAEgAVxyRQRAID4gAZOLQxe30ThdDQEMBAsgASABWyA+ID5bcg0DCyAOQQAgACgC/AIgBUYbQQAgACgC+AIgBEYbQQACfyACIAJcIg4gACoC9AIiPiA+XHJFBEAgPiACk4tDF7fROF0MAQtBACA+ID5bDQAaIA4LGyEOCyAORSArcgRAIA4hHQwCCyAAIA4qAhA4ApQDIAAgDioCFDgCmAMgCkEMQRAgCBtqIgMgAygCAEEBajYCACAOIR0MAgtBACEdCyAGIUAgByFHIAtBAWohIiMAQaABayINJAACQAJAIARBAUYgASABW3JFBEAgDUGqCzYCICAAQQVB2CUgDUEgahAsDAELIAVBAUYgAiACW3JFBEAgDUHZCjYCECAAQQVB2CUgDUEQahAsDAELIApBAEEEIAgbaiILIAsoAgBBAWo2AgAgACAALQCIA0H8AXEgAC0AFEEDcSILIANBASADGyIsIAsbIg9BA3FyOgCIAyAAQawDaiIQIA9BAUdBA3QiC2ogAEEUaiIUQQNBAiAPQQJGGyIRIA8gQBAiIgY4AgAgECAPQQFGQQN0Ig5qIBQgESAPIEAQISIHOAIAIAAgFEEAIA8gQBAiIjw4ArADIAAgFEEAIA8gQBAhIjs4ArgDIABBvANqIhAgC2ogFCARIA8QMDgCACAOIBBqIBQgESAPEC84AgAgACAUQQAgDxAwOALAAyAAIBRBACAPEC84AsgDIAsgAEHMA2oiC2ogFCARIA8gQBA4OAIAIAsgDmogFCARIA8gQBA3OAIAIAAgFEEAIA8gQBA4OALQAyAAIBRBACAPIEAQNyI6OALYAyAGIAeSIT4gPCA7kiE8AkACQCAAKAIIIgsEQEMAAMB/IAEgPpMgBEEBRhshBkMAAMB/IAIgPJMgBUEBRhshPiAAAn0gBCAFckUEQCAAIABBAiAPIAYgQCBAECU4ApQDIABBACAPID4gRyBAECUMAQsgBEEDTyAFQQNPcg0EIA1BiAFqIAAgBiAGIAAqAswDIAAqAtQDkiAAKgK8A5IgACoCxAOSIjyTIgdDAAAAACAHQwAAAABeGyAGIAZcG0GBgAggBEEDdEH4//8HcXZB/wFxID4gPiAAKgLQAyA6kiAAKgLAA5IgACoCyAOSIjuTIgdDAAAAACAHQwAAAABeGyA+ID5cG0GBgAggBUEDdEH4//8HcXZB/wFxIAsREAAgDSoCjAEiPUMAAAAAYCANKgKIASIHQwAAAABgcUUEQCANID27OQMIIA0gB7s5AwAgAEEBQdwdIA0QLCANKgKMASIHQwAAAAAgB0MAAAAAXhshPSANKgKIASIHQwAAAAAgB0MAAAAAXhshBwsgCiAKKAIUQQFqNgIUIAogCUECdGoiCSAJKAIYQQFqNgIYIAAgAEECIA8gPCAHkiAGIARBAWtBAkkbIEAgQBAlOAKUAyAAQQAgDyA7ID2SID4gBUEBa0ECSRsgRyBAECULOAKYAwwBCwJAIAAoAuADRQRAIAAoAuwDIAAoAugDa0ECdSELDAELIA1BiAFqIAAQMgJAIA0oAogBRQRAQQAhCyANKAKMAUUNAQsgDUGAAWohEEEAIQsDQCANQQA2AoABIA0gDSkDiAE3A3ggECANKAKQARA8IA1BiAFqEC4gDSgCgAEiCQRAA0AgCSgCACEOIAkQJyAOIgkNAAsLIAtBAWohCyANQQA2AoABIA0oAowBIA0oAogBcg0ACwsgDSgCkAEiCUUNAANAIAkoAgAhDiAJECcgDiIJDQALCyALRQRAIAAgAEECIA8gBEEBa0EBSwR9IAEgPpMFIAAqAswDIAAqAtQDkiAAKgK8A5IgACoCxAOSCyBAIEAQJTgClAMgACAAQQAgDyAFQQFrQQFLBH0gAiA8kwUgACoC0AMgACoC2AOSIAAqAsADkiAAKgLIA5ILIEcgQBAlOAKYAwwBCwJAIAgNACAFQQJGIAIgPJMiBiAGW3EgBkMAAAAAX3EgBCAFckUgBEECRiABID6TIgdDAAAAAF9xcnJFDQAgACAAQQIgD0MAAAAAQwAAAAAgByAHQwAAAABdGyAHIARBAkYbIAcgB1wbIEAgQBAlOAKUAyAAIABBACAPQwAAAABDAAAAACAGIAZDAAAAAF0bIAYgBUECRhsgBiAGXBsgRyBAECU4ApgDDAELIAAQTyAAIAAtAIgDQfsBcToAiAMgABBeQQMhEyAALQAUQQJ2QQNxIQkCQAJAIA9BAkcNAAJAIAlBAmsOAgIAAQtBAiETDAELIAkhEwsgAC8AFSEnIBQgEyAPIEAQOCEGIBQgEyAPEDAhByAUIBMgDyBAEDchOyAUIBMgDxAvITpBACEQIBQgEUEAIBNBAkkbIhYgDyBAEDghPyAUIBYgDxAwIT0gFCAWIA8gQBA3IUEgFCAWIA8QLyFEIBQgFiAPIEAQYCFCIBQgFiAPEEshQyAAIA9BACABID6TIlAgBiAHkiA7IDqSkiJKID8gPZIgQSBEkpIiRiATQQFLIhkbIEAgQBB6ITsgACAPQQEgAiA8kyJRIEYgSiAZGyBHIEAQeiFFAkACQCAEIAUgGRsiHA0AIA1BiAFqIAAQMgJAAkAgDSgCiAEiDiANKAKMASIJckUNAANAIA4oAuwDIA4oAugDIg5rQQJ1IAlNDQQCQCAOIAlBAnRqKAIAIgkQeUUNACAQDQIgCRA7IgYgBlsgBotDF7fROF1xDQIgCRBAIgYgBlwEQCAJIRAMAQsgCSEQIAaLQxe30ThdDQILIA1BiAFqEC4gDSgCjAEiCSANKAKIASIOcg0ACwwBC0EAIRALIA0oApABIglFDQADQCAJKAIAIQ4gCRAnIA4iCQ0ACwsgDUGIAWogABAyIA0oAowBIQkCQCANKAKIASIORQRAQwAAAAAhPSAJRQ0BCyBFIEVcIiMgBUEAR3IhKCA7IDtcIiQgBEEAR3IhKUMAAAAAIT0DQCAOKALsAyAOKALoAyIOa0ECdSAJTQ0CIA4gCUECdGooAgAiDhB4AkAgDi8AFSAOLQAXQRB0ciIJQYCAMHFBgIAQRgRAIA4QdyAOIA4tAAAiCUEBciIOQfsBcSAOIAlBBHEbOgAADAELIAgEfyAOIA4tABRBA3EiCSAPIAkbIDsgRRB2IA4vABUgDi0AF0EQdHIFIAkLQYDgAHFBgMAARg0AIA5BFGohEQJAIA4gEEYEQCAQQQA2ApwBIBAgDDYCmAFDAAAAACEHDAELIBQtAABBAnZBA3EhCQJAAkAgD0ECRw0AQQMhEgJAIAlBAmsOAgIAAQtBAiESDAELIAkhEgsgDUGAgID+BzYCaCANQYCAgP4HNgJQIA1B+ABqIA5B/ABqIhcgDi8BHhAfIDsgRSASQQFLIh4bIT4CQAJAAkACQCANLQB8IgkOBAABAQABCwJAIBcgDi8BGBAgIgYgBlwNACAXIA4vARgQIEMAAAAAXkUNACAOKAL0Ay0ACEEBcSIJDQBDAADAf0MAAAAAIAkbIQcMAgtDAADAfyEGDAILIA0qAnghB0MAAMB/IQYCQCAJQQFrDgIBAAILIAcgPpRDCtcjPJQhBgwBCyAHIQYLIA4tABdBEHRBgIDAAHEEQCAGIBEgD0GBAiASQQN0dkEBcSA7EFQiBkMAAAAAIAYgBlsbkiEGCyAOKgL4AyEHQQAhH0EAIRgCQAJAAkAgDi0A/ANBAWsOAgEAAgsgOyAHlEMK1yM8lCEHCyAHIAdcDQAgB0MAAAAAYCEYCyAOKgKABCEHAkACQAJAIA4tAIQEQQFrDgIBAAILIEUgB5RDCtcjPJQhBwsgByAHXA0AIAdDAAAAAGAhHwsCQCAOAn0gBiAGXCIJID4gPlxyRQRAIA4qApwBIgcgB1sEQCAOKAL0Ay0AEEEBcUUNAyAOKAKYASAMRg0DCyARIBIgDyA7EDggESASIA8QMJIgESASIA8gOxA3IBEgEiAPEC+SkiIHIAYgBiAHXRsgByAGIAkbIAYgBlsgByAHW3EbDAELIBggHnEEQCARQQIgDyA7EDggEUECIA8QMJIgEUECIA8gOxA3IBFBAiAPEC+SkiIHIA4gD0EAIDsgOxAxIgYgBiAHXRsgByAGIAYgBlwbIAYgBlsgByAHW3EbDAELIB4gH0VyRQRAIBFBACAPIDsQOCARQQAgDxAwkiARQQAgDyA7EDcgEUEAIA8QL5KSIgcgDiAPQQEgRSA7EDEiBiAGIAddGyAHIAYgBiAGXBsgBiAGWyAHIAdbcRsMAQtBASEaIA1BATYCZCANQQE2AnggEUECQQEgOxAiIBFBAkEBIDsQIZIhPiARQQBBASA7ECIhPCARQQBBASA7ECEhOkMAAMB/IQdBASEVQwAAwH8hBiAYBEAgDiAPQQAgOyA7EDEhBiANQQA2AnggDSA+IAaSIgY4AmhBACEVCyA8IDqSITwgHwRAIA4gD0EBIEUgOxAxIQcgDUEANgJkIA0gPCAHkiIHOAJQQQAhGgsCQAJAAkAgAC0AF0EQdEGAgAxxQYCACEYiCSASQQJJIiBxRQRAIAkgJHINAiAGIAZcDQEMAgsgJCAGIAZbcg0CC0ECIRUgDUECNgJ4IA0gOzgCaCA7IQYLAkAgIEEBIAkbBEAgCSAjcg0CIAcgB1wNAQwCCyAjIAcgB1tyDQELQQIhGiANQQI2AmQgDSBFOAJQIEUhBwsCQCAXIA4vAXoQICI6IDpcDQACfyAVIB5yRQRAIBcgDi8BehAgIQcgDUEANgJkIA0gPCAGID6TIAeVkjgCUEEADAELIBogIHINASAXIA4vAXoQICEGIA1BADYCeCANIAYgByA8k5QgPpI4AmhBAAshGkEAIRULIA4vABZBD3EiCUUEQCAALQAVQQR2IQkLAkAgFUUgCUEFRiAeciAYIClyIAlBBEdycnINACANQQA2AnggDSA7OAJoIBcgDi8BehAgIgYgBlwNAEEAIRogFyAOLwF6ECAhBiANQQA2AmQgDSA7ID6TIAaVOAJQCyAOLwAWQQ9xIhhFBEAgAC0AFUEEdiEYCwJAICAgKHIgH3IgGEEFRnIgGkUgGEEER3JyDQAgDUEANgJkIA0gRTgCUCAXIA4vAXoQICIGIAZcDQAgFyAOLwF6ECAhBiANQQA2AnggDSAGIEUgPJOUOAJoCyAOIA9BAiA7IDsgDUH4AGogDUHoAGoQPyAOIA9BACBFIDsgDUHkAGogDUHQAGoQPyAOIA0qAmggDSoCUCAPIA0oAnggDSgCZCA7IEVBAEEFIAogIiAMED0aIA4gEkECdEH8JWooAgBBAnRqKgKUAyEGIBEgEiAPIDsQOCARIBIgDxAwkiARIBIgDyA7EDcgESASIA8QL5KSIgcgBiAGIAddGyAHIAYgBiAGXBsgBiAGWyAHIAdbcRsLIgc4ApwBCyAOIAw2ApgBCyA9IAcgESATQQEgOxAiIBEgE0EBIDsQIZKSkiE9CyANQYgBahAuIA0oAowBIgkgDSgCiAEiDnINAAsLIA0oApABIgkEQANAIAkoAgAhDiAJECcgDiIJDQALCyA7IEUgGRshByA9QwAAAACSIQYgC0ECTwRAIBQgEyAHEE0gC0EBa7OUIAaSIQYLIEIgQ5IhPiAFIAQgGRshGiBHIEAgGRshTSBAIEcgGRshSSANQdAAaiAAEDJBACAcIAYgB14iCxsgHCAcQQJGGyAcICdBgIADcSIfGyEeIBQgFiBFIDsgGRsiRBBNIU8gDSgCVCIRIA0oAlAiCXIEQEEBQQIgRCBEXCIpGyEtIAtFIBxBAUZyIS4gE0ECSSEZIABB8gBqIS8gAEH8AGohMCATQQJ0IgtB7CVqITEgC0HcJWohMiAWQQJ0Ig5B7CVqIRwgDkHcJWohICALQfwlaiEkIA5B/CVqISMgGkEARyIzIAhyITQgGkUiNSAIQQFzcSE2IBogH3JFITcgDUHwAGohOCANQYABaiEnQYECIBNBA3R2Qf8BcSEoIBpBAWtBAkkhOQNAIA1BADYCgAEgDUIANwN4AkAgACgC7AMiCyAAKALoAyIORg0AIAsgDmsiC0EASA0DIA1BiAFqIAtBAnVBACAnEEohECANKAKMASANKAJ8IA0oAngiC2siDmsgCyAOEDMhDiANIA0oAngiCzYCjAEgDSAONgJ4IA0pA5ABIVYgDSANKAJ8Ig42ApABIA0oAoABIRIgDSBWNwJ8IA0gEjYClAEgECALNgIAIAsgDkcEQCANIA4gCyAOa0EDakF8cWo2ApABCyALRQ0AIAsQJwsgFC0AACIOQQJ2QQNxIQsCQAJAIA5BA3EiDiAsIA4bIhJBAkcNAEEDIRACQCALQQJrDgICAAELQQIhEAwBCyALIRALIAAvABUhCyAUIBAgBxBNIT8CQCAJIBFyRQRAQwAAAAAhQ0EAIRFDAAAAACFCQwAAAAAhQUEAIRUMAQsgC0GAgANxISUgEEECSSEYIBBBAnQiC0HsJWohISALQdwlaiEqQQAhFUMAAAAAIUEgESEOQwAAAAAhQkMAAAAAIUNBACEXQwAAAAAhPQNAIAkoAuwDIAkoAugDIglrQQJ1IA5NDQQCQCAJIA5BAnRqKAIAIgkvABUgCS0AF0EQdHIiC0GAgDBxQYCAEEYgC0GA4ABxQYDAAEZyDQAgDUGIAWoiESAJQRRqIgsgKigCACADECggDS0AjAEhJiARIAsgISgCACADECggDS0AjAEhESAJIBs2AtwDIBUgJkEDRmohFSARQQNGIREgCyAQQQEgOxAiIUsgCyAQQQEgOxAhIU4gCSAXIAkgFxsiF0YhJiAJKgKcASE8IAsgEiAYIEkgQBA1IToCQCALIBIgGCBJIEAQLSIGQwAAAABgIAYgPF1xDQAgOkMAAAAAYEUEQCA8IQYMAQsgOiA8IDogPF4bIQYLIBEgFWohFQJAICVFQwAAAAAgPyAmGyI8IEsgTpIiOiA9IAaSkpIgB15Fcg0AIA0oAnggDSgCfEYNACAOIREMAwsgCRB5BEAgQiAJEDuSIUIgQyAJEEAgCSoCnAGUkyFDCyBBIDwgOiAGkpIiBpIhQSA9IAaSIT0gDSgCfCILIA0oAoABRwRAIAsgCTYCACANIAtBBGo2AnwMAQsgCyANKAJ4ayILQQJ1IhFBAWoiDkGAgICABE8NBSANQYgBakH/////AyALQQF1IiYgDiAOICZJGyALQfz///8HTxsgESAnEEohDiANKAKQASAJNgIAIA0gDSgCkAFBBGo2ApABIA0oAowBIA0oAnwgDSgCeCIJayILayAJIAsQMyELIA0gDSgCeCIJNgKMASANIAs2AnggDSkDkAEhViANIA0oAnwiCzYCkAEgDSgCgAEhESANIFY3AnwgDSARNgKUASAOIAk2AgAgCSALRwRAIA0gCyAJIAtrQQNqQXxxajYCkAELIAlFDQAgCRAnCyANQQA2AnAgDSANKQNQNwNoIDggDSgCWBA8IA1B0ABqEC4gDSgCcCIJBEADQCAJKAIAIQsgCRAnIAsiCQ0ACwtBACERIA1BADYCcCANKAJUIg4gDSgCUCIJcg0ACwtDAACAPyBCIEJDAACAP10bIEIgQkMAAAAAXhshPCANKAJ8IRcgDSgCeCEJAn0CQAJ9AkACQAJAIB5FDQAgFCAPQQAgQCBAEDUhBiAUIA9BACBAIEAQLSE6IBQgD0EBIEcgQBA1IT8gFCAPQQEgRyBAEC0hPSAGID8gE0EBSyILGyBKkyIGIAZbIAYgQV5xDQEgOiA9IAsbIEqTIgYgBlsgBiBBXXENASAAKAL0Ay0AFEEBcQ0AIEEgPEMAAAAAWw0DGiAAEDsiBiAGXA0CIEEgABA7QwAAAABbDQMaDAILIAchBgsgBiAGWw0CIAYhBwsgBwshBiBBjEMAAAAAIEFDAAAAAF0bIT8gBgwBCyAGIEGTIT8gBgshByA2RQRAAkAgCSAXRgRAQwAAAAAhQQwBC0MAAIA/IEMgQ0MAAIA/XRsgQyBDQwAAAABeGyE9QwAAAAAhQSAJIQ4DQCAOKAIAIgsqApwBITogC0EUaiIQIA8gGSBJIEAQNSFCAkAgECAPIBkgSSBAEC0iBkMAAAAAYCAGIDpdcQ0AIEJDAAAAAGBFBEAgOiEGDAELIEIgOiA6IEJdGyEGCwJAID9DAAAAAF0EQCAGIAsQQIyUIjpDAAAAAF4gOkMAAAAAXXJFDQEgCyATIA8gPyA9lSA6lCAGkiJCIAcgOxAlITogQiBCXCA6IDpcciA6IEJbcg0BIEEgOiAGk5IhQSALEEAgCyoCnAGUID2SIT0MAQsgP0MAAAAAXkUNACALEDsiQkMAAAAAXiBCQwAAAABdckUNACALIBMgDyA/IDyVIEKUIAaSIkMgByA7ECUhOiBDIENcIDogOlxyIDogQ1tyDQAgPCBCkyE8IEEgOiAGk5IhQQsgDkEEaiIOIBdHDQALID8gQZMiQiA9lSFLIEIgPJUhTiAALwAVQYCAA3FFIC5yISVDAAAAACFBIAkhCwNAIAsoAgAiDioCnAEhPCAOQRRqIhggDyAZIEkgQBA1IToCQCAYIA8gGSBJIEAQLSIGQwAAAABgIAYgPF1xDQAgOkMAAAAAYEUEQCA8IQYMAQsgOiA8IDogPF4bIQYLAn0gDiATIA8CfSBCQwAAAABdBEAgBiAGIA4QQIyUIjxDAAAAAFsNAhogBiA8kiA9QwAAAABbDQEaIEsgPJQgBpIMAQsgBiBCQwAAAABeRQ0BGiAGIA4QOyI8QwAAAABeIDxDAAAAAF1yRQ0BGiBOIDyUIAaSCyAHIDsQJQshQyAYIBNBASA7ECIhPCAYIBNBASA7ECEhOiAYIBZBASA7ECIhUiAYIBZBASA7ECEhUyANIEMgPCA6kiJUkiJVOAJoIA1BADYCYCBSIFOSITwCQCAOQfwAaiIQIA4vAXoQICI6IDpbBEAgECAOLwF6ECAhOiANQQA2AmQgDSA8IFUgVJMiPCA6lCA8IDqVIBkbkjgCeAwBCyAjKAIAIRACQCApDQAgDiAQQQN0aiIhKgL4AyE6QQAhEgJAAkACQCAhLQD8A0EBaw4CAQACCyBEIDqUQwrXIzyUIToLIDogOlwNACA6QwAAAABgIRILICUgNSASQQFzcXFFDQAgDi8AFkEPcSISBH8gEgUgAC0AFUEEdgtBBEcNACANQYgBaiAYICAoAgAgDxAoIA0tAIwBQQNGDQAgDUGIAWogGCAcKAIAIA8QKCANLQCMAUEDRg0AIA1BADYCZCANIEQ4AngMAQsgDkH4A2oiEiAQQQN0aiIQKgIAIToCQAJAAkACQCAQLQAEQQFrDgIBAAILIEQgOpRDCtcjPJQhOgsgOkMAAAAAYA0BCyANIC02AmQgDSBEOAJ4DAELAkACfwJAAkACQCAWQQJrDgICAAELIDwgDiAPQQAgRCA7EDGSITpBAAwCC0EBIRAgDSA8IA4gD0EBIEQgOxAxkiI6OAJ4IBNBAU0NDAwCCyA8IA4gD0EAIEQgOxAxkiE6QQALIRAgDSA6OAJ4CyANIDMgEiAQQQN0ajEABEIghkKAgICAIFFxIDogOlxyNgJkCyAOIA8gEyAHIDsgDUHgAGogDUHoAGoQPyAOIA8gFiBEIDsgDUHkAGogDUH4AGoQPyAOICMoAgBBA3RqIhAqAvgDIToCQAJAAkACQCAQLQD8A0EBaw4CAQACCyBEIDqUQwrXIzyUIToLQQEhECA6QwAAAABgDQELQQEhECAOLwAWQQ9xIhIEfyASBSAALQAVQQR2C0EERw0AIA1BiAFqIBggICgCACAPECggDS0AjAFBA0YNACANQYgBaiAYIBwoAgAgDxAoIA0tAIwBQQNGIRALIA4gDSoCaCI8IA0qAngiOiATQQFLIhIbIDogPCASGyAALQCIA0EDcSANKAJgIhggDSgCZCIhIBIbICEgGCASGyA7IEUgCCAQcSIQQQRBByAQGyAKICIgDBA9GiBBIEMgBpOSIUEgAAJ/IAAtAIgDIhBBBHFFBEBBACAOLQCIA0EEcUUNARoLQQQLIBBB+wFxcjoAiAMgC0EEaiILIBdHDQALCyA/IEGTIT8LIAAgAC0AiAMiC0H7AXFBBCA/QwAAAABdQQJ0IAtBBHFBAnYbcjoAiAMgFCATIA8gQBBgIBQgEyAPEEuSITogFCATIA8gQBB/IBQgEyAPEFKSIUsgFCATIAcQTSFCAn8CQAJ9ID9DAAAAAF5FIB5BAkdyRQRAIA1BiAFqIDAgLyAkKAIAQQF0ai8BABAfAkAgDS0AjAEEQCAUIA8gKCBJIEAQNSIGIAZbDQELQwAAAAAMAgtDAAAAACAUIA8gKCBJIEAQNSA6kyBLkyAHID+TkyI/QwAAAABeRQ0BGgsgP0MAAAAAYEUNASA/CyE8IBQtAABBBHZBB3EMAQsgPyE8IBQtAABBBHZBB3EiC0EAIAtBA2tBA08bCyELQwAAAAAhBgJAAkAgFQ0AQwAAAAAhPQJAAkACQAJAAkAgC0EBaw4FAAECBAMGCyA8QwAAAD+UIT0MBQsgPCE9DAQLIBcgCWsiC0EFSQ0CIEIgPCALQQJ1QQFrs5WSIUIMAgsgQiA8IBcgCWtBAnVBAWqzlSI9kiFCDAILIDxDAAAAP5QgFyAJa0ECdbOVIj0gPZIgQpIhQgwBC0MAAAAAIT0LIDogPZIhPSAAEHwhEgJAIAkgF0YiGARAQwAAAAAhP0MAAAAAIToMAQsgF0EEayElIDwgFbOVIU4gMigCACEhQwAAAAAhOkMAAAAAIT8gCSELA0AgDUGIAWogCygCACIOQRRqIhAgISAPECggPUMAAACAIE5DAAAAgCA8QwAAAABeGyJBIA0tAIwBQQNHG5IhPSAIBEACfwJAAkACQAJAIBNBAWsOAwECAwALQQEhFSAOQaADagwDC0EDIRUgDkGoA2oMAgtBACEVIA5BnANqDAELQQIhFSAOQaQDagshKiAOIBVBAnRqICoqAgAgPZI4ApwDCyAlKAIAIRUgDUGIAWogECAxKAIAIA8QKCA9QwAAAIAgQiAOIBVGG5JDAAAAgCBBIA0tAIwBQQNHG5IhPQJAIDRFBEAgPSAQIBNBASA7ECIgECATQQEgOxAhkiAOKgKcAZKSIT0gRCEGDAELIA4gEyA7EF0gPZIhPSASBEAgDhBOIUEgEEEAIA8gOxBBIUMgDioCmAMgEEEAQQEgOxAiIBBBAEEBIDsQIZKSIEEgQ5IiQZMiQyA/ID8gQ10bIEMgPyA/ID9cGyA/ID9bIEMgQ1txGyE/IEEgOiA6IEFdGyBBIDogOiA6XBsgOiA6WyBBIEFbcRshOgwBCyAOIBYgOxBdIkEgBiAGIEFdGyBBIAYgBiAGXBsgBiAGWyBBIEFbcRshBgsgC0EEaiILIBdHDQALCyA/IDqSIAYgEhshQQJ9IDkEQCAAIBYgDyBGIEGSIE0gQBAlIEaTDAELIEQgQSA3GyFBIEQLIT8gH0UEQCAAIBYgDyBGIEGSIE0gQBAlIEaTIUELIEsgPZIhPAJAIAhFDQAgCSELIBgNAANAIAsoAgAiFS8AFkEPcSIORQRAIAAtABVBBHYhDgsCQAJAAkACQCAOQQRrDgIAAQILIA1BiAFqIBVBFGoiECAgKAIAIA8QKEEEIQ4gDS0AjAFBA0YNASANQYgBaiAQIBwoAgAgDxAoIA0tAIwBQQNGDQEgFSAjKAIAQQN0aiIOKgL4AyE9AkACQAJAIA4tAPwDQQFrDgIBAAILIEQgPZRDCtcjPJQhPQsgPiEGID1DAAAAAGANAwsgFSAkKAIAQQJ0aioClAMhBiANIBVB/ABqIg4gFS8BehAgIjogOlsEfSAQIBZBASA7ECIgECAWQQEgOxAhkiAGIA4gFS8BehAgIjqUIAYgOpUgGRuSBSBBCzgCeCANIAYgECATQQEgOxAiIBAgE0EBIDsQIZKSOAKIASANQQA2AmggDUEANgJkIBUgDyATIAcgOyANQegAaiANQYgBahA/IBUgDyAWIEQgOyANQeQAaiANQfgAahA/IA0qAngiOiANKgKIASI9IBNBAUsiGCIOGyEGIB9BAEcgAC8AFUEPcUEER3EiECAZcSA9IDogDhsiOiA6XHIhDiAVIDogBiAPIA4gECAYcSAGIAZcciA7IEVBAUECIAogIiAMED0aID4hBgwCC0EFQQEgFC0AAEEIcRshDgsgFSAWIDsQXSEGIA1BiAFqIBVBFGoiECAgKAIAIhggDxAoID8gBpMhOgJAIA0tAIwBQQNHBEAgHCgCACESDAELIA1BiAFqIBAgHCgCACISIA8QKCANLQCMAUEDRw0AID4gOkMAAAA/lCIGQwAAAAAgBkMAAAAAXhuSIQYMAQsgDUGIAWogECASIA8QKCA+IQYgDS0AjAFBA0YNACANQYgBaiAQIBggDxAoIA0tAIwBQQNGBEAgPiA6QwAAAAAgOkMAAAAAXhuSIQYMAQsCQAJAIA5BAWsOAgIAAQsgPiA6QwAAAD+UkiEGDAELID4gOpIhBgsCfwJAAkACQAJAIBZBAWsOAwECAwALQQEhECAVQaADagwDC0EDIRAgFUGoA2oMAgtBACEQIBVBnANqDAELQQIhECAVQaQDagshDiAVIBBBAnRqIAYgTCAOKgIAkpI4ApwDIAtBBGoiCyAXRw0ACwsgCQRAIAkQJwsgPCBIIDwgSF4bIDwgSCBIIEhcGyBIIEhbIDwgPFtxGyFIIEwgT0MAAAAAIBsbIEGSkiFMIBtBAWohGyANKAJQIgkgEXINAAsLAkAgCEUNACAfRQRAIAAQfEUNAQsgACAWIA8CfSBGIESSIBpFDQAaIAAgFkECdEH8JWooAgBBA3RqIgkqAvgDIQYCQAJAAkAgCS0A/ANBAWsOAgEAAgsgTSAGlEMK1yM8lCEGCyAGQwAAAABgRQ0AIAAgD0GBAiAWQQN0dkEBcSBNIEAQMQwBCyBGIEySCyBHIEAQJSEGQwAAAAAhPCAALwAVQQ9xIQkCQAJAAkACQAJAAkACQAJAAkAgBiBGkyBMkyIGQwAAAABgRQRAQwAAAAAhQyAJQQJrDgICAQcLQwAAAAAhQyAJQQJrDgcBAAUGBAIDBgsgPiAGkiE+DAULID4gBkMAAAA/lJIhPgwECyAGIBuzIjqVITwgPiAGIDogOpKVkiE+DAMLID4gBiAbQQFqs5UiPJIhPgwCCyAbQQJJBEAMAgsgDUGIAWogABAyIAYgG0EBa7OVITwMAgsgBiAbs5UhQwsgDUGIAWogABAyIBtFDQELIBZBAnQiCUHcJWohECAJQfwlaiERIA1BOGohGCANQcgAaiEZIA1B8ABqIRUgDUGQAWohHCANQYABaiEfQQAhEgNAIA1BADYCgAEgDSANKQOIATcDeCAfIA0oApABEDwgDUEANgJwIA0gDSkDeCJWNwNoIBUgDSgCgAEiCxA8IA0oAmwhCQJAAkAgDSgCaCIOBEBDAAAAACE6QwAAAAAhP0MAAAAAIQYMAQtDAAAAACE6QwAAAAAhP0MAAAAAIQYgCUUNAQsDQCAOKALsAyAOKALoAyIOa0ECdSAJTQ0FAkAgDiAJQQJ0aigCACIJLwAVIAktABdBEHRyIhdBgIAwcUGAgBBGIBdBgOAAcUGAwABGcg0AIAkoAtwDIBJHDQIgCUEUaiEOIAkgESgCAEECdGoqApQDIj1DAAAAAGAEfyA9IA4gFkEBIDsQIiAOIBZBASA7ECGSkiI9IAYgBiA9XRsgPSAGIAYgBlwbIAYgBlsgPSA9W3EbIQYgCS0AFgUgF0EIdgtBD3EiFwR/IBcFIAAtABVBBHYLQQVHDQAgFC0AAEEIcUUNACAJEE4gDkEAIA8gOxBBkiI9ID8gPSA/XhsgPSA/ID8gP1wbID8gP1sgPSA9W3EbIj8gCSoCmAMgDkEAQQEgOxAiIA5BAEEBIDsQIZKSID2TIj0gOiA6ID1dGyA9IDogOiA6XBsgOiA6WyA9ID1bcRsiOpIiPSAGIAYgPV0bID0gBiAGIAZcGyAGIAZbID0gPVtxGyEGCyANQQA2AkggDSANKQNoNwNAIBkgDSgCcBA8IA1B6ABqEC4gDSgCSCIJBEADQCAJKAIAIQ4gCRAnIA4iCQ0ACwsgDUEANgJIIA0oAmwiCSANKAJoIg5yDQALCyANIA0pA2g3A4gBIBwgDSgCcBB1IA0gVjcDaCAVIAsQdSA+IE9DAAAAACASG5IhPiBDIAaSIT0gDSgCbCEJAkAgDSgCaCIOIA0oAogBRgRAIAkgDSgCjAFGDQELID4gP5IhQiA+ID2SIUsgPCA9kiEGA0AgDigC7AMgDigC6AMiDmtBAnUgCU0NBQJAIA4gCUECdGooAgAiCS8AFSAJLQAXQRB0ciIXQYCAMHFBgIAQRiAXQYDgAHFBgMAARnINACAJQRRqIQ4CQAJAAkACQAJAAkAgF0EIdkEPcSIXBH8gFwUgAC0AFUEEdgtBAWsOBQEDAgQABgsgFC0AAEEIcQ0ECyAOIBYgDyA7EFEhOiAJIBAoAgBBAnRqID4gOpI4ApwDDAQLIA4gFiAPIDsQYiE/AkACQAJAAkAgFkECaw4CAgABCyAJKgKUAyE6QQIhDgwCC0EBIQ4gCSoCmAMhOgJAIBYOAgIADwtBAyEODAELIAkqApQDITpBACEOCyAJIA5BAnRqIEsgP5MgOpM4ApwDDAMLAkACQAJAAkAgFkECaw4CAgABCyAJKgKUAyE/QQIhDgwCC0EBIQ4gCSoCmAMhPwJAIBYOAgIADgtBAyEODAELIAkqApQDIT9BACEOCyAJIA5BAnRqID4gPSA/k0MAAAA/lJI4ApwDDAILIA4gFiAPIDsQQSE6IAkgECgCAEECdGogPiA6kjgCnAMgCSARKAIAQQN0aiIXKgL4AyE/AkACQAJAIBctAPwDQQFrDgIBAAILIEQgP5RDCtcjPJQhPwsgP0MAAAAAYA0CCwJAAkACfSATQQFNBEAgCSoCmAMgDiAWQQEgOxAiIA4gFkEBIDsQIZKSITogBgwBCyAGITogCSoClAMgDiATQQEgOxAiIA4gE0EBIDsQIZKSCyI/ID9cIAkqApQDIkEgQVxyRQRAID8gQZOLQxe30ThdDQEMAgsgPyA/WyBBIEFbcg0BCyAJKgKYAyJBIEFcIg4gOiA6XHJFBEAgOiBBk4tDF7fROF1FDQEMAwsgOiA6Ww0AIA4NAgsgCSA/IDogD0EAQQAgOyBFQQFBAyAKICIgDBA9GgwBCyAJIEIgCRBOkyAOQQAgDyBEEFGSOAKgAwsgDUEANgI4IA0gDSkDaDcDMCAYIA0oAnAQPCANQegAahAuIA0oAjgiCQRAA0AgCSgCACEOIAkQJyAOIgkNAAsLIA1BADYCOCANKAJsIQkgDSgCaCIOIA0oAogBRw0AIAkgDSgCjAFHDQALCyANKAJwIgkEQANAIAkoAgAhDiAJECcgDiIJDQALCyALBEADQCALKAIAIQkgCxAnIAkiCw0ACwsgPCA+kiA9kiE+IBJBAWoiEiAbRw0ACwsgDSgCkAEiCUUNAANAIAkoAgAhCyAJECcgCyIJDQALCyAAQZQDaiIQIABBAiAPIFAgQCBAECU4AgAgAEGYA2oiESAAQQAgDyBRIEcgQBAlOAIAAkAgEEGBAiATQQN0dkEBcUECdGoCfQJAIB5BAUcEQCAALQAXQQNxIglBAkYgHkECR3INAQsgACATIA8gSCBJIEAQJQwBCyAeQQJHIAlBAkdyDQEgSiAAIA8gEyBIIEkgQBB0Ij4gSiAHkiIGIAYgPl4bID4gBiAGIAZcGyAGIAZbID4gPltxGyIGIAYgSl0bIEogBiAGIAZcGyAGIAZbIEogSltxGws4AgALAkAgEEGBAiAWQQN0dkEBcUECdGoCfQJAIBpBAUcEQCAaQQJHIgkgAC0AF0EDcSILQQJGcg0BCyAAIBYgDyBGIEySIE0gQBAlDAELIAkgC0ECR3INASBGIAAgDyAWIEYgTJIgTSBAEHQiByBGIESSIgYgBiAHXhsgByAGIAYgBlwbIAYgBlsgByAHW3EbIgYgBiBGXRsgRiAGIAYgBlwbIAYgBlsgRiBGW3EbCzgCAAsCQCAIRQ0AAkAgAC8AFUGAgANxQYCAAkcNACANQYgBaiAAEDIDQCANKAKMASIJIA0oAogBIgtyRQRAIA0oApABIglFDQIDQCAJKAIAIQsgCRAnIAsiCQ0ACwwCCyALKALsAyALKALoAyILa0ECdSAJTQ0DIAsgCUECdGooAgAiCS8AFUGA4ABxQYDAAEcEQCAJAn8CQAJAAkAgFkECaw4CAAECCyAJQZQDaiEOIBAqAgAgCSoCnAOTIQZBAAwCCyAJQZQDaiEOIBAqAgAgCSoCpAOTIQZBAgwBCyARKgIAIQYCQAJAIBYOAgABCgsgCUGYA2ohDiAGIAkqAqADkyEGQQEMAQsgCUGYA2ohDiAGIAkqAqgDkyEGQQMLQQJ0aiAGIA4qAgCTOAKcAwsgDUGIAWoQLgwACwALAkAgEyAWckEBcUUNACAWQQFxIRQgE0EBcSEVIA1BiAFqIAAQMgNAIA0oAowBIgkgDSgCiAEiC3JFBEAgDSgCkAEiCUUNAgNAIAkoAgAhCyAJECcgCyIJDQALDAILIAsoAuwDIAsoAugDIgtrQQJ1IAlNDQMCQCALIAlBAnRqKAIAIgkvABUgCS0AF0EQdHIiC0GAgDBxQYCAEEYgC0GA4ABxQYDAAEZyDQAgFQRAAn8CfwJAAkACQCATQQFrDgMAAQINCyAJQZgDaiEOIAlBqANqIQtBASESIBEMAwsgCUGUA2ohDkECIRIgCUGcA2oMAQsgCUGUA2ohDkEAIRIgCUGkA2oLIQsgEAshGyAJIBJBAnRqIBsqAgAgDioCAJMgCyoCAJM4ApwDCyAURQ0AAn8CfwJAAkACQCAWQQFrDgMAAQIMCyAJQZgDaiELIAlBqANqIRJBASEXIBEMAwsgCUGUA2ohCyAJQZwDaiESQQIMAQsgCUGUA2ohCyAJQaQDaiESQQALIRcgEAshDiAJIBdBAnRqIA4qAgAgCyoCAJMgEioCAJM4ApwDCyANQYgBahAuDAALAAsgAC8AFUGA4ABxICJBAUZyRQRAIAAtAABBCHFFDQELIAAgACAeIAQgE0EBSxsgDyAKICIgDEMAAAAAQwAAAAAgOyBFEH4aCyANKAJYIglFDQIDQCAJKAIAIQsgCRAnIAsiCQ0ACwwCCxACAAsgABBeCyANQaABaiQADAELECQACyAAIAM6AKgBIAAgACgC9AMoAgw2AqQBIB0NACAKIAooAggiAyAAKAKsASIOQQFqIgkgAyAJSxs2AgggDkEIRgRAIABBADYCrAFBACEOCyAIBH8gAEHwAmoFIAAgDkEBajYCrAEgACAOQRhsakGwAWoLIgMgBTYCDCADIAQ2AgggAyACOAIEIAMgATgCACADIAAqApQDOAIQIAMgACoCmAM4AhRBACEdCyAIBEAgACAAKQKUAzcCjAMgACAALQAAIgNBAXIiBEH7AXEgBCADQQRxGzoAAAsgACAMNgKgASArIB1Fcgs1AQF/IAEgACgCBCICQQF1aiEBIAAoAgAhACABIAJBAXEEfyABKAIAIABqKAIABSAACxECAAt9ACAAQRRqIgAgAUGBAiACQQN0dkH/AXEgAyAEEC0gACACQQEgBBAiIAAgAkEBIAQQIZKSIQQCQAJAAkACQCAFKAIADgMAAQADCyAGKgIAIgMgAyAEIAMgBF0bIAQgBFwbIQQMAQsgBCAEXA0BIAVBAjYCAAsgBiAEOAIACwuMAQIBfwF9IAAoAuQDRQRAQwAAAAAPCyAAQfwAaiIBIAAvARwQICICIAJbBEAgASAALwEcECAPCwJAIAAoAvQDLQAIQQFxDQAgASAALwEYECAiAiACXA0AIAEgAC8BGBAgQwAAAABdRQ0AIAEgAC8BGBAgjA8LQwAAgD9DAAAAACAAKAL0Ay0ACEEBcRsLcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEChDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwtHAQF/IAIvAAYiA0EHcQRAIAAgAUHoAGogAxAfDwsgAUHoAGohASACLwAOIgNBB3EEQCAAIAEgAxAfDwsgACABIAIvABAQHwtHAQF/IAIvAAIiA0EHcQRAIAAgAUHoAGogAxAfDwsgAUHoAGohASACLwAOIgNBB3EEQCAAIAEgAxAfDwsgACABIAIvABAQHwt7AAJAAkACQAJAIANBAWsOAgABAgsgAi8ACiIDQQdxRQ0BDAILIAIvAAgiA0EHcUUNAAwBCyACLwAEIgNBB3EEQAwBCyABQegAaiEBIAIvAAwiA0EHcQRAIAAgASADEB8PCyAAIAEgAi8AEBAfDwsgACABQegAaiADEB8LewACQAJAAkACQCADQQFrDgIAAQILIAIvAAgiA0EHcUUNAQwCCyACLwAKIgNBB3FFDQAMAQsgAi8AACIDQQdxBEAMAQsgAUHoAGohASACLwAMIgNBB3EEQCAAIAEgAxAfDwsgACABIAIvABAQHw8LIAAgAUHoAGogAxAfC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQe4AaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAuFAQIDfwF+AkAgAEKAgICAEFQEQCAAIQUMAQsDQCABQQFrIgEgAEIKgCIFQvYBfiAAfKdBMHI6AAAgAEL/////nwFWIQIgBSEAIAINAAsLIAWnIgIEQANAIAFBAWsiASACQQpuIgNB9gFsIAJqQTByOgAAIAJBCUshBCADIQIgBA0ACwsgAQs3AQJ/QQQQHiICIAE2AgBBBBAeIgMgATYCAEHBOyAAQeI7QfooQb8BIAJB4jtB/ihBwAEgAxAHCw8AIAAgASACQQFBAhCLAQteAQF/IABBADYCDCAAIAM2AhACQCABBEAgAUGAgICABE8NASABQQJ0EB4hBAsgACAENgIAIAAgBCACQQJ0aiICNgIIIAAgBCABQQJ0ajYCDCAAIAI2AgQgAA8LEFgAC3kCAX8BfSMAQRBrIgMkACADQQhqIAAgAUECdEHcJWooAgAgAhBTQwAAwH8hBAJAAkACQCADLQAMQQFrDgIAAQILIAMqAgghBAwBCyADKgIIQwAAAACUQwrXIzyUIQQLIANBEGokACAEQwAAAACXQwAAAAAgBCAEWxsLnAoBC38jAEEQayIIJAAgASABLwAAQXhxIANyIgM7AAACQAJAAkACQAJAAkACQAJAAkACQCADQQhxBEAgA0H//wNxIgZBBHYhBCAGQT9NBH8gACAEQQJ0akEEagUgBEEEayIEIAAoAhgiACgCBCAAKAIAIgBrQQJ1Tw0CIAAgBEECdGoLIAI4AgAMCgsCfyACi0MAAABPXQRAIAKoDAELQYCAgIB4CyIEQf8PakH+H0sgBLIgAlxyRQRAIANBD3FBACAEa0GAEHIgBCACQwAAAABdG0EEdHIhAwwKCyAAIAAvAQAiC0EBajsBACALQYAgTw0DIAtBA00EQCAAIAtBAnRqIAI4AgQMCQsgACgCGCIDRQRAQRgQHiIDQgA3AgAgA0IANwIQIANCADcCCCAAIAM2AhgLAkAgAygCBCIEIAMoAghHBEAgBCACOAIAIAMgBEEEajYCBAwBCyAEIAMoAgAiB2siBEECdSIJQQFqIgZBgICAgARPDQECf0H/////AyAEQQF1IgUgBiAFIAZLGyAEQfz///8HTxsiBkUEQEEAIQUgCQwBCyAGQYCAgIAETw0GIAZBAnQQHiEFIAMoAgQgAygCACIHayIEQQJ1CyEKIAUgCUECdGoiCSACOAIAIAkgCkECdGsgByAEEDMhByADIAUgBkECdGo2AgggAyAJQQRqNgIEIAMoAgAhBCADIAc2AgAgBEUNACAEECMLIAAoAhgiBigCECIDIAYoAhQiAEEFdEcNByADQQFqQQBIDQAgA0H+////A0sNASADIABBBnQiACADQWBxQSBqIgQgACAESxsiAE8NByAAQQBODQILEAIAC0H/////ByEAIANB/////wdPDQULIAhBADYCCCAIQgA3AwAgCCAAEJ8BIAYoAgwhBCAIIAgoAgQiByAGKAIQIgBBH3FqIABBYHFqIgM2AgQgB0UEQCADQQFrIQUMAwsgA0EBayIFIAdBAWtzQR9LDQIgCCgCACEKDAMLQZUlQeEXQSJB3BcQCwALEFgACyAIKAIAIgogBUEFdkEAIANBIU8bQQJ0akEANgIACyAKIAdBA3ZB/P///wFxaiEDAkAgB0EfcSIHRQRAIABBAEwNASAAQSBtIQUgAEEfakE/TwRAIAMgBCAFQQJ0EDMaCyAAIAVBBXRrIgBBAEwNASADIAVBAnQiBWoiAyADKAIAQX9BICAAa3YiAEF/c3EgBCAFaigCACAAcXI2AgAMAQsgAEEATA0AQX8gB3QhDEEgIAdrIQkgAEEgTgRAIAxBf3MhDSADKAIAIQUDQCADIAUgDXEgBCgCACIFIAd0cjYCACADIAMoAgQgDHEgBSAJdnIiBTYCBCAEQQRqIQQgA0EEaiEDIABBP0shDiAAQSBrIQAgDg0ACyAAQQBMDQELIAMgAygCAEF/IAkgCSAAIAAgCUobIgVrdiAMcUF/c3EgBCgCAEF/QSAgAGt2cSIEIAd0cjYCACAAIAVrIgBBAEwNACADIAUgB2pBA3ZB/P///wFxaiIDIAMoAgBBf0EgIABrdkF/c3EgBCAFdnI2AgALIAYoAgwhACAGIAo2AgwgBiAIKAIEIgM2AhAgBiAIKAIINgIUIABFDQAgABAjIAYoAhAhAwsgBiADQQFqNgIQIAYoAgwgA0EDdkH8////AXFqIgAgACgCAEF+IAN3cTYCACABLwAAIQMLIANBB3EgC0EEdHJBCHIhAwsgASADOwAAIAhBEGokAAuPAQIBfwF9IwBBEGsiAyQAIANBCGogAEHoAGogAEHUAEHWACABQf4BcUECRhtqLwEAIgEgAC8BWCABQQdxGxAfQwAAwH8hBAJAAkACQCADLQAMQQFrDgIAAQILIAMqAgghBAwBCyADKgIIIAKUQwrXIzyUIQQLIANBEGokACAEQwAAAACXQwAAAAAgBCAEWxsL2AICBH8BfSMAQSBrIgMkAAJAIAAoAgwiAQRAIAAgACoClAMgACoCmAMgAREnACIFIAVbDQEgA0GqHjYCACAAQQVB2CUgAxAsECQACyADQRBqIAAQMgJAIAMoAhAiAiADKAIUIgFyRQ0AAkADQCABIAIoAuwDIAIoAugDIgJrQQJ1SQRAIAIgAUECdGooAgAiASgC3AMNAyABLwAVIAEtABdBEHRyIgJBgOAAcUGAwABHBEAgAkEIdkEPcSICBH8gAgUgAC0AFUEEdgtBBUYEQCAALQAUQQhxDQQLIAEtAABBAnENAyAEIAEgBBshBAsgA0EQahAuIAMoAhQiASADKAIQIgJyDQEMAwsLEAIACyABIQQLIAMoAhgiAQRAA0AgASgCACECIAEQIyACIgENAAsLIARFBEAgACoCmAMhBQwBCyAEEE4gBCoCoAOSIQULIANBIGokACAFC6EDAQh/AkAgACgC6AMiBSAAKALsAyIHRwRAA0AgACAFKAIAIgIoAuQDRwRAAkAgACgC9AMoAgAiAQRAIAIgACAGIAERBgAiAQ0BC0GIBBAeIgEgAigCEDYCECABIAIpAgg3AgggASACKQIANwIAIAFBFGogAkEUakHoABArGiABQgA3AoABIAFB/ABqIgNBADsBACABQgA3AogBIAFCADcCkAEgAyACQfwAahCgASABQZgBaiACQZgBakHQAhArGiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMk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AWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAH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IQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIA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AkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVk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",!W(te)){var me=te;te=r.locateFile?r.locateFile(me,i):i+me}function ue(){var I=te;try{if(I==te&&c)return new Uint8Array(c);if(W(I))try{var B=Sr(I.slice(37)),G=new Uint8Array(B.length);for(I=0;I<B.length;++I)G[I]=B.charCodeAt(I);var j=G}catch{throw Error("Converting base64 string to bytes failed.")}else j=void 0;var K=j;if(K)return K;throw"both async and sync fetching of the wasm failed"}catch(Z){$(Z)}}function oe(){return c||typeof fetch!="function"?Promise.resolve().then(function(){return ue()}):fetch(te,{credentials:"same-origin"}).then(function(I){if(!I.ok)throw"failed to load wasm binary file at '"+te+"'";return I.arrayBuffer()}).catch(function(){return ue()})}function pe(I){for(;0<I.length;)I.shift()(r)}function Me(I){if(I===void 0)return"_unknown";I=I.replace(/[^a-zA-Z0-9_]/g,"$");var B=I.charCodeAt(0);return 48<=B&&57>=B?"_"+I:I}function F(I,B){return I=Me(I),function(){return B.apply(this,arguments)}}var ve=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Se=[];function Ne(I){var B=Error,G=F(I,function(j){this.name=I,this.message=j,j=Error(j).stack,j!==void 0&&(this.stack=this.toString()+`
2390
- `+j.replace(/^Error(:[^\n]*)?\n/,""))});return G.prototype=Object.create(B.prototype),G.prototype.constructor=G,G.prototype.toString=function(){return this.message===void 0?this.name:this.name+": "+this.message},G}var Ee=void 0;function m(I){throw new Ee(I)}var Ce=I=>(I||m("Cannot use deleted val. handle = "+I),ve[I].value),be=I=>{switch(I){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var B=Se.length?Se.pop():ve.length;return ve[B]={ga:1,value:I},B}},ye=void 0,ie=void 0;function ce(I){for(var B="";v[I];)B+=ie[v[I++]];return B}var he=[];function Qe(){for(;he.length;){var I=he.pop();I.M.$=!1,I.delete()}}var _e=void 0,Ge={};function Fe(I,B){for(B===void 0&&m("ptr should not be undefined");I.R;)B=I.ba(B),I=I.R;return B}var De={};function He(I){I=ir(I);var B=ce(I);return ct(I),B}function Te(I,B){var G=De[I];return G===void 0&&m(B+" has unknown type "+He(I)),G}function je(){}var Le=!1;function Ke(I){--I.count.value,I.count.value===0&&(I.T?I.U.W(I.T):I.P.N.W(I.O))}function rt(I,B,G){return B===G?I:G.R===void 0?null:(I=rt(I,B,G.R),I===null?null:G.na(I))}var We={};function bt(I,B){return B=Fe(I,B),Ge[B]}var ze=void 0;function Je(I){throw new ze(I)}function Et(I,B){return B.P&&B.O||Je("makeClassHandle requires ptr and ptrType"),!!B.U!=!!B.T&&Je("Both smartPtrType and smartPtr must be specified"),B.count={value:1},gt(Object.create(I,{M:{value:B}}))}function gt(I){return typeof FinalizationRegistry>"u"?(gt=B=>B,I):(Le=new FinalizationRegistry(B=>{Ke(B.M)}),gt=B=>{var G=B.M;return G.T&&Le.register(B,{M:G},B),B},je=B=>{Le.unregister(B)},gt(I))}var Ct={};function pt(I){for(;I.length;){var B=I.pop();I.pop()(B)}}function qe(I){return this.fromWireType(_[I>>2])}var It={},Gt={};function ft(I,B,G){function j(ne){ne=G(ne),ne.length!==I.length&&Je("Mismatched type converter count");for(var le=0;le<I.length;++le)at(I[le],ne[le])}I.forEach(function(ne){Gt[ne]=B});var K=Array(B.length),Z=[],re=0;B.forEach((ne,le)=>{De.hasOwnProperty(ne)?K[le]=De[ne]:(Z.push(ne),It.hasOwnProperty(ne)||(It[ne]=[]),It[ne].push(()=>{K[le]=De[ne],++re,re===Z.length&&j(K)}))}),Z.length===0&&j(K)}function Jt(I){switch(I){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+I)}}function at(I,B,G={}){if(!("argPackAdvance"in B))throw new TypeError("registerType registeredInstance requires argPackAdvance");var j=B.name;if(I||m('type "'+j+'" must have a positive integer typeid pointer'),De.hasOwnProperty(I)){if(G.ua)return;m("Cannot register type '"+j+"' twice")}De[I]=B,delete Gt[I],It.hasOwnProperty(I)&&(B=It[I],delete It[I],B.forEach(K=>K()))}function Pt(I){m(I.M.P.N.name+" instance already deleted")}function dt(){}function wt(I,B,G){if(I[B].S===void 0){var j=I[B];I[B]=function(){return I[B].S.hasOwnProperty(arguments.length)||m("Function '"+G+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+I[B].S+")!"),I[B].S[arguments.length].apply(this,arguments)},I[B].S=[],I[B].S[j.Z]=j}}function Ir(I,B){r.hasOwnProperty(I)?(m("Cannot register public name '"+I+"' twice"),wt(r,I,I),r.hasOwnProperty(void 0)&&m("Cannot register multiple overloads of a function with the same number of arguments (undefined)!"),r[I].S[void 0]=B):r[I]=B}function er(I,B,G,j,K,Z,re,ne){this.name=I,this.constructor=B,this.X=G,this.W=j,this.R=K,this.pa=Z,this.ba=re,this.na=ne,this.ja=[]}function Rt(I,B,G){for(;B!==G;)B.ba||m("Expected null or instance of "+G.name+", got an instance of "+B.name),I=B.ba(I),B=B.R;return I}function tr(I,B){return B===null?(this.ea&&m("null is not a valid "+this.name),0):(B.M||m('Cannot pass "'+Wt(B)+'" as a '+this.name),B.M.O||m("Cannot pass deleted object as a pointer of type "+this.name),Rt(B.M.O,B.M.P.N,this.N))}function yt(I,B){if(B===null){if(this.ea&&m("null is not a valid "+this.name),this.da){var G=this.fa();return I!==null&&I.push(this.W,G),G}return 0}if(B.M||m('Cannot pass "'+Wt(B)+'" as a '+this.name),B.M.O||m("Cannot pass deleted object as a pointer of type "+this.name),!this.ca&&B.M.P.ca&&m("Cannot convert argument of type "+(B.M.U?B.M.U.name:B.M.P.name)+" to parameter type "+this.name),G=Rt(B.M.O,B.M.P.N,this.N),this.da)switch(B.M.T===void 0&&m("Passing raw pointer to smart pointer is illegal"),this.Ba){case 0:B.M.U===this?G=B.M.T:m("Cannot convert argument of type "+(B.M.U?B.M.U.name:B.M.P.name)+" to parameter type "+this.name);break;case 1:G=B.M.T;break;case 2:if(B.M.U===this)G=B.M.T;else{var j=B.clone();G=this.xa(G,be(function(){j.delete()})),I!==null&&I.push(this.W,G)}break;default:m("Unsupporting sharing policy")}return G}function mr(I,B){return B===null?(this.ea&&m("null is not a valid "+this.name),0):(B.M||m('Cannot pass "'+Wt(B)+'" as a '+this.name),B.M.O||m("Cannot pass deleted object as a pointer of type "+this.name),B.M.P.ca&&m("Cannot convert argument of type "+B.M.P.name+" to parameter type "+this.name),Rt(B.M.O,B.M.P.N,this.N))}function st(I,B,G,j){this.name=I,this.N=B,this.ea=G,this.ca=j,this.da=!1,this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0,B.R!==void 0?this.toWireType=yt:(this.toWireType=j?tr:mr,this.V=null)}function Kt(I,B){r.hasOwnProperty(I)||Je("Replacing nonexistant public symbol"),r[I]=B,r[I].Z=void 0}function rr(I,B){var G=[];return function(){if(G.length=0,Object.assign(G,arguments),I.includes("j")){var j=r["dynCall_"+I];j=G&&G.length?j.apply(null,[B].concat(G)):j.call(null,B)}else j=O.get(B).apply(null,G);return j}}function ot(I,B){I=ce(I);var G=I.includes("j")?rr(I,B):O.get(B);return typeof G!="function"&&m("unknown function pointer with signature "+I+": "+B),G}var Qt=void 0;function Ft(I,B){function G(Z){K[Z]||De[Z]||(Gt[Z]?Gt[Z].forEach(G):(j.push(Z),K[Z]=!0))}var j=[],K={};throw B.forEach(G),new Qt(I+": "+j.map(He).join([", "]))}function Vt(I,B,G,j,K){var Z=B.length;2>Z&&m("argTypes array size mismatch! Must at least get return value and 'this' types!");var re=B[1]!==null&&G!==null,ne=!1;for(G=1;G<B.length;++G)if(B[G]!==null&&B[G].V===void 0){ne=!0;break}var le=B[0].name!=="void",se=Z-2,fe=Array(se),xe=[],Re=[];return function(){if(arguments.length!==se&&m("function "+I+" called with "+arguments.length+" arguments, expected "+se+" args!"),Re.length=0,xe.length=re?2:1,xe[0]=K,re){var Ve=B[1].toWireType(Re,this);xe[1]=Ve}for(var ke=0;ke<se;++ke)fe[ke]=B[ke+2].toWireType(Re,arguments[ke]),xe.push(fe[ke]);if(ke=j.apply(null,xe),ne)pt(Re);else for(var tt=re?1:2;tt<B.length;tt++){var it=tt===1?Ve:fe[tt-2];B[tt].V!==null&&B[tt].V(it)}return Ve=le?B[0].fromWireType(ke):void 0,Ve}}function zt(I,B){for(var G=[],j=0;j<I;j++)G.push(y[B+4*j>>2]);return G}function Yt(I){4<I&&--ve[I].ga===0&&(ve[I]=void 0,Se.push(I))}function Wt(I){if(I===null)return"null";var B=typeof I;return B==="object"||B==="array"||B==="function"?I.toString():""+I}function Br(I,B){switch(B){case 2:return function(G){return this.fromWireType(M[G>>2])};case 3:return function(G){return this.fromWireType(T[G>>3])};default:throw new TypeError("Unknown float type: "+I)}}function br(I,B,G){switch(B){case 0:return G?function(j){return b[j]}:function(j){return v[j]};case 1:return G?function(j){return Q[j>>1]}:function(j){return x[j>>1]};case 2:return G?function(j){return _[j>>2]}:function(j){return y[j>>2]};default:throw new TypeError("Unknown integer type: "+I)}}function Er(I,B){for(var G="",j=0;!(j>=B/2);++j){var K=Q[I+2*j>>1];if(K==0)break;G+=String.fromCharCode(K)}return G}function Cr(I,B,G){if(G===void 0&&(G=2147483647),2>G)return 0;G-=2;var j=B;G=G<2*I.length?G/2:I.length;for(var K=0;K<G;++K)Q[B>>1]=I.charCodeAt(K),B+=2;return Q[B>>1]=0,B-j}function yr(I){return 2*I.length}function Qr(I,B){for(var G=0,j="";!(G>=B/4);){var K=_[I+4*G>>2];if(K==0)break;++G,65536<=K?(K-=65536,j+=String.fromCharCode(55296|K>>10,56320|K&1023)):j+=String.fromCharCode(K)}return j}function xr(I,B,G){if(G===void 0&&(G=2147483647),4>G)return 0;var j=B;G=j+G-4;for(var K=0;K<I.length;++K){var Z=I.charCodeAt(K);if(55296<=Z&&57343>=Z){var re=I.charCodeAt(++K);Z=65536+((Z&1023)<<10)|re&1023}if(_[B>>2]=Z,B+=4,B+4>G)break}return _[B>>2]=0,B-j}function wr(I){for(var B=0,G=0;G<I.length;++G){var j=I.charCodeAt(G);55296<=j&&57343>=j&&++G,B+=4}return B}var Dr={};function nr(I){var B=Dr[I];return B===void 0?ce(I):B}var Ut=[];function vr(I){var B=Ut.length;return Ut.push(I),B}function _r(I,B){for(var G=Array(I),j=0;j<I;++j)G[j]=Te(y[B+4*j>>2],"parameter "+j);return G}var Ar=[],Mr=[null,[],[]];Ee=r.BindingError=Ne("BindingError"),r.count_emval_handles=function(){for(var I=0,B=5;B<ve.length;++B)ve[B]!==void 0&&++I;return I},r.get_first_emval=function(){for(var I=5;I<ve.length;++I)if(ve[I]!==void 0)return ve[I];return null},ye=r.PureVirtualError=Ne("PureVirtualError");for(var or=Array(256),kt=0;256>kt;++kt)or[kt]=String.fromCharCode(kt);ie=or,r.getInheritedInstanceCount=function(){return Object.keys(Ge).length},r.getLiveInheritedInstances=function(){var I=[],B;for(B in Ge)Ge.hasOwnProperty(B)&&I.push(Ge[B]);return I},r.flushPendingDeletes=Qe,r.setDelayFunction=function(I){_e=I,he.length&&_e&&_e(Qe)},ze=r.InternalError=Ne("InternalError"),dt.prototype.isAliasOf=function(I){if(!(this instanceof dt&&I instanceof dt))return!1;var B=this.M.P.N,G=this.M.O,j=I.M.P.N;for(I=I.M.O;B.R;)G=B.ba(G),B=B.R;for(;j.R;)I=j.ba(I),j=j.R;return B===j&&G===I},dt.prototype.clone=function(){if(this.M.O||Pt(this),this.M.aa)return this.M.count.value+=1,this;var I=gt,B=Object,G=B.create,j=Object.getPrototypeOf(this),K=this.M;return I=I(G.call(B,j,{M:{value:{count:K.count,$:K.$,aa:K.aa,O:K.O,P:K.P,T:K.T,U:K.U}}})),I.M.count.value+=1,I.M.$=!1,I},dt.prototype.delete=function(){this.M.O||Pt(this),this.M.$&&!this.M.aa&&m("Object already scheduled for deletion"),je(this),Ke(this.M),this.M.aa||(this.M.T=void 0,this.M.O=void 0)},dt.prototype.isDeleted=function(){return!this.M.O},dt.prototype.deleteLater=function(){return this.M.O||Pt(this),this.M.$&&!this.M.aa&&m("Object already scheduled for deletion"),he.push(this),he.length===1&&_e&&_e(Qe),this.M.$=!0,this},st.prototype.qa=function(I){return this.ka&&(I=this.ka(I)),I},st.prototype.ha=function(I){this.W&&this.W(I)},st.prototype.argPackAdvance=8,st.prototype.readValueFromPointer=qe,st.prototype.deleteObject=function(I){I!==null&&I.delete()},st.prototype.fromWireType=function(I){function B(){return this.da?Et(this.N.X,{P:this.wa,O:G,U:this,T:I}):Et(this.N.X,{P:this,O:I})}var G=this.qa(I);if(!G)return this.ha(I),null;var j=bt(this.N,G);if(j!==void 0)return j.M.count.value===0?(j.M.O=G,j.M.T=I,j.clone()):(j=j.clone(),this.ha(I),j);if(j=this.N.pa(G),j=We[j],!j)return B.call(this);j=this.ca?j.la:j.pointerType;var K=rt(G,this.N,j.N);return K===null?B.call(this):this.da?Et(j.N.X,{P:j,O:K,U:this,T:I}):Et(j.N.X,{P:j,O:K})},Qt=r.UnboundTypeError=Ne("UnboundTypeError");var Sr=typeof atob=="function"?atob:function(I){var B="",G=0;I=I.replace(/[^A-Za-z0-9\+\/=]/g,"");do{var j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(I.charAt(G++)),K="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(I.charAt(G++)),Z="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(I.charAt(G++)),re="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(I.charAt(G++));j=j<<2|K>>4,K=(K&15)<<4|Z>>2;var ne=(Z&3)<<6|re;B+=String.fromCharCode(j),Z!==64&&(B+=String.fromCharCode(K)),re!==64&&(B+=String.fromCharCode(ne))}while(G<I.length);return B},Gr={l:function(I,B,G,j){$("Assertion failed: "+(I?g(v,I):"")+", at: "+[B?B?g(v,B):"":"unknown filename",G,j?j?g(v,j):"":"unknown function"])},q:function(I,B,G){I=ce(I),B=Te(B,"wrapper"),G=Ce(G);var j=[].slice,K=B.N,Z=K.X,re=K.R.X,ne=K.R.constructor;I=F(I,function(){K.R.ja.forEach(function(se){if(this[se]===re[se])throw new ye("Pure virtual function "+se+" must be implemented in JavaScript")}.bind(this)),Object.defineProperty(this,"__parent",{value:Z}),this.__construct.apply(this,j.call(arguments))}),Z.__construct=function(){this===Z&&m("Pass correct 'this' to __construct");var se=ne.implement.apply(void 0,[this].concat(j.call(arguments)));je(se);var fe=se.M;se.notifyOnDestruction(),fe.aa=!0,Object.defineProperties(this,{M:{value:fe}}),gt(this),se=fe.O,se=Fe(K,se),Ge.hasOwnProperty(se)?m("Tried to register registered instance: "+se):Ge[se]=this},Z.__destruct=function(){this===Z&&m("Pass correct 'this' to __destruct"),je(this);var se=this.M.O;se=Fe(K,se),Ge.hasOwnProperty(se)?delete Ge[se]:m("Tried to unregister unregistered instance: "+se)},I.prototype=Object.create(Z);for(var le in G)I.prototype[le]=G[le];return be(I)},j:function(I){var B=Ct[I];delete Ct[I];var G=B.fa,j=B.W,K=B.ia,Z=K.map(re=>re.ta).concat(K.map(re=>re.za));ft([I],Z,re=>{var ne={};return K.forEach((le,se)=>{var fe=re[se],xe=le.ra,Re=le.sa,Ve=re[se+K.length],ke=le.ya,tt=le.Aa;ne[le.oa]={read:it=>fe.fromWireType(xe(Re,it)),write:(it,Dt)=>{var lt=[];ke(tt,it,Ve.toWireType(lt,Dt)),pt(lt)}}}),[{name:B.name,fromWireType:function(le){var se={},fe;for(fe in ne)se[fe]=ne[fe].read(le);return j(le),se},toWireType:function(le,se){for(var fe in ne)if(!(fe in se))throw new TypeError('Missing field: "'+fe+'"');var xe=G();for(fe in ne)ne[fe].write(xe,se[fe]);return le!==null&&le.push(j,xe),xe},argPackAdvance:8,readValueFromPointer:qe,V:j}]})},v:function(){},B:function(I,B,G,j,K){var Z=Jt(G);B=ce(B),at(I,{name:B,fromWireType:function(re){return!!re},toWireType:function(re,ne){return ne?j:K},argPackAdvance:8,readValueFromPointer:function(re){if(G===1)var ne=b;else if(G===2)ne=Q;else if(G===4)ne=_;else throw new TypeError("Unknown boolean type size: "+B);return this.fromWireType(ne[re>>Z])},V:null})},f:function(I,B,G,j,K,Z,re,ne,le,se,fe,xe,Re){fe=ce(fe),Z=ot(K,Z),ne&&(ne=ot(re,ne)),se&&(se=ot(le,se)),Re=ot(xe,Re);var Ve=Me(fe);Ir(Ve,function(){Ft("Cannot construct "+fe+" due to unbound types",[j])}),ft([I,B,G],j?[j]:[],function(ke){if(ke=ke[0],j)var tt=ke.N,it=tt.X;else it=dt.prototype;ke=F(Ve,function(){if(Object.getPrototypeOf(this)!==Dt)throw new Ee("Use 'new' to construct "+fe);if(lt.Y===void 0)throw new Ee(fe+" has no accessible constructor");var cr=lt.Y[arguments.length];if(cr===void 0)throw new Ee("Tried to invoke ctor of "+fe+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(lt.Y).toString()+") parameters instead!");return cr.apply(this,arguments)});var Dt=Object.create(it,{constructor:{value:ke}});ke.prototype=Dt;var lt=new er(fe,ke,Dt,Re,tt,Z,ne,se);tt=new st(fe,lt,!0,!1),it=new st(fe+"*",lt,!1,!1);var sr=new st(fe+" const*",lt,!1,!0);return We[I]={pointerType:it,la:sr},Kt(Ve,ke),[tt,it,sr]})},d:function(I,B,G,j,K,Z,re){var ne=zt(G,j);B=ce(B),Z=ot(K,Z),ft([],[I],function(le){function se(){Ft("Cannot call "+fe+" due to unbound types",ne)}le=le[0];var fe=le.name+"."+B;B.startsWith("@@")&&(B=Symbol[B.substring(2)]);var xe=le.N.constructor;return xe[B]===void 0?(se.Z=G-1,xe[B]=se):(wt(xe,B,fe),xe[B].S[G-1]=se),ft([],ne,function(Re){return Re=Vt(fe,[Re[0],null].concat(Re.slice(1)),null,Z,re),xe[B].S===void 0?(Re.Z=G-1,xe[B]=Re):xe[B].S[G-1]=Re,[]}),[]})},p:function(I,B,G,j,K,Z){0<B||$();var re=zt(B,G);K=ot(j,K),ft([],[I],function(ne){ne=ne[0];var le="constructor "+ne.name;if(ne.N.Y===void 0&&(ne.N.Y=[]),ne.N.Y[B-1]!==void 0)throw new Ee("Cannot register multiple constructors with identical number of parameters ("+(B-1)+") for class '"+ne.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return ne.N.Y[B-1]=()=>{Ft("Cannot construct "+ne.name+" due to unbound types",re)},ft([],re,function(se){return se.splice(1,0,null),ne.N.Y[B-1]=Vt(le,se,null,K,Z),[]}),[]})},a:function(I,B,G,j,K,Z,re,ne){var le=zt(G,j);B=ce(B),Z=ot(K,Z),ft([],[I],function(se){function fe(){Ft("Cannot call "+xe+" due to unbound types",le)}se=se[0];var xe=se.name+"."+B;B.startsWith("@@")&&(B=Symbol[B.substring(2)]),ne&&se.N.ja.push(B);var Re=se.N.X,Ve=Re[B];return Ve===void 0||Ve.S===void 0&&Ve.className!==se.name&&Ve.Z===G-2?(fe.Z=G-2,fe.className=se.name,Re[B]=fe):(wt(Re,B,xe),Re[B].S[G-2]=fe),ft([],le,function(ke){return ke=Vt(xe,ke,se,Z,re),Re[B].S===void 0?(ke.Z=G-2,Re[B]=ke):Re[B].S[G-2]=ke,[]}),[]})},A:function(I,B){B=ce(B),at(I,{name:B,fromWireType:function(G){var j=Ce(G);return Yt(G),j},toWireType:function(G,j){return be(j)},argPackAdvance:8,readValueFromPointer:qe,V:null})},n:function(I,B,G){G=Jt(G),B=ce(B),at(I,{name:B,fromWireType:function(j){return j},toWireType:function(j,K){return K},argPackAdvance:8,readValueFromPointer:Br(B,G),V:null})},e:function(I,B,G,j,K){B=ce(B),K===-1&&(K=4294967295),K=Jt(G);var Z=ne=>ne;if(j===0){var re=32-8*G;Z=ne=>ne<<re>>>re}G=B.includes("unsigned")?function(ne,le){return le>>>0}:function(ne,le){return le},at(I,{name:B,fromWireType:Z,toWireType:G,argPackAdvance:8,readValueFromPointer:br(B,K,j!==0),V:null})},b:function(I,B,G){function j(Z){Z>>=2;var re=y;return new K(f,re[Z+1],re[Z])}var K=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][B];G=ce(G),at(I,{name:G,fromWireType:j,argPackAdvance:8,readValueFromPointer:j},{ua:!0})},o:function(I,B){B=ce(B);var G=B==="std::string";at(I,{name:B,fromWireType:function(j){var K=y[j>>2],Z=j+4;if(G)for(var re=Z,ne=0;ne<=K;++ne){var le=Z+ne;if(ne==K||v[le]==0){if(re=re?g(v,re,le-re):"",se===void 0)var se=re;else se+="\0",se+=re;re=le+1}}else{for(se=Array(K),ne=0;ne<K;++ne)se[ne]=String.fromCharCode(v[Z+ne]);se=se.join("")}return ct(j),se},toWireType:function(j,K){K instanceof ArrayBuffer&&(K=new Uint8Array(K));var Z,re=typeof K=="string";if(re||K instanceof Uint8Array||K instanceof Uint8ClampedArray||K instanceof Int8Array||m("Cannot pass non-string to std::string"),G&&re){var ne=0;for(Z=0;Z<K.length;++Z){var le=K.charCodeAt(Z);127>=le?ne++:2047>=le?ne+=2:55296<=le&&57343>=le?(ne+=4,++Z):ne+=3}Z=ne}else Z=K.length;if(ne=qt(4+Z+1),le=ne+4,y[ne>>2]=Z,G&&re){if(re=le,le=Z+1,Z=v,0<le){le=re+le-1;for(var se=0;se<K.length;++se){var fe=K.charCodeAt(se);if(55296<=fe&&57343>=fe){var xe=K.charCodeAt(++se);fe=65536+((fe&1023)<<10)|xe&1023}if(127>=fe){if(re>=le)break;Z[re++]=fe}else{if(2047>=fe){if(re+1>=le)break;Z[re++]=192|fe>>6}else{if(65535>=fe){if(re+2>=le)break;Z[re++]=224|fe>>12}else{if(re+3>=le)break;Z[re++]=240|fe>>18,Z[re++]=128|fe>>12&63}Z[re++]=128|fe>>6&63}Z[re++]=128|fe&63}}Z[re]=0}}else if(re)for(re=0;re<Z;++re)se=K.charCodeAt(re),255<se&&(ct(le),m("String has UTF-16 code units that do not fit in 8 bits")),v[le+re]=se;else for(re=0;re<Z;++re)v[le+re]=K[re];return j!==null&&j.push(ct,ne),ne},argPackAdvance:8,readValueFromPointer:qe,V:function(j){ct(j)}})},i:function(I,B,G){if(G=ce(G),B===2)var j=Er,K=Cr,Z=yr,re=()=>x,ne=1;else B===4&&(j=Qr,K=xr,Z=wr,re=()=>y,ne=2);at(I,{name:G,fromWireType:function(le){for(var se=y[le>>2],fe=re(),xe,Re=le+4,Ve=0;Ve<=se;++Ve){var ke=le+4+Ve*B;(Ve==se||fe[ke>>ne]==0)&&(Re=j(Re,ke-Re),xe===void 0?xe=Re:(xe+="\0",xe+=Re),Re=ke+B)}return ct(le),xe},toWireType:function(le,se){typeof se!="string"&&m("Cannot pass non-string to C++ string type "+G);var fe=Z(se),xe=qt(4+fe+B);return y[xe>>2]=fe>>ne,K(se,xe+4,fe+B),le!==null&&le.push(ct,xe),xe},argPackAdvance:8,readValueFromPointer:qe,V:function(le){ct(le)}})},k:function(I,B,G,j,K,Z){Ct[I]={name:ce(B),fa:ot(G,j),W:ot(K,Z),ia:[]}},h:function(I,B,G,j,K,Z,re,ne,le,se){Ct[I].ia.push({oa:ce(B),ta:G,ra:ot(j,K),sa:Z,za:re,ya:ot(ne,le),Aa:se})},C:function(I,B){B=ce(B),at(I,{va:!0,name:B,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(I,B,G,j,K){I=Ut[I],B=Ce(B),G=nr(G);var Z=[];return y[j>>2]=be(Z),I(B,G,Z,K)},t:function(I,B,G,j){I=Ut[I],B=Ce(B),G=nr(G),I(B,G,null,j)},g:Yt,m:function(I,B){var G=_r(I,B),j=G[0];B=j.name+"_$"+G.slice(1).map(function(re){return re.name}).join("_")+"$";var K=Ar[B];if(K!==void 0)return K;var Z=Array(I-1);return K=vr((re,ne,le,se)=>{for(var fe=0,xe=0;xe<I-1;++xe)Z[xe]=G[xe+1].readValueFromPointer(se+fe),fe+=G[xe+1].argPackAdvance;for(re=re[ne].apply(re,Z),xe=0;xe<I-1;++xe)G[xe+1].ma&&G[xe+1].ma(Z[xe]);if(!j.va)return j.toWireType(le,re)}),Ar[B]=K},D:function(I){4<I&&(ve[I].ga+=1)},r:function(I){var B=Ce(I);pt(B),Yt(I)},c:function(){$("")},x:function(I,B,G){v.copyWithin(I,B,B+G)},w:function(I){var B=v.length;if(I>>>=0,2147483648<I)return!1;for(var G=1;4>=G;G*=2){var j=B*(1+.2/G);j=Math.min(j,I+100663296);var K=Math;j=Math.max(I,j),K=K.min.call(K,2147483648,j+(65536-j%65536)%65536);e:{try{u.grow(K-f.byteLength+65535>>>16),N();var Z=1;break e}catch{}Z=void 0}if(Z)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(I,B,G,j){for(var K=0,Z=0;Z<G;Z++){var re=y[B>>2],ne=y[B+4>>2];B+=8;for(var le=0;le<ne;le++){var se=v[re+le],fe=Mr[I];se===0||se===10?((I===1?a:s)(g(fe,0)),fe.length=0):fe.push(se)}K+=ne}return y[j>>2]=K,0}};(function(){function I(K){r.asm=K.exports,u=r.asm.E,N(),O=r.asm.J,H.unshift(r.asm.F),z--,r.monitorRunDependencies&&r.monitorRunDependencies(z),z==0&&(ee!==null&&(clearInterval(ee),ee=null),Y&&(K=Y,Y=null,K()))}function B(K){I(K.instance)}function G(K){return oe().then(function(Z){return WebAssembly.instantiate(Z,j)}).then(function(Z){return Z}).then(K,function(Z){s("failed to asynchronously prepare wasm: "+Z),$(Z)})}var j={a:Gr};if(z++,r.monitorRunDependencies&&r.monitorRunDependencies(z),r.instantiateWasm)try{return r.instantiateWasm(j,I)}catch(K){s("Module.instantiateWasm callback failed with error: "+K),A(K)}return(function(){return c||typeof WebAssembly.instantiateStreaming!="function"||W(te)||typeof fetch!="function"?G(B):fetch(te,{credentials:"same-origin"}).then(function(K){return WebAssembly.instantiateStreaming(K,j).then(B,function(Z){return s("wasm streaming compile failed: "+Z),s("falling back to ArrayBuffer instantiation"),G(B)})})})().catch(A),{}})(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.F).apply(null,arguments)};var ir=r.___getTypeName=function(){return(ir=r.___getTypeName=r.asm.G).apply(null,arguments)};r.__embind_initialize_bindings=function(){return(r.__embind_initialize_bindings=r.asm.H).apply(null,arguments)};var qt=r._malloc=function(){return(qt=r._malloc=r.asm.I).apply(null,arguments)},ct=r._free=function(){return(ct=r._free=r.asm.K).apply(null,arguments)};r.dynCall_jiji=function(){return(r.dynCall_jiji=r.asm.L).apply(null,arguments)};var Nt;Y=function I(){Nt||ar(),Nt||(Y=I)};function ar(){function I(){if(!Nt&&(Nt=!0,r.calledRun=!0,!p)){if(pe(H),n(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;){var B=r.postRun.shift();V.unshift(B)}pe(V)}}if(!(0<z)){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)P();pe(D),0<z||(r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),I()},1)):I())}}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);0<r.preInit.length;)r.preInit.pop()();return ar(),t.ready})})(),ss=hl;q();q();var Zt=(function(e){return e[e.Auto=0]="Auto",e[e.FlexStart=1]="FlexStart",e[e.Center=2]="Center",e[e.FlexEnd=3]="FlexEnd",e[e.Stretch=4]="Stretch",e[e.Baseline=5]="Baseline",e[e.SpaceBetween=6]="SpaceBetween",e[e.SpaceAround=7]="SpaceAround",e[e.SpaceEvenly=8]="SpaceEvenly",e})({}),cs=(function(e){return e[e.BorderBox=0]="BorderBox",e[e.ContentBox=1]="ContentBox",e})({}),ls=(function(e){return e[e.Width=0]="Width",e[e.Height=1]="Height",e})({}),lA=(function(e){return e[e.Inherit=0]="Inherit",e[e.LTR=1]="LTR",e[e.RTL=2]="RTL",e})({}),To=(function(e){return e[e.Flex=0]="Flex",e[e.None=1]="None",e[e.Contents=2]="Contents",e})({}),$t=(function(e){return e[e.Left=0]="Left",e[e.Top=1]="Top",e[e.Right=2]="Right",e[e.Bottom=3]="Bottom",e[e.Start=4]="Start",e[e.End=5]="End",e[e.Horizontal=6]="Horizontal",e[e.Vertical=7]="Vertical",e[e.All=8]="All",e})({}),Zr=(function(e){return e[e.None=0]="None",e[e.StretchFlexBasis=1]="StretchFlexBasis",e[e.AbsolutePositionWithoutInsetsExcludesPadding=2]="AbsolutePositionWithoutInsetsExcludesPadding",e[e.AbsolutePercentAgainstInnerSize=4]="AbsolutePercentAgainstInnerSize",e[e.All=2147483647]="All",e[e.Classic=2147483646]="Classic",e})({}),Il=(function(e){return e[e.WebFlexBasis=0]="WebFlexBasis",e})({}),WA=(function(e){return e[e.Column=0]="Column",e[e.ColumnReverse=1]="ColumnReverse",e[e.Row=2]="Row",e[e.RowReverse=3]="RowReverse",e})({}),Lo=(function(e){return e[e.Column=0]="Column",e[e.Row=1]="Row",e[e.All=2]="All",e})({}),$r=(function(e){return e[e.FlexStart=0]="FlexStart",e[e.Center=1]="Center",e[e.FlexEnd=2]="FlexEnd",e[e.SpaceBetween=3]="SpaceBetween",e[e.SpaceAround=4]="SpaceAround",e[e.SpaceEvenly=5]="SpaceEvenly",e})({}),en=(function(e){return e[e.Error=0]="Error",e[e.Warn=1]="Warn",e[e.Info=2]="Info",e[e.Debug=3]="Debug",e[e.Verbose=4]="Verbose",e[e.Fatal=5]="Fatal",e})({}),Oo=(function(e){return e[e.Undefined=0]="Undefined",e[e.Exactly=1]="Exactly",e[e.AtMost=2]="AtMost",e})({}),us=(function(e){return e[e.Default=0]="Default",e[e.Text=1]="Text",e})({}),Ho=(function(e){return e[e.Visible=0]="Visible",e[e.Hidden=1]="Hidden",e[e.Scroll=2]="Scroll",e})({}),jo=(function(e){return e[e.Static=0]="Static",e[e.Relative=1]="Relative",e[e.Absolute=2]="Absolute",e})({}),St=(function(e){return e[e.Undefined=0]="Undefined",e[e.Point=1]="Point",e[e.Percent=2]="Percent",e[e.Auto=3]="Auto",e})({}),Jo=(function(e){return e[e.NoWrap=0]="NoWrap",e[e.Wrap=1]="Wrap",e[e.WrapReverse=2]="WrapReverse",e})({}),ml={ALIGN_AUTO:Zt.Auto,ALIGN_FLEX_START:Zt.FlexStart,ALIGN_CENTER:Zt.Center,ALIGN_FLEX_END:Zt.FlexEnd,ALIGN_STRETCH:Zt.Stretch,ALIGN_BASELINE:Zt.Baseline,ALIGN_SPACE_BETWEEN:Zt.SpaceBetween,ALIGN_SPACE_AROUND:Zt.SpaceAround,ALIGN_SPACE_EVENLY:Zt.SpaceEvenly,BOX_SIZING_BORDER_BOX:cs.BorderBox,BOX_SIZING_CONTENT_BOX:cs.ContentBox,DIMENSION_WIDTH:ls.Width,DIMENSION_HEIGHT:ls.Height,DIRECTION_INHERIT:lA.Inherit,DIRECTION_LTR:lA.LTR,DIRECTION_RTL:lA.RTL,DISPLAY_FLEX:To.Flex,DISPLAY_NONE:To.None,DISPLAY_CONTENTS:To.Contents,EDGE_LEFT:$t.Left,EDGE_TOP:$t.Top,EDGE_RIGHT:$t.Right,EDGE_BOTTOM:$t.Bottom,EDGE_START:$t.Start,EDGE_END:$t.End,EDGE_HORIZONTAL:$t.Horizontal,EDGE_VERTICAL:$t.Vertical,EDGE_ALL:$t.All,ERRATA_NONE:Zr.None,ERRATA_STRETCH_FLEX_BASIS:Zr.StretchFlexBasis,ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING:Zr.AbsolutePositionWithoutInsetsExcludesPadding,ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE:Zr.AbsolutePercentAgainstInnerSize,ERRATA_ALL:Zr.All,ERRATA_CLASSIC:Zr.Classic,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:Il.WebFlexBasis,FLEX_DIRECTION_COLUMN:WA.Column,FLEX_DIRECTION_COLUMN_REVERSE:WA.ColumnReverse,FLEX_DIRECTION_ROW:WA.Row,FLEX_DIRECTION_ROW_REVERSE:WA.RowReverse,GUTTER_COLUMN:Lo.Column,GUTTER_ROW:Lo.Row,GUTTER_ALL:Lo.All,JUSTIFY_FLEX_START:$r.FlexStart,JUSTIFY_CENTER:$r.Center,JUSTIFY_FLEX_END:$r.FlexEnd,JUSTIFY_SPACE_BETWEEN:$r.SpaceBetween,JUSTIFY_SPACE_AROUND:$r.SpaceAround,JUSTIFY_SPACE_EVENLY:$r.SpaceEvenly,LOG_LEVEL_ERROR:en.Error,LOG_LEVEL_WARN:en.Warn,LOG_LEVEL_INFO:en.Info,LOG_LEVEL_DEBUG:en.Debug,LOG_LEVEL_VERBOSE:en.Verbose,LOG_LEVEL_FATAL:en.Fatal,MEASURE_MODE_UNDEFINED:Oo.Undefined,MEASURE_MODE_EXACTLY:Oo.Exactly,MEASURE_MODE_AT_MOST:Oo.AtMost,NODE_TYPE_DEFAULT:us.Default,NODE_TYPE_TEXT:us.Text,OVERFLOW_VISIBLE:Ho.Visible,OVERFLOW_HIDDEN:Ho.Hidden,OVERFLOW_SCROLL:Ho.Scroll,POSITION_TYPE_STATIC:jo.Static,POSITION_TYPE_RELATIVE:jo.Relative,POSITION_TYPE_ABSOLUTE:jo.Absolute,UNIT_UNDEFINED:St.Undefined,UNIT_POINT:St.Point,UNIT_PERCENT:St.Percent,UNIT_AUTO:St.Auto,WRAP_NO_WRAP:Jo.NoWrap,WRAP_WRAP:Jo.Wrap,WRAP_WRAP_REVERSE:Jo.WrapReverse},gs=ml;function Ko(e){function t(A,o,i){let a=A[o];A[o]=function(){for(var s=arguments.length,c=new Array(s),l=0;l<s;l++)c[l]=arguments[l];return i.call(this,a,...c)}}for(let A of["setPosition","setMargin","setFlexBasis","setWidth","setHeight","setMinWidth","setMinHeight","setMaxWidth","setMaxHeight","setPadding","setGap"]){let o={[St.Point]:e.Node.prototype[A],[St.Percent]:e.Node.prototype[`${A}Percent`],[St.Auto]:e.Node.prototype[`${A}Auto`]};t(e.Node.prototype,A,function(i){for(var a=arguments.length,s=new Array(a>1?a-1:0),c=1;c<a;c++)s[c-1]=arguments[c];let l=s.pop(),u,p;if(l==="auto")u=St.Auto,p=void 0;else if(typeof l=="object")u=l.unit,p=l.valueOf();else if(u=typeof l=="string"&&l.endsWith("%")?St.Percent:St.Point,p=parseFloat(l),l!==void 0&&!Number.isNaN(l)&&Number.isNaN(p))throw new Error(`Invalid value ${l} for ${A}`);if(!o[u])throw new Error(`Failed to execute "${A}": Unsupported unit '${l}'`);return p!==void 0?o[u].call(this,...s,p):o[u].call(this,...s)})}function r(A){return e.MeasureCallback.implement({measure:function(){let{width:o,height:i}=A(...arguments);return{width:o??NaN,height:i??NaN}}})}t(e.Node.prototype,"setMeasureFunc",function(A,o){return o?A.call(this,r(o)):this.unsetMeasureFunc()});function n(A){return e.DirtiedCallback.implement({dirtied:A})}return t(e.Node.prototype,"setDirtiedFunc",function(A,o){A.call(this,n(o))}),t(e.Config.prototype,"free",function(){e.Config.destroy(this)}),t(e.Node,"create",(A,o)=>o?e.Node.createWithConfig(o):e.Node.createDefault()),t(e.Node.prototype,"free",function(){e.Node.destroy(this)}),t(e.Node.prototype,"freeRecursive",function(){for(let A=0,o=this.getChildCount();A<o;++A)this.getChild(0).freeRecursive();this.free()}),t(e.Node.prototype,"calculateLayout",function(A){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:NaN,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:lA.LTR;return A.call(this,o,i,a)}),{Config:e.Config,Node:e.Node,...gs}}async function ps(){return Ko(await ss())}var qA=null;async function Bl(){return qA||(qA=await ps(),qA)}function bl(e,t){switch(t){case"center":return e.JUSTIFY_CENTER;case"end":return e.JUSTIFY_FLEX_END;case"space-between":return e.JUSTIFY_SPACE_BETWEEN;case"space-around":return e.JUSTIFY_SPACE_AROUND;default:return e.JUSTIFY_FLEX_START}}function El(e,t){switch(t){case"center":return e.ALIGN_CENTER;case"end":return e.ALIGN_FLEX_END;case"stretch":return e.ALIGN_STRETCH;default:return e.ALIGN_FLEX_START}}function Cl(e,t){switch(t){case"start":return e.ALIGN_FLEX_START;case"center":return e.ALIGN_CENTER;case"end":return e.ALIGN_FLEX_END;case"stretch":return e.ALIGN_STRETCH;case"baseline":return e.ALIGN_BASELINE;default:return e.ALIGN_AUTO}}function Hr(e){if(e!=null){if(typeof e=="number"||typeof e=="string")return e;if(typeof e=="object"){if("unit"in e&&typeof e.unit=="number")return e;let t=Number(e);if(!Number.isNaN(t))return t}}}function yl(e){switch(e.kind){case"flex":return e.dir??"row";case"block":return"column";case"box":return e.children&&e.children.length>0?"column":null;default:return null}}function Ql(e){if(e.kind==="block")return"fill"}function xl(e){let t=0;if(e.kind==="flex"||e.kind==="block"){let i=Hr(e.gap);t=typeof i=="number"?i:0}let r=0;if(e.kind==="flex"||e.kind==="block"||e.kind==="box"||e.kind==="text"){let i=Hr(e.padding);r=typeof i=="number"?i:0}let n="start";e.kind==="flex"&&(n=e.justify??"start");let A="start";(e.kind==="flex"||e.kind==="block")&&(A=e.align??"start");let o=!1;return e.kind==="flex"&&(o=typeof e.wrap=="boolean"?e.wrap:!1),{gap:t,padding:r,justify:n,align:A,wrap:o}}function uA(e){let t=e;return t.position==="absolute"||t.position===void 0&&(t.x!==void 0||t.y!==void 0)}function wl(e){return"children"in e&&e.children?e.children.filter(t=>!uA(t)):[]}function Dl(e){return"children"in e&&e.children?e.children.filter(t=>uA(t)):[]}function ds(e,t,r,n,A){let o=t,i=e.Node.create(),a=yl(o),s=a!==null,c=[];if(uA(o)){i.setPositionType(e.POSITION_TYPE_ABSOLUTE);let Q=Hr(o.x),x=Hr(o.y);Q!==void 0&&i.setPosition(e.EDGE_LEFT,Q),x!==void 0&&i.setPosition(e.EDGE_TOP,x)}else i.setPositionType(e.POSITION_TYPE_RELATIVE);let u=Hr(o.grow);u!==void 0&&i.setFlexGrow(typeof u=="number"?u:parseFloat(u));let p=Hr(o.flexShrink);p!==void 0?i.setFlexShrink(typeof p=="number"?p:parseFloat(p)):i.setFlexShrink(A!==null?1:0),o.flexBasis!==void 0&&i.setFlexBasis(o.flexBasis),o.alignSelf!==void 0&&i.setAlignSelf(Cl(e,o.alignSelf));let g=o.width??Ql(o),f=o.height,b=A==="row",v=A==="column";if(fs(i,"width",g,r?.width,b),fs(i,"height",f,r?.height,v),s){let Q=xl(o);i.setFlexDirection(a==="row"?e.FLEX_DIRECTION_ROW:e.FLEX_DIRECTION_COLUMN),i.setJustifyContent(bl(e,Q.justify)),i.setAlignItems(El(e,Q.align)),i.setFlexWrap(Q.wrap?e.WRAP_WRAP:e.WRAP_NO_WRAP),Q.padding>0&&i.setPadding(e.EDGE_ALL,Q.padding),Q.gap>0&&i.setGap(e.GUTTER_ALL,Q.gap);let x=wl(o),_=Dl(o),y=[...x,..._];for(let M=0;M<y.length;M++){let T=ds(e,y[M],void 0,n,uA(o)?null:a);i.insertChild(T.yogaNode,M),c.push(T)}}else if(o.kind==="text"||o.kind==="media"&&o.dataType==="Caption")i.setMeasureFunc((Q,x,_,y)=>{let M;(x===1||x===2)&&(M=Q);let T=n?.(o,M)??{width:0,height:0},N=T.width,O=T.height;return x===1&&(N=Q),y===1&&(O=_),{width:N,height:O}});else{let Q=n?.(o)??null;if(Q){let x=o.aspectRatio!==void 0,_=o.kind==="media"&&o.dataType==="Caption",y=Q.height>0?Q.width/Q.height:1;o.kind==="media"&&!_&&!x&&i.setAspectRatio(y);let M=g===void 0||g==="auto"||g==="fit",T=f===void 0||f==="auto"||f==="fit";if(M&&T){let N=o.aspectRatio??(o.kind==="media"?y:void 0)??1;i.setMeasureFunc((O,D,H,V)=>{let P=Q.width,z=Q.height;if(D===1&&V===1)P=O,z=H;else if(D===1)P=O,z=N>0?Math.round(O/N):Q.height;else if(V===1)z=H,P=N>0?Math.round(H*N):Q.width;else if(D===2&&V===2){let ee=Math.min(1,O/Q.width,H/Q.height);P=Math.round(Q.width*ee),z=Math.round(Q.height*ee)}else D===2?Q.width>O&&(P=O,z=N>0?Math.round(O/N):Q.height):V===2&&Q.height>H&&(z=H,P=N>0?Math.round(H*N):Q.width);return{width:P,height:z}})}else if(M){let N=o.aspectRatio??(o.kind==="media"?y:void 0);(N===void 0||N<=0)&&i.setWidth(Q.width)}else if(T){let N=o.aspectRatio??(o.kind==="media"?y:void 0);(N===void 0||N<=0)&&i.setHeight(Q.height)}}}return{yogaNode:i,layoutNode:o,children:c}}function fs(e,t,r,n,A){if(r===void 0||r==="auto"||r==="fit")return;let o=Hr(r);if(typeof o=="number"){t==="width"?e.setWidth(o):e.setHeight(o);return}if(o==="fill"){if(A){e.getFlexGrow()===0&&e.setFlexGrow(1),e.setFlexBasis(0);return}n!==void 0?t==="width"?e.setWidth(n):e.setHeight(n):t==="width"?e.setWidthPercent(100):e.setHeightPercent(100)}}function hs(e,t,r,n,A){let o=e.yogaNode.getComputedLayout(),i=t+o.left,a=r+o.top,s=o.width,c=o.height,l=e.layoutNode;uA(l)||(i+=Number(l.x??0),a+=Number(l.y??0)),n[e.layoutNode.id]={x:Math.round(i*1e3)/1e3,y:Math.round(a*1e3)/1e3,width:Math.round(s*1e3)/1e3,height:Math.round(c*1e3)/1e3},A[e.layoutNode.id]={width:Math.round(s*1e3)/1e3,height:Math.round(c*1e3)/1e3};for(let u of e.children)hs(u,i,a,n,A)}function Is(e){for(let t of e.children)Is(t);e.yogaNode.free()}function vl(e,t){let{layout:r,viewport:n,measure:A}=t,o={},i={};for(let a of r){let s=e.Node.create();s.setWidth(n.width),s.setHeight(n.height),s.setFlexDirection(e.FLEX_DIRECTION_COLUMN);let c=ds(e,a,{width:n.width,height:n.height},A,null);s.insertChild(c.yogaNode,0),s.calculateLayout(n.width,n.height);let l=c.yogaNode.getComputedLayout(),u=a.position==="absolute"||a.position===void 0&&(a.x!==void 0||a.y!==void 0),p=u?l.left:Number(a.x??0),g=u?l.top:Number(a.y??0);o[a.id]={x:Math.round(p*1e3)/1e3,y:Math.round(g*1e3)/1e3,width:Math.round(l.width*1e3)/1e3,height:Math.round(l.height*1e3)/1e3},i[a.id]={width:Math.round(l.width*1e3)/1e3,height:Math.round(l.height*1e3)/1e3};for(let f of c.children)hs(f,p,g,o,i);Is(c),s.free()}return{rects:o,sizes:i}}async function sd(e){let t=await Bl();return vl(t,e)}q();q();var _l=/-?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?/gi,Ml=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g;function ms(e){let t=[],r=[],n=0,A=0,o=0,i=0,a=0,s=0,c="",l=u=>{r.length>1&&t.push({pts:r,closed:u}),r=[]};for(let u of e.matchAll(Ml)){let p=u[1],g=(u[2].match(_l)??[]).map(Number),f=p===p.toLowerCase(),b=p.toUpperCase(),v=0,Q=y=>{let M=g.slice(v,v+y);return v+=y,M},x=y=>v+y<=g.length;if(b==="Z"){n=o,A=i,l(!0),r=[[n,A]],c=b;continue}let _=!0;for(;x(b==="H"||b==="V"?1:b==="A"?7:b==="C"?6:b==="S"||b==="Q"?4:2);){if(b==="M"){let[y,M]=Q(2);n=f?n+y:y,A=f?A+M:M,_?(l(!1),o=n,i=A,r=[[n,A]]):r.push([n,A])}else if(b==="L"||b==="T"){let[y,M]=Q(2),T=f?n+y:y,N=f?A+M:M;if(b==="T"){let O=c==="Q"||c==="T"?2*n-a:n,D=c==="Q"||c==="T"?2*A-s:A;Bs(r,n,A,O,D,T,N),a=O,s=D}else r.push([T,N]);n=T,A=N}else if(b==="H"){let[y]=Q(1);n=f?n+y:y,r.push([n,A])}else if(b==="V"){let[y]=Q(1);A=f?A+y:y,r.push([n,A])}else if(b==="C"||b==="S"){let y,M;if(b==="C"){let[ee,Y]=Q(2);y=f?n+ee:ee,M=f?A+Y:Y}else y=c==="C"||c==="S"?2*n-a:n,M=c==="C"||c==="S"?2*A-s:A;let[T,N,O,D]=Q(4),H=f?n+T:T,V=f?A+N:N,P=f?n+O:O,z=f?A+D:D;for(let ee=1;ee<=16;ee++){let Y=ee/16,$=1-Y;r.push([$*$*$*n+3*$*$*Y*y+3*$*Y*Y*H+Y*Y*Y*P,$*$*$*A+3*$*$*Y*M+3*$*Y*Y*V+Y*Y*Y*z])}a=H,s=V,n=P,A=z}else if(b==="Q"){let[y,M,T,N]=Q(4),O=f?n+y:y,D=f?A+M:M,H=f?n+T:T,V=f?A+N:N;Bs(r,n,A,O,D,H,V),a=O,s=D,n=H,A=V}else if(b==="A"){let[y,M,T,N,O,D,H]=Q(7),V=f?n+D:D,P=f?A+H:H;Sl(r,n,A,y,M,T,N!==0,O!==0,V,P),n=V,A=P}_=!1,c=b,b==="M"&&(c="L")}c=b}return l(!1),t}function Bs(e,t,r,n,A,o,i){for(let a=1;a<=16;a++){let s=a/16,c=1-s;e.push([c*c*t+2*c*s*n+s*s*o,c*c*r+2*c*s*A+s*s*i])}}function Sl(e,t,r,n,A,o,i,a,s,c){let l=Math.abs(n),u=Math.abs(A);if(l===0||u===0){e.push([s,c]);return}let p=o*Math.PI/180,g=Math.cos(p),f=Math.sin(p),b=(t-s)/2,v=(r-c)/2,Q=g*b+f*v,x=-f*b+g*v,_=Q*Q/(l*l)+x*x/(u*u);_>1&&(l*=Math.sqrt(_),u*=Math.sqrt(_));let y=l*l*u*u-l*l*x*x-u*u*Q*Q,M=l*l*x*x+u*u*Q*Q,T=Math.sqrt(Math.max(0,y/M));i===a&&(T=-T);let N=T*l*x/u,O=-T*u*Q/l,D=g*N-f*O+(t+s)/2,H=f*N+g*O+(r+c)/2,V=(Y,$,W,te)=>Math.atan2(Y*te-$*W,Y*W+$*te),P=V(1,0,(Q-N)/l,(x-O)/u),z=V((Q-N)/l,(x-O)/u,(-Q-N)/l,(-x-O)/u);!a&&z>0&&(z-=2*Math.PI),a&&z<0&&(z+=2*Math.PI);let ee=Math.max(4,Math.ceil(Math.abs(z)/(Math.PI/2)*16));for(let Y=1;Y<=ee;Y++){let $=P+z*Y/ee,W=l*Math.cos($),te=u*Math.sin($);e.push([g*W-f*te+D,f*W+g*te+H])}}function bs(e,t){let r=e.closed?[...e.pts,e.pts[0]]:e.pts,n=[0];for(let s=1;s<r.length;s++)n.push(n[s-1]+Math.hypot(r[s][0]-r[s-1][0],r[s][1]-r[s-1][1]));let A=n[n.length-1],o=[];if(A<=0){for(let s=0;s<t;s++)o.push([r[0][0],r[0][1]]);return o}let i=e.closed?t:t-1,a=0;for(let s=0;s<t;s++){let c=A*s/i;for(;a<n.length-2&&n[a+1]<c;)a++;let l=n[a+1]-n[a],u=l>0?(c-n[a])/l:0;o.push([r[a][0]+(r[a+1][0]-r[a][0])*u,r[a][1]+(r[a+1][1]-r[a][1])*u])}return o}function Es(e){let t=0;for(let r=0;r<e.length;r++){let n=e[(r+1)%e.length];t+=e[r][0]*n[1]-n[0]*e[r][1]}return t/2}function Cs(e){let t=0,r=0;for(let n of e)t+=n[0],r+=n[1];return[t/e.length,r/e.length]}function Gl(e,t,r){if(!r){let s=Math.hypot(e[0][0]-t[0][0],e[0][1]-t[0][1]);return Math.hypot(e[0][0]-t[t.length-1][0],e[0][1]-t[t.length-1][1])<s?[...t].reverse():t}let n=Math.sign(Es(e))!==Math.sign(Es(t))?[...t].reverse():t,A=e.length,o=0,i=Number.POSITIVE_INFINITY,a=s=>{let c=0;for(let l=0;l<A;l+=2){let u=n[(l+s)%A];c+=(e[l][0]-u[0])**2+(e[l][1]-u[1])**2}return c};for(let s=0;s<A;s+=4){let c=a(s);c<i&&(i=c,o=s)}for(let s=o-3;s<=o+3;s++){let c=(s+A)%A,l=a(c);l<i&&(i=l,o=c)}return e.map((s,c)=>n[(c+o)%A])}var XA=new Map;function Pl(e,t){let r=`${e}\0${t}`,n=XA.get(r);if(n)return n;let A=ms(e),o=ms(t),i=Math.max(A.length,o.length),a={a:[],b:[],closed:[]};for(let s=0;s<i;s++){let c=A[s],l=o[s],u=(c?.closed??!0)&&(l?.closed??!0),p=c?bs(c,128):void 0,g=l?bs(l,128):void 0;if(!p&&g){let f=Cs(g);p=g.map(()=>[f[0],f[1]])}if(!g&&p){let f=Cs(p);g=p.map(()=>[f[0],f[1]])}!p||!g||(a.a.push(p),a.b.push(Gl(p,g,u)),a.closed.push(u))}return XA.size>256&&XA.clear(),XA.set(r,a),a}var ys=e=>(Math.round(e*100)/100).toString();function Qs(e,t,r){if(r<=0)return e;if(r===1)return t;let n=Pl(e,t),A=[];for(let o=0;o<n.a.length;o++){let i=n.a[o],a=n.b[o],s="";for(let c=0;c<i.length;c++){let l=i[c][0]+(a[c][0]-i[c][0])*r,u=i[c][1]+(a[c][1]-i[c][1])*r;s+=`${c===0?"M":"L"}${ys(l)} ${ys(u)}`}A.push(n.closed[o]?`${s}Z`:s)}return A.join("")}function xs(e,t){let r=Math.floor(e)^t*1013|0;return r=Math.imul(r^r>>>15,r|1),r^=r+Math.imul(r^r>>>7,r|61),((r^r>>>14)>>>0)/4294967295*2-1}function Rl(e,t){let r=Math.floor(e),n=r+1,A=e-r,o=A*A*(3-2*A),i=xs(r,t),a=xs(n,t),s=i*A,c=a*(A-1);return(s*(1-o)+c*o)*2}function Fl(e,t,r=0){let n=e.frequency??2,A=e.amplitude??50,o=Math.max(1,Math.min(4,e.octaves??1)),i=e.seed??1234,a=0,s=0,c=1,l=n;for(let p=0;p<o;p++){let g=Rl(t*l,i+p*7919);a+=g*c,s+=c,c*=.5,l*=2}let u=s>0?a/s:0;return r+u*A}function Ul(e,t,r,n){if(t<=0)return r;let A=Math.max(.001,e.mass??1),o=Math.max(.001,e.stiffness??180),i=Math.max(.001,e.damping??12),a=Math.sqrt(o/A),s=i/(2*Math.sqrt(o*A)),c=1;if(s<1){let l=a*Math.sqrt(1-s*s),u=-1,p=-s*a/l;c=1+Math.exp(-s*a*t)*(u*Math.cos(l*t)+p*Math.sin(l*t))}else if(Math.abs(s-1)<1e-4)c=1+Math.exp(-a*t)*(-1-a*t);else{let l=Math.sqrt(s*s-1),u=-a*(s-l),p=-a*(s+l),g=-1/(1-u/p),f=-1-g;c=1+g*Math.exp(u*t)+f*Math.exp(p*t)}return r+(n-r)*c}function ht(e,t,r){if(e==null)return 0;if(typeof e=="number")return e;if(typeof e=="function")return Number(e(t,r))||0;if(Array.isArray(e)||ArrayBuffer.isView(e)){let n=e;if(n.length===0)return 0;let A=Math.max(0,Math.min(n.length-1,Math.round(t)));return Number(n[A])||0}if(typeof e=="object"){let n=e;if(typeof n.get=="function")return Number(n.get({frame:t,fps:r,time:r>0?t/r:0}))||0;if(n.type==="Signal"&&n.data)return ht(n.data,t,r);let A=n.samples??(typeof n.channel=="string"&&n[n.channel]!==void 0?n[n.channel]:void 0);if(Array.isArray(A)||ArrayBuffer.isView(A)){let o=A;if(o.length===0)return 0;let i=Number(n.fps)||24,a=r>0?r:24,s=t/a,c=Math.max(0,Math.min(o.length-1,Math.round(s*i)));return Number(o[c])||0}if(n.type==="audio_extractor"||n.extractionMode!==void 0){let o=n.nodeId;if(o){let i=n.channel??"primary",a=Xi.getChannelSamples(o,i);if(a&&a.length>0){let s=Number(n.fps)||24,c=r>0?r:24,l=t/c,u=Math.max(0,Math.min(a.length-1,Math.round(l*s)));return Number(a[u])||0}}return 0}if(n.type==="generator"){let o=typeof n.amplitude=="number"?n.amplitude:1,i=typeof n.frequency=="number"?n.frequency:1;if(n.syncToBpm&&typeof n.bpm=="number"&&n.bpm>0){let Q=typeof n.bars=="number"&&n.bars>0?n.bars:1;i=n.bpm/60/Q}let a=typeof n.phase=="number"?n.phase:0,s=typeof n.offset=="number"?n.offset:0,c=t/(r>0?r:24),l=n.baseType??"sine",u=!!n.fmEnabled,p=c;if(u){let Q=Number(n.fmAmplitude)||1,x=Number(n.fmFrequency)||.5;p=c+Math.sin(c*x*Math.PI*2)*Q}let g=0,f=(p*i+a/(Math.PI*2))%1,b=f<0?f+1:f,v=Q=>(Q%1+1)%1;switch(l){case"triangle":g=4*Math.abs(b-.5)-1;break;case"sawtooth":g=2*b-1;break;case"square":g=b<.5?1:-1;break;case"constant":g=1;break;case"noise_smooth":{let Q=p*i+a,x=Math.floor(Q),_=Q-x,y=_*_*(3-2*_),M=v(Math.sin(x*12.9898)*43758.5453),T=v(Math.sin((x+1)*12.9898)*43758.5453);g=(M*(1-y)+T*y)*2-1;break}case"noise_white":g=v(Math.sin(p*12.9898+a)*43758.5453)*2-1;break;case"pulse":{let Q=a===0?.5:Math.max(.01,Math.min(.99,a));g=v(p*i)<Q?1:-1;break}case"bounce":g=Math.abs(Math.sin(p*i*Math.PI+a));break;case"staircase":g=Math.floor(b*8)/7*2-1;break;default:g=Math.sin(p*i*Math.PI*2+a);break}return g*o+s}if(n.type==="gate"){let o=n.sourceSignal??n.signal,i=typeof n.threshold=="number"?n.threshold:.5,a=n.mode??"gate",s=!!n.invert,c=typeof n.debounceMs=="number"?n.debounceMs:0,l=Math.max(1,Math.round(c/1e3*r)),u=Math.max(1,Number(n.holdFrames)||4),p=0;if(a==="gate")p=ht(o,t,r)>=i?1:0;else if(a==="trigger"){let g=-1/0,f=Math.max(0,t-300);for(let b=f;b<=t;b++){let v=ht(o,b,r),Q=b>0?ht(o,b-1,r):0;v>=i&&Q<i&&b-g>=l&&(g=b)}p=t>=g&&t<g+u?1:0}else if(a==="toggle"){let g=0,f=-1/0;for(let b=0;b<=t;b++){let v=ht(o,b,r),Q=b>0?ht(o,b-1,r):0;v>=i&&Q<i&&b-f>=l&&(g++,f=b)}p=g%2===1?1:0}return s?1-p:p}if(n.type==="signal_math"){let o=ht(n.signalA,t,r),a=n.signalB!==void 0?ht(n.signalB,t,r):Number(n.bValue)||0;switch(n.operation){case"add":return o+a;case"subtract":return o-a;case"multiply":return o*a;case"divide":return a!==0?o/a:0;case"min":return Math.min(o,a);case"max":return Math.max(o,a);case"clamp":{let s=Number(n.clampMin)||0,c=Number(n.clampMax)||1;return Math.max(s,Math.min(c,o))}case"abs":return Math.abs(o);case"negate":return-o;case"invert":return 1-o;case"power":return o**(Number(n.exponent)||2);case"modulo":return a!==0?o%a:0;case"remap":{let s=Number(n.inMin)||0,c=Number(n.inMax)||1,l=Number(n.outMin)||0,u=Number(n.outMax)||1,p=c-s,g=p!==0?(o-s)/p:0;return l+g*(u-l)}case"normalize":{let s=Number(n.aMin??n.inMin)||0,l=(Number(n.aMax??n.inMax)||1)-s;return l!==0?Math.max(0,Math.min(1,(o-s)/l)):0}case"smoothstep":{let s=Number(n.edge0)||0,l=(Number(n.edge1)||1)-s,u=l!==0?Math.max(0,Math.min(1,(o-s)/l)):0;return u*u*(3-2*u)}case"custom":return o;default:return o}}if(typeof n.value=="number")return n.value}return 0}function kl(e,t,r,n=.15,A=2){if(t<0||!e)return 0;let o=e,i=0,a=-1/0;for(let s=0;s<=t;s++){let c=ht(o,s,r),l=s>0?ht(o,s-1,r):0;c>=n&&l<n&&s-a>=A&&(i++,a=s)}return i}function Nl(e,t,r,n={}){let A=n[e.inputHandleId];if(A===void 0&&n){let p=Object.keys(n);if(p.length===1)A=n[p[0]];else if(p.length>1){let g=p.find(f=>f===e.inputHandleId);A=g?n[g]:n[p[0]]}}if(e.channel&&A&&typeof A=="object"){let p=A[e.channel];p!==void 0?A=p:typeof A.get!="function"&&(A={...A,channel:e.channel})}if(e.signalMode==="accumulate"){let p=e.threshold??e.accumulateThreshold??.15,g=e.debounceFrames??2,f=kl(A,t,r,p,g),b=e.multiplier??1,v=e.offset??0;return f*b+v}let o=e.multiplier??1,i=e.offset??0,a=Math.max(0,Math.round(e.smoothingWindowFrames??0));if(a<=1)return ht(A,t,r)*o+i;let s=0,c=0,l=Math.max(0,t-a+1);for(let p=l;p<=t;p++)s+=ht(A,p,r),c++;return(c>0?s/c:0)*o+i}function Tl(e,t,r){return e+(t-e)*r}function Ll(e){let t=e.trim().replace("#","");if(t.length===3&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),t.length===6){let r=parseInt(t,16);return[r>>16&255,r>>8&255,r&255,1]}if(t.length===8){let r=parseInt(t,16);return[r>>24&255,r>>16&255,r>>8&255,(r&255)/255]}return[255,255,255,1]}function ws(e,t,r){return Wi(e,t,r)}function Vo(e,t,r){let n=r;return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function Ol(e,t){let[r,n,A,o]=Ll(e),i=r/255,a=n/255,s=A/255,c=Math.max(i,a,s),l=Math.min(i,a,s),u=0,p=0,g=(c+l)/2;if(c!==l){let x=c-l;switch(p=g>.5?x/(2-c-l):x/(c+l),c){case i:u=(a-s)/x+(a<s?6:0);break;case a:u=(s-i)/x+2;break;case s:u=(i-a)/x+4;break}u/=6}u=(u+t%1+1)%1;let f=g,b=g,v=g;if(p!==0){let x=g<.5?g*(1+p):g+p-g*p,_=2*g-x;f=Vo(_,x,u+1/3),b=Vo(_,x,u),v=Vo(_,x,u-1/3)}let Q=x=>Math.round(Math.max(0,Math.min(255,x*255))).toString(16).padStart(2,"0");return o>=.999?`#${Q(f)}${Q(b)}${Q(v)}`:`rgba(${Math.round(f*255)}, ${Math.round(b*255)}, ${Math.round(v*255)}, ${Math.round(o*100)/100})`}var Hl=new Set(["fill","fillColor","strokeColor","textBackgroundColor","color"]);function jl(e,t,r,n){let A=e.repeat??0,o=n-r,i=e.durationFrames!==void 0&&e.durationFrames>0?e.durationFrames:o;if(A===0||i<=0){if(t>=n){let p=e.keyframes??[];return{completedValue:p[p.length-1].value}}return{frame:t}}let a=t-r,s=Math.floor(a/i);if(A>0&&s>=1+A){let p=!!e.yoyo&&A%2===1,g=e.keyframes??[];return{completedValue:p?g[0].value:g[g.length-1].value}}let c=a-s*i;return!!e.yoyo&&s%2===1?{frame:c>=o?r:n-c}:{frame:c>=o?n:r+c}}function zo(e,t,r){let n=e.keyframes??[];if(n.length===0)return 0;if(n.length===1)return n[0].value;let A=n[0].frame;if(t<=A)return n[0].value;let o=n[n.length-1].frame,i=jl(e,t,A,o);if("completedValue"in i)return i.completedValue;let a=i.frame;for(let s=0;s<n.length-1;s++){let c=n[s],l=n[s+1];if(a>=c.frame&&a<=l.frame){let u=l.frame-c.frame,p=u>0?(a-c.frame)/u:0,g=r?r(l.ease??c.ease,u,p):p;if(typeof c.value=="boolean")return p>=1?l.value:c.value;if(typeof c.value=="string"&&typeof l.value=="string")return e.prop==="d"?Qs(c.value,l.value,g):ws(c.value,l.value,g);let f=Number(c.value)||0,b=Number(l.value)||0;return Tl(f,b,g)}}return n[n.length-1].value}function Jl(e,t,r=24,n={}){let A=n.startFrame??0,o=t-A,i=e.source??{type:"keyframe"},a=n.baseValues?.[e.prop];switch(i.type){case"keyframe":return zo(e,o);case"wiggle":{let s=typeof a=="number"?a:0,c=e.keyframes&&e.keyframes.length>0?Number(zo(e,o))||0:s,l=o/(r>0?r:24);return Fl(i,l,c)}case"springOvershoot":{let s=0,c=1;e.keyframes&&e.keyframes.length>=2?(s=Number(e.keyframes[0].value)||0,c=Number(e.keyframes[1].value)||1):e.keyframes&&e.keyframes.length===1?(s=Number(a)||0,c=Number(e.keyframes[0].value)||0):typeof a=="number"&&(s=a,c=a);let l=o/(r>0?r:24);return Ul(i,l,s,c)}case"signal":{let s=Nl(i,t,r,n.signals);if(Hl.has(e.prop)){let c=i,l=c.colorA??"#ffffff",u=c.colorB??"#ffffff",p=c.colorMode??"interpolate";if(p==="threshold"){let f=c.colorThreshold??.5;return s>=f?u:l}if(p==="hueRotate")return Ol(l,s);let g=Math.max(0,Math.min(1,s));return ws(l,u,g)}return s}default:return zo(e,o)}}function hd(e,t,r=24,n={}){let A={};if(!e?.tracks)return A;for(let o of e.tracks)A[o.prop]=Jl(o,t,r,n);return A}q();var Ds=["x","y","width","height"];function Kl(e){let t=e.matte,{matte:r,...n}=e,A={...n};if(Array.isArray(A.children)&&(A.children=ZA(A.children)),!t?.node)return[A];let o=t.node,i=o.id??`${String(e.id)}__matte`,a={position:"absolute",...o,id:i,matteOf:String(e.id),matteMode:t.mode??"alpha"};if(Ds.every(c=>o[c]===void 0))for(let c of Ds)typeof e[c]=="number"&&(a[c]=e[c]);let s=typeof e.startFrame=="number"?e.startFrame:0;return a.startFrame=s+(typeof o.startFrame=="number"?o.startFrame:0),o.durationFrames===void 0&&e.durationFrames!==void 0&&(a.durationFrames=e.durationFrames),Array.isArray(a.children)&&(a.children=ZA(a.children)),A.matteId=i,[A,a]}function ZA(e){return e.flatMap(t=>Kl(t))}q();function Yo(e,t,r,n="forward"){if(r<=0||t<=1)return 0;switch(n){case"reverse":return(t-1-e)*r;case"center-out":{let A=(t-1)/2,o=Math.abs(e-A);return Math.round(o*r)}case"forward":return e*r;default:return zi(n)}}function Cd(e,t,r="forward",n=0){return!e||e.length===0?[]:t<=0&&n===0?[...e]:e.map((A,o)=>{let i=Yo(o,e.length,t,r),a=A.startFrame??0;return{...A,startFrame:a+i+n}})}q();q();var _s=Symbol.for("framefields.inlineSignal"),vs=new WeakMap,Vl=0;function zl(e){let t=vs.get(e);return t===void 0&&(t=`inline_signal_${Vl++}`,vs.set(e,t)),t}function xd(e){if(typeof e=="string")return{handleId:e};if(e===null||typeof e!="object"&&typeof e!="function")throw new TypeError(`LayerAnimation.signal: expected a signal object or a signal name, got ${String(e)}. Pass a signal (Signal.fromArray / Signal.builder / an audio channel \u2026) or register it with comp.addSignal(name, signal) and pass the name.`);let t=e;return typeof t.inputHandleId=="string"?{handleId:t.inputHandleId}:typeof t.gpuBinding?.nodeId=="string"?typeof t.get=="function"?{handleId:t.gpuBinding.nodeId,inline:e}:{handleId:t.gpuBinding.nodeId}:{handleId:zl(e),inline:e}}function wd(e,t){Object.defineProperty(e,_s,{value:t,enumerable:!1,configurable:!0,writable:!0})}function Yl(e){if(!(!e||typeof e!="object"))return e[_s]}function Wo(e,t={}){for(let r of e){if(!r||typeof r!="object")continue;let{animation:n,children:A}=r,o=n?.tracks;if(Array.isArray(o))for(let i of o){let a=i?.source,s=Yl(a);s&&typeof a?.inputHandleId=="string"&&(t[a.inputHandleId]=s)}Array.isArray(A)&&Wo(A,t)}return t}q();function Wl(e,t){let{fps:r,compositionDurationFrames:n}=t;if(!Number.isInteger(n)||n<=0)throw new Error("A signal timeRemap needs the composition duration (durationFrames or durationMs)");let A=typeof e.signal=="string"?t.signals?.[e.signal]:e.signal;if(A===void 0)throw new Error(`timeRemap signal '${String(e.signal)}' is not a composition signal`);return Li(A)?o=>Number(A.get(Hi(o,r,n))):o=>ht(A,o,r)}function Ms(e,t,r){let n=Wl(e,r);return{kind:"sampled",history:Oi({mode:e.mode,fps:r.fps,startFrame:t.startFrame,durationFrames:t.durationFrames,sourceStartSec:e.sourceStartSec,sample:n})}}function Ss(e,t,r,n=0,A,o,i){if(e.kind==="media"&&e.timeRemap!==void 0){let y=ji.safeParse(e.timeRemap);if(!y.success)throw new Error(`Invalid timeRemap on '${e.id}': ${y.error.message}`);let M=Ji(y.data,e.durationFrames??0);if(M)throw new Error(`Invalid timeRemap on '${e.id}': ${M}`);if(e.trimStartSec!==void 0||e.dataType!=="Video"&&e.dataType!=="Audio")throw new Error(`Invalid timeRemap on '${e.id}': use audio or video without trimStartSec`)}let a=[],s=e.kind==="media"?e.src??e.inputHandleId:"inputHandleId"in e?e.inputHandleId:void 0,c=y=>typeof y=="string"&&(y.startsWith("http://")||y.startsWith("https://")||y.startsWith("file://")||y.startsWith("/")||y.startsWith("./")||y.startsWith("blob:")||y.startsWith("data:")||/\.(png|jpe?g|webp|gif|svg|mp4|webm|mov|mkv|mp3|wav|ogg|m4a|srt|vtt|json|lottie)$/i.test(y)),l;if(e.kind==="media"){if(t&&e.inputHandleId&&(l=t(e.inputHandleId)),!l&&s&&(c(s)||e.src)&&(l=Ki(s,e.dataType??"Video")),!l&&!t&&s&&(s.includes(".")||s.includes("/"))&&console.warn(`[Compositor] Media layer '${e.id??"?"}' source '${s}' could not be resolved.`),l&&e.crop){let y=e.crop,M=typeof y.toOperation=="function"?y.toOperation():y;l={metadata:{...l.metadata},operation:{op:"Crop",...M,dataType:l.operation.dataType},children:[l]}}if(l&&Array.isArray(e.effects)){let y=l;for(let M of e.effects){let T=M&&typeof M.toOperation=="function"?M.toOperation():M;y={metadata:{...y.metadata},operation:{op:String(T.op??"effect"),id:e.id?`${e.id}-${T.op??"effect"}`:void 0,effect:M,...T,dataType:y.operation.dataType},children:[y]}}l=y}if(l&&e.vision){let y=e.vision,M=typeof y.toOperation=="function"?y.toOperation():y;l={metadata:{...l.metadata},operation:{op:"Vision",id:e.id,effect:y,...M,dataType:l.operation.dataType},children:[l]}}}if(e.kind==="media")a=l?[l]:[];else if("children"in e&&e.children){let y=e.kind==="flex"&&typeof e.staggerFrames=="number"?e.staggerFrames:0,M=e.kind==="flex"&&typeof e.staggerDirection=="string"?e.staggerDirection:"forward",T=typeof e.startFrame=="number"&&Number.isFinite(e.startFrame)?Math.round(e.startFrame):0,N=typeof e.durationFrames=="number"&&Number.isFinite(e.durationFrames)?Math.round(e.durationFrames):o,O=e.children;a=O.map((D,H)=>{let V=Yo(H,O.length,y,M),P=n+T+V;return Ss(D,t,r,P,A,D.durationFrames===void 0?N:void 0,i)})}let u="Image",p;if(l){u=l.operation?.dataType??"Image";let M=u==="Image"||u==="SVG"?void 0:Vi(l)?.durationMs;M!=null&&(p=Math.max(1,Math.round(M/1e3*r)))}let g=l?.operation?.dataType==="Caption",f=e.kind==="flex"||e.kind==="block"||e.kind==="box",b=(typeof e.startFrame=="number"&&Number.isFinite(e.startFrame)&&e.startFrame>=0?Math.round(e.startFrame):0)+n,v=typeof e.durationFrames=="number"&&Number.isFinite(e.durationFrames)&&e.durationFrames>0?Math.round(e.durationFrames):void 0,Q=o??Math.round((A??1e4)/1e3*r);if(f&&a.length>0){if(v===void 0){let y=a.map(M=>(M.operation.startFrame??0)+(M.operation.durationFrames??Q));v=Math.max(1,Math.max(...y)-b)}}else g&&p!==void 0&&p>0?v=p:v!==void 0?(u==="Video"||u==="Audio")&&!(e.kind==="media"&&e.timeRemap)&&p!==void 0&&p>0&&(v=Math.min(v,p)):v=p??o??Math.round((A??1e4)/1e3*r);let x=v/r*1e3;if(e.kind==="media"&&l){let y=l;for(;y;)(!y.metadata?.durationMs||y.metadata.durationMs<=0)&&(y.metadata||(y.metadata={}),y.metadata.durationMs=x),y.operation?.sourceMeta&&!y.operation.sourceMeta.durationMs&&(y.operation.sourceMeta.durationMs=x),y=y.children?.[0]}let _=e.kind==="media"&&e.timeRemap?.kind==="signal"?e.timeRemap:void 0;if(_&&!i)throw new Error(`Signal timeRemap on '${e.id}' has no resolver`);return{metadata:{durationMs:x},operation:{op:"CompositorLayer",...e,startFrame:b,durationFrames:v,dataType:u,..._&&i&&{timeRemap:i(_,{id:e.id,startFrame:b,durationFrames:v})}},children:a}}function Nd(e,t){let{isVideoMode:r,fps:n,durationMs:A,resolveMedia:o,signals:i}=t,a={...Wo(e.layout),...i??e.signals??{}},s=t.resolveMediaSignal??((p,g)=>Ms(p,g,{fps:n,compositionDurationFrames:Math.round((A??0)/1e3*n),signals:a})),c={metadata:{width:e.width,height:e.height,fps:n,...A!==void 0&&{durationMs:A}},operation:{op:"Compositor",width:e.width,height:e.height,fps:n,mode:e.mode??"Video",backgroundColor:e.backgroundColor,...e.antialias3d!==void 0&&{antialias3d:e.antialias3d},volume:e.volume??1,dataType:r?"Video":"Image",layout:e.layout,signals:a,...e.onRequestFrame||t.onRequestFrame?{onRequestFrame:e.onRequestFrame??t.onRequestFrame}:{}},children:ZA(e.layout).map(p=>Ss(p,o,n,0,A,void 0,s))},l=Array.isArray(t.effects)?t.effects:Array.isArray(e.effects)?e.effects:[];for(let p of l){let g=p&&typeof p.toOperation=="function"?p.toOperation():p;c={metadata:{...c.metadata},operation:{...g,dataType:c.operation.dataType},children:[c]}}let u=e.vision??t.vision;if(u){let p=typeof u.toOperation=="function"?u.toOperation():u;c={metadata:{...c.metadata},operation:{op:"Vision",...p,dataType:c.operation.dataType},children:[c]}}return c}function Td(e){let t=[],r=n=>{n?.operation?.op==="CompositorLayer"&&t.push(n);for(let A of n?.children??[])r(A)};for(let n of e)r(n);return t}export{hA as a,na as b,ae as c,Ie as d,jr as e,Ps as f,Fr as g,sa as h,IA as i,ro as j,to as k,Tt as l,yu as m,Qu as n,zn as o,Pu as p,EA as q,Ru as r,ju as s,Wn as t,yA as u,SA as v,ns as w,Uf as x,Lf as y,ja as z,Ja as A,Ka as B,yf as C,Va as D,za as E,Pc as F,Df as G,No as H,Kf as I,Bl as J,vl as K,sd as L,xd as M,wd as N,zo as O,Jl as P,hd as Q,ZA as R,Wl as S,Ms as T,Yo as U,Cd as V,Nd as W,Td as X};