@zephyr3d/scene 0.9.26 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +146 -30
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +300 -56
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +177 -3
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +178 -200
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +30475 -19865
  109. package/dist/index.js +67 -12
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/hairstrand.js +235 -235
  118. package/dist/material/hairstrand.js.map +1 -1
  119. package/dist/material/lambert.js +4 -1
  120. package/dist/material/lambert.js.map +1 -1
  121. package/dist/material/material.js +362 -300
  122. package/dist/material/material.js.map +1 -1
  123. package/dist/material/meshmaterial.js +118 -45
  124. package/dist/material/meshmaterial.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  126. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  128. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  130. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  132. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  133. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  134. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  135. package/dist/material/mixins/lit.js +223 -83
  136. package/dist/material/mixins/lit.js.map +1 -1
  137. package/dist/material/mixins/pbr/common.js +31 -206
  138. package/dist/material/mixins/pbr/common.js.map +1 -1
  139. package/dist/material/mtoon.js +1 -1
  140. package/dist/material/mtoon.js.map +1 -1
  141. package/dist/material/pbrmr.js +3 -0
  142. package/dist/material/pbrmr.js.map +1 -1
  143. package/dist/material/pbrsg.js +3 -0
  144. package/dist/material/pbrsg.js.map +1 -1
  145. package/dist/material/sdf_debug.js +78 -0
  146. package/dist/material/sdf_debug.js.map +1 -0
  147. package/dist/material/shader/helper.js +733 -190
  148. package/dist/material/shader/helper.js.map +1 -1
  149. package/dist/material/shader/terrain_blend.js +204 -43
  150. package/dist/material/shader/terrain_blend.js.map +1 -1
  151. package/dist/material/skin.js +331 -297
  152. package/dist/material/skin.js.map +1 -1
  153. package/dist/material/skinprofile.js +1058 -0
  154. package/dist/material/skinprofile.js.map +1 -0
  155. package/dist/material/sss.js +353 -0
  156. package/dist/material/sss.js.map +1 -0
  157. package/dist/material/sss_kernel.js +265 -0
  158. package/dist/material/sss_kernel.js.map +1 -0
  159. package/dist/material/sssprofile.js +879 -0
  160. package/dist/material/sssprofile.js.map +1 -0
  161. package/dist/material/subsurfaceprofile.js +4 -8
  162. package/dist/material/subsurfaceprofile.js.map +1 -1
  163. package/dist/material/terrain-cm.js +464 -188
  164. package/dist/material/terrain-cm.js.map +1 -1
  165. package/dist/material/unlit.js +3 -0
  166. package/dist/material/unlit.js.map +1 -1
  167. package/dist/material/water.js +2009 -201
  168. package/dist/material/water.js.map +1 -1
  169. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  172. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  173. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  174. package/dist/physics/character.js +226 -0
  175. package/dist/physics/character.js.map +1 -0
  176. package/dist/physics/collider.js +209 -0
  177. package/dist/physics/collider.js.map +1 -0
  178. package/dist/physics/events.js +79 -0
  179. package/dist/physics/events.js.map +1 -0
  180. package/dist/physics/joint.js +272 -0
  181. package/dist/physics/joint.js.map +1 -0
  182. package/dist/physics/node_physics.js +234 -0
  183. package/dist/physics/node_physics.js.map +1 -0
  184. package/dist/physics/part.js +91 -0
  185. package/dist/physics/part.js.map +1 -0
  186. package/dist/physics/rigid_body.js +379 -0
  187. package/dist/physics/rigid_body.js.map +1 -0
  188. package/dist/physics/vehicle.js +335 -0
  189. package/dist/physics/vehicle.js.map +1 -0
  190. package/dist/physics/world.js +25 -0
  191. package/dist/physics/world.js.map +1 -0
  192. package/dist/posteffect/bloom.js +49 -14
  193. package/dist/posteffect/bloom.js.map +1 -1
  194. package/dist/posteffect/motionblur.js +668 -63
  195. package/dist/posteffect/motionblur.js.map +1 -1
  196. package/dist/posteffect/posteffect.js +12 -1
  197. package/dist/posteffect/posteffect.js.map +1 -1
  198. package/dist/posteffect/postsss.js +572 -0
  199. package/dist/posteffect/postsss.js.map +1 -0
  200. package/dist/posteffect/sao.js +48 -50
  201. package/dist/posteffect/sao.js.map +1 -1
  202. package/dist/posteffect/skinsss.js +605 -355
  203. package/dist/posteffect/skinsss.js.map +1 -1
  204. package/dist/posteffect/ssgi.js +91 -162
  205. package/dist/posteffect/ssgi.js.map +1 -1
  206. package/dist/posteffect/ssr.js +3 -11
  207. package/dist/posteffect/ssr.js.map +1 -1
  208. package/dist/posteffect/sss.js +34 -15
  209. package/dist/posteffect/sss.js.map +1 -1
  210. package/dist/posteffect/taa.js +1 -0
  211. package/dist/posteffect/taa.js.map +1 -1
  212. package/dist/render/abuffer_oit.js +40 -39
  213. package/dist/render/abuffer_oit.js.map +1 -1
  214. package/dist/render/clipmap.js +328 -62
  215. package/dist/render/clipmap.js.map +1 -1
  216. package/dist/render/cluster_light.js +958 -224
  217. package/dist/render/cluster_light.js.map +1 -1
  218. package/dist/render/cull_visitor.js +26 -5
  219. package/dist/render/cull_visitor.js.map +1 -1
  220. package/dist/render/debug_views.js +37 -0
  221. package/dist/render/debug_views.js.map +1 -0
  222. package/dist/render/depthpass.js +5 -1
  223. package/dist/render/depthpass.js.map +1 -1
  224. package/dist/render/drawable_mixin.js +53 -6
  225. package/dist/render/drawable_mixin.js.map +1 -1
  226. package/dist/render/dualdepthpeeling_oit.js +53 -53
  227. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  228. package/dist/render/envlight.js +196 -113
  229. package/dist/render/envlight.js.map +1 -1
  230. package/dist/render/fbm_wavegenerator.js +8 -13
  231. package/dist/render/fbm_wavegenerator.js.map +1 -1
  232. package/dist/render/fft_wavegenerator.js +268 -136
  233. package/dist/render/fft_wavegenerator.js.map +1 -1
  234. package/dist/render/gerstner_wavegenerator.js +113 -28
  235. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  236. package/dist/render/gi/probe_volume.js +1334 -0
  237. package/dist/render/gi/probe_volume.js.map +1 -0
  238. package/dist/render/gi/scene_gi.js +282 -0
  239. package/dist/render/gi/scene_gi.js.map +1 -0
  240. package/dist/render/gi/voxel_atlas.js +198 -0
  241. package/dist/render/gi/voxel_atlas.js.map +1 -0
  242. package/dist/render/gi/voxel_lighting.js +652 -0
  243. package/dist/render/gi/voxel_lighting.js.map +1 -0
  244. package/dist/render/gi/voxel_scene.js +642 -0
  245. package/dist/render/gi/voxel_scene.js.map +1 -0
  246. package/dist/render/gi/voxelize_pass.js +223 -0
  247. package/dist/render/gi/voxelize_pass.js.map +1 -0
  248. package/dist/render/globalbindgroup_allocator.js +3 -2
  249. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  250. package/dist/render/gpu_picking.js +9 -36
  251. package/dist/render/gpu_picking.js.map +1 -1
  252. package/dist/render/hzb.js +80 -22
  253. package/dist/render/hzb.js.map +1 -1
  254. package/dist/render/instance_culling.js +499 -0
  255. package/dist/render/instance_culling.js.map +1 -0
  256. package/dist/render/lightpass.js +23 -9
  257. package/dist/render/lightpass.js.map +1 -1
  258. package/dist/render/lod.js +46 -0
  259. package/dist/render/lod.js.map +1 -0
  260. package/dist/render/oit.js +11 -11
  261. package/dist/render/oit.js.map +1 -1
  262. package/dist/render/primitive.js +301 -9
  263. package/dist/render/primitive.js.map +1 -1
  264. package/dist/render/primitive_readback.js +209 -0
  265. package/dist/render/primitive_readback.js.map +1 -0
  266. package/dist/render/render_queue.js +198 -11
  267. package/dist/render/render_queue.js.map +1 -1
  268. package/dist/render/renderer.js +14 -7
  269. package/dist/render/renderer.js.map +1 -1
  270. package/dist/render/rendergraph/blackboard.js +15 -1
  271. package/dist/render/rendergraph/blackboard.js.map +1 -1
  272. package/dist/render/rendergraph/executor.js +136 -0
  273. package/dist/render/rendergraph/executor.js.map +1 -1
  274. package/dist/render/rendergraph/forward_plus_builder.js +585 -59
  275. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  276. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  277. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  278. package/dist/render/rendergraph/history_resources.js +8 -1
  279. package/dist/render/rendergraph/history_resources.js.map +1 -1
  280. package/dist/render/rendergraph/scene_render_context.js +31 -2
  281. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  282. package/dist/render/rendergraph/types.js.map +1 -1
  283. package/dist/render/renderpass.js +28 -5
  284. package/dist/render/renderpass.js.map +1 -1
  285. package/dist/render/sdf/box_allocator.js +98 -0
  286. package/dist/render/sdf/box_allocator.js.map +1 -0
  287. package/dist/render/sdf/global_sdf.js +865 -0
  288. package/dist/render/sdf/global_sdf.js.map +1 -0
  289. package/dist/render/sdf/scene_sdf.js +562 -0
  290. package/dist/render/sdf/scene_sdf.js.map +1 -0
  291. package/dist/render/sdf/sdf_atlas.js +227 -0
  292. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  293. package/dist/render/sdf/sdf_programs.js +42 -0
  294. package/dist/render/sdf/sdf_programs.js.map +1 -0
  295. package/dist/render/sdf/sdf_view.js +199 -0
  296. package/dist/render/sdf/sdf_view.js.map +1 -0
  297. package/dist/render/sdf/waterline.js +610 -0
  298. package/dist/render/sdf/waterline.js.map +1 -0
  299. package/dist/render/shadow_mask_pass.js +142 -25
  300. package/dist/render/shadow_mask_pass.js.map +1 -1
  301. package/dist/render/shore_wave_generator.js +1193 -0
  302. package/dist/render/shore_wave_generator.js.map +1 -0
  303. package/dist/render/sky.js +516 -86
  304. package/dist/render/sky.js.map +1 -1
  305. package/dist/render/transmission_thickness_pass.js +477 -0
  306. package/dist/render/transmission_thickness_pass.js.map +1 -0
  307. package/dist/render/underwater.js +524 -0
  308. package/dist/render/underwater.js.map +1 -0
  309. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  310. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  311. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  312. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  313. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  314. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  315. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  316. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  317. package/dist/render/volumetric_cloud/resources.js +380 -0
  318. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  319. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  320. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  321. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  322. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  323. package/dist/render/water_caustics.js +1195 -0
  324. package/dist/render/water_caustics.js.map +1 -0
  325. package/dist/render/water_foam.js +627 -0
  326. package/dist/render/water_foam.js.map +1 -0
  327. package/dist/render/water_interaction.js +1795 -0
  328. package/dist/render/water_interaction.js.map +1 -0
  329. package/dist/render/weightedblended_oit.js +36 -36
  330. package/dist/render/weightedblended_oit.js.map +1 -1
  331. package/dist/scene/basesprite.js +9 -4
  332. package/dist/scene/basesprite.js.map +1 -1
  333. package/dist/scene/batchgroup.js +108 -12
  334. package/dist/scene/batchgroup.js.map +1 -1
  335. package/dist/scene/environment.js +28 -7
  336. package/dist/scene/environment.js.map +1 -1
  337. package/dist/scene/foliage.js +1020 -0
  338. package/dist/scene/foliage.js.map +1 -0
  339. package/dist/scene/foliage_buckets.js +147 -0
  340. package/dist/scene/foliage_buckets.js.map +1 -0
  341. package/dist/scene/foliage_mask.js +358 -0
  342. package/dist/scene/foliage_mask.js.map +1 -0
  343. package/dist/scene/hair.js +15 -4
  344. package/dist/scene/hair.js.map +1 -1
  345. package/dist/scene/light.js +179 -13
  346. package/dist/scene/light.js.map +1 -1
  347. package/dist/scene/mesh.js +327 -45
  348. package/dist/scene/mesh.js.map +1 -1
  349. package/dist/scene/meshdrawable.js +6 -0
  350. package/dist/scene/meshdrawable.js.map +1 -1
  351. package/dist/scene/msdftext.js +9 -3
  352. package/dist/scene/msdftext.js.map +1 -1
  353. package/dist/scene/msdftextsprite.js +9 -3
  354. package/dist/scene/msdftextsprite.js.map +1 -1
  355. package/dist/scene/particlesys.js +8 -2
  356. package/dist/scene/particlesys.js.map +1 -1
  357. package/dist/scene/physics_settings.js +157 -0
  358. package/dist/scene/physics_settings.js.map +1 -0
  359. package/dist/scene/scene.js +190 -44
  360. package/dist/scene/scene.js.map +1 -1
  361. package/dist/scene/scene_node.js +147 -6
  362. package/dist/scene/scene_node.js.map +1 -1
  363. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  364. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  365. package/dist/scene/terrain-cm/grass.js +881 -42
  366. package/dist/scene/terrain-cm/grass.js.map +1 -1
  367. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  368. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  369. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  370. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  371. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  372. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  373. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  374. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  375. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  376. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  377. package/dist/scene/update_queue.js +54 -0
  378. package/dist/scene/update_queue.js.map +1 -0
  379. package/dist/scene/water.js +997 -96
  380. package/dist/scene/water.js.map +1 -1
  381. package/dist/scene/water_surface_sampler.js +324 -0
  382. package/dist/scene/water_surface_sampler.js.map +1 -0
  383. package/dist/scene/wind.js +317 -0
  384. package/dist/scene/wind.js.map +1 -0
  385. package/dist/shaders/atmosphere.js +388 -166
  386. package/dist/shaders/atmosphere.js.map +1 -1
  387. package/dist/shaders/fog.js +100 -32
  388. package/dist/shaders/fog.js.map +1 -1
  389. package/dist/shaders/gi.js +365 -0
  390. package/dist/shaders/gi.js.map +1 -0
  391. package/dist/shaders/ltc_rect.js +202 -0
  392. package/dist/shaders/ltc_rect.js.map +1 -0
  393. package/dist/shaders/misc.js +1 -10
  394. package/dist/shaders/misc.js.map +1 -1
  395. package/dist/shaders/noise.js +5 -1
  396. package/dist/shaders/noise.js.map +1 -1
  397. package/dist/shaders/probes.js +309 -0
  398. package/dist/shaders/probes.js.map +1 -0
  399. package/dist/shaders/sdf.js +537 -0
  400. package/dist/shaders/sdf.js.map +1 -0
  401. package/dist/shaders/shadow.js +104 -70
  402. package/dist/shaders/shadow.js.map +1 -1
  403. package/dist/shaders/skin_brdf.js +243 -0
  404. package/dist/shaders/skin_brdf.js.map +1 -0
  405. package/dist/shaders/ssr.js +6 -159
  406. package/dist/shaders/ssr.js.map +1 -1
  407. package/dist/shaders/temporal.js +38 -27
  408. package/dist/shaders/temporal.js.map +1 -1
  409. package/dist/shaders/water.js +40 -87
  410. package/dist/shaders/water.js.map +1 -1
  411. package/dist/shaders/water_medium.js +42 -0
  412. package/dist/shaders/water_medium.js.map +1 -0
  413. package/dist/shadow/dom.js +110 -19
  414. package/dist/shadow/dom.js.map +1 -1
  415. package/dist/shadow/esm.js +3 -3
  416. package/dist/shadow/esm.js.map +1 -1
  417. package/dist/shadow/pcf_opt.js +15 -48
  418. package/dist/shadow/pcf_opt.js.map +1 -1
  419. package/dist/shadow/pcf_pd.js +15 -53
  420. package/dist/shadow/pcf_pd.js.map +1 -1
  421. package/dist/shadow/pcss.js +34 -9
  422. package/dist/shadow/pcss.js.map +1 -1
  423. package/dist/shadow/shadow_impl.js +3 -8
  424. package/dist/shadow/shadow_impl.js.map +1 -1
  425. package/dist/shadow/shadow_region.js +87 -49
  426. package/dist/shadow/shadow_region.js.map +1 -1
  427. package/dist/shadow/shadowmapper.js +93 -53
  428. package/dist/shadow/shadowmapper.js.map +1 -1
  429. package/dist/shadow/ssm.js +18 -72
  430. package/dist/shadow/ssm.js.map +1 -1
  431. package/dist/shadow/vsm.js +3 -3
  432. package/dist/shadow/vsm.js.map +1 -1
  433. package/dist/shapes/shape.js +44 -1
  434. package/dist/shapes/shape.js.map +1 -1
  435. package/dist/utility/buoyancy.js +287 -0
  436. package/dist/utility/buoyancy.js.map +1 -0
  437. package/dist/utility/physical.js +10 -1
  438. package/dist/utility/physical.js.map +1 -1
  439. package/dist/utility/pmrem.js +17 -43
  440. package/dist/utility/pmrem.js.map +1 -1
  441. package/dist/utility/sdf/bake.js +435 -0
  442. package/dist/utility/sdf/bake.js.map +1 -0
  443. package/dist/utility/sdf/bvh.js +576 -0
  444. package/dist/utility/sdf/bvh.js.map +1 -0
  445. package/dist/utility/serialization/manager.js +36 -6
  446. package/dist/utility/serialization/manager.js.map +1 -1
  447. package/dist/utility/serialization/scene/animation.js +77 -7
  448. package/dist/utility/serialization/scene/animation.js.map +1 -1
  449. package/dist/utility/serialization/scene/batch.js +11 -4
  450. package/dist/utility/serialization/scene/batch.js.map +1 -1
  451. package/dist/utility/serialization/scene/camera.js +140 -279
  452. package/dist/utility/serialization/scene/camera.js.map +1 -1
  453. package/dist/utility/serialization/scene/cloth.js +25 -0
  454. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  455. package/dist/utility/serialization/scene/common.js +14 -6
  456. package/dist/utility/serialization/scene/common.js.map +1 -1
  457. package/dist/utility/serialization/scene/foliage.js +821 -0
  458. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  459. package/dist/utility/serialization/scene/hair.js +11 -4
  460. package/dist/utility/serialization/scene/hair.js.map +1 -1
  461. package/dist/utility/serialization/scene/light.js +115 -7
  462. package/dist/utility/serialization/scene/light.js.map +1 -1
  463. package/dist/utility/serialization/scene/material.js +388 -220
  464. package/dist/utility/serialization/scene/material.js.map +1 -1
  465. package/dist/utility/serialization/scene/mesh.js +69 -4
  466. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  467. package/dist/utility/serialization/scene/node.js +140 -5
  468. package/dist/utility/serialization/scene/node.js.map +1 -1
  469. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  470. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  471. package/dist/utility/serialization/scene/particle.js +11 -4
  472. package/dist/utility/serialization/scene/particle.js.map +1 -1
  473. package/dist/utility/serialization/scene/physics.js +120 -0
  474. package/dist/utility/serialization/scene/physics.js.map +1 -0
  475. package/dist/utility/serialization/scene/primitive.js +124 -10
  476. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  477. package/dist/utility/serialization/scene/scene.js +1687 -51
  478. package/dist/utility/serialization/scene/scene.js.map +1 -1
  479. package/dist/utility/serialization/scene/sprite.js +11 -4
  480. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  481. package/dist/utility/serialization/scene/terrain.js +163 -33
  482. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  483. package/dist/utility/serialization/scene/text.js +11 -4
  484. package/dist/utility/serialization/scene/text.js.map +1 -1
  485. package/dist/utility/serialization/scene/water.js +2473 -114
  486. package/dist/utility/serialization/scene/water.js.map +1 -1
  487. package/dist/utility/serialization/types.js.map +1 -1
  488. package/dist/utility/shprojector.js +97 -109
  489. package/dist/utility/shprojector.js.map +1 -1
  490. package/dist/utility/textures/foam.js +170 -0
  491. package/dist/utility/textures/foam.js.map +1 -0
  492. package/dist/utility/textures/ggxlut.js +17 -43
  493. package/dist/utility/textures/ggxlut.js.map +1 -1
  494. package/dist/utility/textures/ltcdata.js +4 -4
  495. package/dist/utility/textures/ltcdata.js.map +1 -1
  496. package/dist/utility/textures/ltclut.js +16 -6
  497. package/dist/utility/textures/ltclut.js.map +1 -1
  498. package/dist/utility/unsupported.js +24 -0
  499. package/dist/utility/unsupported.js.map +1 -0
  500. package/dist/values.js +13 -1
  501. package/dist/values.js.map +1 -1
  502. package/package.json +25 -12
  503. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  504. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  505. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  506. package/src/asset/meshoptimizer/LICENSE +21 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voxel_lighting.js","sources":["../../../src/render/gi/voxel_lighting.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n RenderStateSet,\r\n Texture3D\r\n} from '@zephyr3d/device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport { getDevice } from '../../app/api';\r\nimport type { Scene } from '../../scene/scene';\r\nimport type { Camera } from '../../camera/camera';\r\nimport type { DirectionalLight, PunctualLight } from '../../scene/light';\r\nimport type { GlobalSDF } from '../sdf/global_sdf';\r\nimport { buildSDFProgram } from '../sdf/sdf_programs';\r\nimport { drawFullscreenQuad } from '../fullscreenquad';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { getGICacheExposure } from '../../utility/physical';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT } from '../../values';\r\nimport { defineLTCEdgeFunctions } from '../../shaders/ltc_rect';\r\nimport {\r\n declareDynamicSDFUniforms,\r\n declareGlobalSDFUniforms,\r\n GLOBAL_SDF_LEVELS,\r\n GLOBAL_SDF_PARAMS,\r\n sampleGlobalSDFWithVoxel\r\n} from '../../shaders/sdf';\r\nimport { sdfConeShadow } from '../../shaders/gi';\r\nimport { declareProbeUniforms, sampleProbeIrradiance } from '../../shaders/probes';\r\nimport { getActiveProbeVolume } from './probe_volume';\r\n\r\n/** Most lights the voxels are lit by, the sun aside. */\r\nexport const MAX_VOXEL_LIGHTS = 64;\r\n/**\r\n * vec4s per packed light: (position, range), (direction, cutoff), (colour, intensity), extra,\r\n * (shadowed, 0, 0, 0).\r\n */\r\nconst LIGHT_VEC4S = 5;\r\n/** Material voxels along a brick edge of the global field, whose bricks are 8³ field voxels. */\r\nconst BRICK_VOXELS = 4;\r\n/**\r\n * Format of the second aniso texture, two faces (-y, -z): rg8unorm where the\r\n * device can write it from a shader (texture-formats-tier1), else rgba8unorm.\r\n */\r\nfunction aniso1Format(): 'rg8unorm' | 'rgba8unorm' {\r\n return getDevice().getDeviceCaps().textureCaps.getTextureFormatInfo('rg8unorm')?.writable\r\n ? 'rg8unorm'\r\n : 'rgba8unorm';\r\n}\r\n/** Most local lights whose voxel lighting is shadowed, the nearest the camera first. */\r\nexport const MAX_SHADOWED_VOXEL_LIGHTS = 8;\r\n/**\r\n * Cone of a local light shadow ray. Lumen traces these as hard hit tests; a vanishing cone through\r\n * {@link sdfConeShadow} is the same test with its expanded surfaces.\r\n */\r\nconst HARD_SHADOW_TAN = 1e-4;\r\n/** Cone tracing steps of the sun shadow and the local light shadows. */\r\nconst SHADOW_STEPS = 24;\r\n/** The axis faces of a voxel, in the order of the aniso textures. */\r\nconst ANISO_DIRS: [number, number, number][] = [\r\n [1, 0, 0],\r\n [0, 1, 0],\r\n [0, 0, 1],\r\n [-1, 0, 0],\r\n [0, -1, 0],\r\n [0, 0, -1]\r\n];\r\n\r\n/**\r\n * Settings of the voxel lighting, on {@link SceneGI}.\r\n * @public\r\n */\r\nexport interface VoxelLightingOptions {\r\n /** Half angle of the sun shadow cone in degrees; wider is softer. */\r\n sunShadowConeAngle: number;\r\n /** Z slices of every clipmap level lit per frame; a level is refreshed every `resolution / slices` frames. Default 8. */\r\n slicesPerFrame: number;\r\n /**\r\n * Whether local lights that cast shadows also shadow the voxel lighting, up to\r\n * {@link MAX_SHADOWED_VOXEL_LIGHTS} of them. Default true.\r\n */\r\n localLightShadows: boolean;\r\n}\r\n\r\n/**\r\n * Lights the voxel scene: per material voxel, the sun (cone-traced field shadow, see\r\n * {@link sdfConeShadow}), punctual lights in range (rect lights by their one-sided\r\n * polygon form factor per voxel face, as surfaces shade them; shadowed by one hard field ray for\r\n * the nearest {@link MAX_SHADOWED_VOXEL_LIGHTS} local lights casting shadows) and sky irradiance,\r\n * times albedo,\r\n * plus emissive, into the radiance clipmap. Kept at the fixed cache exposure\r\n * (getGICacheExposure) so probes accumulating it don't drift with camera exposure.\r\n *\r\n * A fragment pass, one fragment per voxel of a slab of z slices rotating through every\r\n * level, so the scene refreshes over a few frames. Voxels without material write zero.\r\n *\r\n * @internal\r\n */\r\nexport class VoxelLighting {\r\n private readonly _scene: Scene;\r\n private _radiance: Nullable<Texture3D>;\r\n private _aniso0: Nullable<Texture3D>;\r\n private _aniso1: Nullable<Texture3D>;\r\n private _resolution: number;\r\n private _levels: number;\r\n private _program: Nullable<GPUProgram>;\r\n private _programKey: string;\r\n private _bindGroup: Nullable<BindGroup>;\r\n private _brickProgram: Nullable<GPUProgram>;\r\n private _brickBindGroup: Nullable<BindGroup>;\r\n private _brickBuffer: Nullable<GPUDataBuffer>;\r\n private _renderStates: Nullable<RenderStateSet>;\r\n private readonly _lightData: Float32Array<ArrayBuffer>;\r\n private _zStart: number;\r\n private _passes: number;\r\n private readonly _sunDir: Vector4;\r\n private readonly _sunColor: Vector4;\r\n private readonly _params: Vector4;\r\n private readonly _slab: Vector4;\r\n constructor(scene: Scene) {\r\n this._scene = scene;\r\n this._radiance = null;\r\n this._aniso0 = null;\r\n this._aniso1 = null;\r\n this._resolution = 0;\r\n this._levels = 0;\r\n this._program = null;\r\n this._programKey = '';\r\n this._bindGroup = null;\r\n this._brickProgram = null;\r\n this._brickBindGroup = null;\r\n this._brickBuffer = null;\r\n this._renderStates = null;\r\n this._lightData = new Float32Array(MAX_VOXEL_LIGHTS * LIGHT_VEC4S * 4);\r\n this._zStart = 0;\r\n this._passes = 0;\r\n this._sunDir = new Vector4();\r\n this._sunColor = new Vector4();\r\n this._params = new Vector4();\r\n this._slab = new Vector4();\r\n }\r\n /** Outgoing radiance clipmap, rgba16f, laid out like the albedo. */\r\n get radiance() {\r\n if (!this._radiance) {\r\n throw new Error('VoxelLighting: no radiance before the first update');\r\n }\r\n return this._radiance;\r\n }\r\n /** Share of the radiance each voxel face carries, (+x, +y, +z, -x); see declareVoxelSceneUniforms. */\r\n get aniso0() {\r\n if (!this._aniso0) {\r\n throw new Error('VoxelLighting: no radiance before the first update');\r\n }\r\n return this._aniso0;\r\n }\r\n /** Share of the radiance each voxel face carries, (-y, -z) in rg. */\r\n get aniso1() {\r\n if (!this._aniso1) {\r\n throw new Error('VoxelLighting: no radiance before the first update');\r\n }\r\n return this._aniso1;\r\n }\r\n get ready() {\r\n return !!this._radiance;\r\n }\r\n /** Lighting passes run so far. */\r\n get passes() {\r\n return this._passes;\r\n }\r\n /**\r\n * Lights the next slab of every level.\r\n * @param albedo - The albedo clipmap, `resolution`³ per level.\r\n * @param emissive - The emissive clipmap.\r\n */\r\n update(\r\n global: GlobalSDF,\r\n albedo: Texture3D,\r\n emissive: Texture3D,\r\n resolution: number,\r\n camera: Camera,\r\n options: VoxelLightingOptions\r\n ) {\r\n const device = getDevice();\r\n const scene = this._scene;\r\n if (!this._radiance || this._resolution !== resolution || this._levels !== global.levels) {\r\n this._radiance?.dispose();\r\n this._aniso0?.dispose();\r\n this._aniso1?.dispose();\r\n this._resolution = resolution;\r\n this._levels = global.levels;\r\n const depth = resolution * global.levels;\r\n this._radiance = device.createTexture3D('rgba16f', resolution, resolution, depth, {\r\n mipmapping: false,\r\n writable: true\r\n })!;\r\n this._radiance.name = '@VoxelSceneRadiance';\r\n this._aniso0 = device.createTexture3D('rgba8unorm', resolution, resolution, depth, {\r\n mipmapping: false,\r\n writable: true\r\n })!;\r\n this._aniso0.name = '@VoxelSceneAniso0';\r\n this._aniso1 = device.createTexture3D(aniso1Format(), resolution, resolution, depth, {\r\n mipmapping: false,\r\n writable: true\r\n })!;\r\n this._aniso1.name = '@VoxelSceneAniso1';\r\n this._zStart = 0;\r\n }\r\n const envLight = scene.env.light.envLight;\r\n const physical = scene.lightingMode === 'physical';\r\n // Fixed cache exposure; the sky bake uses the same exposure, so it takes the strength alone\r\n const cacheExposure = getGICacheExposure(scene.lightingMode);\r\n const envStrength = scene.env.light.strength ?? 0;\r\n // No sky without an environment light (its stand-in carries only the probes)\r\n const skyIrradiance = scene.env.light.type !== 'none' && envLight.hasIrradiance();\r\n const probes = getActiveProbeVolume(scene);\r\n const key = `${global.levels}:${scene.lightingMode}:${skyIrradiance ? envLight.getType() : 'none'}:${\r\n skyIrradiance ? this.envVariant() : ''\r\n }:probes${probes ? 1 : 0}`;\r\n if (!this._program || this._programKey !== key) {\r\n this.disposePrograms();\r\n this._program = this.createProgram(global.levels, physical, skyIrradiance, !!probes, false);\r\n this._programKey = key;\r\n this._bindGroup = device.createBindGroup(this._program.bindGroupLayouts[0]);\r\n }\r\n const numLights = this.collectLights(camera, cacheExposure, options.localLightShadows);\r\n const slices = Math.max(1, Math.min(resolution, Math.floor(options.slicesPerFrame)));\r\n const tanHalf = Math.tan((Math.max(0.1, options.sunShadowConeAngle) * Math.PI) / 180);\r\n this._params.setXYZW(numLights, envStrength, tanHalf, 0);\r\n this._slab.setXYZW(resolution, global.levels, slices, this._zStart);\r\n const bind = (bg: BindGroup) => {\r\n global.applyBindGroup(bg);\r\n bg.setTexture('albedoTex', albedo, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture('emissiveTex', emissive, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture('radianceOut', this._radiance!);\r\n bg.setTexture('aniso0Out', this._aniso0!);\r\n bg.setTexture('aniso1Out', this._aniso1!);\r\n bg.setValue('lights', this._lightData);\r\n bg.setValue('sunDir', this._sunDir);\r\n bg.setValue('sunColor', this._sunColor);\r\n bg.setValue('params', this._params);\r\n bg.setValue('slab', this._slab);\r\n if (skyIrradiance) {\r\n envLight.updateBindGroup(bg);\r\n }\r\n probes?.applyBindGroup(bg);\r\n };\r\n if (!this._renderStates) {\r\n this._renderStates = device.createRenderStateSet();\r\n this._renderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._renderStates.useRasterizerState().setCullMode('none');\r\n this._renderStates.useColorState().setColorMask(false, false, false, false);\r\n }\r\n const draw = (program: GPUProgram, bg: BindGroup, width: number, height: number) => {\r\n let fb: Nullable<FrameBuffer> = null;\r\n device.pushDeviceStates();\r\n try {\r\n fb = device.pool.fetchTemporalFramebuffer(false, width, height, 'rgba8unorm');\r\n device.setFramebuffer(fb);\r\n device.setViewport([0, 0, width, height]);\r\n device.setScissor([0, 0, width, height]);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bg);\r\n drawFullscreenQuad(this._renderStates!);\r\n } finally {\r\n device.popDeviceStates();\r\n if (fb) {\r\n device.pool.releaseFrameBuffer(fb);\r\n }\r\n }\r\n };\r\n bind(this._bindGroup!);\r\n draw(this._program, this._bindGroup!, resolution, resolution * slices * global.levels);\r\n // Bricks the field composited this frame hold stale radiance; light them now\r\n // rather than up to resolution / slices frames later\r\n const fresh = global.freshMaterialBricks;\r\n if (fresh.count > 0) {\r\n if (!this._brickProgram) {\r\n this._brickProgram = this.createProgram(global.levels, physical, skyIrradiance, !!probes, true);\r\n this._brickBindGroup = device.createBindGroup(this._brickProgram.bindGroupLayouts[0]);\r\n }\r\n const bytes = fresh.data.byteLength;\r\n if (!this._brickBuffer || this._brickBuffer.byteLength < bytes) {\r\n this._brickBuffer?.dispose();\r\n this._brickBuffer = device.createBuffer(bytes, { usage: 'uniform', storage: true })!;\r\n }\r\n this._brickBuffer.bufferSubData(0, fresh.data, 0, fresh.count * 4);\r\n const bg = this._brickBindGroup!;\r\n bind(bg);\r\n bg.setBuffer('bricks', this._brickBuffer);\r\n draw(this._brickProgram, bg, BRICK_VOXELS ** 3, fresh.count);\r\n }\r\n this._zStart = (this._zStart + slices) % resolution;\r\n this._passes++;\r\n }\r\n dispose() {\r\n this._radiance?.dispose();\r\n this._radiance = null;\r\n this._aniso0?.dispose();\r\n this._aniso0 = null;\r\n this._aniso1?.dispose();\r\n this._aniso1 = null;\r\n this.disposePrograms();\r\n this._brickBuffer?.dispose();\r\n this._brickBuffer = null;\r\n }\r\n /** @internal */\r\n private disposePrograms() {\r\n this._bindGroup?.dispose();\r\n this._bindGroup = null;\r\n this._program?.dispose();\r\n this._program = null;\r\n this._brickBindGroup?.dispose();\r\n this._brickBindGroup = null;\r\n this._brickProgram?.dispose();\r\n this._brickProgram = null;\r\n this._programKey = '';\r\n }\r\n /** What of the environment light's bindings the program depends on. @internal */\r\n private envVariant() {\r\n const envLight = this._scene.env.light.envLight as unknown as {\r\n irradianceSHFB?: unknown;\r\n irradianceSH?: unknown;\r\n };\r\n return `${envLight.irradianceSHFB ? 'fb' : envLight.irradianceSH ? 'buf' : ''}`;\r\n }\r\n /**\r\n * Packs the visible punctual lights: the sun apart (the marked sun light, else the\r\n * first directional), the rest nearest the camera first, up to {@link MAX_VOXEL_LIGHTS}.\r\n * The first {@link MAX_SHADOWED_VOXEL_LIGHTS} local lights casting shadows are flagged for a\r\n * shadow ray when `localShadows` is on.\r\n * Only the intensity carries the cache exposure, as in the clustered light buffer.\r\n * @internal\r\n */\r\n private collectLights(camera: Camera, exposure: number, localShadows: boolean) {\r\n const scene = this._scene;\r\n const cameraPos = camera.getWorldPosition();\r\n const found: { sun: Nullable<DirectionalLight> } = { sun: null };\r\n const others: { light: PunctualLight; d: number }[] = [];\r\n scene.rootNode.iterate((node) => {\r\n if (node.isPunctualLight() && !node.hidden) {\r\n if (node.isDirectionLight()) {\r\n // The marked sun light wins; else the first directional light\r\n if (!found.sun || node.sunLight) {\r\n if (found.sun) {\r\n others.push({ light: found.sun, d: 0 });\r\n }\r\n found.sun = node;\r\n } else {\r\n others.push({ light: node, d: 0 });\r\n }\r\n } else {\r\n const p = node.positionAndRange;\r\n others.push({\r\n light: node,\r\n d: Math.hypot(p.x - cameraPos.x, p.y - cameraPos.y, p.z - cameraPos.z)\r\n });\r\n }\r\n }\r\n return false;\r\n });\r\n const sunLight: Nullable<PunctualLight> = found.sun;\r\n if (sunLight) {\r\n const dir = sunLight.directionAndCutoff;\r\n const c = sunLight.diffuseAndIntensity;\r\n this._sunDir.setXYZW(dir.x, dir.y, dir.z, 1);\r\n this._sunColor.setXYZW(c.x * c.w * exposure, c.y * c.w * exposure, c.z * c.w * exposure, 0);\r\n } else {\r\n this._sunDir.setXYZW(0, -1, 0, 0);\r\n this._sunColor.setXYZW(0, 0, 0, 0);\r\n }\r\n others.sort((a, b) => a.d - b.d);\r\n const count = Math.min(others.length, MAX_VOXEL_LIGHTS);\r\n const data = this._lightData;\r\n let shadowedCount = 0;\r\n for (let i = 0; i < count; i++) {\r\n const light = others[i].light;\r\n const o = i * LIGHT_VEC4S * 4;\r\n data.set(light.positionAndRange, o);\r\n data.set(light.directionAndCutoff, o + 4);\r\n const c = light.diffuseAndIntensity;\r\n data[o + 8] = c.x;\r\n data[o + 9] = c.y;\r\n data[o + 10] = c.z;\r\n data[o + 11] = c.w * exposure;\r\n data.set(light.extraParams, o + 12);\r\n // Local lights only; a directional light besides the sun stays unshadowed\r\n const shadowed =\r\n localShadows &&\r\n shadowedCount < MAX_SHADOWED_VOXEL_LIGHTS &&\r\n !light.isDirectionLight() &&\r\n light.castShadow;\r\n if (shadowed) {\r\n shadowedCount++;\r\n }\r\n data[o + 16] = shadowed ? 1 : 0;\r\n data[o + 17] = 0;\r\n data[o + 18] = 0;\r\n data[o + 19] = 0;\r\n }\r\n return count;\r\n }\r\n /**\r\n * The lighting program: one fragment per voxel of the slab, or with `bricks`\r\n * a row of {@link BRICK_VOXELS}³ fragments per listed brick.\r\n * @internal\r\n */\r\n private createProgram(\r\n levels: number,\r\n physical: boolean,\r\n skyIrradiance: boolean,\r\n useProbes: boolean,\r\n bricks: boolean\r\n ) {\r\n const scene = this._scene;\r\n const envLight = scene.env.light.envLight;\r\n return buildSDFProgram({\r\n label: bricks ? 'VoxelLightingBricks' : 'VoxelLighting',\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n declareGlobalSDFUniforms(this, 0, levels);\r\n // Bound by the field alongside the global uniforms, unused here\r\n declareDynamicSDFUniforms(this, 0);\r\n this.albedoTex = pb.tex3D().sampleType('unfilterable-float').uniform(0);\r\n this.emissiveTex = pb.tex3D().sampleType('unfilterable-float').uniform(0);\r\n this.radianceOut = pb.texStorage3D.rgba16float().storage(0);\r\n this.aniso0Out = pb.texStorage3D.rgba8unorm().storage(0);\r\n this.aniso1Out =\r\n aniso1Format() === 'rg8unorm'\r\n ? pb.texStorage3D.rg8unorm().storage(0)\r\n : pb.texStorage3D.rgba8unorm().storage(0);\r\n this.lights = pb.vec4[MAX_VOXEL_LIGHTS * LIGHT_VEC4S]().uniform(0);\r\n // (direction the light travels, 1 when there is a sun)\r\n this.sunDir = pb.vec4().uniform(0);\r\n this.sunColor = pb.vec4().uniform(0);\r\n // (light count, environment strength, tan of the shadow cone half angle, 0)\r\n this.params = pb.vec4().uniform(0);\r\n // (resolution, levels, slices per pass, first slice)\r\n this.slab = pb.vec4().uniform(0);\r\n if (bricks) {\r\n // Per brick: (first material voxel within its level, level)\r\n this.bricks = pb.vec4[0]().storageBufferReadonly(0);\r\n }\r\n if (skyIrradiance) {\r\n envLight.initShaderBindings(pb);\r\n }\r\n if (useProbes) {\r\n declareProbeUniforms(this, 0);\r\n }\r\n pb.func('Z_pointAttenuation', [pb.vec3('p'), pb.vec4('posRange')], function () {\r\n this.$l.d = pb.sub(this.p, this.posRange.xyz);\r\n this.$l.dist2 = pb.dot(this.d, this.d);\r\n this.$l.atten = pb.div(1, pb.max(this.dist2, 0.0001));\r\n this.$l.range2 = pb.mul(this.posRange.w, this.posRange.w);\r\n this.$l.f = pb.div(this.dist2, pb.max(this.range2, 0.0001));\r\n this.$l.f2 = pb.clamp(pb.sub(1, pb.mul(this.f, this.f)), 0, 1);\r\n this.$return(pb.mul(this.atten, this.f2, this.f2));\r\n });\r\n // Rect lights as the surfaces shade their diffuse part (see evaluateLTCRectLightTerms):\r\n // the polygon form factor clipped to the horizon (LTC with the identity matrix, Heitz et\r\n // al. 2016), one-sided about the light plane, with the same range window\r\n defineLTCEdgeFunctions(this);\r\n pb.func(\r\n 'Z_rectFormFactor',\r\n [pb.vec3('p'), pb.vec3('N'), pb.vec3('V'), pb.vec4('posRange'), pb.vec3('ax'), pb.vec3('ay')],\r\n function () {\r\n this.$l.lightNormal = pb.neg(pb.normalize(pb.cross(this.ax, this.ay)));\r\n this.$l.toPoint = pb.sub(this.p, this.posRange.xyz);\r\n this.$if(pb.lessThanEqual(pb.dot(this.lightNormal, this.toPoint), 0), function () {\r\n this.$return(pb.float(0));\r\n });\r\n this.$l.falloff = pb.float(1);\r\n this.$if(pb.greaterThan(this.posRange.w, 0), function () {\r\n this.falloff = pb.sub(\r\n 1,\r\n pb.smoothStep(pb.mul(this.posRange.w, 0.9), this.posRange.w, pb.length(this.toPoint))\r\n );\r\n });\r\n this.$l.c = this.posRange.xyz;\r\n this.$l.ff = this.Z_LTCEvaluateRect(\r\n this.N,\r\n this.V,\r\n this.p,\r\n pb.mat3(pb.vec3(1, 0, 0), pb.vec3(0, 1, 0), pb.vec3(0, 0, 1)),\r\n pb.sub(pb.sub(this.c, this.ax), this.ay),\r\n pb.add(pb.sub(this.c, this.ay), this.ax),\r\n pb.add(pb.add(this.c, this.ax), this.ay),\r\n pb.add(pb.sub(this.c, this.ax), this.ay)\r\n ).x;\r\n this.$return(pb.mul(this.ff, this.falloff));\r\n }\r\n );\r\n pb.func(\r\n 'Z_spotAttenuation',\r\n [pb.vec3('p'), pb.vec4('posRange'), pb.vec4('dirCutoff'), pb.vec2('angleScaleOffset')],\r\n function () {\r\n // The point light's distance falloff in both modes, as the surfaces light them\r\n this.$l.falloff = this.Z_pointAttenuation(this.p, this.posRange);\r\n this.$l.cd = pb.dot(pb.normalize(pb.sub(this.p, this.posRange.xyz)), this.dirCutoff.xyz);\r\n if (physical) {\r\n this.$l.spot = pb.clamp(\r\n pb.add(pb.mul(this.cd, this.angleScaleOffset.x), this.angleScaleOffset.y),\r\n 0,\r\n 1\r\n );\r\n this.spot = pb.mul(this.spot, this.spot);\r\n } else {\r\n this.$l.spot = pb.smoothStep(this.dirCutoff.w, pb.mix(this.dirCutoff.w, 1, 0.5), this.cd);\r\n }\r\n this.$return(pb.mul(this.spot, this.falloff));\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.res = pb.int(this.slab.x);\r\n this.$l.fc = pb.ivec2(pb.floor(this.$builtins.fragCoord.xy));\r\n if (bricks) {\r\n this.$l.brick = this.bricks.at(this.fc.y);\r\n this.$l.level = pb.int(this.brick.w);\r\n this.$l.t = pb.add(\r\n pb.ivec3(this.brick.xyz),\r\n pb.ivec3(\r\n pb.mod(this.fc.x, BRICK_VOXELS),\r\n pb.mod(pb.div(this.fc.x, BRICK_VOXELS), BRICK_VOXELS),\r\n pb.div(this.fc.x, BRICK_VOXELS * BRICK_VOXELS)\r\n )\r\n );\r\n } else {\r\n this.$l.slices = pb.int(this.slab.z);\r\n this.$l.rowsPerLevel = pb.mul(this.res, this.slices);\r\n this.$l.level = pb.div(this.fc.y, this.rowsPerLevel);\r\n this.$l.rem = pb.sub(this.fc.y, pb.mul(this.level, this.rowsPerLevel));\r\n this.$l.z = pb.add(pb.int(this.slab.w), pb.div(this.rem, this.res));\r\n this.$l.t = pb.ivec3(\r\n this.fc.x,\r\n pb.sub(this.rem, pb.mul(pb.div(this.rem, this.res), this.res)),\r\n this.z\r\n );\r\n }\r\n this.$l.tz = pb.add(this.t.z, pb.mul(this.level, this.res));\r\n this.$l.texel = pb.ivec3(this.t.x, this.t.y, this.tz);\r\n this.$l.radiance = pb.vec3(0);\r\n this.$l.aniso0 = pb.vec4(0);\r\n this.$l.aniso1 = pb.vec4(0);\r\n this.$l.a = pb.textureLoad(this.albedoTex, this.texel, 0);\r\n this.$if(pb.greaterThan(this.a.a, 0), function () {\r\n // World voxel of the texel: the one in the level's window with this toroidal address\r\n this.$l.info = pb.vec4(0);\r\n this.$l.fineVs = pb.float(0);\r\n for (let i = 0; i < levels; i++) {\r\n this.$if(pb.equal(this.level, i), function () {\r\n this.info = this[GLOBAL_SDF_LEVELS].at(i);\r\n });\r\n }\r\n this.$l.originC = pb.ivec3(pb.floor(pb.div(this.info.xyz, 2)));\r\n this.$l.resV = pb.ivec3(this.res);\r\n this.$l.w = pb.add(\r\n this.originC,\r\n pb.mod(pb.add(pb.mod(pb.sub(this.t, this.originC), this.resV), this.resV), this.resV)\r\n );\r\n this.$l.vs = pb.mul(this.info.w, 2);\r\n this.$l.p = pb.mul(pb.add(pb.vec3(this.w), pb.vec3(0.5)), this.vs);\r\n // Light per axis face of the voxel, so a floor thinner than the voxel is lit\r\n // on top and dark below. A face counts as open where the field at its centre\r\n // is outside the solid.\r\n this.$l.half = pb.mul(this.vs, 0.5);\r\n // Read from the voxel's own level on: a finer level resolves more geometry\r\n for (let k = 0; k < 6; k++) {\r\n this.$l[`open${k}`] = pb.greaterThan(\r\n sampleGlobalSDFWithVoxel(\r\n this,\r\n pb.add(this.p, pb.mul(pb.vec3(...ANISO_DIRS[k]), this.half)),\r\n levels,\r\n this.level\r\n ).x,\r\n 0\r\n );\r\n this.$l[`acc${k}`] = pb.vec3(0);\r\n }\r\n this.$l.albedo = this.a.rgb;\r\n // Sun: one shadow ray for all faces, started near the voxel corner toward the\r\n // light and offset along it\r\n this.$if(pb.greaterThan(this.sunDir.w, 0.5), function () {\r\n this.$l.L = pb.neg(this.sunDir.xyz);\r\n this.$l.ps = pb.add(\r\n this.p,\r\n pb.mul(pb.sign(this.L), this.vs, 0.48),\r\n pb.mul(this.L, this.vs, 0.4)\r\n );\r\n this.$l.shadow = sdfConeShadow(\r\n this,\r\n this.ps,\r\n this.L,\r\n this.params.z,\r\n this.vs,\r\n pb.mul(this[GLOBAL_SDF_PARAMS].x, this[GLOBAL_SDF_LEVELS].at(levels - 1).w, 0.5),\r\n levels,\r\n SHADOW_STEPS,\r\n this.level\r\n );\r\n this.$if(pb.greaterThan(this.shadow, 0), function () {\r\n this.$l.sun = pb.mul(this.albedo, this.sunColor.rgb, this.shadow, 1 / Math.PI);\r\n for (let k = 0; k < 6; k++) {\r\n this.$if(this[`open${k}`], function () {\r\n this[`acc${k}`] = pb.add(\r\n this[`acc${k}`],\r\n pb.mul(this.sun, pb.max(pb.dot(pb.vec3(...ANISO_DIRS[k]), this.L), 0))\r\n );\r\n });\r\n }\r\n });\r\n });\r\n this.$l.count = pb.int(this.params.x);\r\n this.$for(pb.int('li'), 0, MAX_VOXEL_LIGHTS, function () {\r\n this.$if(pb.greaterThanEqual(this.li, this.count), function () {\r\n this.$break();\r\n });\r\n this.$l.base = pb.mul(this.li, LIGHT_VEC4S);\r\n this.$l.posRange = this.lights.at(this.base);\r\n this.$l.dirCutoff = this.lights.at(pb.add(this.base, 1));\r\n this.$l.colorIntensity = this.lights.at(pb.add(this.base, 2));\r\n this.$l.extra = this.lights.at(pb.add(this.base, 3));\r\n this.$l.shadowInfo = this.lights.at(pb.add(this.base, 4));\r\n this.$l.ltype = pb.int(this.extra.w);\r\n // This light's share of each open face, before the shadow\r\n for (let k = 0; k < 6; k++) {\r\n this.$l[`lf${k}`] = pb.vec3(0);\r\n }\r\n this.$if(pb.equal(this.ltype, LIGHT_TYPE_RECT), function () {\r\n // Radiance times the form factor seen by each face; (dirCutoff, extra) hold the\r\n // half-extent axes\r\n this.$l.rc = pb.mul(this.albedo, this.colorIntensity.rgb, this.colorIntensity.w);\r\n for (let k = 0; k < 6; k++) {\r\n this.$if(this[`open${k}`], function () {\r\n // Any direction off the normal: the identity-matrix integral does not\r\n // depend on the tangent frame\r\n const v: [number, number, number] = ANISO_DIRS[k][1] !== 0 ? [1, 0, 0] : [0, 1, 0];\r\n this[`lf${k}`] = pb.mul(\r\n this.rc,\r\n this.Z_rectFormFactor(\r\n this.p,\r\n pb.vec3(...ANISO_DIRS[k]),\r\n pb.vec3(...v),\r\n this.posRange,\r\n this.dirCutoff.xyz,\r\n this.extra.xyz\r\n )\r\n );\r\n });\r\n }\r\n }).$else(function () {\r\n this.$l.atten = pb.float(0);\r\n this.$l.Ld = pb.vec3(0, 1, 0);\r\n this.$if(pb.equal(this.ltype, LIGHT_TYPE_DIRECTIONAL), function () {\r\n this.atten = 1;\r\n this.Ld = pb.neg(this.dirCutoff.xyz);\r\n })\r\n .$elseif(pb.equal(this.ltype, LIGHT_TYPE_SPOT), function () {\r\n this.atten = this.Z_spotAttenuation(this.p, this.posRange, this.dirCutoff, this.extra.xy);\r\n this.Ld = pb.normalize(pb.sub(this.posRange.xyz, this.p));\r\n })\r\n .$else(function () {\r\n this.atten = this.Z_pointAttenuation(this.p, this.posRange);\r\n this.Ld = pb.normalize(pb.sub(this.posRange.xyz, this.p));\r\n });\r\n this.$l.lc = pb.mul(\r\n this.albedo,\r\n this.colorIntensity.rgb,\r\n pb.mul(this.colorIntensity.w, this.atten, 1 / Math.PI)\r\n );\r\n for (let k = 0; k < 6; k++) {\r\n this.$if(this[`open${k}`], function () {\r\n this[`lf${k}`] = pb.mul(this.lc, pb.max(pb.dot(pb.vec3(...ANISO_DIRS[k]), this.Ld), 0));\r\n });\r\n }\r\n });\r\n // Local light shadow, as Lumen's offscreen shadowing through the global field\r\n // (LumenSceneDirectLightingSoftwareRayTracing.usf, TraceOffscreenShadows): one hard\r\n // ray from the voxel to the light position, a rect light's centre included,\r\n // stopping one field voxel short of the light so geometry right next to it does\r\n // not shadow it (VoxelSizeRelativeRayEndBias). Traced only where it lights a face.\r\n this.$l.lightSum = pb.add(this.lf0, this.lf1, this.lf2, this.lf3, this.lf4, this.lf5);\r\n this.$l.lightShadow = pb.float(1);\r\n this.$if(\r\n pb.and(\r\n pb.greaterThan(this.shadowInfo.x, 0.5),\r\n pb.greaterThan(pb.max(pb.max(this.lightSum.r, this.lightSum.g), this.lightSum.b), 0)\r\n ),\r\n function () {\r\n this.$l.toLight = pb.sub(this.posRange.xyz, this.p);\r\n this.$l.SL = pb.normalize(this.toLight);\r\n // Started as the sun's ray: near the voxel corner toward the light\r\n this.$l.sps = pb.add(\r\n this.p,\r\n pb.mul(pb.sign(this.SL), this.vs, 0.48),\r\n pb.mul(this.SL, this.vs, 0.4)\r\n );\r\n this.$l.slen = pb.sub(pb.dot(pb.sub(this.posRange.xyz, this.sps), this.SL), this.info.w);\r\n this.$if(pb.greaterThan(this.slen, 0), function () {\r\n this.lightShadow = sdfConeShadow(\r\n this,\r\n this.sps,\r\n this.SL,\r\n pb.float(HARD_SHADOW_TAN),\r\n this.vs,\r\n this.slen,\r\n levels,\r\n SHADOW_STEPS,\r\n this.level\r\n );\r\n });\r\n }\r\n );\r\n for (let k = 0; k < 6; k++) {\r\n this[`acc${k}`] = pb.add(this[`acc${k}`], pb.mul(this[`lf${k}`], this.lightShadow));\r\n }\r\n });\r\n // Ambient per open face: sky, or probe irradiance where covered, carrying every\r\n // earlier bounce (Majercik et al. 2019 sec. 3.2). Albedo clamped below 1 keeps\r\n // the feedback loop convergent. Emissive leaves every open face.\r\n this.$l.feedback = pb.min(this.albedo, pb.vec3(0.9));\r\n this.$l.emissive = pb.textureLoad(this.emissiveTex, this.texel, 0).rgb;\r\n for (let k = 0; k < 6; k++) {\r\n this.$if(this[`open${k}`], function () {\r\n this.$l.faceDir = pb.vec3(...ANISO_DIRS[k]);\r\n this.$l.ambient = pb.vec3(0);\r\n if (skyIrradiance) {\r\n this.ambient = pb.mul(envLight.getIrradiance(this, this.faceDir).rgb, this.params.y);\r\n }\r\n if (useProbes) {\r\n this.$l.bounce = sampleProbeIrradiance(\r\n this,\r\n pb.add(this.p, pb.mul(this.faceDir, this.half)),\r\n this.faceDir,\r\n this.faceDir,\r\n 'feedback'\r\n );\r\n this.ambient = pb.mix(this.ambient, this.bounce.rgb, this.bounce.a);\r\n }\r\n this[`acc${k}`] = pb.add(this[`acc${k}`], pb.mul(this.feedback, this.ambient), this.emissive);\r\n });\r\n }\r\n // Stored as the sum, with the share of each face by luminance\r\n this.radiance = pb.add(this.acc0, this.acc1, this.acc2, this.acc3, this.acc4, this.acc5);\r\n this.$l.lumaTotal = pb.max(pb.max(this.radiance.r, this.radiance.g), this.radiance.b);\r\n this.$l.invLuma = this.$choice(\r\n pb.greaterThan(this.lumaTotal, 0),\r\n pb.div(1, pb.max(this.lumaTotal, 1e-8)),\r\n pb.float(0)\r\n );\r\n for (let k = 0; k < 6; k++) {\r\n this.$l[`luma${k}`] = pb.mul(\r\n pb.max(pb.max(this[`acc${k}`].r, this[`acc${k}`].g), this[`acc${k}`].b),\r\n this.invLuma\r\n );\r\n }\r\n this.aniso0 = pb.vec4(this.luma0, this.luma1, this.luma2, this.luma3);\r\n this.aniso1 = pb.vec4(this.luma4, this.luma5, 0, 0);\r\n });\r\n pb.textureStore(this.radianceOut, pb.uvec3(this.texel), pb.vec4(this.radiance, 1));\r\n pb.textureStore(this.aniso0Out, pb.uvec3(this.texel), this.aniso0);\r\n pb.textureStore(this.aniso1Out, pb.uvec3(this.texel), this.aniso1);\r\n this.$outputs.color = pb.vec4(0);\r\n });\r\n }\r\n });\r\n }\r\n}\r\n"],"names":["MAX_VOXEL_LIGHTS","LIGHT_VEC4S","BRICK_VOXELS","aniso1Format","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","writable","MAX_SHADOWED_VOXEL_LIGHTS","HARD_SHADOW_TAN","SHADOW_STEPS","ANISO_DIRS","VoxelLighting","_scene","_radiance","_aniso0","_aniso1","_resolution","_levels","_program","_programKey","_bindGroup","_brickProgram","_brickBindGroup","_brickBuffer","_renderStates","_lightData","_zStart","_passes","_sunDir","_sunColor","_params","_slab","scene","Float32Array","Vector4","radiance","Error","aniso0","aniso1","ready","passes","update","global","albedo","emissive","resolution","camera","options","device","levels","dispose","depth","createTexture3D","mipmapping","name","envLight","env","light","physical","lightingMode","cacheExposure","getGICacheExposure","envStrength","strength","skyIrradiance","type","hasIrradiance","probes","getActiveProbeVolume","key","getType","envVariant","disposePrograms","createProgram","createBindGroup","bindGroupLayouts","numLights","collectLights","localLightShadows","slices","Math","max","min","floor","slicesPerFrame","tanHalf","tan","sunShadowConeAngle","PI","setXYZW","bind","bg","applyBindGroup","setTexture","fetchSampler","setValue","updateBindGroup","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","useColorState","setColorMask","draw","program","width","height","fb","pushDeviceStates","pool","fetchTemporalFramebuffer","setFramebuffer","setViewport","setScissor","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","releaseFrameBuffer","fresh","freshMaterialBricks","count","bytes","data","byteLength","createBuffer","usage","storage","bufferSubData","setBuffer","irradianceSHFB","irradianceSH","exposure","localShadows","cameraPos","getWorldPosition","found","sun","others","rootNode","iterate","node","isPunctualLight","hidden","isDirectionLight","sunLight","push","d","p","positionAndRange","hypot","x","y","z","dir","directionAndCutoff","c","diffuseAndIntensity","w","sort","a","b","length","shadowedCount","i","o","set","extraParams","shadowed","castShadow","useProbes","bricks","buildSDFProgram","label","vertex","pb","$inputs","pos","vec2","attrib","main","$builtins","position","vec4","fragment","$outputs","color","declareGlobalSDFUniforms","declareDynamicSDFUniforms","albedoTex","tex3D","sampleType","uniform","emissiveTex","radianceOut","texStorage3D","rgba16float","aniso0Out","rgba8unorm","aniso1Out","rg8unorm","lights","sunDir","sunColor","params","slab","storageBufferReadonly","initShaderBindings","declareProbeUniforms","func","vec3","$l","sub","posRange","xyz","dist2","dot","atten","div","range2","mul","f","f2","clamp","$return","defineLTCEdgeFunctions","lightNormal","neg","normalize","cross","ax","ay","toPoint","$if","lessThanEqual","float","falloff","greaterThan","smoothStep","ff","Z_LTCEvaluateRect","N","V","mat3","add","Z_pointAttenuation","cd","dirCutoff","spot","angleScaleOffset","mix","res","int","fc","ivec2","fragCoord","xy","brick","at","level","t","ivec3","mod","rowsPerLevel","rem","tz","texel","textureLoad","info","fineVs","equal","GLOBAL_SDF_LEVELS","originC","resV","vs","half","k","sampleGlobalSDFWithVoxel","rgb","L","ps","sign","shadow","sdfConeShadow","GLOBAL_SDF_PARAMS","$for","greaterThanEqual","li","$break","base","colorIntensity","extra","shadowInfo","ltype","LIGHT_TYPE_RECT","rc","v","Z_rectFormFactor","$else","Ld","LIGHT_TYPE_DIRECTIONAL","$elseif","LIGHT_TYPE_SPOT","Z_spotAttenuation","lc","lightSum","lf0","lf1","lf2","lf3","lf4","lf5","lightShadow","and","r","g","toLight","SL","sps","slen","feedback","faceDir","ambient","getIrradiance","bounce","sampleProbeIrradiance","acc0","acc1","acc2","acc3","acc4","acc5","lumaTotal","invLuma","$choice","luma0","luma1","luma2","luma3","luma4","luma5","textureStore","uvec3"],"mappings":";;;;;;;;;;;;;AAgCA,yDACaA,MAAAA,gBAAAA,GAAmB;AAChC;;;AAGC,IACD,MAAMC,WAAc,GAAA,CAAA;AACpB,iGACA,MAAMC,YAAe,GAAA,CAAA;AACrB;;;AAGC,IACD,SAASC,YAAAA,GAAAA;IACP,OAAOC,SAAAA,EAAAA,CAAYC,aAAa,EAAGC,CAAAA,WAAW,CAACC,oBAAoB,CAAC,UAAaC,CAAAA,EAAAA,QAAAA,GAC7E,UACA,GAAA,YAAA;AACN;AACA,yFACaC,MAAAA,yBAAAA,GAA4B;AACzC;;;AAGC,IACD,MAAMC,eAAkB,GAAA,IAAA;AACxB,yEACA,MAAMC,YAAe,GAAA,EAAA;AACrB,sEACA,MAAMC,UAAyC,GAAA;AAC7C,IAAA;AAAC,QAAA,CAAA;AAAG,QAAA,CAAA;AAAG,QAAA;AAAE,KAAA;AACT,IAAA;AAAC,QAAA,CAAA;AAAG,QAAA,CAAA;AAAG,QAAA;AAAE,KAAA;AACT,IAAA;AAAC,QAAA,CAAA;AAAG,QAAA,CAAA;AAAG,QAAA;AAAE,KAAA;AACT,IAAA;QAAC,EAAC;AAAG,QAAA,CAAA;AAAG,QAAA;AAAE,KAAA;AACV,IAAA;AAAC,QAAA,CAAA;QAAG,EAAC;AAAG,QAAA;AAAE,KAAA;AACV,IAAA;AAAC,QAAA,CAAA;AAAG,QAAA,CAAA;QAAG;AAAG;AACX,CAAA;AAkBD;;;;;;;;;;;;;AAaC,IACM,MAAMC,aAAAA,CAAAA;IACMC,MAAc;IACvBC,SAA+B;IAC/BC,OAA6B;IAC7BC,OAA6B;IAC7BC,WAAoB;IACpBC,OAAgB;IAChBC,QAA+B;IAC/BC,WAAoB;IACpBC,UAAgC;IAChCC,aAAoC;IACpCC,eAAqC;IACrCC,YAAsC;IACtCC,aAAwC;IAC/BC,UAAsC;IAC/CC,OAAgB;IAChBC,OAAgB;IACPC,OAAiB;IACjBC,SAAmB;IACnBC,OAAiB;IACjBC,KAAe;AAChC,IAAA,WAAA,CAAYC,KAAY,CAAE;QACxB,IAAI,CAACpB,MAAM,GAAGoB,KAAAA;QACd,IAAI,CAACnB,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,OAAO,GAAG,IAAA;QACf,IAAI,CAACC,OAAO,GAAG,IAAA;QACf,IAAI,CAACC,WAAW,GAAG,CAAA;QACnB,IAAI,CAACC,OAAO,GAAG,CAAA;QACf,IAAI,CAACC,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,WAAW,GAAG,EAAA;QACnB,IAAI,CAACC,UAAU,GAAG,IAAA;QAClB,IAAI,CAACC,aAAa,GAAG,IAAA;QACrB,IAAI,CAACC,eAAe,GAAG,IAAA;QACvB,IAAI,CAACC,YAAY,GAAG,IAAA;QACpB,IAAI,CAACC,aAAa,GAAG,IAAA;AACrB,QAAA,IAAI,CAACC,UAAU,GAAG,IAAIQ,YAAAA,CAAanC,mBAAmBC,WAAc,GAAA,CAAA,CAAA;QACpE,IAAI,CAAC2B,OAAO,GAAG,CAAA;QACf,IAAI,CAACC,OAAO,GAAG,CAAA;QACf,IAAI,CAACC,OAAO,GAAG,IAAIM,OAAAA,EAAAA;QACnB,IAAI,CAACL,SAAS,GAAG,IAAIK,OAAAA,EAAAA;QACrB,IAAI,CAACJ,OAAO,GAAG,IAAII,OAAAA,EAAAA;QACnB,IAAI,CAACH,KAAK,GAAG,IAAIG,OAAAA,EAAAA;AACnB;yEAEA,IAAIC,QAAW,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAACtB,SAAS,EAAE;AACnB,YAAA,MAAM,IAAIuB,KAAM,CAAA,oDAAA,CAAA;AAClB;QACA,OAAO,IAAI,CAACvB,SAAS;AACvB;2GAEA,IAAIwB,MAAS,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAACvB,OAAO,EAAE;AACjB,YAAA,MAAM,IAAIsB,KAAM,CAAA,oDAAA,CAAA;AAClB;QACA,OAAO,IAAI,CAACtB,OAAO;AACrB;0EAEA,IAAIwB,MAAS,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAACvB,OAAO,EAAE;AACjB,YAAA,MAAM,IAAIqB,KAAM,CAAA,oDAAA,CAAA;AAClB;QACA,OAAO,IAAI,CAACrB,OAAO;AACrB;AACA,IAAA,IAAIwB,KAAQ,GAAA;AACV,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC1B,SAAS;AACzB;uCAEA,IAAI2B,MAAS,GAAA;QACX,OAAO,IAAI,CAACb,OAAO;AACrB;AACA;;;;AAIC,MACDc,MACEC,CAAAA,MAAiB,EACjBC,MAAiB,EACjBC,QAAmB,EACnBC,UAAkB,EAClBC,MAAc,EACdC,OAA6B,EAC7B;AACA,QAAA,MAAMC,MAAS9C,GAAAA,SAAAA,EAAAA;QACf,MAAM8B,KAAAA,GAAQ,IAAI,CAACpB,MAAM;AACzB,QAAA,IAAI,CAAC,IAAI,CAACC,SAAS,IAAI,IAAI,CAACG,WAAW,KAAK6B,UAAAA,IAAc,IAAI,CAAC5B,OAAO,KAAKyB,MAAAA,CAAOO,MAAM,EAAE;YACxF,IAAI,CAACpC,SAAS,EAAEqC,OAAAA,EAAAA;YAChB,IAAI,CAACpC,OAAO,EAAEoC,OAAAA,EAAAA;YACd,IAAI,CAACnC,OAAO,EAAEmC,OAAAA,EAAAA;YACd,IAAI,CAAClC,WAAW,GAAG6B,UAAAA;AACnB,YAAA,IAAI,CAAC5B,OAAO,GAAGyB,MAAAA,CAAOO,MAAM;YAC5B,MAAME,KAAAA,GAAQN,UAAaH,GAAAA,MAAAA,CAAOO,MAAM;YACxC,IAAI,CAACpC,SAAS,GAAGmC,MAAAA,CAAOI,eAAe,CAAC,SAAA,EAAWP,UAAYA,EAAAA,UAAAA,EAAYM,KAAO,EAAA;gBAChFE,UAAY,EAAA,KAAA;gBACZ/C,QAAU,EAAA;AACZ,aAAA,CAAA;AACA,YAAA,IAAI,CAACO,SAAS,CAACyC,IAAI,GAAG,qBAAA;YACtB,IAAI,CAACxC,OAAO,GAAGkC,MAAAA,CAAOI,eAAe,CAAC,YAAA,EAAcP,UAAYA,EAAAA,UAAAA,EAAYM,KAAO,EAAA;gBACjFE,UAAY,EAAA,KAAA;gBACZ/C,QAAU,EAAA;AACZ,aAAA,CAAA;AACA,YAAA,IAAI,CAACQ,OAAO,CAACwC,IAAI,GAAG,mBAAA;YACpB,IAAI,CAACvC,OAAO,GAAGiC,MAAAA,CAAOI,eAAe,CAACnD,YAAAA,EAAAA,EAAgB4C,UAAYA,EAAAA,UAAAA,EAAYM,KAAO,EAAA;gBACnFE,UAAY,EAAA,KAAA;gBACZ/C,QAAU,EAAA;AACZ,aAAA,CAAA;AACA,YAAA,IAAI,CAACS,OAAO,CAACuC,IAAI,GAAG,mBAAA;YACpB,IAAI,CAAC5B,OAAO,GAAG,CAAA;AACjB;AACA,QAAA,MAAM6B,WAAWvB,KAAMwB,CAAAA,GAAG,CAACC,KAAK,CAACF,QAAQ;QACzC,MAAMG,QAAAA,GAAW1B,KAAM2B,CAAAA,YAAY,KAAK,UAAA;;QAExC,MAAMC,aAAAA,GAAgBC,kBAAmB7B,CAAAA,KAAAA,CAAM2B,YAAY,CAAA;AAC3D,QAAA,MAAMG,cAAc9B,KAAMwB,CAAAA,GAAG,CAACC,KAAK,CAACM,QAAQ,IAAI,CAAA;;QAEhD,MAAMC,aAAAA,GAAgBhC,KAAMwB,CAAAA,GAAG,CAACC,KAAK,CAACQ,IAAI,KAAK,MAAUV,IAAAA,QAAAA,CAASW,aAAa,EAAA;AAC/E,QAAA,MAAMC,SAASC,oBAAqBpC,CAAAA,KAAAA,CAAAA;AACpC,QAAA,MAAMqC,GAAM,GAAA,CAAA,EAAG3B,MAAOO,CAAAA,MAAM,CAAC,CAAC,EAAEjB,KAAAA,CAAM2B,YAAY,CAAC,CAAC,EAAEK,aAAgBT,GAAAA,QAAAA,CAASe,OAAO,EAAA,GAAK,MAAO,CAAA,CAAC,EACjGN,aAAAA,GAAgB,IAAI,CAACO,UAAU,EAAA,GAAK,EACrC,CAAA,OAAO,EAAEJ,MAAAA,GAAS,IAAI,CAAG,CAAA,CAAA;QAC1B,IAAI,CAAC,IAAI,CAACjD,QAAQ,IAAI,IAAI,CAACC,WAAW,KAAKkD,GAAK,EAAA;AAC9C,YAAA,IAAI,CAACG,eAAe,EAAA;AACpB,YAAA,IAAI,CAACtD,QAAQ,GAAG,IAAI,CAACuD,aAAa,CAAC/B,MAAOO,CAAAA,MAAM,EAAES,QAAAA,EAAUM,aAAe,EAAA,CAAC,CAACG,MAAQ,EAAA,KAAA,CAAA;YACrF,IAAI,CAAChD,WAAW,GAAGkD,GAAAA;AACnB,YAAA,IAAI,CAACjD,UAAU,GAAG4B,MAAAA,CAAO0B,eAAe,CAAC,IAAI,CAACxD,QAAQ,CAACyD,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAC5E;QACA,MAAMC,SAAAA,GAAY,IAAI,CAACC,aAAa,CAAC/B,MAAQc,EAAAA,aAAAA,EAAeb,QAAQ+B,iBAAiB,CAAA;AACrF,QAAA,MAAMC,MAASC,GAAAA,IAAAA,CAAKC,GAAG,CAAC,CAAGD,EAAAA,IAAAA,CAAKE,GAAG,CAACrC,UAAYmC,EAAAA,IAAAA,CAAKG,KAAK,CAACpC,QAAQqC,cAAc,CAAA,CAAA,CAAA;AACjF,QAAA,MAAMC,OAAUL,GAAAA,IAAAA,CAAKM,GAAG,CAAC,IAAML,CAAAA,GAAG,CAAC,GAAA,EAAKlC,OAAQwC,CAAAA,kBAAkB,CAAIP,GAAAA,IAAAA,CAAKQ,EAAE,GAAI,GAAA,CAAA;AACjF,QAAA,IAAI,CAAC1D,OAAO,CAAC2D,OAAO,CAACb,SAAAA,EAAWd,aAAauB,OAAS,EAAA,CAAA,CAAA;AACtD,QAAA,IAAI,CAACtD,KAAK,CAAC0D,OAAO,CAAC5C,UAAAA,EAAYH,MAAOO,CAAAA,MAAM,EAAE8B,MAAAA,EAAQ,IAAI,CAACrD,OAAO,CAAA;AAClE,QAAA,MAAMgE,OAAO,CAACC,EAAAA,GAAAA;AACZjD,YAAAA,MAAAA,CAAOkD,cAAc,CAACD,EAAAA,CAAAA;AACtBA,YAAAA,EAAAA,CAAGE,UAAU,CAAC,WAAalD,EAAAA,MAAAA,EAAQmD,YAAa,CAAA,qBAAA,CAAA,CAAA;AAChDH,YAAAA,EAAAA,CAAGE,UAAU,CAAC,aAAejD,EAAAA,QAAAA,EAAUkD,YAAa,CAAA,qBAAA,CAAA,CAAA;AACpDH,YAAAA,EAAAA,CAAGE,UAAU,CAAC,aAAe,EAAA,IAAI,CAAChF,SAAS,CAAA;AAC3C8E,YAAAA,EAAAA,CAAGE,UAAU,CAAC,WAAa,EAAA,IAAI,CAAC/E,OAAO,CAAA;AACvC6E,YAAAA,EAAAA,CAAGE,UAAU,CAAC,WAAa,EAAA,IAAI,CAAC9E,OAAO,CAAA;AACvC4E,YAAAA,EAAAA,CAAGI,QAAQ,CAAC,QAAU,EAAA,IAAI,CAACtE,UAAU,CAAA;AACrCkE,YAAAA,EAAAA,CAAGI,QAAQ,CAAC,QAAU,EAAA,IAAI,CAACnE,OAAO,CAAA;AAClC+D,YAAAA,EAAAA,CAAGI,QAAQ,CAAC,UAAY,EAAA,IAAI,CAAClE,SAAS,CAAA;AACtC8D,YAAAA,EAAAA,CAAGI,QAAQ,CAAC,QAAU,EAAA,IAAI,CAACjE,OAAO,CAAA;AAClC6D,YAAAA,EAAAA,CAAGI,QAAQ,CAAC,MAAQ,EAAA,IAAI,CAAChE,KAAK,CAAA;AAC9B,YAAA,IAAIiC,aAAe,EAAA;AACjBT,gBAAAA,QAAAA,CAASyC,eAAe,CAACL,EAAAA,CAAAA;AAC3B;AACAxB,YAAAA,MAAAA,EAAQyB,cAAeD,CAAAA,EAAAA,CAAAA;AACzB,SAAA;AACA,QAAA,IAAI,CAAC,IAAI,CAACnE,aAAa,EAAE;AACvB,YAAA,IAAI,CAACA,aAAa,GAAGwB,MAAAA,CAAOiD,oBAAoB,EAAA;YAChD,IAAI,CAACzE,aAAa,CAAC0E,aAAa,GAAGC,UAAU,CAAC,KAAOC,CAAAA,CAAAA,WAAW,CAAC,KAAA,CAAA;AACjE,YAAA,IAAI,CAAC5E,aAAa,CAAC6E,kBAAkB,EAAA,CAAGC,WAAW,CAAC,MAAA,CAAA;YACpD,IAAI,CAAC9E,aAAa,CAAC+E,aAAa,GAAGC,YAAY,CAAC,KAAO,EAAA,KAAA,EAAO,KAAO,EAAA,KAAA,CAAA;AACvE;AACA,QAAA,MAAMC,IAAO,GAAA,CAACC,OAAqBf,EAAAA,EAAAA,EAAegB,KAAeC,EAAAA,MAAAA,GAAAA;AAC/D,YAAA,IAAIC,EAA4B,GAAA,IAAA;AAChC7D,YAAAA,MAAAA,CAAO8D,gBAAgB,EAAA;YACvB,IAAI;AACFD,gBAAAA,EAAAA,GAAK7D,OAAO+D,IAAI,CAACC,wBAAwB,CAAC,KAAA,EAAOL,OAAOC,MAAQ,EAAA,YAAA,CAAA;AAChE5D,gBAAAA,MAAAA,CAAOiE,cAAc,CAACJ,EAAAA,CAAAA;AACtB7D,gBAAAA,MAAAA,CAAOkE,WAAW,CAAC;AAAC,oBAAA,CAAA;AAAG,oBAAA,CAAA;AAAGP,oBAAAA,KAAAA;AAAOC,oBAAAA;AAAO,iBAAA,CAAA;AACxC5D,gBAAAA,MAAAA,CAAOmE,UAAU,CAAC;AAAC,oBAAA,CAAA;AAAG,oBAAA,CAAA;AAAGR,oBAAAA,KAAAA;AAAOC,oBAAAA;AAAO,iBAAA,CAAA;AACvC5D,gBAAAA,MAAAA,CAAOoE,UAAU,CAACV,OAAAA,CAAAA;gBAClB1D,MAAOqE,CAAAA,YAAY,CAAC,CAAG1B,EAAAA,EAAAA,CAAAA;gBACvB2B,kBAAmB,CAAA,IAAI,CAAC9F,aAAa,CAAA;aAC7B,QAAA;AACRwB,gBAAAA,MAAAA,CAAOuE,eAAe,EAAA;AACtB,gBAAA,IAAIV,EAAI,EAAA;oBACN7D,MAAO+D,CAAAA,IAAI,CAACS,kBAAkB,CAACX,EAAAA,CAAAA;AACjC;AACF;AACF,SAAA;QACAnB,IAAK,CAAA,IAAI,CAACtE,UAAU,CAAA;AACpBqF,QAAAA,IAAAA,CAAK,IAAI,CAACvF,QAAQ,EAAE,IAAI,CAACE,UAAU,EAAGyB,UAAYA,EAAAA,UAAAA,GAAakC,MAASrC,GAAAA,MAAAA,CAAOO,MAAM,CAAA;;;QAGrF,MAAMwE,KAAAA,GAAQ/E,OAAOgF,mBAAmB;QACxC,IAAID,KAAAA,CAAME,KAAK,GAAG,CAAG,EAAA;AACnB,YAAA,IAAI,CAAC,IAAI,CAACtG,aAAa,EAAE;AACvB,gBAAA,IAAI,CAACA,aAAa,GAAG,IAAI,CAACoD,aAAa,CAAC/B,MAAOO,CAAAA,MAAM,EAAES,QAAAA,EAAUM,aAAe,EAAA,CAAC,CAACG,MAAQ,EAAA,IAAA,CAAA;AAC1F,gBAAA,IAAI,CAAC7C,eAAe,GAAG0B,MAAAA,CAAO0B,eAAe,CAAC,IAAI,CAACrD,aAAa,CAACsD,gBAAgB,CAAC,CAAE,CAAA,CAAA;AACtF;AACA,YAAA,MAAMiD,KAAQH,GAAAA,KAAAA,CAAMI,IAAI,CAACC,UAAU;YACnC,IAAI,CAAC,IAAI,CAACvG,YAAY,IAAI,IAAI,CAACA,YAAY,CAACuG,UAAU,GAAGF,KAAO,EAAA;gBAC9D,IAAI,CAACrG,YAAY,EAAE2B,OAAAA,EAAAA;AACnB,gBAAA,IAAI,CAAC3B,YAAY,GAAGyB,MAAO+E,CAAAA,YAAY,CAACH,KAAO,EAAA;oBAAEI,KAAO,EAAA,SAAA;oBAAWC,OAAS,EAAA;AAAK,iBAAA,CAAA;AACnF;AACA,YAAA,IAAI,CAAC1G,YAAY,CAAC2G,aAAa,CAAC,CAAA,EAAGT,KAAMI,CAAAA,IAAI,EAAE,CAAA,EAAGJ,KAAME,CAAAA,KAAK,GAAG,CAAA,CAAA;YAChE,MAAMhC,EAAAA,GAAK,IAAI,CAACrE,eAAe;YAC/BoE,IAAKC,CAAAA,EAAAA,CAAAA;AACLA,YAAAA,EAAAA,CAAGwC,SAAS,CAAC,QAAU,EAAA,IAAI,CAAC5G,YAAY,CAAA;YACxCkF,IAAK,CAAA,IAAI,CAACpF,aAAa,EAAEsE,IAAI3F,YAAgB,IAAA,CAAA,EAAGyH,MAAME,KAAK,CAAA;AAC7D;QACA,IAAI,CAACjG,OAAO,GAAG,CAAC,IAAI,CAACA,OAAO,GAAGqD,MAAK,IAAKlC,UAAAA;AACzC,QAAA,IAAI,CAAClB,OAAO,EAAA;AACd;IACAuB,OAAU,GAAA;QACR,IAAI,CAACrC,SAAS,EAAEqC,OAAAA,EAAAA;QAChB,IAAI,CAACrC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,OAAO,EAAEoC,OAAAA,EAAAA;QACd,IAAI,CAACpC,OAAO,GAAG,IAAA;QACf,IAAI,CAACC,OAAO,EAAEmC,OAAAA,EAAAA;QACd,IAAI,CAACnC,OAAO,GAAG,IAAA;AACf,QAAA,IAAI,CAACyD,eAAe,EAAA;QACpB,IAAI,CAACjD,YAAY,EAAE2B,OAAAA,EAAAA;QACnB,IAAI,CAAC3B,YAAY,GAAG,IAAA;AACtB;qBAEA,eAA0B,GAAA;QACxB,IAAI,CAACH,UAAU,EAAE8B,OAAAA,EAAAA;QACjB,IAAI,CAAC9B,UAAU,GAAG,IAAA;QAClB,IAAI,CAACF,QAAQ,EAAEgC,OAAAA,EAAAA;QACf,IAAI,CAAChC,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACI,eAAe,EAAE4B,OAAAA,EAAAA;QACtB,IAAI,CAAC5B,eAAe,GAAG,IAAA;QACvB,IAAI,CAACD,aAAa,EAAE6B,OAAAA,EAAAA;QACpB,IAAI,CAAC7B,aAAa,GAAG,IAAA;QACrB,IAAI,CAACF,WAAW,GAAG,EAAA;AACrB;sFAEA,UAAqB,GAAA;QACnB,MAAMoC,QAAAA,GAAW,IAAI,CAAC3C,MAAM,CAAC4C,GAAG,CAACC,KAAK,CAACF,QAAQ;QAI/C,OAAO,CAAA,EAAGA,SAAS6E,cAAc,GAAG,OAAO7E,QAAS8E,CAAAA,YAAY,GAAG,KAAA,GAAQ,EAAI,CAAA,CAAA;AACjF;AACA;;;;;;;AAOC,MACD,aAAsBvF,CAAAA,MAAc,EAAEwF,QAAgB,EAAEC,YAAqB,EAAE;QAC7E,MAAMvG,KAAAA,GAAQ,IAAI,CAACpB,MAAM;QACzB,MAAM4H,SAAAA,GAAY1F,OAAO2F,gBAAgB,EAAA;AACzC,QAAA,MAAMC,KAA6C,GAAA;YAAEC,GAAK,EAAA;AAAK,SAAA;AAC/D,QAAA,MAAMC,SAAgD,EAAE;AACxD5G,QAAAA,KAAAA,CAAM6G,QAAQ,CAACC,OAAO,CAAC,CAACC,IAAAA,GAAAA;AACtB,YAAA,IAAIA,KAAKC,eAAe,EAAA,IAAM,CAACD,IAAAA,CAAKE,MAAM,EAAE;gBAC1C,IAAIF,IAAAA,CAAKG,gBAAgB,EAAI,EAAA;;AAE3B,oBAAA,IAAI,CAACR,KAAMC,CAAAA,GAAG,IAAII,IAAAA,CAAKI,QAAQ,EAAE;wBAC/B,IAAIT,KAAAA,CAAMC,GAAG,EAAE;AACbC,4BAAAA,MAAAA,CAAOQ,IAAI,CAAC;AAAE3F,gCAAAA,KAAAA,EAAOiF,MAAMC,GAAG;gCAAEU,CAAG,EAAA;AAAE,6BAAA,CAAA;AACvC;AACAX,wBAAAA,KAAAA,CAAMC,GAAG,GAAGI,IAAAA;qBACP,MAAA;AACLH,wBAAAA,MAAAA,CAAOQ,IAAI,CAAC;4BAAE3F,KAAOsF,EAAAA,IAAAA;4BAAMM,CAAG,EAAA;AAAE,yBAAA,CAAA;AAClC;iBACK,MAAA;oBACL,MAAMC,CAAAA,GAAIP,KAAKQ,gBAAgB;AAC/BX,oBAAAA,MAAAA,CAAOQ,IAAI,CAAC;wBACV3F,KAAOsF,EAAAA,IAAAA;AACPM,wBAAAA,CAAAA,EAAGrE,KAAKwE,KAAK,CAACF,EAAEG,CAAC,GAAGjB,UAAUiB,CAAC,EAAEH,EAAEI,CAAC,GAAGlB,UAAUkB,CAAC,EAAEJ,EAAEK,CAAC,GAAGnB,UAAUmB,CAAC;AACvE,qBAAA,CAAA;AACF;AACF;YACA,OAAO,KAAA;AACT,SAAA,CAAA;QACA,MAAMR,QAAAA,GAAoCT,MAAMC,GAAG;AACnD,QAAA,IAAIQ,QAAU,EAAA;YACZ,MAAMS,GAAAA,GAAMT,SAASU,kBAAkB;YACvC,MAAMC,CAAAA,GAAIX,SAASY,mBAAmB;AACtC,YAAA,IAAI,CAACnI,OAAO,CAAC6D,OAAO,CAACmE,GAAAA,CAAIH,CAAC,EAAEG,GAAIF,CAAAA,CAAC,EAAEE,GAAAA,CAAID,CAAC,EAAE,CAAA,CAAA;YAC1C,IAAI,CAAC9H,SAAS,CAAC4D,OAAO,CAACqE,EAAEL,CAAC,GAAGK,CAAEE,CAAAA,CAAC,GAAG1B,QAAAA,EAAUwB,EAAEJ,CAAC,GAAGI,CAAEE,CAAAA,CAAC,GAAG1B,QAAAA,EAAUwB,CAAEH,CAAAA,CAAC,GAAGG,CAAAA,CAAEE,CAAC,GAAG1B,QAAU,EAAA,CAAA,CAAA;SACpF,MAAA;YACL,IAAI,CAAC1G,OAAO,CAAC6D,OAAO,CAAC,CAAG,EAAA,IAAI,CAAG,EAAA,CAAA,CAAA;AAC/B,YAAA,IAAI,CAAC5D,SAAS,CAAC4D,OAAO,CAAC,CAAA,EAAG,GAAG,CAAG,EAAA,CAAA,CAAA;AAClC;QACAmD,MAAOqB,CAAAA,IAAI,CAAC,CAACC,CAAAA,EAAGC,IAAMD,CAAEb,CAAAA,CAAC,GAAGc,CAAAA,CAAEd,CAAC,CAAA;AAC/B,QAAA,MAAM1B,QAAQ3C,IAAKE,CAAAA,GAAG,CAAC0D,MAAAA,CAAOwB,MAAM,EAAEtK,gBAAAA,CAAAA;QACtC,MAAM+H,IAAAA,GAAO,IAAI,CAACpG,UAAU;AAC5B,QAAA,IAAI4I,aAAgB,GAAA,CAAA;AACpB,QAAA,IAAK,IAAIC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI3C,OAAO2C,CAAK,EAAA,CAAA;AAC9B,YAAA,MAAM7G,KAAQmF,GAAAA,MAAM,CAAC0B,CAAAA,CAAE,CAAC7G,KAAK;YAC7B,MAAM8G,CAAAA,GAAID,IAAIvK,WAAc,GAAA,CAAA;AAC5B8H,YAAAA,IAAAA,CAAK2C,GAAG,CAAC/G,KAAM8F,CAAAA,gBAAgB,EAAEgB,CAAAA,CAAAA;AACjC1C,YAAAA,IAAAA,CAAK2C,GAAG,CAAC/G,KAAMoG,CAAAA,kBAAkB,EAAEU,CAAI,GAAA,CAAA,CAAA;YACvC,MAAMT,CAAAA,GAAIrG,MAAMsG,mBAAmB;AACnClC,YAAAA,IAAI,CAAC0C,CAAAA,GAAI,CAAE,CAAA,GAAGT,EAAEL,CAAC;AACjB5B,YAAAA,IAAI,CAAC0C,CAAAA,GAAI,CAAE,CAAA,GAAGT,EAAEJ,CAAC;AACjB7B,YAAAA,IAAI,CAAC0C,CAAAA,GAAI,EAAG,CAAA,GAAGT,EAAEH,CAAC;AAClB9B,YAAAA,IAAI,CAAC0C,CAAI,GAAA,EAAA,CAAG,GAAGT,CAAAA,CAAEE,CAAC,GAAG1B,QAAAA;AACrBT,YAAAA,IAAAA,CAAK2C,GAAG,CAAC/G,KAAMgH,CAAAA,WAAW,EAAEF,CAAI,GAAA,EAAA,CAAA;;YAEhC,MAAMG,QAAAA,GACJnC,gBACA8B,aAAgB9J,GAAAA,yBAAAA,IAChB,CAACkD,KAAMyF,CAAAA,gBAAgB,EACvBzF,IAAAA,KAAAA,CAAMkH,UAAU;AAClB,YAAA,IAAID,QAAU,EAAA;AACZL,gBAAAA,aAAAA,EAAAA;AACF;AACAxC,YAAAA,IAAI,CAAC0C,CAAAA,GAAI,EAAG,CAAA,GAAGG,WAAW,CAAI,GAAA,CAAA;YAC9B7C,IAAI,CAAC0C,CAAI,GAAA,EAAA,CAAG,GAAG,CAAA;YACf1C,IAAI,CAAC0C,CAAI,GAAA,EAAA,CAAG,GAAG,CAAA;YACf1C,IAAI,CAAC0C,CAAI,GAAA,EAAA,CAAG,GAAG,CAAA;AACjB;QACA,OAAO5C,KAAAA;AACT;AACA;;;;MAKQlD,aACNxB,CAAAA,MAAc,EACdS,QAAiB,EACjBM,aAAsB,EACtB4G,SAAkB,EAClBC,MAAe,EACf;QACA,MAAM7I,KAAAA,GAAQ,IAAI,CAACpB,MAAM;AACzB,QAAA,MAAM2C,WAAWvB,KAAMwB,CAAAA,GAAG,CAACC,KAAK,CAACF,QAAQ;AACzC,QAAA,OAAOuH,eAAgB,CAAA;AACrBC,YAAAA,KAAAA,EAAOF,SAAS,qBAAwB,GAAA,eAAA;AACxCG,YAAAA,MAAAA,CAAAA,CAAOC,EAAE,EAAA;gBACP,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGF,EAAGG,CAAAA,IAAI,EAAGC,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpCJ,gBAAAA,EAAAA,CAAGK,IAAI,CAAC,WAAA;AACN,oBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAGP,EAAGQ,CAAAA,IAAI,CAAC,IAAI,CAACP,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;AACzD,iBAAA,CAAA;AACF,aAAA;AACAO,YAAAA,QAAAA,CAAAA,CAAST,EAAE,EAAA;AACT,gBAAA,IAAI,CAACU,QAAQ,CAACC,KAAK,GAAGX,GAAGQ,IAAI,EAAA;gBAC7BI,wBAAyB,CAAA,IAAI,EAAE,CAAG5I,EAAAA,MAAAA,CAAAA;;AAElC6I,gBAAAA,yBAAAA,CAA0B,IAAI,EAAE,CAAA,CAAA;gBAChC,IAAI,CAACC,SAAS,GAAGd,EAAGe,CAAAA,KAAK,GAAGC,UAAU,CAAC,oBAAsBC,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;gBACrE,IAAI,CAACC,WAAW,GAAGlB,EAAGe,CAAAA,KAAK,GAAGC,UAAU,CAAC,oBAAsBC,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;gBACvE,IAAI,CAACE,WAAW,GAAGnB,EAAAA,CAAGoB,YAAY,CAACC,WAAW,EAAGrE,CAAAA,OAAO,CAAC,CAAA,CAAA;gBACzD,IAAI,CAACsE,SAAS,GAAGtB,EAAAA,CAAGoB,YAAY,CAACG,UAAU,EAAGvE,CAAAA,OAAO,CAAC,CAAA,CAAA;AACtD,gBAAA,IAAI,CAACwE,SAAS,GACZxM,mBAAmB,UACfgL,GAAAA,EAAAA,CAAGoB,YAAY,CAACK,QAAQ,GAAGzE,OAAO,CAAC,KACnCgD,EAAGoB,CAAAA,YAAY,CAACG,UAAU,EAAA,CAAGvE,OAAO,CAAC,CAAA,CAAA;gBAC3C,IAAI,CAAC0E,MAAM,GAAG1B,EAAGQ,CAAAA,IAAI,CAAC3L,gBAAmBC,GAAAA,WAAAA,CAAY,EAAGmM,CAAAA,OAAO,CAAC,CAAA,CAAA;;AAEhE,gBAAA,IAAI,CAACU,MAAM,GAAG3B,GAAGQ,IAAI,EAAA,CAAGS,OAAO,CAAC,CAAA,CAAA;AAChC,gBAAA,IAAI,CAACW,QAAQ,GAAG5B,GAAGQ,IAAI,EAAA,CAAGS,OAAO,CAAC,CAAA,CAAA;;AAElC,gBAAA,IAAI,CAACY,MAAM,GAAG7B,GAAGQ,IAAI,EAAA,CAAGS,OAAO,CAAC,CAAA,CAAA;;AAEhC,gBAAA,IAAI,CAACa,IAAI,GAAG9B,GAAGQ,IAAI,EAAA,CAAGS,OAAO,CAAC,CAAA,CAAA;AAC9B,gBAAA,IAAIrB,MAAQ,EAAA;;oBAEV,IAAI,CAACA,MAAM,GAAGI,EAAAA,CAAGQ,IAAI,CAAC,CAAA,CAAE,EAAGuB,CAAAA,qBAAqB,CAAC,CAAA,CAAA;AACnD;AACA,gBAAA,IAAIhJ,aAAe,EAAA;AACjBT,oBAAAA,QAAAA,CAAS0J,kBAAkB,CAAChC,EAAAA,CAAAA;AAC9B;AACA,gBAAA,IAAIL,SAAW,EAAA;AACbsC,oBAAAA,oBAAAA,CAAqB,IAAI,EAAE,CAAA,CAAA;AAC7B;gBACAjC,EAAGkC,CAAAA,IAAI,CAAC,oBAAsB,EAAA;AAAClC,oBAAAA,EAAAA,CAAGmC,IAAI,CAAC,GAAA,CAAA;AAAMnC,oBAAAA,EAAAA,CAAGQ,IAAI,CAAC,UAAA;iBAAY,EAAE,WAAA;AACjE,oBAAA,IAAI,CAAC4B,EAAE,CAAChE,CAAC,GAAG4B,GAAGqC,GAAG,CAAC,IAAI,CAAChE,CAAC,EAAE,IAAI,CAACiE,QAAQ,CAACC,GAAG,CAAA;AAC5C,oBAAA,IAAI,CAACH,EAAE,CAACI,KAAK,GAAGxC,EAAGyC,CAAAA,GAAG,CAAC,IAAI,CAACrE,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA;AACrC,oBAAA,IAAI,CAACgE,EAAE,CAACM,KAAK,GAAG1C,EAAG2C,CAAAA,GAAG,CAAC,CAAA,EAAG3C,GAAGhG,GAAG,CAAC,IAAI,CAACwI,KAAK,EAAE,MAAA,CAAA,CAAA;AAC7C,oBAAA,IAAI,CAACJ,EAAE,CAACQ,MAAM,GAAG5C,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAACP,QAAQ,CAACvD,CAAC,EAAE,IAAI,CAACuD,QAAQ,CAACvD,CAAC,CAAA;AACxD,oBAAA,IAAI,CAACqD,EAAE,CAACU,CAAC,GAAG9C,EAAAA,CAAG2C,GAAG,CAAC,IAAI,CAACH,KAAK,EAAExC,EAAGhG,CAAAA,GAAG,CAAC,IAAI,CAAC4I,MAAM,EAAE,MAAA,CAAA,CAAA;oBACnD,IAAI,CAACR,EAAE,CAACW,EAAE,GAAG/C,EAAGgD,CAAAA,KAAK,CAAChD,EAAAA,CAAGqC,GAAG,CAAC,GAAGrC,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA,CAAA,EAAI,CAAG,EAAA,CAAA,CAAA;AAC5D,oBAAA,IAAI,CAACG,OAAO,CAACjD,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACH,KAAK,EAAE,IAAI,CAACK,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,CAAA;AAClD,iBAAA,CAAA;;;;AAIAG,gBAAAA,sBAAAA,CAAuB,IAAI,CAAA;gBAC3BlD,EAAGkC,CAAAA,IAAI,CACL,kBACA,EAAA;AAAClC,oBAAAA,EAAAA,CAAGmC,IAAI,CAAC,GAAA,CAAA;AAAMnC,oBAAAA,EAAAA,CAAGmC,IAAI,CAAC,GAAA,CAAA;AAAMnC,oBAAAA,EAAAA,CAAGmC,IAAI,CAAC,GAAA,CAAA;AAAMnC,oBAAAA,EAAAA,CAAGQ,IAAI,CAAC,UAAA,CAAA;AAAaR,oBAAAA,EAAAA,CAAGmC,IAAI,CAAC,IAAA,CAAA;AAAOnC,oBAAAA,EAAAA,CAAGmC,IAAI,CAAC,IAAA;iBAAM,EAC7F,WAAA;oBACE,IAAI,CAACC,EAAE,CAACe,WAAW,GAAGnD,EAAGoD,CAAAA,GAAG,CAACpD,EAAGqD,CAAAA,SAAS,CAACrD,EAAGsD,CAAAA,KAAK,CAAC,IAAI,CAACC,EAAE,EAAE,IAAI,CAACC,EAAE,CAAA,CAAA,CAAA;AACnE,oBAAA,IAAI,CAACpB,EAAE,CAACqB,OAAO,GAAGzD,GAAGqC,GAAG,CAAC,IAAI,CAAChE,CAAC,EAAE,IAAI,CAACiE,QAAQ,CAACC,GAAG,CAAA;AAClD,oBAAA,IAAI,CAACmB,GAAG,CAAC1D,EAAG2D,CAAAA,aAAa,CAAC3D,EAAGyC,CAAAA,GAAG,CAAC,IAAI,CAACU,WAAW,EAAE,IAAI,CAACM,OAAO,GAAG,CAAI,CAAA,EAAA,WAAA;AACpE,wBAAA,IAAI,CAACR,OAAO,CAACjD,EAAAA,CAAG4D,KAAK,CAAC,CAAA,CAAA,CAAA;AACxB,qBAAA,CAAA;AACA,oBAAA,IAAI,CAACxB,EAAE,CAACyB,OAAO,GAAG7D,EAAAA,CAAG4D,KAAK,CAAC,CAAA,CAAA;AAC3B,oBAAA,IAAI,CAACF,GAAG,CAAC1D,EAAAA,CAAG8D,WAAW,CAAC,IAAI,CAACxB,QAAQ,CAACvD,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AAC3C,wBAAA,IAAI,CAAC8E,OAAO,GAAG7D,EAAAA,CAAGqC,GAAG,CACnB,CACArC,EAAAA,EAAAA,CAAG+D,UAAU,CAAC/D,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACP,QAAQ,CAACvD,CAAC,EAAE,GAAM,CAAA,EAAA,IAAI,CAACuD,QAAQ,CAACvD,CAAC,EAAEiB,EAAGb,CAAAA,MAAM,CAAC,IAAI,CAACsE,OAAO,CAAA,CAAA,CAAA;AAEvF,qBAAA,CAAA;oBACA,IAAI,CAACrB,EAAE,CAACvD,CAAC,GAAG,IAAI,CAACyD,QAAQ,CAACC,GAAG;oBAC7B,IAAI,CAACH,EAAE,CAAC4B,EAAE,GAAG,IAAI,CAACC,iBAAiB,CACjC,IAAI,CAACC,CAAC,EACN,IAAI,CAACC,CAAC,EACN,IAAI,CAAC9F,CAAC,EACN2B,EAAGoE,CAAAA,IAAI,CAACpE,EAAAA,CAAGmC,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,EAAInC,EAAGmC,CAAAA,IAAI,CAAC,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,EAAInC,EAAGmC,CAAAA,IAAI,CAAC,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,CAAA,EAC1DnC,GAAGqC,GAAG,CAACrC,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACxD,CAAC,EAAE,IAAI,CAAC0E,EAAE,CAAG,EAAA,IAAI,CAACC,EAAE,CAAA,EACvCxD,EAAGqE,CAAAA,GAAG,CAACrE,EAAAA,CAAGqC,GAAG,CAAC,IAAI,CAACxD,CAAC,EAAE,IAAI,CAAC2E,EAAE,CAAA,EAAG,IAAI,CAACD,EAAE,CAAA,EACvCvD,EAAGqE,CAAAA,GAAG,CAACrE,EAAAA,CAAGqE,GAAG,CAAC,IAAI,CAACxF,CAAC,EAAE,IAAI,CAAC0E,EAAE,CAAG,EAAA,IAAI,CAACC,EAAE,CACvCxD,EAAAA,EAAAA,CAAGqE,GAAG,CAACrE,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACxD,CAAC,EAAE,IAAI,CAAC0E,EAAE,CAAA,EAAG,IAAI,CAACC,EAAE,CAAA,CAAA,CACvChF,CAAC;AACH,oBAAA,IAAI,CAACyE,OAAO,CAACjD,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAACmB,EAAE,EAAE,IAAI,CAACH,OAAO,CAAA,CAAA;AAC3C,iBAAA,CAAA;gBAEF7D,EAAGkC,CAAAA,IAAI,CACL,mBACA,EAAA;AAAClC,oBAAAA,EAAAA,CAAGmC,IAAI,CAAC,GAAA,CAAA;AAAMnC,oBAAAA,EAAAA,CAAGQ,IAAI,CAAC,UAAA,CAAA;AAAaR,oBAAAA,EAAAA,CAAGQ,IAAI,CAAC,WAAA,CAAA;AAAcR,oBAAAA,EAAAA,CAAGG,IAAI,CAAC,kBAAA;iBAAoB,EACtF,WAAA;;AAEE,oBAAA,IAAI,CAACiC,EAAE,CAACyB,OAAO,GAAG,IAAI,CAACS,kBAAkB,CAAC,IAAI,CAACjG,CAAC,EAAE,IAAI,CAACiE,QAAQ,CAAA;AAC/D,oBAAA,IAAI,CAACF,EAAE,CAACmC,EAAE,GAAGvE,EAAAA,CAAGyC,GAAG,CAACzC,EAAGqD,CAAAA,SAAS,CAACrD,EAAAA,CAAGqC,GAAG,CAAC,IAAI,CAAChE,CAAC,EAAE,IAAI,CAACiE,QAAQ,CAACC,GAAG,CAAA,CAAA,EAAI,IAAI,CAACiC,SAAS,CAACjC,GAAG,CAAA;AACvF,oBAAA,IAAI9J,QAAU,EAAA;AACZ,wBAAA,IAAI,CAAC2J,EAAE,CAACqC,IAAI,GAAGzE,EAAAA,CAAGgD,KAAK,CACrBhD,EAAGqE,CAAAA,GAAG,CAACrE,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAAC0B,EAAE,EAAE,IAAI,CAACG,gBAAgB,CAAClG,CAAC,CAAG,EAAA,IAAI,CAACkG,gBAAgB,CAACjG,CAAC,GACxE,CACA,EAAA,CAAA,CAAA;AAEF,wBAAA,IAAI,CAACgG,IAAI,GAAGzE,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAAC4B,IAAI,EAAE,IAAI,CAACA,IAAI,CAAA;qBAClC,MAAA;wBACL,IAAI,CAACrC,EAAE,CAACqC,IAAI,GAAGzE,EAAG+D,CAAAA,UAAU,CAAC,IAAI,CAACS,SAAS,CAACzF,CAAC,EAAEiB,EAAAA,CAAG2E,GAAG,CAAC,IAAI,CAACH,SAAS,CAACzF,CAAC,EAAE,CAAG,EAAA,GAAA,CAAA,EAAM,IAAI,CAACwF,EAAE,CAAA;AAC1F;AACA,oBAAA,IAAI,CAACtB,OAAO,CAACjD,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAAC4B,IAAI,EAAE,IAAI,CAACZ,OAAO,CAAA,CAAA;AAC7C,iBAAA,CAAA;AAEF7D,gBAAAA,EAAAA,CAAGK,IAAI,CAAC,WAAA;AACN,oBAAA,IAAI,CAAC+B,EAAE,CAACwC,GAAG,GAAG5E,EAAAA,CAAG6E,GAAG,CAAC,IAAI,CAAC/C,IAAI,CAACtD,CAAC,CAAA;AAChC,oBAAA,IAAI,CAAC4D,EAAE,CAAC0C,EAAE,GAAG9E,GAAG+E,KAAK,CAAC/E,EAAG9F,CAAAA,KAAK,CAAC,IAAI,CAACoG,SAAS,CAAC0E,SAAS,CAACC,EAAE,CAAA,CAAA;AAC1D,oBAAA,IAAIrF,MAAQ,EAAA;AACV,wBAAA,IAAI,CAACwC,EAAE,CAAC8C,KAAK,GAAG,IAAI,CAACtF,MAAM,CAACuF,EAAE,CAAC,IAAI,CAACL,EAAE,CAACrG,CAAC,CAAA;AACxC,wBAAA,IAAI,CAAC2D,EAAE,CAACgD,KAAK,GAAGpF,EAAAA,CAAG6E,GAAG,CAAC,IAAI,CAACK,KAAK,CAACnG,CAAC,CAAA;wBACnC,IAAI,CAACqD,EAAE,CAACiD,CAAC,GAAGrF,GAAGqE,GAAG,CAChBrE,EAAGsF,CAAAA,KAAK,CAAC,IAAI,CAACJ,KAAK,CAAC3C,GAAG,CAAA,EACvBvC,EAAGsF,CAAAA,KAAK,CACNtF,EAAGuF,CAAAA,GAAG,CAAC,IAAI,CAACT,EAAE,CAACtG,CAAC,EAAEzJ,YAClBiL,CAAAA,EAAAA,EAAAA,CAAGuF,GAAG,CAACvF,GAAG2C,GAAG,CAAC,IAAI,CAACmC,EAAE,CAACtG,CAAC,EAAEzJ,YAAAA,CAAAA,EAAeA,YACxCiL,CAAAA,EAAAA,EAAAA,CAAG2C,GAAG,CAAC,IAAI,CAACmC,EAAE,CAACtG,CAAC,EAAEzJ,YAAeA,GAAAA,YAAAA,CAAAA,CAAAA,CAAAA;qBAGhC,MAAA;AACL,wBAAA,IAAI,CAACqN,EAAE,CAACtI,MAAM,GAAGkG,EAAAA,CAAG6E,GAAG,CAAC,IAAI,CAAC/C,IAAI,CAACpD,CAAC,CAAA;AACnC,wBAAA,IAAI,CAAC0D,EAAE,CAACoD,YAAY,GAAGxF,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAAC+B,GAAG,EAAE,IAAI,CAAC9K,MAAM,CAAA;AACnD,wBAAA,IAAI,CAACsI,EAAE,CAACgD,KAAK,GAAGpF,GAAG2C,GAAG,CAAC,IAAI,CAACmC,EAAE,CAACrG,CAAC,EAAE,IAAI,CAAC+G,YAAY,CAAA;wBACnD,IAAI,CAACpD,EAAE,CAACqD,GAAG,GAAGzF,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACyC,EAAE,CAACrG,CAAC,EAAEuB,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACuC,KAAK,EAAE,IAAI,CAACI,YAAY,CAAA,CAAA;wBACpE,IAAI,CAACpD,EAAE,CAAC1D,CAAC,GAAGsB,EAAGqE,CAAAA,GAAG,CAACrE,EAAAA,CAAG6E,GAAG,CAAC,IAAI,CAAC/C,IAAI,CAAC/C,CAAC,CAAGiB,EAAAA,EAAAA,CAAG2C,GAAG,CAAC,IAAI,CAAC8C,GAAG,EAAE,IAAI,CAACb,GAAG,CAAA,CAAA;AACjE,wBAAA,IAAI,CAACxC,EAAE,CAACiD,CAAC,GAAGrF,EAAAA,CAAGsF,KAAK,CAClB,IAAI,CAACR,EAAE,CAACtG,CAAC,EACTwB,GAAGqC,GAAG,CAAC,IAAI,CAACoD,GAAG,EAAEzF,EAAAA,CAAG6C,GAAG,CAAC7C,EAAAA,CAAG2C,GAAG,CAAC,IAAI,CAAC8C,GAAG,EAAE,IAAI,CAACb,GAAG,GAAG,IAAI,CAACA,GAAG,CAC5D,CAAA,EAAA,IAAI,CAAClG,CAAC,CAAA;AAEV;oBACA,IAAI,CAAC0D,EAAE,CAACsD,EAAE,GAAG1F,EAAGqE,CAAAA,GAAG,CAAC,IAAI,CAACgB,CAAC,CAAC3G,CAAC,EAAEsB,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACuC,KAAK,EAAE,IAAI,CAACR,GAAG,CAAA,CAAA;oBACzD,IAAI,CAACxC,EAAE,CAACuD,KAAK,GAAG3F,EAAGsF,CAAAA,KAAK,CAAC,IAAI,CAACD,CAAC,CAAC7G,CAAC,EAAE,IAAI,CAAC6G,CAAC,CAAC5G,CAAC,EAAE,IAAI,CAACiH,EAAE,CAAA;AACpD,oBAAA,IAAI,CAACtD,EAAE,CAAClL,QAAQ,GAAG8I,EAAAA,CAAGmC,IAAI,CAAC,CAAA,CAAA;AAC3B,oBAAA,IAAI,CAACC,EAAE,CAAChL,MAAM,GAAG4I,EAAAA,CAAGQ,IAAI,CAAC,CAAA,CAAA;AACzB,oBAAA,IAAI,CAAC4B,EAAE,CAAC/K,MAAM,GAAG2I,EAAAA,CAAGQ,IAAI,CAAC,CAAA,CAAA;AACzB,oBAAA,IAAI,CAAC4B,EAAE,CAACnD,CAAC,GAAGe,EAAG4F,CAAAA,WAAW,CAAC,IAAI,CAAC9E,SAAS,EAAE,IAAI,CAAC6E,KAAK,EAAE,CAAA,CAAA;AACvD,oBAAA,IAAI,CAACjC,GAAG,CAAC1D,EAAAA,CAAG8D,WAAW,CAAC,IAAI,CAAC7E,CAAC,CAACA,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;;AAEpC,wBAAA,IAAI,CAACmD,EAAE,CAACyD,IAAI,GAAG7F,EAAAA,CAAGQ,IAAI,CAAC,CAAA,CAAA;AACvB,wBAAA,IAAI,CAAC4B,EAAE,CAAC0D,MAAM,GAAG9F,EAAAA,CAAG4D,KAAK,CAAC,CAAA,CAAA;AAC1B,wBAAA,IAAK,IAAIvE,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIrH,QAAQqH,CAAK,EAAA,CAAA;4BAC/B,IAAI,CAACqE,GAAG,CAAC1D,EAAG+F,CAAAA,KAAK,CAAC,IAAI,CAACX,KAAK,EAAE/F,CAAI,CAAA,EAAA,WAAA;gCAChC,IAAI,CAACwG,IAAI,GAAG,IAAI,CAACG,iBAAkB,CAAA,CAACb,EAAE,CAAC9F,CAAAA,CAAAA;AACzC,6BAAA,CAAA;AACF;AACA,wBAAA,IAAI,CAAC+C,EAAE,CAAC6D,OAAO,GAAGjG,EAAAA,CAAGsF,KAAK,CAACtF,EAAAA,CAAG9F,KAAK,CAAC8F,EAAAA,CAAG2C,GAAG,CAAC,IAAI,CAACkD,IAAI,CAACtD,GAAG,EAAE,CAAA,CAAA,CAAA,CAAA;wBAC1D,IAAI,CAACH,EAAE,CAAC8D,IAAI,GAAGlG,GAAGsF,KAAK,CAAC,IAAI,CAACV,GAAG,CAAA;AAChC,wBAAA,IAAI,CAACxC,EAAE,CAACrD,CAAC,GAAGiB,EAAAA,CAAGqE,GAAG,CAChB,IAAI,CAAC4B,OAAO,EACZjG,GAAGuF,GAAG,CAACvF,GAAGqE,GAAG,CAACrE,GAAGuF,GAAG,CAACvF,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACgD,CAAC,EAAE,IAAI,CAACY,OAAO,CAAA,EAAG,IAAI,CAACC,IAAI,GAAG,IAAI,CAACA,IAAI,CAAG,EAAA,IAAI,CAACA,IAAI,CAAA,CAAA;AAEtF,wBAAA,IAAI,CAAC9D,EAAE,CAAC+D,EAAE,GAAGnG,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAACgD,IAAI,CAAC9G,CAAC,EAAE,CAAA,CAAA;wBACjC,IAAI,CAACqD,EAAE,CAAC/D,CAAC,GAAG2B,GAAG6C,GAAG,CAAC7C,EAAGqE,CAAAA,GAAG,CAACrE,EAAAA,CAAGmC,IAAI,CAAC,IAAI,CAACpD,CAAC,CAAGiB,EAAAA,EAAAA,CAAGmC,IAAI,CAAC,GAAA,CAAA,CAAA,EAAO,IAAI,CAACgE,EAAE,CAAA;;;;wBAIjE,IAAI,CAAC/D,EAAE,CAACgE,IAAI,GAAGpG,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACsD,EAAE,EAAE,GAAA,CAAA;;AAE/B,wBAAA,IAAK,IAAIE,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,4BAAA,IAAI,CAACjE,EAAE,CAAC,CAAC,IAAI,EAAEiE,GAAG,CAAC,GAAGrG,GAAG8D,WAAW,CAClCwC,yBACE,IAAI,EACJtG,GAAGqE,GAAG,CAAC,IAAI,CAAChG,CAAC,EAAE2B,EAAAA,CAAG6C,GAAG,CAAC7C,EAAAA,CAAGmC,IAAI,CAAI1M,GAAAA,UAAU,CAAC4Q,CAAE,CAAA,CAAA,EAAG,IAAI,CAACD,IAAI,IAC1DpO,MACA,EAAA,IAAI,CAACoN,KAAK,CAAA,CACV5G,CAAC,EACH,CAAA,CAAA;4BAEF,IAAI,CAAC4D,EAAE,CAAC,CAAC,GAAG,EAAEiE,CAAAA,CAAAA,CAAG,CAAC,GAAGrG,EAAGmC,CAAAA,IAAI,CAAC,CAAA,CAAA;AAC/B;wBACA,IAAI,CAACC,EAAE,CAAC1K,MAAM,GAAG,IAAI,CAACuH,CAAC,CAACsH,GAAG;;;AAG3B,wBAAA,IAAI,CAAC7C,GAAG,CAAC1D,EAAAA,CAAG8D,WAAW,CAAC,IAAI,CAACnC,MAAM,CAAC5C,CAAC,EAAE,GAAM,CAAA,EAAA,WAAA;AAC3C,4BAAA,IAAI,CAACqD,EAAE,CAACoE,CAAC,GAAGxG,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACzB,MAAM,CAACY,GAAG,CAAA;AAClC,4BAAA,IAAI,CAACH,EAAE,CAACqE,EAAE,GAAGzG,GAAGqE,GAAG,CACjB,IAAI,CAAChG,CAAC,EACN2B,EAAAA,CAAG6C,GAAG,CAAC7C,GAAG0G,IAAI,CAAC,IAAI,CAACF,CAAC,CAAG,EAAA,IAAI,CAACL,EAAE,EAAE,IACjCnG,CAAAA,EAAAA,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAAC2D,CAAC,EAAE,IAAI,CAACL,EAAE,EAAE,GAAA,CAAA,CAAA;4BAE1B,IAAI,CAAC/D,EAAE,CAACuE,MAAM,GAAGC,aACf,CAAA,IAAI,EACJ,IAAI,CAACH,EAAE,EACP,IAAI,CAACD,CAAC,EACN,IAAI,CAAC3E,MAAM,CAACnD,CAAC,EACb,IAAI,CAACyH,EAAE,EACPnG,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACgE,kBAAkB,CAACrI,CAAC,EAAE,IAAI,CAACwH,iBAAAA,CAAkB,CAACb,EAAE,CAACnN,MAAS,GAAA,CAAA,CAAA,CAAG+G,CAAC,EAAE,MAC5E/G,MACAxC,EAAAA,YAAAA,EACA,IAAI,CAAC4P,KAAK,CAAA;4BAEZ,IAAI,CAAC1B,GAAG,CAAC1D,EAAG8D,CAAAA,WAAW,CAAC,IAAI,CAAC6C,MAAM,EAAE,CAAI,CAAA,EAAA,WAAA;gCACvC,IAAI,CAACvE,EAAE,CAAC1E,GAAG,GAAGsC,GAAG6C,GAAG,CAAC,IAAI,CAACnL,MAAM,EAAE,IAAI,CAACkK,QAAQ,CAAC2E,GAAG,EAAE,IAAI,CAACI,MAAM,EAAE,CAAI5M,GAAAA,IAAAA,CAAKQ,EAAE,CAAA;AAC7E,gCAAA,IAAK,IAAI8L,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;oCAC1B,IAAI,CAAC3C,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE2C,CAAG,CAAA,CAAA,CAAC,EAAE,WAAA;AACzB,wCAAA,IAAI,CAAC,CAAC,GAAG,EAAEA,CAAG,CAAA,CAAA,CAAC,GAAGrG,EAAGqE,CAAAA,GAAG,CACtB,IAAI,CAAC,CAAC,GAAG,EAAEgC,CAAG,CAAA,CAAA,CAAC,EACfrG,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACnF,GAAG,EAAEsC,GAAGhG,GAAG,CAACgG,GAAGyC,GAAG,CAACzC,GAAGmC,IAAI,CAAA,GAAI1M,UAAU,CAAC4Q,CAAAA,CAAE,GAAG,IAAI,CAACG,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAEvE,qCAAA,CAAA;AACF;AACF,6BAAA,CAAA;AACF,yBAAA,CAAA;AACA,wBAAA,IAAI,CAACpE,EAAE,CAAC1F,KAAK,GAAGsD,EAAAA,CAAG6E,GAAG,CAAC,IAAI,CAAChD,MAAM,CAACrD,CAAC,CAAA;wBACpC,IAAI,CAACsI,IAAI,CAAC9G,EAAAA,CAAG6E,GAAG,CAAC,IAAA,CAAA,EAAO,GAAGhQ,gBAAkB,EAAA,WAAA;AAC3C,4BAAA,IAAI,CAAC6O,GAAG,CAAC1D,EAAAA,CAAG+G,gBAAgB,CAAC,IAAI,CAACC,EAAE,EAAE,IAAI,CAACtK,KAAK,CAAG,EAAA,WAAA;AACjD,gCAAA,IAAI,CAACuK,MAAM,EAAA;AACb,6BAAA,CAAA;4BACA,IAAI,CAAC7E,EAAE,CAAC8E,IAAI,GAAGlH,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACmE,EAAE,EAAElS,WAAAA,CAAAA;AAC/B,4BAAA,IAAI,CAACsN,EAAE,CAACE,QAAQ,GAAG,IAAI,CAACZ,MAAM,CAACyD,EAAE,CAAC,IAAI,CAAC+B,IAAI,CAAA;AAC3C,4BAAA,IAAI,CAAC9E,EAAE,CAACoC,SAAS,GAAG,IAAI,CAAC9C,MAAM,CAACyD,EAAE,CAACnF,EAAGqE,CAAAA,GAAG,CAAC,IAAI,CAAC6C,IAAI,EAAE,CAAA,CAAA,CAAA;AACrD,4BAAA,IAAI,CAAC9E,EAAE,CAAC+E,cAAc,GAAG,IAAI,CAACzF,MAAM,CAACyD,EAAE,CAACnF,EAAGqE,CAAAA,GAAG,CAAC,IAAI,CAAC6C,IAAI,EAAE,CAAA,CAAA,CAAA;AAC1D,4BAAA,IAAI,CAAC9E,EAAE,CAACgF,KAAK,GAAG,IAAI,CAAC1F,MAAM,CAACyD,EAAE,CAACnF,EAAGqE,CAAAA,GAAG,CAAC,IAAI,CAAC6C,IAAI,EAAE,CAAA,CAAA,CAAA;AACjD,4BAAA,IAAI,CAAC9E,EAAE,CAACiF,UAAU,GAAG,IAAI,CAAC3F,MAAM,CAACyD,EAAE,CAACnF,EAAGqE,CAAAA,GAAG,CAAC,IAAI,CAAC6C,IAAI,EAAE,CAAA,CAAA,CAAA;AACtD,4BAAA,IAAI,CAAC9E,EAAE,CAACkF,KAAK,GAAGtH,EAAAA,CAAG6E,GAAG,CAAC,IAAI,CAACuC,KAAK,CAACrI,CAAC,CAAA;;AAEnC,4BAAA,IAAK,IAAIsH,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;gCAC1B,IAAI,CAACjE,EAAE,CAAC,CAAC,EAAE,EAAEiE,CAAAA,CAAAA,CAAG,CAAC,GAAGrG,EAAGmC,CAAAA,IAAI,CAAC,CAAA,CAAA;AAC9B;4BACA,IAAI,CAACuB,GAAG,CAAC1D,EAAG+F,CAAAA,KAAK,CAAC,IAAI,CAACuB,KAAK,EAAEC,eAAkB,CAAA,EAAA,WAAA;;;gCAG9C,IAAI,CAACnF,EAAE,CAACoF,EAAE,GAAGxH,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACnL,MAAM,EAAE,IAAI,CAACyP,cAAc,CAACZ,GAAG,EAAE,IAAI,CAACY,cAAc,CAACpI,CAAC,CAAA;AAC/E,gCAAA,IAAK,IAAIsH,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;oCAC1B,IAAI,CAAC3C,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE2C,CAAG,CAAA,CAAA,CAAC,EAAE,WAAA;;;AAGzB,wCAAA,MAAMoB,IAA8BhS,UAAU,CAAC4Q,EAAE,CAAC,CAAA,CAAE,KAAK,CAAI,GAAA;AAAC,4CAAA,CAAA;AAAG,4CAAA,CAAA;AAAG,4CAAA;yCAAE,GAAG;AAAC,4CAAA,CAAA;AAAG,4CAAA,CAAA;AAAG,4CAAA;AAAE,yCAAA;wCAClF,IAAI,CAAC,CAAC,EAAE,EAAEA,GAAG,CAAC,GAAGrG,GAAG6C,GAAG,CACrB,IAAI,CAAC2E,EAAE,EACP,IAAI,CAACE,gBAAgB,CACnB,IAAI,CAACrJ,CAAC,EACN2B,EAAAA,CAAGmC,IAAI,CAAI1M,GAAAA,UAAU,CAAC4Q,CAAE,CAAA,CAAA,EACxBrG,GAAGmC,IAAI,CAAA,GAAIsF,CACX,CAAA,EAAA,IAAI,CAACnF,QAAQ,EACb,IAAI,CAACkC,SAAS,CAACjC,GAAG,EAClB,IAAI,CAAC6E,KAAK,CAAC7E,GAAG,CAAA,CAAA;AAGpB,qCAAA,CAAA;AACF;AACF,6BAAA,CAAA,CAAGoF,KAAK,CAAC,WAAA;AACP,gCAAA,IAAI,CAACvF,EAAE,CAACM,KAAK,GAAG1C,EAAAA,CAAG4D,KAAK,CAAC,CAAA,CAAA;gCACzB,IAAI,CAACxB,EAAE,CAACwF,EAAE,GAAG5H,EAAGmC,CAAAA,IAAI,CAAC,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;gCAC3B,IAAI,CAACuB,GAAG,CAAC1D,EAAG+F,CAAAA,KAAK,CAAC,IAAI,CAACuB,KAAK,EAAEO,sBAAyB,CAAA,EAAA,WAAA;oCACrD,IAAI,CAACnF,KAAK,GAAG,CAAA;oCACb,IAAI,CAACkF,EAAE,GAAG5H,EAAGoD,CAAAA,GAAG,CAAC,IAAI,CAACoB,SAAS,CAACjC,GAAG,CAAA;iCAElCuF,CAAAA,CAAAA,OAAO,CAAC9H,EAAG+F,CAAAA,KAAK,CAAC,IAAI,CAACuB,KAAK,EAAES,eAAkB,CAAA,EAAA,WAAA;oCAC9C,IAAI,CAACrF,KAAK,GAAG,IAAI,CAACsF,iBAAiB,CAAC,IAAI,CAAC3J,CAAC,EAAE,IAAI,CAACiE,QAAQ,EAAE,IAAI,CAACkC,SAAS,EAAE,IAAI,CAAC4C,KAAK,CAACnC,EAAE,CAAA;AACxF,oCAAA,IAAI,CAAC2C,EAAE,GAAG5H,EAAGqD,CAAAA,SAAS,CAACrD,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACC,QAAQ,CAACC,GAAG,EAAE,IAAI,CAAClE,CAAC,CAAA,CAAA;AACzD,iCAAA,CAAA,CACCsJ,KAAK,CAAC,WAAA;AACL,oCAAA,IAAI,CAACjF,KAAK,GAAG,IAAI,CAAC4B,kBAAkB,CAAC,IAAI,CAACjG,CAAC,EAAE,IAAI,CAACiE,QAAQ,CAAA;AAC1D,oCAAA,IAAI,CAACsF,EAAE,GAAG5H,EAAGqD,CAAAA,SAAS,CAACrD,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACC,QAAQ,CAACC,GAAG,EAAE,IAAI,CAAClE,CAAC,CAAA,CAAA;AACzD,iCAAA,CAAA;AACF,gCAAA,IAAI,CAAC+D,EAAE,CAAC6F,EAAE,GAAGjI,EAAG6C,CAAAA,GAAG,CACjB,IAAI,CAACnL,MAAM,EACX,IAAI,CAACyP,cAAc,CAACZ,GAAG,EACvBvG,EAAG6C,CAAAA,GAAG,CAAC,IAAI,CAACsE,cAAc,CAACpI,CAAC,EAAE,IAAI,CAAC2D,KAAK,EAAE,CAAA,GAAI3I,KAAKQ,EAAE,CAAA,CAAA;AAEvD,gCAAA,IAAK,IAAI8L,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;oCAC1B,IAAI,CAAC3C,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE2C,CAAG,CAAA,CAAA,CAAC,EAAE,WAAA;AACzB,wCAAA,IAAI,CAAC,CAAC,EAAE,EAAEA,CAAG,CAAA,CAAA,CAAC,GAAGrG,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAACoF,EAAE,EAAEjI,EAAAA,CAAGhG,GAAG,CAACgG,EAAGyC,CAAAA,GAAG,CAACzC,EAAAA,CAAGmC,IAAI,CAAA,GAAI1M,UAAU,CAAC4Q,CAAE,CAAA,CAAA,EAAG,IAAI,CAACuB,EAAE,CAAG,EAAA,CAAA,CAAA,CAAA;AACtF,qCAAA,CAAA;AACF;AACF,6BAAA,CAAA;;;;;;AAMA,4BAAA,IAAI,CAACxF,EAAE,CAAC8F,QAAQ,GAAGlI,EAAAA,CAAGqE,GAAG,CAAC,IAAI,CAAC8D,GAAG,EAAE,IAAI,CAACC,GAAG,EAAE,IAAI,CAACC,GAAG,EAAE,IAAI,CAACC,GAAG,EAAE,IAAI,CAACC,GAAG,EAAE,IAAI,CAACC,GAAG,CAAA;AACpF,4BAAA,IAAI,CAACpG,EAAE,CAACqG,WAAW,GAAGzI,EAAAA,CAAG4D,KAAK,CAAC,CAAA,CAAA;AAC/B,4BAAA,IAAI,CAACF,GAAG,CACN1D,GAAG0I,GAAG,CACJ1I,GAAG8D,WAAW,CAAC,IAAI,CAACuD,UAAU,CAAC7I,CAAC,EAAE,MAClCwB,EAAG8D,CAAAA,WAAW,CAAC9D,EAAGhG,CAAAA,GAAG,CAACgG,EAAGhG,CAAAA,GAAG,CAAC,IAAI,CAACkO,QAAQ,CAACS,CAAC,EAAE,IAAI,CAACT,QAAQ,CAACU,CAAC,GAAG,IAAI,CAACV,QAAQ,CAAChJ,CAAC,GAAG,CAEpF,CAAA,CAAA,EAAA,WAAA;AACE,gCAAA,IAAI,CAACkD,EAAE,CAACyG,OAAO,GAAG7I,GAAGqC,GAAG,CAAC,IAAI,CAACC,QAAQ,CAACC,GAAG,EAAE,IAAI,CAAClE,CAAC,CAAA;gCAClD,IAAI,CAAC+D,EAAE,CAAC0G,EAAE,GAAG9I,GAAGqD,SAAS,CAAC,IAAI,CAACwF,OAAO,CAAA;;AAEtC,gCAAA,IAAI,CAACzG,EAAE,CAAC2G,GAAG,GAAG/I,GAAGqE,GAAG,CAClB,IAAI,CAAChG,CAAC,EACN2B,EAAAA,CAAG6C,GAAG,CAAC7C,GAAG0G,IAAI,CAAC,IAAI,CAACoC,EAAE,CAAG,EAAA,IAAI,CAAC3C,EAAE,EAAE,IAClCnG,CAAAA,EAAAA,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAACiG,EAAE,EAAE,IAAI,CAAC3C,EAAE,EAAE,GAAA,CAAA,CAAA;AAE3B,gCAAA,IAAI,CAAC/D,EAAE,CAAC4G,IAAI,GAAGhJ,EAAGqC,CAAAA,GAAG,CAACrC,EAAAA,CAAGyC,GAAG,CAACzC,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACC,QAAQ,CAACC,GAAG,EAAE,IAAI,CAACwG,GAAG,CAAG,EAAA,IAAI,CAACD,EAAE,CAAG,EAAA,IAAI,CAACjD,IAAI,CAAC9G,CAAC,CAAA;gCACvF,IAAI,CAAC2E,GAAG,CAAC1D,EAAG8D,CAAAA,WAAW,CAAC,IAAI,CAACkF,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AACrC,oCAAA,IAAI,CAACP,WAAW,GAAG7B,aAAAA,CACjB,IAAI,EACJ,IAAI,CAACmC,GAAG,EACR,IAAI,CAACD,EAAE,EACP9I,EAAAA,CAAG4D,KAAK,CAACrO,eACT,CAAA,EAAA,IAAI,CAAC4Q,EAAE,EACP,IAAI,CAAC6C,IAAI,EACThR,MAAAA,EACAxC,YACA,EAAA,IAAI,CAAC4P,KAAK,CAAA;AAEd,iCAAA,CAAA;AACF,6BAAA,CAAA;AAEF,4BAAA,IAAK,IAAIiB,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,gCAAA,IAAI,CAAC,CAAC,GAAG,EAAEA,CAAG,CAAA,CAAA,CAAC,GAAGrG,EAAAA,CAAGqE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAEgC,CAAG,CAAA,CAAA,CAAC,EAAErG,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAEwD,CAAG,CAAA,CAAA,CAAC,EAAE,IAAI,CAACoC,WAAW,CAAA,CAAA;AACnF;AACF,yBAAA,CAAA;;;;AAIA,wBAAA,IAAI,CAACrG,EAAE,CAAC6G,QAAQ,GAAGjJ,EAAG/F,CAAAA,GAAG,CAAC,IAAI,CAACvC,MAAM,EAAEsI,EAAAA,CAAGmC,IAAI,CAAC,GAAA,CAAA,CAAA;AAC/C,wBAAA,IAAI,CAACC,EAAE,CAACzK,QAAQ,GAAGqI,GAAG4F,WAAW,CAAC,IAAI,CAAC1E,WAAW,EAAE,IAAI,CAACyE,KAAK,EAAE,GAAGY,GAAG;AACtE,wBAAA,IAAK,IAAIF,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;4BAC1B,IAAI,CAAC3C,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE2C,CAAG,CAAA,CAAA,CAAC,EAAE,WAAA;gCACzB,IAAI,CAACjE,EAAE,CAAC8G,OAAO,GAAGlJ,GAAGmC,IAAI,CAAA,GAAI1M,UAAU,CAAC4Q,CAAE,CAAA,CAAA;AAC1C,gCAAA,IAAI,CAACjE,EAAE,CAAC+G,OAAO,GAAGnJ,EAAAA,CAAGmC,IAAI,CAAC,CAAA,CAAA;AAC1B,gCAAA,IAAIpJ,aAAe,EAAA;oCACjB,IAAI,CAACoQ,OAAO,GAAGnJ,EAAAA,CAAG6C,GAAG,CAACvK,QAAAA,CAAS8Q,aAAa,CAAC,IAAI,EAAE,IAAI,CAACF,OAAO,CAAE3C,CAAAA,GAAG,EAAE,IAAI,CAAC1E,MAAM,CAACpD,CAAC,CAAA;AACrF;AACA,gCAAA,IAAIkB,SAAW,EAAA;AACb,oCAAA,IAAI,CAACyC,EAAE,CAACiH,MAAM,GAAGC,qBACf,CAAA,IAAI,EACJtJ,EAAAA,CAAGqE,GAAG,CAAC,IAAI,CAAChG,CAAC,EAAE2B,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAACqG,OAAO,EAAE,IAAI,CAAC9C,IAAI,CAC7C,CAAA,EAAA,IAAI,CAAC8C,OAAO,EACZ,IAAI,CAACA,OAAO,EACZ,UAAA,CAAA;oCAEF,IAAI,CAACC,OAAO,GAAGnJ,EAAAA,CAAG2E,GAAG,CAAC,IAAI,CAACwE,OAAO,EAAE,IAAI,CAACE,MAAM,CAAC9C,GAAG,EAAE,IAAI,CAAC8C,MAAM,CAACpK,CAAC,CAAA;AACpE;AACA,gCAAA,IAAI,CAAC,CAAC,GAAG,EAAEoH,CAAG,CAAA,CAAA,CAAC,GAAGrG,EAAAA,CAAGqE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAEgC,CAAG,CAAA,CAAA,CAAC,EAAErG,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAACoG,QAAQ,EAAE,IAAI,CAACE,OAAO,CAAG,EAAA,IAAI,CAACxR,QAAQ,CAAA;AAC9F,6BAAA,CAAA;AACF;;AAEA,wBAAA,IAAI,CAACT,QAAQ,GAAG8I,EAAAA,CAAGqE,GAAG,CAAC,IAAI,CAACkF,IAAI,EAAE,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,IAAI,CAAA;wBACvF,IAAI,CAACxH,EAAE,CAACyH,SAAS,GAAG7J,EAAGhG,CAAAA,GAAG,CAACgG,EAAAA,CAAGhG,GAAG,CAAC,IAAI,CAAC9C,QAAQ,CAACyR,CAAC,EAAE,IAAI,CAACzR,QAAQ,CAAC0R,CAAC,CAAA,EAAG,IAAI,CAAC1R,QAAQ,CAACgI,CAAC,CAAA;AACpF,wBAAA,IAAI,CAACkD,EAAE,CAAC0H,OAAO,GAAG,IAAI,CAACC,OAAO,CAC5B/J,EAAAA,CAAG8D,WAAW,CAAC,IAAI,CAAC+F,SAAS,EAAE,CAAA,CAAA,EAC/B7J,EAAG2C,CAAAA,GAAG,CAAC,CAAA,EAAG3C,GAAGhG,GAAG,CAAC,IAAI,CAAC6P,SAAS,EAAE,IACjC7J,CAAAA,CAAAA,EAAAA,EAAAA,CAAG4D,KAAK,CAAC,CAAA,CAAA,CAAA;AAEX,wBAAA,IAAK,IAAIyC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;4BAC1B,IAAI,CAACjE,EAAE,CAAC,CAAC,IAAI,EAAEiE,CAAAA,CAAAA,CAAG,CAAC,GAAGrG,EAAG6C,CAAAA,GAAG,CAC1B7C,EAAGhG,CAAAA,GAAG,CAACgG,EAAAA,CAAGhG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAEqM,CAAG,CAAA,CAAA,CAAC,CAACsC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAEtC,CAAAA,CAAAA,CAAG,CAAC,CAACuC,CAAC,CAAA,EAAG,IAAI,CAAC,CAAC,GAAG,EAAEvC,CAAG,CAAA,CAAA,CAAC,CAACnH,CAAC,CAAA,EACtE,IAAI,CAAC4K,OAAO,CAAA;AAEhB;wBACA,IAAI,CAAC1S,MAAM,GAAG4I,EAAAA,CAAGQ,IAAI,CAAC,IAAI,CAACwJ,KAAK,EAAE,IAAI,CAACC,KAAK,EAAE,IAAI,CAACC,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA;AACpE,wBAAA,IAAI,CAAC9S,MAAM,GAAG2I,EAAAA,CAAGQ,IAAI,CAAC,IAAI,CAAC4J,KAAK,EAAE,IAAI,CAACC,KAAK,EAAE,CAAG,EAAA,CAAA,CAAA;AACnD,qBAAA,CAAA;AACArK,oBAAAA,EAAAA,CAAGsK,YAAY,CAAC,IAAI,CAACnJ,WAAW,EAAEnB,GAAGuK,KAAK,CAAC,IAAI,CAAC5E,KAAK,GAAG3F,EAAGQ,CAAAA,IAAI,CAAC,IAAI,CAACtJ,QAAQ,EAAE,CAAA,CAAA,CAAA;AAC/E8I,oBAAAA,EAAAA,CAAGsK,YAAY,CAAC,IAAI,CAAChJ,SAAS,EAAEtB,EAAAA,CAAGuK,KAAK,CAAC,IAAI,CAAC5E,KAAK,CAAG,EAAA,IAAI,CAACvO,MAAM,CAAA;AACjE4I,oBAAAA,EAAAA,CAAGsK,YAAY,CAAC,IAAI,CAAC9I,SAAS,EAAExB,EAAAA,CAAGuK,KAAK,CAAC,IAAI,CAAC5E,KAAK,CAAG,EAAA,IAAI,CAACtO,MAAM,CAAA;AACjE,oBAAA,IAAI,CAACqJ,QAAQ,CAACC,KAAK,GAAGX,EAAAA,CAAGQ,IAAI,CAAC,CAAA,CAAA;AAChC,iBAAA,CAAA;AACF;AACF,SAAA,CAAA;AACF;AACF;;;;"}