@zephyr3d/scene 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/dist/animation/animation.js +4 -15
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +22 -9
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +1 -0
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +0 -1
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +7 -1
  10. package/dist/animation/morphtarget.js.map +1 -1
  11. package/dist/animation/morphtrack.js +3 -3
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/proptrack.js +37 -41
  14. package/dist/animation/proptrack.js.map +1 -1
  15. package/dist/animation/rotationtrack.js +0 -1
  16. package/dist/animation/rotationtrack.js.map +1 -1
  17. package/dist/animation/scaletrack.js +0 -1
  18. package/dist/animation/scaletrack.js.map +1 -1
  19. package/dist/animation/skeleton.js +7 -14
  20. package/dist/animation/skeleton.js.map +1 -1
  21. package/dist/animation/translationtrack.js +0 -1
  22. package/dist/animation/translationtrack.js.map +1 -1
  23. package/dist/app/api.js +13 -4
  24. package/dist/app/api.js.map +1 -1
  25. package/dist/app/app.js +13 -1
  26. package/dist/app/app.js.map +1 -1
  27. package/dist/app/engine.js +33 -45
  28. package/dist/app/engine.js.map +1 -1
  29. package/dist/app/inputmgr.js.map +1 -1
  30. package/dist/app/runtimescript.js.map +1 -1
  31. package/dist/app/screen.js +318 -0
  32. package/dist/app/screen.js.map +1 -0
  33. package/dist/app/scriptingsystem.js +10 -6
  34. package/dist/app/scriptingsystem.js.map +1 -1
  35. package/dist/app/scriptregistry.js +11 -22
  36. package/dist/app/scriptregistry.js.map +1 -1
  37. package/dist/asset/assetmanager.js +79 -58
  38. package/dist/asset/assetmanager.js.map +1 -1
  39. package/dist/asset/builtin.js +5 -5
  40. package/dist/asset/builtin.js.map +1 -1
  41. package/dist/asset/loaders/dds/dds.js +6 -2
  42. package/dist/asset/loaders/dds/dds.js.map +1 -1
  43. package/dist/asset/loaders/dds/dds_loader.js +1 -1
  44. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  45. package/dist/asset/loaders/gltf/gltf_loader.js +14 -6
  46. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  47. package/dist/asset/loaders/gltf/helpers.js +6 -2
  48. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  49. package/dist/asset/loaders/hdr/hdr.js +22 -15
  50. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  51. package/dist/asset/loaders/image/tga_Loader.js +2 -1
  52. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  53. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  54. package/dist/asset/loaders/loader.js +2 -2
  55. package/dist/asset/loaders/loader.js.map +1 -1
  56. package/dist/asset/model.js +2 -2
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/blitter/bilateralblur.js.map +1 -1
  59. package/dist/blitter/blitter.js +9 -11
  60. package/dist/blitter/blitter.js.map +1 -1
  61. package/dist/blitter/box.js +0 -1
  62. package/dist/blitter/box.js.map +1 -1
  63. package/dist/blitter/copy.js.map +1 -1
  64. package/dist/blitter/gaussianblur.js.map +1 -1
  65. package/dist/camera/base.js +1 -3
  66. package/dist/camera/base.js.map +1 -1
  67. package/dist/camera/camera.js +121 -37
  68. package/dist/camera/camera.js.map +1 -1
  69. package/dist/camera/fps.js +19 -17
  70. package/dist/camera/fps.js.map +1 -1
  71. package/dist/camera/orbit.js +45 -43
  72. package/dist/camera/orbit.js.map +1 -1
  73. package/dist/camera/orthocamera.js +27 -21
  74. package/dist/camera/orthocamera.js.map +1 -1
  75. package/dist/camera/perspectivecamera.js +26 -17
  76. package/dist/camera/perspectivecamera.js.map +1 -1
  77. package/dist/index.d.ts +14453 -15609
  78. package/dist/index.js +17 -11
  79. package/dist/index.js.map +1 -1
  80. package/dist/material/blinn.js.map +1 -1
  81. package/dist/material/grassmaterial.js.map +1 -1
  82. package/dist/material/lambert.js.map +1 -1
  83. package/dist/material/material.js +11 -5
  84. package/dist/material/material.js.map +1 -1
  85. package/dist/material/meshmaterial.js +10 -9
  86. package/dist/material/meshmaterial.js.map +1 -1
  87. package/dist/material/mixins/albedocolor.js.map +1 -1
  88. package/dist/material/mixins/foliage.js.map +1 -1
  89. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  90. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  91. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +7 -0
  92. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  93. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  94. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  95. package/dist/material/mixins/lit.js +3 -3
  96. package/dist/material/mixins/lit.js.map +1 -1
  97. package/dist/material/mixins/pbr/brdf.js.map +1 -1
  98. package/dist/material/mixins/pbr/common.js.map +1 -1
  99. package/dist/material/mixins/texture.js +3 -0
  100. package/dist/material/mixins/texture.js.map +1 -1
  101. package/dist/material/mixins/vertexcolor.js.map +1 -1
  102. package/dist/material/particle.js.map +1 -1
  103. package/dist/material/pbrblueprint.js +180 -22
  104. package/dist/material/pbrblueprint.js.map +1 -1
  105. package/dist/material/pbrmr.js.map +1 -1
  106. package/dist/material/pbrsg.js.map +1 -1
  107. package/dist/material/shader/helper.js +36 -53
  108. package/dist/material/shader/helper.js.map +1 -1
  109. package/dist/material/sprite.js +301 -0
  110. package/dist/material/sprite.js.map +1 -0
  111. package/dist/material/sprite3d.js +301 -0
  112. package/dist/material/sprite3d.js.map +1 -0
  113. package/dist/material/sprite3d_std.js +116 -0
  114. package/dist/material/sprite3d_std.js.map +1 -0
  115. package/dist/material/sprite3dblueprint.js +235 -0
  116. package/dist/material/sprite3dblueprint.js.map +1 -0
  117. package/dist/material/sprite_std.js +116 -0
  118. package/dist/material/sprite_std.js.map +1 -0
  119. package/dist/material/spriteblueprint.js +235 -0
  120. package/dist/material/spriteblueprint.js.map +1 -0
  121. package/dist/material/terrain-cm.js +0 -1
  122. package/dist/material/terrain-cm.js.map +1 -1
  123. package/dist/material/unlit.js.map +1 -1
  124. package/dist/material/water.js.map +1 -1
  125. package/dist/posteffect/bloom.js.map +1 -1
  126. package/dist/posteffect/compositor.js.map +1 -1
  127. package/dist/posteffect/fxaa.js.map +1 -1
  128. package/dist/posteffect/grayscale.js.map +1 -1
  129. package/dist/posteffect/motionblur.js.map +1 -1
  130. package/dist/posteffect/posteffect.js.map +1 -1
  131. package/dist/posteffect/sao.js.map +1 -1
  132. package/dist/posteffect/ssr.js +7 -5
  133. package/dist/posteffect/ssr.js.map +1 -1
  134. package/dist/posteffect/taa.js.map +1 -1
  135. package/dist/posteffect/tonemap.js.map +1 -1
  136. package/dist/render/abuffer_oit.js +8 -6
  137. package/dist/render/abuffer_oit.js.map +1 -1
  138. package/dist/render/clipmap.js +0 -10
  139. package/dist/render/clipmap.js.map +1 -1
  140. package/dist/render/cluster_light.js +4 -4
  141. package/dist/render/cluster_light.js.map +1 -1
  142. package/dist/render/cull_visitor.js +15 -17
  143. package/dist/render/cull_visitor.js.map +1 -1
  144. package/dist/render/depthpass.js +3 -4
  145. package/dist/render/depthpass.js.map +1 -1
  146. package/dist/render/drawable.js +15 -0
  147. package/dist/render/drawable.js.map +1 -0
  148. package/dist/render/drawable_mixin.js +8 -4
  149. package/dist/render/drawable_mixin.js.map +1 -1
  150. package/dist/render/envlight.js.map +1 -1
  151. package/dist/render/fbm_wavegenerator.js +3 -1
  152. package/dist/render/fbm_wavegenerator.js.map +1 -1
  153. package/dist/render/fft_wavegenerator.js +67 -64
  154. package/dist/render/fft_wavegenerator.js.map +1 -1
  155. package/dist/render/fullscreenquad.js.map +1 -1
  156. package/dist/render/gerstner_wavegenerator.js +3 -1
  157. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  158. package/dist/render/globalbindgroup_allocator.js +3 -1
  159. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  160. package/dist/render/hzb.js +1 -2
  161. package/dist/render/hzb.js.map +1 -1
  162. package/dist/render/lightpass.js +13 -13
  163. package/dist/render/lightpass.js.map +1 -1
  164. package/dist/render/objectcolorpass.js +4 -7
  165. package/dist/render/objectcolorpass.js.map +1 -1
  166. package/dist/render/primitive.js +4 -5
  167. package/dist/render/primitive.js.map +1 -1
  168. package/dist/render/render_queue.js +10 -5
  169. package/dist/render/render_queue.js.map +1 -1
  170. package/dist/render/renderer.js +16 -22
  171. package/dist/render/renderer.js.map +1 -1
  172. package/dist/render/renderpass.js +27 -52
  173. package/dist/render/renderpass.js.map +1 -1
  174. package/dist/render/rendertarget.js +5 -0
  175. package/dist/render/rendertarget.js.map +1 -0
  176. package/dist/render/screenrendertarget.js +56 -0
  177. package/dist/render/screenrendertarget.js.map +1 -0
  178. package/dist/render/shadowmap_pass.js +4 -5
  179. package/dist/render/shadowmap_pass.js.map +1 -1
  180. package/dist/render/sky.js +16 -14
  181. package/dist/render/sky.js.map +1 -1
  182. package/dist/render/weightedblended_oit.js.map +1 -1
  183. package/dist/scene/basesprite.js +296 -0
  184. package/dist/scene/basesprite.js.map +1 -0
  185. package/dist/scene/batchgroup.js +4 -2
  186. package/dist/scene/batchgroup.js.map +1 -1
  187. package/dist/scene/environment.js +9 -10
  188. package/dist/scene/environment.js.map +1 -1
  189. package/dist/scene/graph_node.js.map +1 -1
  190. package/dist/scene/light.js +22 -4
  191. package/dist/scene/light.js.map +1 -1
  192. package/dist/scene/mesh.js +93 -15
  193. package/dist/scene/mesh.js.map +1 -1
  194. package/dist/scene/octree.js.map +1 -1
  195. package/dist/scene/particlesys.js +25 -22
  196. package/dist/scene/particlesys.js.map +1 -1
  197. package/dist/scene/raycast_visitor.js +0 -16
  198. package/dist/scene/raycast_visitor.js.map +1 -1
  199. package/dist/scene/scene.js +7 -4
  200. package/dist/scene/scene.js.map +1 -1
  201. package/dist/scene/scene_node.js +20 -35
  202. package/dist/scene/scene_node.js.map +1 -1
  203. package/dist/scene/sprite.js +18 -0
  204. package/dist/scene/sprite.js.map +1 -0
  205. package/dist/scene/sprite3d.js +18 -0
  206. package/dist/scene/sprite3d.js.map +1 -0
  207. package/dist/scene/terrain-cm/grass.js +5 -4
  208. package/dist/scene/terrain-cm/grass.js.map +1 -1
  209. package/dist/scene/terrain-cm/grassmaterial.js +3 -1
  210. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  211. package/dist/scene/terrain-cm/terrain-cm.js +65 -48
  212. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  213. package/dist/scene/water.js +35 -30
  214. package/dist/scene/water.js.map +1 -1
  215. package/dist/shaders/atmosphere.js +17 -29
  216. package/dist/shaders/atmosphere.js.map +1 -1
  217. package/dist/shaders/fog.js.map +1 -1
  218. package/dist/shaders/misc.js.map +1 -1
  219. package/dist/shaders/noise.js.map +1 -1
  220. package/dist/shaders/pbr.js.map +1 -1
  221. package/dist/shaders/shadow.js.map +1 -1
  222. package/dist/shaders/ssr.js.map +1 -1
  223. package/dist/shaders/temporal.js.map +1 -1
  224. package/dist/shaders/water.js.map +1 -1
  225. package/dist/shadow/esm.js +1 -1
  226. package/dist/shadow/esm.js.map +1 -1
  227. package/dist/shadow/pcf_opt.js.map +1 -1
  228. package/dist/shadow/pcf_pd.js.map +1 -1
  229. package/dist/shadow/shader.js +3 -1
  230. package/dist/shadow/shader.js.map +1 -1
  231. package/dist/shadow/shadow_impl.js.map +1 -1
  232. package/dist/shadow/shadowmapper.js +6 -18
  233. package/dist/shadow/shadowmapper.js.map +1 -1
  234. package/dist/shadow/ssm.js.map +1 -1
  235. package/dist/shadow/vsm.js.map +1 -1
  236. package/dist/shapes/box.js +9 -3
  237. package/dist/shapes/box.js.map +1 -1
  238. package/dist/shapes/cylinder.js +2 -2
  239. package/dist/shapes/cylinder.js.map +1 -1
  240. package/dist/shapes/plane.js +2 -2
  241. package/dist/shapes/plane.js.map +1 -1
  242. package/dist/shapes/shape.js +2 -1
  243. package/dist/shapes/shape.js.map +1 -1
  244. package/dist/shapes/sphere.js +2 -2
  245. package/dist/shapes/sphere.js.map +1 -1
  246. package/dist/shapes/tetrahedron.js +5 -6
  247. package/dist/shapes/tetrahedron.js.map +1 -1
  248. package/dist/shapes/torus.js +2 -2
  249. package/dist/shapes/torus.js.map +1 -1
  250. package/dist/utility/aabbtree.js +1 -1
  251. package/dist/utility/aabbtree.js.map +1 -1
  252. package/dist/utility/blueprint/common/constants.js +578 -104
  253. package/dist/utility/blueprint/common/constants.js.map +1 -1
  254. package/dist/utility/blueprint/common/math.js +471 -9
  255. package/dist/utility/blueprint/common/math.js.map +1 -1
  256. package/dist/utility/blueprint/common.js +1 -1
  257. package/dist/utility/blueprint/common.js.map +1 -1
  258. package/dist/utility/blueprint/material/func.js +9 -5
  259. package/dist/utility/blueprint/material/func.js.map +1 -1
  260. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  261. package/dist/utility/blueprint/material/ir.js +288 -80
  262. package/dist/utility/blueprint/material/ir.js.map +1 -1
  263. package/dist/utility/blueprint/material/pbr.js +92 -4
  264. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  265. package/dist/utility/blueprint/material/texture.js +62 -45
  266. package/dist/utility/blueprint/material/texture.js.map +1 -1
  267. package/dist/utility/blueprint/node.js +28 -1
  268. package/dist/utility/blueprint/node.js.map +1 -1
  269. package/dist/utility/bounding_volume.js.map +1 -1
  270. package/dist/utility/debug.js.map +1 -1
  271. package/dist/utility/draco/decoder.js.map +1 -1
  272. package/dist/utility/misc.js +1 -1
  273. package/dist/utility/misc.js.map +1 -1
  274. package/dist/utility/panorama.js.map +1 -1
  275. package/dist/utility/pmrem.js.map +1 -1
  276. package/dist/utility/rendermipmap.js.map +1 -1
  277. package/dist/utility/serialization/json.js +19 -15
  278. package/dist/utility/serialization/json.js.map +1 -1
  279. package/dist/utility/serialization/manager.js +89 -22
  280. package/dist/utility/serialization/manager.js.map +1 -1
  281. package/dist/utility/serialization/scene/animation.js +23 -21
  282. package/dist/utility/serialization/scene/animation.js.map +1 -1
  283. package/dist/utility/serialization/scene/batch.js +4 -3
  284. package/dist/utility/serialization/scene/batch.js.map +1 -1
  285. package/dist/utility/serialization/scene/camera.js +97 -9
  286. package/dist/utility/serialization/scene/camera.js.map +1 -1
  287. package/dist/utility/serialization/scene/common.js +102 -28
  288. package/dist/utility/serialization/scene/common.js.map +1 -1
  289. package/dist/utility/serialization/scene/light.js +14 -12
  290. package/dist/utility/serialization/scene/light.js.map +1 -1
  291. package/dist/utility/serialization/scene/material.js +154 -26
  292. package/dist/utility/serialization/scene/material.js.map +1 -1
  293. package/dist/utility/serialization/scene/mesh.js +71 -100
  294. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  295. package/dist/utility/serialization/scene/misc.js +3 -2
  296. package/dist/utility/serialization/scene/misc.js.map +1 -1
  297. package/dist/utility/serialization/scene/node.js +42 -9
  298. package/dist/utility/serialization/scene/node.js.map +1 -1
  299. package/dist/utility/serialization/scene/particle.js +7 -5
  300. package/dist/utility/serialization/scene/particle.js.map +1 -1
  301. package/dist/utility/serialization/scene/primitive.js +18 -15
  302. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  303. package/dist/utility/serialization/scene/scene.js +3 -2
  304. package/dist/utility/serialization/scene/scene.js.map +1 -1
  305. package/dist/utility/serialization/scene/sprite.js +164 -0
  306. package/dist/utility/serialization/scene/sprite.js.map +1 -0
  307. package/dist/utility/serialization/scene/terrain.js +8 -6
  308. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  309. package/dist/utility/serialization/scene/water.js +11 -9
  310. package/dist/utility/serialization/scene/water.js.map +1 -1
  311. package/dist/utility/serialization/types.js +6 -0
  312. package/dist/utility/serialization/types.js.map +1 -0
  313. package/dist/utility/shprojector.js.map +1 -1
  314. package/dist/utility/textures/ggxlut.js.map +1 -1
  315. package/dist/utility/textures/gradientnoise.js.map +1 -1
  316. package/dist/utility/textures/randomnoise.js.map +1 -1
  317. package/dist/values.js +14 -14
  318. package/dist/values.js.map +1 -1
  319. package/package.json +80 -80
@@ -1 +1 @@
1
- {"version":3,"file":"atmosphere.js","sources":["../../src/shaders/atmosphere.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../render/fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { uniformSphereSamples } from '../values';\r\nimport { getDevice } from '../app/api';\r\n\r\nconst TRANSMITTANCE_SAMPLES = 16;\r\nconst RAYLEIGH_SIGMA = [5.802, 13.558, 33.1];\r\nconst MIE_SIGMA = 3.996;\r\nconst MIE_ABSORPTION_SIGMA = 4.4;\r\nconst OZONE_ABSORPTION_SIGMA = [0.65, 1.881, 0.085];\r\n\r\n/** @internal */\r\nexport const CAMERA_POS_Y = 1;\r\n\r\n/** @internal */\r\nexport type AtmosphereParams = {\r\n plantRadius: number;\r\n atmosphereHeight: number;\r\n rayleighScatteringHeight: number;\r\n mieScatteringHeight: number;\r\n mieAnstropy: number;\r\n ozoneCenter: number;\r\n ozoneWidth: number;\r\n apDistance: number;\r\n cameraWorldMatrix: Matrix4x4;\r\n lightDir: Vector3;\r\n lightColor: Vector4;\r\n cameraAspect: number;\r\n cameraHeightScale: number;\r\n};\r\n\r\n/** @internal */\r\nexport function getDefaultAtmosphereParams(): AtmosphereParams {\r\n return {\r\n plantRadius: 6360000,\r\n atmosphereHeight: 60000,\r\n rayleighScatteringHeight: 8000,\r\n mieScatteringHeight: 1200,\r\n mieAnstropy: 0.8,\r\n ozoneCenter: 25000,\r\n ozoneWidth: 15000,\r\n apDistance: 4000,\r\n cameraWorldMatrix: Matrix4x4.identity(),\r\n lightDir: new Vector3(1, 0, 0),\r\n lightColor: new Vector4(1, 1, 1, 10),\r\n cameraAspect: 1,\r\n cameraHeightScale: 1\r\n };\r\n}\r\n\r\nconst defaultAtmosphereParams = getDefaultAtmosphereParams();\r\n\r\nlet currentAtmosphereParams: AtmosphereParams = null;\r\n\r\nfunction checkParams(other?: Partial<AtmosphereParams>): {\r\n transmittance: boolean;\r\n multiScattering: boolean;\r\n skyView: boolean;\r\n aerialPerspective: boolean;\r\n} {\r\n const result = {\r\n transmittance: false,\r\n multiScattering: false,\r\n skyView: false,\r\n aerialPerspective: false\r\n };\r\n other = { ...defaultAtmosphereParams, ...other };\r\n if (!currentAtmosphereParams) {\r\n currentAtmosphereParams = {\r\n ...defaultAtmosphereParams,\r\n lightDir: new Vector3(defaultAtmosphereParams.lightDir),\r\n lightColor: new Vector4(defaultAtmosphereParams.lightColor),\r\n cameraWorldMatrix: new Matrix4x4(defaultAtmosphereParams.cameraWorldMatrix)\r\n };\r\n result.transmittance = true;\r\n result.multiScattering = true;\r\n result.skyView = true;\r\n result.aerialPerspective = true;\r\n } else {\r\n result.transmittance =\r\n currentAtmosphereParams.plantRadius !== other.plantRadius ||\r\n currentAtmosphereParams.atmosphereHeight !== other.atmosphereHeight ||\r\n currentAtmosphereParams.rayleighScatteringHeight !== other.rayleighScatteringHeight ||\r\n currentAtmosphereParams.mieScatteringHeight !== other.mieScatteringHeight ||\r\n currentAtmosphereParams.ozoneCenter !== other.ozoneCenter ||\r\n currentAtmosphereParams.ozoneWidth !== other.ozoneWidth;\r\n result.multiScattering =\r\n result.transmittance || currentAtmosphereParams.mieAnstropy !== other.mieAnstropy;\r\n result.skyView =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n currentAtmosphereParams.cameraHeightScale !== other.cameraHeightScale ||\r\n !currentAtmosphereParams.lightDir.equalsTo(other.lightDir) ||\r\n !currentAtmosphereParams.lightColor.equalsTo(other.lightColor) ||\r\n !currentAtmosphereParams.cameraWorldMatrix.equalsTo(other.cameraWorldMatrix);\r\n result.aerialPerspective =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n result.skyView ||\r\n currentAtmosphereParams.apDistance !== other.apDistance ||\r\n currentAtmosphereParams.cameraAspect !== other.cameraAspect;\r\n }\r\n if (result.transmittance) {\r\n currentAtmosphereParams.plantRadius = other.plantRadius;\r\n currentAtmosphereParams.atmosphereHeight = other.atmosphereHeight;\r\n currentAtmosphereParams.rayleighScatteringHeight = other.rayleighScatteringHeight;\r\n currentAtmosphereParams.mieScatteringHeight = other.mieScatteringHeight;\r\n currentAtmosphereParams.ozoneCenter = other.ozoneCenter;\r\n currentAtmosphereParams.ozoneWidth = other.ozoneWidth;\r\n }\r\n if (result.multiScattering) {\r\n currentAtmosphereParams.mieAnstropy = other.mieAnstropy;\r\n }\r\n if (result.skyView) {\r\n currentAtmosphereParams.cameraHeightScale = other.cameraHeightScale;\r\n currentAtmosphereParams.lightDir.set(other.lightDir);\r\n currentAtmosphereParams.lightColor.set(other.lightColor);\r\n currentAtmosphereParams.cameraWorldMatrix.set(other.cameraWorldMatrix);\r\n }\r\n if (result.aerialPerspective) {\r\n currentAtmosphereParams.apDistance = other.apDistance;\r\n currentAtmosphereParams.cameraAspect = other.cameraAspect;\r\n }\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function rayIntersectSphere(\r\n scope: PBInsideFunctionScope,\r\n f3Center: PBShaderExp,\r\n fRadius: PBShaderExp,\r\n f3RayStart: PBShaderExp,\r\n f3RayDir: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayIntersectSphere';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('center'), pb.float('radius'), pb.vec3('rayStart'), pb.vec3('rayDir')],\r\n function () {\r\n this.$l.OS = pb.length(pb.sub(this.center, this.rayStart));\r\n this.$l.SH = pb.dot(pb.sub(this.center, this.rayStart), this.rayDir);\r\n this.$l.OH = pb.sqrt(pb.sub(pb.mul(this.OS, this.OS), pb.mul(this.SH, this.SH)));\r\n this.$l.PH = pb.sqrt(pb.sub(pb.mul(this.radius, this.radius), pb.mul(this.OH, this.OH)));\r\n this.$if(pb.greaterThan(this.OH, this.radius), function () {\r\n this.$return(pb.float(-1));\r\n });\r\n this.$l.t1 = pb.sub(this.SH, this.PH);\r\n this.$l.t2 = pb.add(this.SH, this.PH);\r\n this.$return(this.$choice(pb.lessThan(this.t1, 0), this.t2, this.t1));\r\n }\r\n );\r\n return scope[funcName](f3Center, fRadius, f3RayStart, f3RayDir);\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceToSky(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3Dir: PBShaderExp,\r\n texLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToSky';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('dir')], function () {\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.params.plantRadius, this.params.atmosphereHeight);\r\n this.$l.upVector = pb.normalize(this.p);\r\n this.$l.cosTheta = pb.dot(this.upVector, this.dir);\r\n this.$l.r = pb.length(this.p);\r\n this.$l.uv = transmittanceLutToUV(this, this.bottomRadius, this.topRadius, this.cosTheta, this.r);\r\n this.$return(pb.textureSampleLevel(texLut, this.uv, 0).rgb);\r\n });\r\n return scope[funcName](stParams, f3Pos, f3Dir);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fRayleighScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighCoefficient';\r\n pb.func(funcName, [pb.float('rayleighScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(RAYLEIGH_SIGMA[0], RAYLEIGH_SIGMA[1], RAYLEIGH_SIGMA[2]), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.rayleighScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fRayleighScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighPhase(scope: PBInsideFunctionScope, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighPhase';\r\n pb.func(funcName, [pb.float('cosTheta')], function () {\r\n this.$return(pb.mul(3 / (16 * Math.PI), pb.add(1, pb.mul(this.cosTheta, this.cosTheta))));\r\n });\r\n return scope[funcName](fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieCoefficient';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function miePhase(scope: PBInsideFunctionScope, fMieAnstropy: PBShaderExp, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_miePhase';\r\n pb.func(funcName, [pb.float('g'), pb.float('cosTheta')], function () {\r\n this.$l.g2 = pb.mul(this.g, this.g);\r\n this.$l.a = 3 / (8 * Math.PI);\r\n this.$l.b = pb.div(pb.sub(1, this.g2), pb.add(2, this.g2));\r\n this.$l.c = pb.add(1, pb.mul(this.cosTheta, this.cosTheta));\r\n this.$l.d = pb.pow(pb.sub(pb.add(1, this.g2), pb.mul(this.g, this.cosTheta, 2)), 1.5);\r\n this.$return(pb.div(pb.mul(this.a, this.b, this.c), this.d));\r\n });\r\n return scope[funcName](fMieAnstropy, fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieAbsorption';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_ABSORPTION_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function ozoneAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fOzoneLevelCenterHeight: PBShaderExp,\r\n fOzoneLevelWidth: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_ozoneAbsorption';\r\n pb.func(funcName, [pb.float('center'), pb.float('width'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(\r\n pb.vec3(OZONE_ABSORPTION_SIGMA[0], OZONE_ABSORPTION_SIGMA[1], OZONE_ABSORPTION_SIGMA[2]),\r\n 1e-6\r\n );\r\n this.$l.rho_h = pb.max(0, pb.sub(1, pb.div(pb.abs(pb.sub(this.h, this.center)), this.width)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fOzoneLevelCenterHeight, fOzoneLevelWidth, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyView(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3EyePos: PBShaderExp,\r\n f3ViewDir: PBShaderExp,\r\n fMaxDis: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp,\r\n withGround = true\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_getSkyView';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec3('eyePos'), pb.vec3('viewDir'), pb.float('maxDis')],\r\n function () {\r\n const N_SAMPLE = 32;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.eyePos,\r\n this.viewDir\r\n );\r\n this.$if(pb.lessThan(this.dis, 0), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n if (withGround) {\r\n this.$l.d = rayIntersectSphere(this, pb.vec3(0), this.params.plantRadius, this.eyePos, this.viewDir);\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n }\r\n this.$if(pb.greaterThanEqual(this.maxDis, 0), function () {\r\n this.dis = pb.min(this.dis, this.maxDis);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.eyePos, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.sunLuminance = pb.mul(this.params.lightColor.rgb, this.params.lightColor.a);\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.extinction = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.extinction, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.params.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n\r\n this.$l.inScattering = pb.mul(this.t1, this.s, this.t2, this.ds, this.sunLuminance);\r\n this.color = pb.add(this.color, this.inScattering);\r\n\r\n this.$l.multiScattering = getMultiScattering(this, this.params, this.p, texMultiScatteringLut);\r\n this.color = pb.add(this.color, pb.mul(this.multiScattering, this.t2, this.ds, this.sunLuminance));\r\n\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n this.$return(this.color);\r\n }\r\n );\r\n return scope[funcName](stParams, f3EyePos, f3ViewDir, fMaxDis);\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_getMultiScattering';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p')], function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.zenithAngle = pb.dot(pb.normalize(this.p), this.params.lightDir);\r\n this.$l.uv = pb.vec2(\r\n pb.add(pb.mul(this.zenithAngle, 0.5), 0.5),\r\n pb.div(this.h, this.params.atmosphereHeight)\r\n );\r\n this.$l.G_ALL = pb.textureSampleLevel(texMultiScatteringLut, this.uv, 0).rgb;\r\n this.$return(pb.mul(this.G_ALL, this.sigma_s));\r\n });\r\n return scope[funcName](stParams, f3Pos);\r\n}\r\n\r\n/** @internal */\r\nexport function integralMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f3SamplePoint: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const N_DIRECTION = 64;\r\n const N_SAMPLE = 32;\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_integralMultiScattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('lightDir'), pb.vec3('samplePoint')], function () {\r\n const uniformPhase = 1 / (4 * Math.PI);\r\n const sphereSolidAngle = (4 * Math.PI) / N_DIRECTION;\r\n this.$l.G_2 = pb.vec3(0);\r\n this.$l.f_ms = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_DIRECTION, function () {\r\n this.$l.viewDir = this.uniformSphereSamples.at(this.i).xyz;\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$l.d = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.samplePoint, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('j'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_a = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_t = pb.add(this.sigma_s, this.sigma_a);\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.sigma_t, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n this.G_2 = pb.add(this.G_2, pb.mul(this.t1, this.s, this.t2, uniformPhase, this.ds));\r\n this.f_ms = pb.add(this.f_ms, pb.mul(this.t2, this.sigma_s, uniformPhase, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n });\r\n this.G_2 = pb.mul(this.G_2, sphereSolidAngle);\r\n this.f_ms = pb.mul(this.f_ms, sphereSolidAngle);\r\n this.$return(pb.div(this.G_2, pb.sub(pb.vec3(1), this.f_ms)));\r\n });\r\n return scope[funcName](stParams, f3LightDir, f3SamplePoint);\r\n}\r\n\r\n/** @internal */\r\nexport function scattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3ViewDir: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_scattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('viewDir')], function () {\r\n this.$l.cosTheta = pb.dot(this.params.lightDir, this.viewDir);\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.rayleigh = pb.mul(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n rayleighPhase(this, this.cosTheta)\r\n );\r\n this.$l.mie = pb.mul(\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n miePhase(this, this.params.mieAnstropy, this.cosTheta)\r\n );\r\n this.$return(pb.add(this.rayleigh, this.mie));\r\n });\r\n return scope[funcName](stParams, f3Pos, f3ViewDir);\r\n}\r\n\r\n/** @internal */\r\nexport function transmittance(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3P1: PBShaderExp,\r\n f3P2: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_transmittance';\r\n pb.func(funcName, [Params('params'), pb.vec3('p1'), pb.vec3('p2')], function () {\r\n this.$l.dir = pb.normalize(pb.sub(this.p2, this.p1));\r\n this.$l.distance = pb.length(pb.sub(this.p2, this.p1));\r\n this.$l.ds = pb.div(this.distance, TRANSMITTANCE_SAMPLES);\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.p = pb.add(this.p1, pb.mul(this.dir, this.ds, 0.5));\r\n this.$for(pb.int('i'), 0, TRANSMITTANCE_SAMPLES, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.scattering = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.absorption = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.extinction = pb.add(this.scattering, this.absorption);\r\n this.sum = pb.add(this.sum, pb.mul(this.extinction, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.dir, this.ds));\r\n });\r\n this.$return(pb.exp(pb.neg(this.sum)));\r\n });\r\n return scope[funcName](stParams, f3P1, f3P2);\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLutToUV(\r\n scope: PBInsideFunctionScope,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp,\r\n fMu: PBShaderExp,\r\n fR: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToUV';\r\n pb.func(\r\n funcName,\r\n [pb.float('bottomRadius'), pb.float('topRadius'), pb.float('mu'), pb.float('r')],\r\n function () {\r\n this.$l.H = pb.sqrt(\r\n pb.max(\r\n 0,\r\n pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius))\r\n )\r\n );\r\n this.$l.rho = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.r, this.r), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.discriminant = pb.add(\r\n pb.mul(this.r, this.r, pb.sub(pb.mul(this.mu, this.mu), 1)),\r\n pb.mul(this.topRadius, this.topRadius)\r\n );\r\n this.$l.d = pb.max(0, pb.sub(pb.sqrt(this.discriminant), pb.mul(this.mu, this.r)));\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.x_mu = pb.div(pb.sub(this.d, this.d_min), pb.sub(this.d_max, this.d_min));\r\n this.$l.x_r = pb.div(this.rho, this.H);\r\n this.$return(pb.vec2(this.x_mu, this.x_r));\r\n }\r\n );\r\n return scope[funcName](fBottomRadius, fTopRadius, fMu, fR);\r\n}\r\n\r\n/** @internal */\r\nexport function viewDirToUV(scope: PBInsideFunctionScope, f3ViewDir: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_viewDirToUV';\r\n pb.func(funcName, [pb.vec3('viewDir')], function () {\r\n this.$l.uv = pb.vec2(pb.atan2(this.viewDir.z, this.viewDir.x), pb.asin(this.viewDir.y));\r\n this.uv = pb.div(this.uv, pb.vec2(2 * Math.PI, Math.PI));\r\n this.uv = pb.add(this.uv, pb.vec2(0.5));\r\n this.$return(this.uv);\r\n });\r\n return scope[funcName](f3ViewDir);\r\n}\r\n\r\n/** @internal */\r\nexport function uvToViewDir(scope: PBInsideFunctionScope, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToViewDir';\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.theta = pb.mul(pb.sub(1, this.uv.y), Math.PI);\r\n this.$l.phi = pb.mul(pb.sub(pb.mul(this.uv.x, 2), 1), Math.PI);\r\n this.$l.x = pb.mul(pb.sin(this.theta), pb.cos(this.phi));\r\n this.$l.z = pb.mul(pb.sin(this.theta), pb.sin(this.phi));\r\n this.$l.y = pb.cos(this.theta);\r\n this.$return(pb.vec3(this.x, this.y, this.z));\r\n });\r\n return scope[funcName](f2UV);\r\n}\r\n\r\n/** @internal */\r\nexport function uvToTransmittanceLut(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToTransmittanceLut';\r\n pb.func(funcName, [pb.vec2('uv'), pb.float('bottomRadius'), pb.float('topRadius')], function () {\r\n this.$l.x_mu = this.uv.x;\r\n this.$l.x_r = this.uv.y;\r\n this.$l.H = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.rho = pb.mul(this.H, this.x_r);\r\n this.$l.r = pb.sqrt(\r\n pb.max(0, pb.add(pb.mul(this.rho, this.rho), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.d = pb.add(this.d_min, pb.mul(this.x_mu, pb.sub(this.d_max, this.d_min)));\r\n this.$l.mu = this.$choice(\r\n pb.equal(this.d, 0),\r\n pb.float(1),\r\n pb.div(\r\n pb.sub(pb.mul(this.H, this.H), pb.add(pb.mul(this.rho, this.rho), pb.mul(this.d, this.d))),\r\n pb.mul(this.r, this.d, 2)\r\n )\r\n );\r\n this.mu = pb.clamp(this.mu, -1, 1);\r\n this.$return(pb.vec2(this.mu, this.r));\r\n });\r\n return scope[funcName](f2UV, fBottomRadius, fTopRadius);\r\n}\r\n\r\nfunction sunBloom(\r\n scope: PBInsideFunctionScope,\r\n f3ViewDir: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f4LightColorAndIntensity: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_sunBloom';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('viewDir'), pb.vec3('lightDir'), pb.vec4('sunColorAndIntensity'), pb.float('sunSolidAngle')],\r\n function () {\r\n this.$l.minSunCosTheta = pb.cos(this.sunSolidAngle);\r\n this.$l.cosTheta = pb.dot(this.viewDir, this.lightDir);\r\n this.$l.luminance = pb.mul(this.sunColorAndIntensity.rgb, this.sunColorAndIntensity.a);\r\n this.$if(pb.lessThan(this.cosTheta, this.minSunCosTheta), function () {\r\n this.$l.offset = pb.sub(this.minSunCosTheta, this.cosTheta);\r\n this.$l.gaussianBloom = pb.mul(pb.exp(pb.mul(this.offset, -50000)), 0.5);\r\n this.$l.invBloom = pb.mul(pb.div(1, pb.add(0.02, pb.mul(this.offset, 300))), 0.01);\r\n this.luminance = pb.mul(this.luminance, pb.add(this.gaussianBloom, this.invBloom));\r\n });\r\n this.$return(this.luminance);\r\n }\r\n );\r\n return scope[funcName](f3ViewDir, f3LightDir, f4LightColorAndIntensity, fSunSolidAngle);\r\n}\r\n\r\n/** @internal */\r\nexport function skyBox(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f4SunColor: PBShaderExp,\r\n f3SkyBoxWorldPos: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texSkyViewLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_skybox';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec4('sunColor').out(), pb.vec3('worldPos'), pb.float('sunSolidAngle')],\r\n function () {\r\n this.$l.rgb = pb.vec3(0);\r\n this.$l.viewDir = pb.normalize(this.worldPos);\r\n this.rgb = pb.add(\r\n this.rgb,\r\n pb.textureSampleLevel(texSkyViewLut, viewDirToUV(this, this.viewDir), 0).rgb\r\n );\r\n this.$l.groundDistance = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n pb.vec3(0, pb.add(this.params.plantRadius, pb.mul(CAMERA_POS_Y, this.params.cameraHeightScale)), 0),\r\n this.viewDir\r\n );\r\n this.$l.sunTransmittance = transmittanceToSky(\r\n this,\r\n this.params,\r\n pb.vec3(0, pb.add(this.params.cameraHeightScale, this.params.plantRadius), 0),\r\n this.params.lightDir,\r\n texTransmittanceLut\r\n );\r\n this.sunColor = pb.mul(this.params.lightColor, pb.vec4(this.sunTransmittance, 1));\r\n this.$if(pb.lessThan(this.groundDistance, 0), function () {\r\n this.rgb = pb.add(\r\n this.rgb,\r\n sunBloom(this, this.viewDir, this.params.lightDir, this.sunColor, this.sunSolidAngle)\r\n );\r\n });\r\n this.$return(pb.vec4(this.rgb, 1));\r\n }\r\n );\r\n return scope[funcName](stParams, f4SunColor, f3SkyBoxWorldPos, fSunSolidAngle);\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspective(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n stParams: PBShaderExp,\r\n f3CameraPos: PBShaderExp,\r\n f3WorldPos: PBShaderExp,\r\n f3Dim: PBShaderExp,\r\n texAerialPerspectiveLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_aerialPerspective';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec2('uv'), pb.vec3('cameraPos'), pb.vec3('worldPos'), pb.vec3('dim')],\r\n function () {\r\n this.$l.V = pb.sub(this.worldPos, this.cameraPos);\r\n this.$l.dis = pb.length(this.V);\r\n this.$l.viewDir = pb.normalize(this.V);\r\n this.$l.apDistance = pb.div(this.params.apDistance, this.params.cameraHeightScale);\r\n this.$l.d0 = pb.clamp(pb.div(this.dis, this.apDistance), 0, 1);\r\n this.$l.weight = pb.clamp(pb.mul(this.d0, 2), 0, 1);\r\n this.$l.dz = pb.mul(this.d0, pb.sub(this.dim.z, 1));\r\n this.$l.slice = pb.floor(this.dz);\r\n this.$l.nextSlice = pb.min(pb.add(this.slice, 1), pb.sub(this.dim.z, 1));\r\n this.$l.factor = pb.sub(this.dz, pb.floor(this.dz));\r\n this.t = pb.div(this.uv, pb.vec2(this.dim.x, 1));\r\n this.$l.uv1 = pb.add(this.t, pb.vec2(pb.div(this.slice, this.dim.z), 0));\r\n this.$l.uv2 = pb.add(this.t, pb.vec2(pb.div(this.nextSlice, this.dim.z), 0));\r\n this.$l.data1 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv1, 0);\r\n this.$l.data2 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv2, 0);\r\n this.$l.data = pb.mix(this.data1, this.data2, this.factor);\r\n this.$l.inscattering = pb.mul(this.data.rgb, this.weight);\r\n //this.$l.transmittance = pb.sub(1, pb.mul(this.weight, pb.sub(1, this.data.a)));\r\n this.$l.planetTranslate = pb.vec3(0, this.params.plantRadius, 0);\r\n this.$l.transmittance = pb.dot(\r\n transmittance(\r\n this,\r\n this.params,\r\n pb.add(this.cameraPos, this.planetTranslate),\r\n pb.add(this.worldPos, this.planetTranslate)\r\n ),\r\n pb.vec3(1 / 3, 1 / 3, 1 / 3)\r\n );\r\n this.$return(pb.vec4(this.inscattering, this.transmittance));\r\n }\r\n );\r\n return scope[funcName](stParams, f2UV, f3CameraPos, f3WorldPos, f3Dim);\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspectiveLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n f3VoxelDim: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcNameFixVoxel = 'z_fixVoxel';\r\n pb.func(\r\n funcNameFixVoxel,\r\n [\r\n Params('params'),\r\n pb.vec3('eyePos'),\r\n pb.vec3('viewDir').inout(),\r\n pb.float('maxDis'),\r\n pb.float('adjustedMaxDis').inout()\r\n ],\r\n function () {\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$l.voxelHeight = pb.length(this.voxelPos);\r\n this.$l.underGround = pb.lessThan(this.voxelHeight, this.params.plantRadius);\r\n this.$l.cameraToVoxel = pb.sub(this.voxelPos, this.eyePos);\r\n this.$l.cameraToVoxelLen = pb.length(this.cameraToVoxel);\r\n this.$l.cameraToVoxelDir = pb.div(this.cameraToVoxel, this.cameraToVoxelLen);\r\n this.$l.planetNearT = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.eyePos,\r\n this.cameraToVoxelDir\r\n );\r\n this.$l.belowHorizon = pb.and(\r\n pb.greaterThan(this.planetNearT, 0),\r\n pb.greaterThan(this.cameraToVoxelLen, this.planetNearT)\r\n );\r\n this.$l.eyePos2 = this.eyePos;\r\n this.$if(pb.or(this.underGround, this.belowHorizon), function () {\r\n this.eyePos2 = pb.add(this.eyePos2, pb.mul(pb.normalize(this.eyePos2), 0.02));\r\n this.$if(this.belowHorizon, function () {\r\n this.$l.voxelWorldPosNorm = pb.normalize(this.voxelPos);\r\n this.$l.camProjOnGround = pb.mul(pb.normalize(this.eyePos2), this.params.plantRadius);\r\n this.$l.voxProjOnGround = pb.mul(this.voxelWorldPosNorm, this.params.plantRadius);\r\n this.$l.voxelGroundToRayStart = pb.sub(this.eyePos2, this.voxProjOnGround);\r\n this.$if(\r\n pb.lessThan(pb.dot(pb.normalize(this.voxelGroundToRayStart), this.voxelWorldPosNorm), 0.0001),\r\n function () {\r\n this.$l.middlePoint = pb.mul(pb.add(this.camProjOnGround, this.voxProjOnGround), 0.5);\r\n this.$l.middlePointOnGround = pb.mul(pb.normalize(this.middlePoint), this.params.plantRadius);\r\n this.voxelPos = pb.add(this.eyePos2, pb.mul(pb.sub(this.middlePointOnGround, this.eyePos2), 2));\r\n }\r\n );\r\n }).$else(function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n });\r\n this.$l.V = pb.sub(this.voxelPos, this.eyePos2);\r\n this.adjustedMaxDis = pb.length(this.V);\r\n this.viewDir = pb.div(this.V, this.adjustedMaxDis);\r\n });\r\n this.$return(this.eyePos2);\r\n }\r\n );\r\n const funcName = 'z_aerialPerspectiveLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.vec3('dim'), pb.float('cameraPosY')], function () {\r\n this.$l.uvw = pb.vec3(this.uv, 0);\r\n this.uvw.x = pb.mul(this.uvw.x, this.dim.x, this.dim.z);\r\n this.uvw.z = pb.div(pb.floor(pb.div(this.uvw.x, this.dim.z)), this.dim.x);\r\n this.uvw.x = pb.div(pb.mod(this.uvw.x, this.dim.z), this.dim.x);\r\n this.uvw = pb.add(this.uvw, pb.div(pb.vec3(0.5), this.dim));\r\n this.$l.slice = this.uvw.z; //pb.mul(this.uvw.z, this.uvw.z);\r\n this.$l.viewDir = pb.normalize(\r\n pb.mul(\r\n this.params.cameraWorldMatrix,\r\n pb.vec4(\r\n pb.sub(pb.mul(this.uvw.x, 2), 1),\r\n pb.div(pb.sub(pb.mul(this.uvw.y, 2), 1), this.params.cameraAspect),\r\n -1,\r\n 0\r\n )\r\n ).xyz\r\n );\r\n this.$l.eyePos = pb.vec3(\r\n 0,\r\n pb.add(pb.mul(this.cameraPosY, this.params.cameraHeightScale), this.params.plantRadius),\r\n 0\r\n );\r\n this.$l.maxDis = pb.mul(this.slice, this.params.apDistance);\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$if(pb.lessThan(pb.length(this.voxelPos), this.params.plantRadius), function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n this.maxDis = pb.length(pb.sub(this.eyePos, this.voxelPos));\r\n });\r\n this.$l.color = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n this.maxDis,\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.eyePos, this.viewDir, texTransmittanceLut);\r\n this.$l.t2 = transmittanceToSky(this, this.params, this.voxelPos, this.viewDir, texTransmittanceLut);\r\n this.$l.t = pb.clamp(pb.div(this.t1, pb.max(this.t2, pb.vec3(0.0001))), pb.vec3(0), pb.vec3(1));\r\n this.$return(pb.vec4(this.color, pb.dot(this.t, pb.vec3(1 / 3, 1 / 3, 1 / 3))));\r\n });\r\n return scope[funcName](stParams, f2UV, f3VoxelDim, CAMERA_POS_Y);\r\n}\r\n\r\n/** @internal */\r\nexport function skyViewLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_skyViewLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.float('cameraPosY')], function () {\r\n this.$l.viewDir = uvToViewDir(this, this.uv);\r\n this.$l.h = pb.add(this.params.plantRadius, pb.mul(this.cameraPosY, this.params.cameraHeightScale));\r\n this.$l.eyePos = pb.vec3(0, this.h, 0);\r\n this.$l.rgb = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n pb.float(-1),\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV, CAMERA_POS_Y);\r\n}\r\n\r\n/** @internal */\r\nexport function multiScatteringLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_multiScatteringLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.mu_s = pb.sub(pb.mul(this.uv.x, 2), 1);\r\n this.$l.r = pb.add(pb.mul(this.uv.y, this.params.atmosphereHeight), this.params.plantRadius);\r\n this.$l.cosTheta = this.mu_s;\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, pb.mul(this.cosTheta, this.cosTheta)));\r\n this.$l.lightDir = pb.vec3(this.sinTheta, this.cosTheta, 0);\r\n this.$l.p = pb.vec3(0, this.r, 0);\r\n this.$l.rgb = integralMultiScattering(this, this.params, this.lightDir, this.p, texTransmittanceLut);\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV);\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLut(scope: PBInsideFunctionScope, stParams: PBShaderExp, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'transmittanceLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.color = pb.vec4(0, 0, 0, 1);\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.bottomRadius, this.params.atmosphereHeight);\r\n this.$l.lutParams = uvToTransmittanceLut(this, this.uv, this.bottomRadius, this.topRadius);\r\n this.$l.cos_theta = this.lutParams.x;\r\n this.$l.r = this.lutParams.y;\r\n this.$l.sin_theta = pb.sqrt(pb.sub(1, pb.mul(this.cos_theta, this.cos_theta)));\r\n this.$l.viewDir = pb.vec3(this.sin_theta, this.cos_theta, 0);\r\n this.$l.eyePos = pb.vec3(0, this.r, 0);\r\n this.$l.dis = rayIntersectSphere(this, pb.vec3(0), this.topRadius, this.eyePos, this.viewDir);\r\n this.$l.hitPoint = pb.add(this.eyePos, pb.mul(this.viewDir, this.dis));\r\n this.$return(pb.vec4(transmittance(this, this.params, this.eyePos, this.hitPoint), 1));\r\n });\r\n return scope[funcName](stParams, f2UV);\r\n}\r\n\r\n/** @internal */\r\nexport function atmosphereLUTRendered(): boolean {\r\n return !!transmittanceLUT && !!multiScatteringLUT && !!skyViewLUT && !!ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAtmosphereLUTs(params?: Partial<AtmosphereParams>) {\r\n const checkResult = checkParams(params);\r\n if (checkResult.transmittance || !transmittanceLUT) {\r\n renderTransmittanceLut(currentAtmosphereParams);\r\n }\r\n if (checkResult.multiScattering || !multiScatteringLUT) {\r\n renderMultiScatteringLut(currentAtmosphereParams);\r\n }\r\n if (checkResult.skyView || !skyViewLUT) {\r\n renderSkyViewLut(currentAtmosphereParams);\r\n }\r\n if (checkResult.aerialPerspective || !ApLut) {\r\n renderAPLut(currentAtmosphereParams);\r\n }\r\n}\r\n\r\n/* For debug */\r\nlet transmittanceLutProgram: GPUProgram = undefined;\r\nlet multiScatteringLutProgram: GPUProgram = undefined;\r\nlet skyViewLutProgram: GPUProgram = undefined;\r\nlet APLutProgram: GPUProgram = undefined;\r\nlet transmittanceLutBindGroup: BindGroup = undefined;\r\nlet transmittanceLUT: Texture2D = undefined;\r\nlet transmittanceFramebuffer: FrameBuffer = undefined;\r\n\r\nlet multiScatteringLutBindGroup: BindGroup = undefined;\r\nlet multiScatteringLUT: Texture2D = undefined;\r\nlet uniformSphereSampleBuffer: GPUDataBuffer = undefined;\r\nlet multiScatteringFramebuffer: FrameBuffer = undefined;\r\n\r\nlet skyViewLutBindGroup: BindGroup = undefined;\r\nlet skyViewLUT: Texture2D = undefined;\r\nlet skyViewFramebuffer: FrameBuffer = undefined;\r\n\r\nlet APLutBindGroup: BindGroup = undefined;\r\nlet ApLut: Texture2D = undefined;\r\nlet APFramebuffer: FrameBuffer = undefined;\r\n\r\n/** @internal */\r\nexport function getTransmittanceLut() {\r\n return transmittanceLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScatteringLut() {\r\n return multiScatteringLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyViewLut() {\r\n return skyViewLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getAerialPerspectiveLut() {\r\n return ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function getAtmosphereParamsStruct(pb: ProgramBuilder) {\r\n return pb.defineStruct([\r\n pb.mat4('cameraWorldMatrix'),\r\n pb.vec4('lightColor'),\r\n pb.vec3('lightDir'),\r\n pb.float('cameraAspect'),\r\n pb.float('plantRadius'),\r\n pb.float('atmosphereHeight'),\r\n pb.float('rayleighScatteringHeight'),\r\n pb.float('mieScatteringHeight'),\r\n pb.float('mieAnstropy'),\r\n pb.float('ozoneCenter'),\r\n pb.float('ozoneWidth'),\r\n pb.float('apDistance'),\r\n pb.float('cameraHeightScale')\r\n ]);\r\n}\r\n\r\n/** @internal */\r\nexport function createTransmittanceLutProgram(device: AbstractDevice): GPUProgram {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = transmittanceLut(this, this.params, this.$inputs.uv);\r\n });\r\n }\r\n });\r\n program.name = '@TransmittanceLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderTransmittanceLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (transmittanceLutProgram === undefined) {\r\n try {\r\n transmittanceLutProgram = createTransmittanceLutProgram(device);\r\n transmittanceLutBindGroup = device.createBindGroup(transmittanceLutProgram.bindGroupLayouts[0]);\r\n transmittanceLUT = device.createTexture2D('rgba16f', 256, 64, {\r\n mipmapping: false\r\n });\r\n transmittanceLUT.name = 'DebugTransmittanceLut';\r\n transmittanceFramebuffer = device.createFrameBuffer([transmittanceLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n transmittanceLutProgram = null;\r\n transmittanceLutBindGroup = null;\r\n transmittanceFramebuffer = null;\r\n }\r\n }\r\n if (transmittanceLutProgram) {\r\n transmittanceLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n transmittanceLutBindGroup.setValue('params', params);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(transmittanceFramebuffer);\r\n device.setProgram(transmittanceLutProgram);\r\n device.setBindGroup(0, transmittanceLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createMultiScatteringLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.uniformSphereSamples = pb.vec4[64]().uniformBuffer(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = multiScatteringLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut\r\n );\r\n });\r\n }\r\n });\r\n program.name = '@MultiScatteringLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderMultiScatteringLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (multiScatteringLutProgram === undefined) {\r\n try {\r\n multiScatteringLutProgram = createMultiScatteringLutProgram(device);\r\n multiScatteringLutBindGroup = device.createBindGroup(multiScatteringLutProgram.bindGroupLayouts[0]);\r\n multiScatteringLUT = device.createTexture2D('rgba16f', 32, 32, {\r\n mipmapping: false\r\n });\r\n multiScatteringLUT.name = 'DebugMultiScatteringLut';\r\n multiScatteringFramebuffer = device.createFrameBuffer([multiScatteringLUT], null);\r\n uniformSphereSampleBuffer = multiScatteringLutBindGroup.getBuffer('uniformSphereSamples', false);\r\n const sphereSamples = new Float32Array(64 * 4);\r\n for (let i = 0; i < 64; i++) {\r\n sphereSamples[i * 4 + 0] = uniformSphereSamples[i].x;\r\n sphereSamples[i * 4 + 1] = uniformSphereSamples[i].y;\r\n sphereSamples[i * 4 + 2] = uniformSphereSamples[i].z;\r\n sphereSamples[i * 4 + 3] = 0;\r\n }\r\n uniformSphereSampleBuffer.bufferSubData(0, sphereSamples);\r\n } catch (err) {\r\n console.error(err);\r\n multiScatteringLutProgram = null;\r\n multiScatteringLutBindGroup = null;\r\n multiScatteringFramebuffer = null;\r\n }\r\n }\r\n if (multiScatteringLutProgram) {\r\n multiScatteringLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n multiScatteringLutBindGroup.setValue('params', params);\r\n //multiScatteringLutBindGroup.setBuffer('uniformSphereSamples', uniformSphereSampleBuffer);\r\n multiScatteringLutBindGroup.setTexture(\r\n 'transmittanceLut',\r\n transmittanceLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(multiScatteringFramebuffer);\r\n device.setProgram(multiScatteringLutProgram);\r\n device.setBindGroup(0, multiScatteringLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createSkyViewLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = skyViewLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n });\r\n program.name = '@SkyViewLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderSkyViewLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (skyViewLutProgram === undefined) {\r\n try {\r\n skyViewLutProgram = createSkyViewLutProgram(device);\r\n skyViewLutBindGroup = device.createBindGroup(skyViewLutProgram.bindGroupLayouts[0]);\r\n skyViewLUT = device.createTexture2D('rgba16f', 256, 128, {\r\n mipmapping: false\r\n });\r\n skyViewLUT.name = 'DebugSkyViewLut';\r\n skyViewFramebuffer = device.createFrameBuffer([skyViewLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n skyViewLutProgram = null;\r\n skyViewLutBindGroup = null;\r\n skyViewFramebuffer = null;\r\n }\r\n }\r\n if (skyViewLutProgram) {\r\n skyViewLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n skyViewLutBindGroup.setValue('params', params);\r\n skyViewLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n skyViewLutBindGroup.setTexture(\r\n 'multiScatteringLut',\r\n multiScatteringLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(skyViewFramebuffer);\r\n device.setProgram(skyViewLutProgram);\r\n device.setBindGroup(0, skyViewLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createAPLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = aerialPerspectiveLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n pb.vec3(32, 32, 32),\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n });\r\n program.name = '@APLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAPLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (APLutProgram === undefined) {\r\n try {\r\n APLutProgram = createAPLutProgram(device);\r\n APLutBindGroup = device.createBindGroup(APLutProgram.bindGroupLayouts[0]);\r\n ApLut = device.createTexture2D('rgba16f', 32 * 32, 32, { mipmapping: false });\r\n ApLut.name = 'DebugAPLut';\r\n APFramebuffer = device.createFrameBuffer([ApLut], null);\r\n } catch (err) {\r\n console.error(err);\r\n APLutProgram = null;\r\n APLutBindGroup = null;\r\n APFramebuffer = null;\r\n }\r\n }\r\n if (APLutProgram) {\r\n APLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n APLutBindGroup.setValue('params', params);\r\n APLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n APLutBindGroup.setTexture('multiScatteringLut', multiScatteringLUT, fetchSampler('clamp_linear_nomip'));\r\n device.pushDeviceStates();\r\n device.setFramebuffer(APFramebuffer);\r\n device.setProgram(APLutProgram);\r\n device.setBindGroup(0, APLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n"],"names":["TRANSMITTANCE_SAMPLES","RAYLEIGH_SIGMA","MIE_SIGMA","MIE_ABSORPTION_SIGMA","OZONE_ABSORPTION_SIGMA","CAMERA_POS_Y","getDefaultAtmosphereParams","plantRadius","atmosphereHeight","rayleighScatteringHeight","mieScatteringHeight","mieAnstropy","ozoneCenter","ozoneWidth","apDistance","cameraWorldMatrix","Matrix4x4","identity","lightDir","Vector3","lightColor","Vector4","cameraAspect","cameraHeightScale","defaultAtmosphereParams","currentAtmosphereParams","checkParams","other","result","transmittance","multiScattering","skyView","aerialPerspective","equalsTo","set","rayIntersectSphere","scope","f3Center","fRadius","f3RayStart","f3RayDir","pb","$builder","funcName","func","vec3","float","$l","OS","length","sub","center","rayStart","SH","dot","rayDir","OH","sqrt","mul","PH","radius","$if","greaterThan","$return","t1","t2","add","$choice","lessThan","transmittanceToSky","stParams","f3Pos","f3Dir","texLut","Params","getAtmosphereParamsStruct","bottomRadius","params","topRadius","upVector","normalize","p","cosTheta","dir","r","uv","transmittanceLutToUV","textureSampleLevel","rgb","rayleighCoefficient","fRayleighScatteringHeight","fH","sigma","rho_h","exp","neg","div","h","rayleighPhase","fCosTheta","Math","PI","mieCoefficient","fMieScatteringHeight","miePhase","fMieAnstropy","g2","g","a","b","c","d","pow","mieAbsorption","ozoneAbsorption","fOzoneLevelCenterHeight","fOzoneLevelWidth","max","abs","width","getSkyView","f3EyePos","f3ViewDir","fMaxDis","texTransmittanceLut","texMultiScatteringLut","withGround","N_SAMPLE","color","dis","eyePos","viewDir","min","greaterThanEqual","maxDis","ds","sunLuminance","opticalDepth","$for","int","extinction","s","scattering","inScattering","getMultiScattering","sigma_s","zenithAngle","vec2","G_ALL","integralMultiScattering","f3LightDir","f3SamplePoint","N_DIRECTION","uniformPhase","sphereSolidAngle","G_2","f_ms","uniformSphereSamples","at","i","xyz","samplePoint","sigma_a","sigma_t","rayleigh","mie","f3P1","f3P2","p2","p1","distance","sum","absorption","fBottomRadius","fTopRadius","fMu","fR","H","rho","discriminant","mu","d_min","d_max","x_mu","x_r","viewDirToUV","atan2","z","x","asin","y","uvToViewDir","f2UV","theta","phi","sin","cos","uvToTransmittanceLut","equal","clamp","sunBloom","f4LightColorAndIntensity","fSunSolidAngle","vec4","minSunCosTheta","sunSolidAngle","luminance","sunColorAndIntensity","offset","gaussianBloom","invBloom","skyBox","f4SunColor","f3SkyBoxWorldPos","texSkyViewLut","out","worldPos","groundDistance","sunTransmittance","sunColor","f3CameraPos","f3WorldPos","f3Dim","texAerialPerspectiveLut","V","cameraPos","d0","weight","dz","dim","slice","floor","nextSlice","factor","t","uv1","uv2","data1","data2","data","mix","inscattering","planetTranslate","aerialPerspectiveLut","f3VoxelDim","funcNameFixVoxel","inout","voxelPos","voxelHeight","underGround","cameraToVoxel","cameraToVoxelLen","cameraToVoxelDir","planetNearT","belowHorizon","and","eyePos2","or","voxelWorldPosNorm","camProjOnGround","voxProjOnGround","voxelGroundToRayStart","middlePoint","middlePointOnGround","$else","adjustedMaxDis","uvw","mod","cameraPosY","skyViewLut","multiScatteringLut","mu_s","sinTheta","transmittanceLut","lutParams","cos_theta","sin_theta","hitPoint","atmosphereLUTRendered","transmittanceLUT","multiScatteringLUT","skyViewLUT","ApLut","renderAtmosphereLUTs","checkResult","renderTransmittanceLut","renderMultiScatteringLut","renderSkyViewLut","renderAPLut","transmittanceLutProgram","undefined","multiScatteringLutProgram","skyViewLutProgram","APLutProgram","transmittanceLutBindGroup","transmittanceFramebuffer","multiScatteringLutBindGroup","uniformSphereSampleBuffer","multiScatteringFramebuffer","skyViewLutBindGroup","skyViewFramebuffer","APLutBindGroup","APFramebuffer","getTransmittanceLut","getMultiScatteringLut","getSkyViewLut","getAerialPerspectiveLut","defineStruct","mat4","createTransmittanceLutProgram","device","program","buildRenderProgram","vertex","flip","uniform","$inputs","pos","attrib","$outputs","main","$builtins","position","xy","notEqual","fragment","outColor","name","getDevice","createBindGroup","bindGroupLayouts","createTexture2D","mipmapping","createFrameBuffer","err","console","error","setValue","type","pushDeviceStates","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","createMultiScatteringLutProgram","uniformBuffer","tex2D","getBuffer","sphereSamples","Float32Array","bufferSubData","setTexture","fetchSampler","createSkyViewLutProgram","createAPLutProgram"],"mappings":";;;;;;AAiBA,MAAMA,qBAAwB,GAAA,EAAA;AAC9B,MAAMC,cAAiB,GAAA;AAAC,IAAA,KAAA;AAAO,IAAA,MAAA;AAAQ,IAAA;AAAK,CAAA;AAC5C,MAAMC,SAAY,GAAA,KAAA;AAClB,MAAMC,oBAAuB,GAAA,GAAA;AAC7B,MAAMC,sBAAyB,GAAA;AAAC,IAAA,IAAA;AAAM,IAAA,KAAA;AAAO,IAAA;AAAM,CAAA;AAEnD,iBACaC,MAAAA,YAAAA,GAAe;AAmB5B,iBACO,SAASC,0BAAAA,GAAAA;IACd,OAAO;QACLC,WAAa,EAAA,OAAA;QACbC,gBAAkB,EAAA,KAAA;QAClBC,wBAA0B,EAAA,IAAA;QAC1BC,mBAAqB,EAAA,IAAA;QACrBC,WAAa,EAAA,GAAA;QACbC,WAAa,EAAA,KAAA;QACbC,UAAY,EAAA,KAAA;QACZC,UAAY,EAAA,IAAA;AACZC,QAAAA,iBAAAA,EAAmBC,UAAUC,QAAQ,EAAA;QACrCC,QAAU,EAAA,IAAIC,OAAQ,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;AAC5BC,QAAAA,UAAAA,EAAY,IAAIC,OAAAA,CAAQ,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,EAAA,CAAA;QACjCC,YAAc,EAAA,CAAA;QACdC,iBAAmB,EAAA;AACrB,KAAA;AACF;AAEA,MAAMC,uBAA0BlB,GAAAA,0BAAAA,EAAAA;AAEhC,IAAImB,uBAA4C,GAAA,IAAA;AAEhD,SAASC,YAAYC,KAAiC,EAAA;AAMpD,IAAA,MAAMC,MAAS,GAAA;QACbC,aAAe,EAAA,KAAA;QACfC,eAAiB,EAAA,KAAA;QACjBC,OAAS,EAAA,KAAA;QACTC,iBAAmB,EAAA;AACrB,KAAA;IACAL,KAAQ,GAAA;AAAE,QAAA,GAAGH,uBAAuB;AAAE,QAAA,GAAGG;AAAM,KAAA;AAC/C,IAAA,IAAI,CAACF,uBAAyB,EAAA;QAC5BA,uBAA0B,GAAA;AACxB,YAAA,GAAGD,uBAAuB;YAC1BN,QAAU,EAAA,IAAIC,OAAQK,CAAAA,uBAAAA,CAAwBN,QAAQ,CAAA;YACtDE,UAAY,EAAA,IAAIC,OAAQG,CAAAA,uBAAAA,CAAwBJ,UAAU,CAAA;YAC1DL,iBAAmB,EAAA,IAAIC,SAAUQ,CAAAA,uBAAAA,CAAwBT,iBAAiB;AAC5E,SAAA;AACAa,QAAAA,MAAAA,CAAOC,aAAa,GAAG,IAAA;AACvBD,QAAAA,MAAAA,CAAOE,eAAe,GAAG,IAAA;AACzBF,QAAAA,MAAAA,CAAOG,OAAO,GAAG,IAAA;AACjBH,QAAAA,MAAAA,CAAOI,iBAAiB,GAAG,IAAA;KACtB,MAAA;AACLJ,QAAAA,MAAAA,CAAOC,aAAa,GAClBJ,uBAAAA,CAAwBlB,WAAW,KAAKoB,MAAMpB,WAAW,IACzDkB,uBAAwBjB,CAAAA,gBAAgB,KAAKmB,KAAMnB,CAAAA,gBAAgB,IACnEiB,uBAAAA,CAAwBhB,wBAAwB,KAAKkB,KAAAA,CAAMlB,wBAAwB,IACnFgB,wBAAwBf,mBAAmB,KAAKiB,KAAMjB,CAAAA,mBAAmB,IACzEe,uBAAwBb,CAAAA,WAAW,KAAKe,KAAAA,CAAMf,WAAW,IACzDa,uBAAAA,CAAwBZ,UAAU,KAAKc,MAAMd,UAAU;QACzDe,MAAOE,CAAAA,eAAe,GACpBF,MAAOC,CAAAA,aAAa,IAAIJ,uBAAwBd,CAAAA,WAAW,KAAKgB,KAAAA,CAAMhB,WAAW;AACnFiB,QAAAA,MAAAA,CAAOG,OAAO,GACZH,MAAAA,CAAOC,aAAa,IACpBD,OAAOE,eAAe,IACtBL,uBAAwBF,CAAAA,iBAAiB,KAAKI,KAAMJ,CAAAA,iBAAiB,IACrE,CAACE,uBAAAA,CAAwBP,QAAQ,CAACe,QAAQ,CAACN,KAAAA,CAAMT,QAAQ,CACzD,IAAA,CAACO,wBAAwBL,UAAU,CAACa,QAAQ,CAACN,KAAAA,CAAMP,UAAU,CAAA,IAC7D,CAACK,uBAAwBV,CAAAA,iBAAiB,CAACkB,QAAQ,CAACN,MAAMZ,iBAAiB,CAAA;QAC7Ea,MAAOI,CAAAA,iBAAiB,GACtBJ,MAAOC,CAAAA,aAAa,IACpBD,MAAOE,CAAAA,eAAe,IACtBF,MAAOG,CAAAA,OAAO,IACdN,uBAAwBX,CAAAA,UAAU,KAAKa,KAAMb,CAAAA,UAAU,IACvDW,uBAAwBH,CAAAA,YAAY,KAAKK,KAAAA,CAAML,YAAY;AAC/D;IACA,IAAIM,MAAAA,CAAOC,aAAa,EAAE;QACxBJ,uBAAwBlB,CAAAA,WAAW,GAAGoB,KAAAA,CAAMpB,WAAW;QACvDkB,uBAAwBjB,CAAAA,gBAAgB,GAAGmB,KAAAA,CAAMnB,gBAAgB;QACjEiB,uBAAwBhB,CAAAA,wBAAwB,GAAGkB,KAAAA,CAAMlB,wBAAwB;QACjFgB,uBAAwBf,CAAAA,mBAAmB,GAAGiB,KAAAA,CAAMjB,mBAAmB;QACvEe,uBAAwBb,CAAAA,WAAW,GAAGe,KAAAA,CAAMf,WAAW;QACvDa,uBAAwBZ,CAAAA,UAAU,GAAGc,KAAAA,CAAMd,UAAU;AACvD;IACA,IAAIe,MAAAA,CAAOE,eAAe,EAAE;QAC1BL,uBAAwBd,CAAAA,WAAW,GAAGgB,KAAAA,CAAMhB,WAAW;AACzD;IACA,IAAIiB,MAAAA,CAAOG,OAAO,EAAE;QAClBN,uBAAwBF,CAAAA,iBAAiB,GAAGI,KAAAA,CAAMJ,iBAAiB;AACnEE,QAAAA,uBAAAA,CAAwBP,QAAQ,CAACgB,GAAG,CAACP,MAAMT,QAAQ,CAAA;AACnDO,QAAAA,uBAAAA,CAAwBL,UAAU,CAACc,GAAG,CAACP,MAAMP,UAAU,CAAA;AACvDK,QAAAA,uBAAAA,CAAwBV,iBAAiB,CAACmB,GAAG,CAACP,MAAMZ,iBAAiB,CAAA;AACvE;IACA,IAAIa,MAAAA,CAAOI,iBAAiB,EAAE;QAC5BP,uBAAwBX,CAAAA,UAAU,GAAGa,KAAAA,CAAMb,UAAU;QACrDW,uBAAwBH,CAAAA,YAAY,GAAGK,KAAAA,CAAML,YAAY;AAC3D;IACA,OAAOM,MAAAA;AACT;AAEA,iBACO,SAASO,kBAAAA,CACdC,KAA4B,EAC5BC,QAAqB,EACrBC,OAAoB,EACpBC,UAAuB,EACvBC,QAAqB,EAAA;IAErB,MAAMC,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,sBAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;AAACF,QAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA,CAAA;AAAWJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,QAAA,CAAA;AAAWL,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA;KAAU,EAC/E,WAAA;AACE,QAAA,IAAI,CAACE,EAAE,CAACC,EAAE,GAAGP,GAAGQ,MAAM,CAACR,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACC,MAAM,EAAE,IAAI,CAACC,QAAQ,CAAA,CAAA;QACxD,IAAI,CAACL,EAAE,CAACM,EAAE,GAAGZ,EAAGa,CAAAA,GAAG,CAACb,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACC,MAAM,EAAE,IAAI,CAACC,QAAQ,CAAA,EAAG,IAAI,CAACG,MAAM,CAAA;AACnE,QAAA,IAAI,CAACR,EAAE,CAACS,EAAE,GAAGf,EAAAA,CAAGgB,IAAI,CAAChB,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACV,EAAE,EAAE,IAAI,CAACA,EAAE,GAAGP,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACL,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,CAAA,CAAA;AAC7E,QAAA,IAAI,CAACN,EAAE,CAACY,EAAE,GAAGlB,EAAAA,CAAGgB,IAAI,CAAChB,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,IAAI,CAACA,MAAM,GAAGnB,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,CAAA,CAAA;AACrF,QAAA,IAAI,CAACK,GAAG,CAACpB,EAAAA,CAAGqB,WAAW,CAAC,IAAI,CAACN,EAAE,EAAE,IAAI,CAACI,MAAM,CAAG,EAAA,WAAA;AAC7C,YAAA,IAAI,CAACG,OAAO,CAACtB,EAAGK,CAAAA,KAAK,CAAC,EAAC,CAAA,CAAA;AACzB,SAAA,CAAA;AACA,QAAA,IAAI,CAACC,EAAE,CAACiB,EAAE,GAAGvB,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACG,EAAE,EAAE,IAAI,CAACM,EAAE,CAAA;AACpC,QAAA,IAAI,CAACZ,EAAE,CAACkB,EAAE,GAAGxB,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACb,EAAE,EAAE,IAAI,CAACM,EAAE,CAAA;QACpC,IAAI,CAACI,OAAO,CAAC,IAAI,CAACI,OAAO,CAAC1B,GAAG2B,QAAQ,CAAC,IAAI,CAACJ,EAAE,EAAE,CAAI,CAAA,EAAA,IAAI,CAACC,EAAE,EAAE,IAAI,CAACD,EAAE,CAAA,CAAA;AACrE,KAAA,CAAA;AAEF,IAAA,OAAO5B,KAAK,CAACO,QAAAA,CAAS,CAACN,QAAAA,EAAUC,SAASC,UAAYC,EAAAA,QAAAA,CAAAA;AACxD;AAEA,iBACO,SAAS6B,kBAAAA,CACdjC,KAA4B,EAC5BkC,QAAqB,EACrBC,KAAkB,EAClBC,KAAkB,EAClBC,MAAmB,EAAA;IAEnB,MAAMhC,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,sBAAA;AACjB,IAAA,MAAM+B,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;IACzCA,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,GAAA,CAAA;AAAMJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,KAAA;KAAO,EAAE,WAAA;QAClE,IAAI,CAACE,EAAE,CAAC6B,YAAY,GAAG,IAAI,CAACC,MAAM,CAACtE,WAAW;AAC9C,QAAA,IAAI,CAACwC,EAAE,CAAC+B,SAAS,GAAGrC,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAE,IAAI,CAACsE,MAAM,CAACrE,gBAAgB,CAAA;QAChF,IAAI,CAACuC,EAAE,CAACgC,QAAQ,GAAGtC,GAAGuC,SAAS,CAAC,IAAI,CAACC,CAAC,CAAA;AACtC,QAAA,IAAI,CAAClC,EAAE,CAACmC,QAAQ,GAAGzC,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAACyB,QAAQ,EAAE,IAAI,CAACI,GAAG,CAAA;QACjD,IAAI,CAACpC,EAAE,CAACqC,CAAC,GAAG3C,GAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA;QAC5B,IAAI,CAAClC,EAAE,CAACsC,EAAE,GAAGC,oBAAqB,CAAA,IAAI,EAAE,IAAI,CAACV,YAAY,EAAE,IAAI,CAACE,SAAS,EAAE,IAAI,CAACI,QAAQ,EAAE,IAAI,CAACE,CAAC,CAAA;AAChG,QAAA,IAAI,CAACrB,OAAO,CAACtB,EAAAA,CAAG8C,kBAAkB,CAACd,MAAQ,EAAA,IAAI,CAACY,EAAE,EAAE,CAAA,CAAA,CAAGG,GAAG,CAAA;AAC5D,KAAA,CAAA;AACA,IAAA,OAAOpD,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAUC,KAAOC,EAAAA,KAAAA,CAAAA;AAC1C;AAEA,iBACO,SAASiB,mBAAAA,CACdrD,KAA4B,EAC5BsD,yBAAsC,EACtCC,EAAe,EAAA;IAEf,MAAMlD,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,uBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,0BAAA,CAAA;AAA6BL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QACvE,IAAI,CAACC,EAAE,CAAC6C,KAAK,GAAGnD,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGI,IAAI,CAAC5C,cAAc,CAAC,CAAA,CAAE,EAAEA,cAAc,CAAC,EAAE,EAAEA,cAAc,CAAC,CAAA,CAAE,CAAG,EAAA,IAAA,CAAA;QACzF,IAAI,CAAC8C,EAAE,CAAC8C,KAAK,GAAGpD,EAAGqD,CAAAA,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAACtD,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACxF,wBAAwB,CAAA,CAAA,CAAA;AAC1E,QAAA,IAAI,CAACsD,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkC,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;AAC5C,KAAA,CAAA;AACA,IAAA,OAAOzD,KAAK,CAACO,QAAS,CAAA,CAAC+C,yBAA2BC,EAAAA,EAAAA,CAAAA;AACpD;AAEA,iBACO,SAASO,aAAc9D,CAAAA,KAA4B,EAAE+D,SAAsB,EAAA;IAChF,MAAM1D,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,iBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,UAAA;KAAY,EAAE,WAAA;QACxC,IAAI,CAACiB,OAAO,CAACtB,EAAGiB,CAAAA,GAAG,CAAC,CAAA,IAAK,EAAA,GAAK0C,IAAKC,CAAAA,EAAE,CAAD,EAAI5D,GAAGyB,GAAG,CAAC,CAAGzB,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACwB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAA,CAAA,CAAA,CAAA;AACvF,KAAA,CAAA;IACA,OAAO9C,KAAK,CAACO,QAAAA,CAAS,CAACwD,SAAAA,CAAAA;AACzB;AAEA,iBACO,SAASG,cAAAA,CACdlE,KAA4B,EAC5BmE,oBAAiC,EACjCZ,EAAe,EAAA;IAEf,MAAMlD,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,kBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,qBAAA,CAAA;AAAwBL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QAClE,IAAI,CAACC,EAAE,CAAC6C,KAAK,GAAGnD,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGI,IAAI,CAAC3C,SAAY,CAAA,EAAA,IAAA,CAAA;QAC3C,IAAI,CAAC6C,EAAE,CAAC8C,KAAK,GAAGpD,EAAGqD,CAAAA,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAACtD,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACvF,mBAAmB,CAAA,CAAA,CAAA;AACrE,QAAA,IAAI,CAACqD,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkC,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;AAC5C,KAAA,CAAA;AACA,IAAA,OAAOzD,KAAK,CAACO,QAAS,CAAA,CAAC4D,oBAAsBZ,EAAAA,EAAAA,CAAAA;AAC/C;AAEA,iBACO,SAASa,QAAAA,CAASpE,KAA4B,EAAEqE,YAAyB,EAAEN,SAAsB,EAAA;IACtG,MAAM1D,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,YAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA,CAAA;AAAML,QAAAA,EAAAA,CAAGK,KAAK,CAAC,UAAA;KAAY,EAAE,WAAA;AACvD,QAAA,IAAI,CAACC,EAAE,CAAC2D,EAAE,GAAGjE,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACiD,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA;QAClC,IAAI,CAAC5D,EAAE,CAAC6D,CAAC,GAAG,KAAK,CAAA,GAAIR,IAAKC,CAAAA,EAAE,CAAD;QAC3B,IAAI,CAACtD,EAAE,CAAC8D,CAAC,GAAGpE,EAAGuD,CAAAA,GAAG,CAACvD,EAAAA,CAAGS,GAAG,CAAC,GAAG,IAAI,CAACwD,EAAE,CAAGjE,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,CAAA,EAAG,IAAI,CAACwC,EAAE,CAAA,CAAA;AACxD,QAAA,IAAI,CAAC3D,EAAE,CAAC+D,CAAC,GAAGrE,EAAAA,CAAGyB,GAAG,CAAC,CAAA,EAAGzB,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACwB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAA,CAAA;AACzD,QAAA,IAAI,CAACnC,EAAE,CAACgE,CAAC,GAAGtE,EAAAA,CAAGuE,GAAG,CAACvE,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGyB,GAAG,CAAC,CAAA,EAAG,IAAI,CAACwC,EAAE,CAAA,EAAGjE,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACiD,CAAC,EAAE,IAAI,CAACzB,QAAQ,EAAE,CAAK,CAAA,CAAA,EAAA,GAAA,CAAA;QACjF,IAAI,CAACnB,OAAO,CAACtB,EAAAA,CAAGuD,GAAG,CAACvD,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkD,CAAC,EAAE,IAAI,CAACC,CAAC,EAAE,IAAI,CAACC,CAAC,CAAA,EAAG,IAAI,CAACC,CAAC,CAAA,CAAA;AAC5D,KAAA,CAAA;AACA,IAAA,OAAO3E,KAAK,CAACO,QAAS,CAAA,CAAC8D,YAAcN,EAAAA,SAAAA,CAAAA;AACvC;AAEA,iBACO,SAASc,aAAAA,CACd7E,KAA4B,EAC5BmE,oBAAiC,EACjCZ,EAAe,EAAA;IAEf,MAAMlD,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,iBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,qBAAA,CAAA;AAAwBL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QAClE,IAAI,CAACC,EAAE,CAAC6C,KAAK,GAAGnD,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGI,IAAI,CAAC1C,oBAAuB,CAAA,EAAA,IAAA,CAAA;QACtD,IAAI,CAAC4C,EAAE,CAAC8C,KAAK,GAAGpD,EAAGqD,CAAAA,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAACtD,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACvF,mBAAmB,CAAA,CAAA,CAAA;AACrE,QAAA,IAAI,CAACqD,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkC,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;AAC5C,KAAA,CAAA;AACA,IAAA,OAAOzD,KAAK,CAACO,QAAS,CAAA,CAAC4D,oBAAsBZ,EAAAA,EAAAA,CAAAA;AAC/C;AAEA,iBACO,SAASuB,eACd9E,CAAAA,KAA4B,EAC5B+E,uBAAoC,EACpCC,gBAA6B,EAC7BzB,EAAe,EAAA;IAEf,MAAMlD,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,mBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,QAAA,CAAA;AAAWL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,OAAA,CAAA;AAAUL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QACxE,IAAI,CAACC,EAAE,CAAC6C,KAAK,GAAGnD,EAAGiB,CAAAA,GAAG,CACpBjB,EAAAA,CAAGI,IAAI,CAACzC,sBAAsB,CAAC,CAAA,CAAE,EAAEA,sBAAsB,CAAC,EAAE,EAAEA,sBAAsB,CAAC,CAAA,CAAE,CACvF,EAAA,IAAA,CAAA;AAEF,QAAA,IAAI,CAAC2C,EAAE,CAAC8C,KAAK,GAAGpD,EAAG4E,CAAAA,GAAG,CAAC,CAAA,EAAG5E,EAAGS,CAAAA,GAAG,CAAC,CAAA,EAAGT,GAAGuD,GAAG,CAACvD,EAAG6E,CAAAA,GAAG,CAAC7E,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAAC+C,CAAC,EAAE,IAAI,CAAC9C,MAAM,CAAI,CAAA,EAAA,IAAI,CAACoE,KAAK,CAAA,CAAA,CAAA;AAC1F,QAAA,IAAI,CAACxD,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkC,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;AAC5C,KAAA,CAAA;AACA,IAAA,OAAOzD,KAAK,CAACO,QAAS,CAAA,CAACwE,yBAAyBC,gBAAkBzB,EAAAA,EAAAA,CAAAA;AACpE;AAEA,iBACO,SAAS6B,WACdpF,KAA4B,EAC5BkC,QAAqB,EACrBmD,QAAqB,EACrBC,SAAsB,EACtBC,OAAoB,EACpBC,mBAAgC,EAChCC,qBAAkC,EAClCC,aAAa,IAAI,EAAA;IAEjB,MAAMrF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,cAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA,CAAA;AAAWJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,SAAA,CAAA;AAAYJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,QAAA;KAAU,EAC7E,WAAA;AACE,QAAA,MAAMiF,QAAW,GAAA,EAAA;AACjB,QAAA,IAAI,CAAChF,EAAE,CAACiF,KAAK,GAAGvF,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;AACxB,QAAA,IAAI,CAACE,EAAE,CAACkF,GAAG,GAAG9F,kBACZ,CAAA,IAAI,EACJM,EAAAA,CAAGI,IAAI,CAAC,CACRJ,CAAAA,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAE,IAAI,CAACsE,MAAM,CAACrE,gBAAgB,CAAA,EAC5D,IAAI,CAAC0H,MAAM,EACX,IAAI,CAACC,OAAO,CAAA;QAEd,IAAI,CAACtE,GAAG,CAACpB,EAAG2B,CAAAA,QAAQ,CAAC,IAAI,CAAC6D,GAAG,EAAE,CAAI,CAAA,EAAA,WAAA;AACjC,YAAA,IAAI,CAAClE,OAAO,CAACtB,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA,CAAA;AACvB,SAAA,CAAA;AACA,QAAA,IAAIiF,UAAY,EAAA;YACd,IAAI,CAAC/E,EAAE,CAACgE,CAAC,GAAG5E,mBAAmB,IAAI,EAAEM,EAAGI,CAAAA,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAACgC,MAAM,CAACtE,WAAW,EAAE,IAAI,CAAC2H,MAAM,EAAE,IAAI,CAACC,OAAO,CAAA;YACnG,IAAI,CAACtE,GAAG,CAACpB,EAAGqB,CAAAA,WAAW,CAAC,IAAI,CAACiD,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,gBAAA,IAAI,CAACkB,GAAG,GAAGxF,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACH,GAAG,EAAE,IAAI,CAAClB,CAAC,CAAA;AACpC,aAAA,CAAA;AACF;QACA,IAAI,CAAClD,GAAG,CAACpB,EAAG4F,CAAAA,gBAAgB,CAAC,IAAI,CAACC,MAAM,EAAE,CAAI,CAAA,EAAA,WAAA;AAC5C,YAAA,IAAI,CAACL,GAAG,GAAGxF,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACH,GAAG,EAAE,IAAI,CAACK,MAAM,CAAA;AACzC,SAAA,CAAA;QACA,IAAI,CAACvF,EAAE,CAACwF,EAAE,GAAG9F,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACiC,GAAG,EAAEF,QAAAA,CAAAA;QAC9B,IAAI,CAAChF,EAAE,CAACkC,CAAC,GAAGxC,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgE,MAAM,EAAEzF,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACI,EAAE,EAAE,GAAA,CAAA,CAAA;QAC9D,IAAI,CAACxF,EAAE,CAACyF,YAAY,GAAG/F,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACmB,MAAM,CAACzD,UAAU,CAACoE,GAAG,EAAE,IAAI,CAACX,MAAM,CAACzD,UAAU,CAACwF,CAAC,CAAA;AAClF,QAAA,IAAI,CAAC7D,EAAE,CAAC0F,YAAY,GAAGhG,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;QAC/B,IAAI,CAAC6F,IAAI,CAACjG,EAAAA,CAAGkG,GAAG,CAAC,GAAA,CAAA,EAAM,GAAGZ,QAAU,EAAA,WAAA;AAClC,YAAA,IAAI,CAAChF,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;AAC7D,YAAA,IAAI,CAACwC,EAAE,CAAC6F,UAAU,GAAGnG,EAAAA,CAAGyB,GAAG,CACzBuB,mBAAoB,CAAA,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CAAA,EACtEK,cAAe,CAAA,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,EAC5DiB,eAAgB,CAAA,IAAI,EAAE,IAAI,CAACrC,MAAM,CAACjE,WAAW,EAAE,IAAI,CAACiE,MAAM,CAAChE,UAAU,EAAE,IAAI,CAACoF,CAAC,CAAA,EAC7EgB,aAAc,CAAA,IAAI,EAAE,IAAI,CAACpC,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE7D,YAAA,IAAI,CAACwC,YAAY,GAAGhG,GAAGyB,GAAG,CAAC,IAAI,CAACuE,YAAY,EAAEhG,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACkF,UAAU,EAAE,IAAI,CAACL,EAAE,CAAA,CAAA;YAC7E,IAAI,CAACxF,EAAE,CAACiB,EAAE,GAAGK,kBAAmB,CAAA,IAAI,EAAE,IAAI,CAACQ,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE,IAAI,CAACJ,MAAM,CAAC3D,QAAQ,EAAE0G,mBAAAA,CAAAA;AACjF,YAAA,IAAI,CAAC7E,EAAE,CAAC8F,CAAC,GAAGC,UAAAA,CAAW,IAAI,EAAE,IAAI,CAACjE,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE,IAAI,CAACkD,OAAO,CAAA;AAC9D,YAAA,IAAI,CAACpF,EAAE,CAACkB,EAAE,GAAGxB,EAAAA,CAAGqD,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAAC,IAAI,CAAC0C,YAAY,CAAA,CAAA;YAE5C,IAAI,CAAC1F,EAAE,CAACgG,YAAY,GAAGtG,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACM,EAAE,EAAE,IAAI,CAAC6E,CAAC,EAAE,IAAI,CAAC5E,EAAE,EAAE,IAAI,CAACsE,EAAE,EAAE,IAAI,CAACC,YAAY,CAAA;AAClF,YAAA,IAAI,CAACR,KAAK,GAAGvF,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAAC8D,KAAK,EAAE,IAAI,CAACe,YAAY,CAAA;AAEjD,YAAA,IAAI,CAAChG,EAAE,CAACjB,eAAe,GAAGkH,kBAAmB,CAAA,IAAI,EAAE,IAAI,CAACnE,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE4C,qBAAAA,CAAAA;YACxE,IAAI,CAACG,KAAK,GAAGvF,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC8D,KAAK,EAAEvF,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC5B,eAAe,EAAE,IAAI,CAACmC,EAAE,EAAE,IAAI,CAACsE,EAAE,EAAE,IAAI,CAACC,YAAY,CAAA,CAAA;AAEhG,YAAA,IAAI,CAACvD,CAAC,GAAGxC,GAAGyB,GAAG,CAAC,IAAI,CAACe,CAAC,EAAExC,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACI,EAAE,CAAA,CAAA;AACtD,SAAA,CAAA;AACA,QAAA,IAAI,CAACxE,OAAO,CAAC,IAAI,CAACiE,KAAK,CAAA;AACzB,KAAA,CAAA;AAEF,IAAA,OAAO5F,KAAK,CAACO,QAAAA,CAAS,CAAC2B,QAAAA,EAAUmD,UAAUC,SAAWC,EAAAA,OAAAA,CAAAA;AACxD;AAEA,iBACO,SAASqB,kBACd5G,CAAAA,KAA4B,EAC5BkC,QAAqB,EACrBC,KAAkB,EAClBsD,qBAAkC,EAAA;IAElC,MAAMpF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,sBAAA;AACjB,IAAA,MAAM+B,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;IACzCA,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;AAClD,QAAA,IAAI,CAACE,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;AAC7D,QAAA,IAAI,CAACwC,EAAE,CAACkG,OAAO,GAAGxG,EAAGyB,CAAAA,GAAG,CACtBuB,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CACtEK,EAAAA,cAAAA,CAAe,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE9D,QAAA,IAAI,CAAClD,EAAE,CAACmG,WAAW,GAAGzG,EAAAA,CAAGa,GAAG,CAACb,EAAAA,CAAGuC,SAAS,CAAC,IAAI,CAACC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAAC3D,QAAQ,CAAA;AACvE,QAAA,IAAI,CAAC6B,EAAE,CAACsC,EAAE,GAAG5C,EAAAA,CAAG0G,IAAI,CAClB1G,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACwF,WAAW,EAAE,GAAA,CAAA,EAAM,GACtCzG,CAAAA,EAAAA,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACpB,MAAM,CAACrE,gBAAgB,CAAA,CAAA;AAE7C,QAAA,IAAI,CAACuC,EAAE,CAACqG,KAAK,GAAG3G,EAAG8C,CAAAA,kBAAkB,CAACsC,qBAAAA,EAAuB,IAAI,CAACxC,EAAE,EAAE,GAAGG,GAAG;AAC5E,QAAA,IAAI,CAACzB,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC0F,KAAK,EAAE,IAAI,CAACH,OAAO,CAAA,CAAA;AAC9C,KAAA,CAAA;AACA,IAAA,OAAO7G,KAAK,CAACO,QAAS,CAAA,CAAC2B,QAAUC,EAAAA,KAAAA,CAAAA;AACnC;AAEA,iBACO,SAAS8E,uBAAAA,CACdjH,KAA4B,EAC5BkC,QAAqB,EACrBgF,UAAuB,EACvBC,aAA0B,EAC1B3B,mBAAgC,EAAA;AAEhC,IAAA,MAAM4B,WAAc,GAAA,EAAA;AACpB,IAAA,MAAMzB,QAAW,GAAA,EAAA;IACjB,MAAMtF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,2BAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,aAAA;KAAe,EAAE,WAAA;AACjF,QAAA,MAAM4G,eAAe,CAAK,IAAA,CAAIrD,GAAAA,IAAAA,CAAKC,EAAE,CAAD;AACpC,QAAA,MAAMqD,gBAAmB,GAAC,CAAItD,GAAAA,IAAAA,CAAKC,EAAE,GAAImD,WAAAA;AACzC,QAAA,IAAI,CAACzG,EAAE,CAAC4G,GAAG,GAAGlH,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;AACtB,QAAA,IAAI,CAACE,EAAE,CAAC6G,IAAI,GAAGnH,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;QACvB,IAAI,CAAC6F,IAAI,CAACjG,EAAAA,CAAGkG,GAAG,CAAC,GAAA,CAAA,EAAM,GAAGa,WAAa,EAAA,WAAA;AACrC,YAAA,IAAI,CAACzG,EAAE,CAACoF,OAAO,GAAG,IAAI,CAAC0B,oBAAoB,CAACC,EAAE,CAAC,IAAI,CAACC,CAAC,EAAEC,GAAG;AAC1D,YAAA,IAAI,CAACjH,EAAE,CAACkF,GAAG,GAAG9F,kBACZ,CAAA,IAAI,EACJM,EAAAA,CAAGI,IAAI,CAAC,CACRJ,CAAAA,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAE,IAAI,CAACsE,MAAM,CAACrE,gBAAgB,CAAA,EAC5D,IAAI,CAACyJ,WAAW,EAChB,IAAI,CAAC9B,OAAO,CAAA;YAEd,IAAI,CAACpF,EAAE,CAACgE,CAAC,GAAG5E,mBACV,IAAI,EACJM,EAAGI,CAAAA,IAAI,CAAC,CAAA,CAAA,EACR,IAAI,CAACgC,MAAM,CAACtE,WAAW,EACvB,IAAI,CAAC0J,WAAW,EAChB,IAAI,CAAC9B,OAAO,CAAA;YAEd,IAAI,CAACtE,GAAG,CAACpB,EAAGqB,CAAAA,WAAW,CAAC,IAAI,CAACiD,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,gBAAA,IAAI,CAACkB,GAAG,GAAGxF,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACH,GAAG,EAAE,IAAI,CAAClB,CAAC,CAAA;AACpC,aAAA,CAAA;YACA,IAAI,CAAChE,EAAE,CAACwF,EAAE,GAAG9F,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACiC,GAAG,EAAEF,QAAAA,CAAAA;YAC9B,IAAI,CAAChF,EAAE,CAACkC,CAAC,GAAGxC,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC+F,WAAW,EAAExH,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACI,EAAE,EAAE,GAAA,CAAA,CAAA;AACnE,YAAA,IAAI,CAACxF,EAAE,CAAC0F,YAAY,GAAGhG,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;YAC/B,IAAI,CAAC6F,IAAI,CAACjG,EAAAA,CAAGkG,GAAG,CAAC,GAAA,CAAA,EAAM,GAAGZ,QAAU,EAAA,WAAA;AAClC,gBAAA,IAAI,CAAChF,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;AAC7D,gBAAA,IAAI,CAACwC,EAAE,CAACkG,OAAO,GAAGxG,EAAGyB,CAAAA,GAAG,CACtBuB,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CACtEK,EAAAA,cAAAA,CAAe,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE9D,gBAAA,IAAI,CAAClD,EAAE,CAACmH,OAAO,GAAGzH,GAAGyB,GAAG,CACtBgD,eAAgB,CAAA,IAAI,EAAE,IAAI,CAACrC,MAAM,CAACjE,WAAW,EAAE,IAAI,CAACiE,MAAM,CAAChE,UAAU,EAAE,IAAI,CAACoF,CAAC,GAC7EgB,aAAc,CAAA,IAAI,EAAE,IAAI,CAACpC,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE7D,gBAAA,IAAI,CAAClD,EAAE,CAACoH,OAAO,GAAG1H,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC+E,OAAO,EAAE,IAAI,CAACiB,OAAO,CAAA;AACnD,gBAAA,IAAI,CAACzB,YAAY,GAAGhG,GAAGyB,GAAG,CAAC,IAAI,CAACuE,YAAY,EAAEhG,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyG,OAAO,EAAE,IAAI,CAAC5B,EAAE,CAAA,CAAA;AAC1E,gBAAA,IAAI,CAACxF,EAAE,CAACiB,EAAE,GAAGK,kBAAAA,CAAmB,IAAI,EAAE,IAAI,CAACQ,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE,IAAI,CAAC/D,QAAQ,EAAE0G,mBAAAA,CAAAA;AAC1E,gBAAA,IAAI,CAAC7E,EAAE,CAAC8F,CAAC,GAAGC,UAAAA,CAAW,IAAI,EAAE,IAAI,CAACjE,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE,IAAI,CAACkD,OAAO,CAAA;AAC9D,gBAAA,IAAI,CAACpF,EAAE,CAACkB,EAAE,GAAGxB,EAAAA,CAAGqD,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAAC,IAAI,CAAC0C,YAAY,CAAA,CAAA;AAC5C,gBAAA,IAAI,CAACkB,GAAG,GAAGlH,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACyF,GAAG,EAAElH,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACM,EAAE,EAAE,IAAI,CAAC6E,CAAC,EAAE,IAAI,CAAC5E,EAAE,EAAEwF,YAAAA,EAAc,IAAI,CAAClB,EAAE,CAAA,CAAA;gBAClF,IAAI,CAACqB,IAAI,GAAGnH,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC0F,IAAI,EAAEnH,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACO,EAAE,EAAE,IAAI,CAACgF,OAAO,EAAEQ,YAAAA,EAAc,IAAI,CAAClB,EAAE,CAAA,CAAA;AACjF,gBAAA,IAAI,CAACtD,CAAC,GAAGxC,GAAGyB,GAAG,CAAC,IAAI,CAACe,CAAC,EAAExC,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACI,EAAE,CAAA,CAAA;AACtD,aAAA,CAAA;AACF,SAAA,CAAA;QACA,IAAI,CAACoB,GAAG,GAAGlH,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACiG,GAAG,EAAED,gBAAAA,CAAAA;QAC5B,IAAI,CAACE,IAAI,GAAGnH,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkG,IAAI,EAAEF,gBAAAA,CAAAA;AAC9B,QAAA,IAAI,CAAC3F,OAAO,CAACtB,GAAGuD,GAAG,CAAC,IAAI,CAAC2D,GAAG,EAAElH,EAAGS,CAAAA,GAAG,CAACT,EAAGI,CAAAA,IAAI,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC+G,IAAI,CAAA,CAAA,CAAA;AAC5D,KAAA,CAAA;AACA,IAAA,OAAOxH,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAUgF,UAAYC,EAAAA,aAAAA,CAAAA;AAC/C;AAEA,iBACO,SAAST,UACd1G,CAAAA,KAA4B,EAC5BkC,QAAqB,EACrBC,KAAkB,EAClBmD,SAAsB,EAAA;IAEtB,MAAMjF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,cAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,GAAA,CAAA;AAAMJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,SAAA;KAAW,EAAE,WAAA;AACtE,QAAA,IAAI,CAACE,EAAE,CAACmC,QAAQ,GAAGzC,GAAGa,GAAG,CAAC,IAAI,CAACuB,MAAM,CAAC3D,QAAQ,EAAE,IAAI,CAACiH,OAAO,CAAA;AAC5D,QAAA,IAAI,CAACpF,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;QAC7D,IAAI,CAACwC,EAAE,CAACqH,QAAQ,GAAG3H,EAAGiB,CAAAA,GAAG,CACvB+B,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CACtEC,EAAAA,aAAAA,CAAc,IAAI,EAAE,IAAI,CAAChB,QAAQ,CAAA,CAAA;AAEnC,QAAA,IAAI,CAACnC,EAAE,CAACsH,GAAG,GAAG5H,EAAGiB,CAAAA,GAAG,CAClB4C,cAAAA,CAAe,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAC5DO,EAAAA,QAAAA,CAAS,IAAI,EAAE,IAAI,CAAC3B,MAAM,CAAClE,WAAW,EAAE,IAAI,CAACuE,QAAQ,CAAA,CAAA;AAEvD,QAAA,IAAI,CAACnB,OAAO,CAACtB,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACkG,QAAQ,EAAE,IAAI,CAACC,GAAG,CAAA,CAAA;AAC7C,KAAA,CAAA;AACA,IAAA,OAAOjI,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAUC,KAAOmD,EAAAA,SAAAA,CAAAA;AAC1C;AAEA,iBACO,SAAS7F,aACdO,CAAAA,KAA4B,EAC5BkC,QAAqB,EACrBgG,IAAiB,EACjBC,IAAiB,EAAA;IAEjB,MAAM9H,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,iBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,IAAA,CAAA;AAAOJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,IAAA;KAAM,EAAE,WAAA;AAClE,QAAA,IAAI,CAACE,EAAE,CAACoC,GAAG,GAAG1C,GAAGuC,SAAS,CAACvC,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACsH,EAAE,EAAE,IAAI,CAACC,EAAE,CAAA,CAAA;AAClD,QAAA,IAAI,CAAC1H,EAAE,CAAC2H,QAAQ,GAAGjI,GAAGQ,MAAM,CAACR,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACsH,EAAE,EAAE,IAAI,CAACC,EAAE,CAAA,CAAA;QACpD,IAAI,CAAC1H,EAAE,CAACwF,EAAE,GAAG9F,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAAC0E,QAAQ,EAAE1K,qBAAAA,CAAAA;AACnC,QAAA,IAAI,CAAC+C,EAAE,CAAC4H,GAAG,GAAGlI,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;QACtB,IAAI,CAACE,EAAE,CAACkC,CAAC,GAAGxC,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACuG,EAAE,EAAEhI,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyB,GAAG,EAAE,IAAI,CAACoD,EAAE,EAAE,GAAA,CAAA,CAAA;QACtD,IAAI,CAACG,IAAI,CAACjG,EAAAA,CAAGkG,GAAG,CAAC,GAAA,CAAA,EAAM,GAAG3I,qBAAuB,EAAA,WAAA;AAC/C,YAAA,IAAI,CAAC+C,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;AAC7D,YAAA,IAAI,CAACwC,EAAE,CAAC+F,UAAU,GAAGrG,EAAGyB,CAAAA,GAAG,CACzBuB,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CACtEK,EAAAA,cAAAA,CAAe,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE9D,YAAA,IAAI,CAAClD,EAAE,CAAC6H,UAAU,GAAGnI,GAAGyB,GAAG,CACzBgD,eAAgB,CAAA,IAAI,EAAE,IAAI,CAACrC,MAAM,CAACjE,WAAW,EAAE,IAAI,CAACiE,MAAM,CAAChE,UAAU,EAAE,IAAI,CAACoF,CAAC,GAC7EgB,aAAc,CAAA,IAAI,EAAE,IAAI,CAACpC,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE7D,YAAA,IAAI,CAAClD,EAAE,CAAC6F,UAAU,GAAGnG,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC4E,UAAU,EAAE,IAAI,CAAC8B,UAAU,CAAA;AAC5D,YAAA,IAAI,CAACD,GAAG,GAAGlI,GAAGyB,GAAG,CAAC,IAAI,CAACyG,GAAG,EAAElI,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACkF,UAAU,EAAE,IAAI,CAACL,EAAE,CAAA,CAAA;AAC3D,YAAA,IAAI,CAACtD,CAAC,GAAGxC,GAAGyB,GAAG,CAAC,IAAI,CAACe,CAAC,EAAExC,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyB,GAAG,EAAE,IAAI,CAACoD,EAAE,CAAA,CAAA;AAClD,SAAA,CAAA;QACA,IAAI,CAACxE,OAAO,CAACtB,EAAGqD,CAAAA,GAAG,CAACrD,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAAC4E,GAAG,CAAA,CAAA,CAAA;AACrC,KAAA,CAAA;AACA,IAAA,OAAOvI,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAUgG,IAAMC,EAAAA,IAAAA,CAAAA;AACzC;AAEA,iBACO,SAASjF,oBAAAA,CACdlD,KAA4B,EAC5ByI,aAA0B,EAC1BC,UAAuB,EACvBC,GAAgB,EAChBC,EAAe,EAAA;IAEf,MAAMvI,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,qBAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,cAAA,CAAA;AAAiBL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,WAAA,CAAA;AAAcL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,IAAA,CAAA;AAAOL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAChF,WAAA;AACE,QAAA,IAAI,CAACC,EAAE,CAACkI,CAAC,GAAGxI,EAAGgB,CAAAA,IAAI,CACjBhB,EAAAA,CAAG4E,GAAG,CACJ,CAAA,EACA5E,EAAGS,CAAAA,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACoB,SAAS,EAAE,IAAI,CAACA,SAAS,CAAGrC,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkB,YAAY,EAAE,IAAI,CAACA,YAAY,CAAA,CAAA,CAAA,CAAA;AAG9F,QAAA,IAAI,CAAC7B,EAAE,CAACmI,GAAG,GAAGzI,EAAGgB,CAAAA,IAAI,CACnBhB,EAAAA,CAAG4E,GAAG,CAAC,CAAA,EAAG5E,EAAGS,CAAAA,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAACA,CAAC,CAAG3C,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkB,YAAY,EAAE,IAAI,CAACA,YAAY,CAAA,CAAA,CAAA,CAAA;AAEtF,QAAA,IAAI,CAAC7B,EAAE,CAACoI,YAAY,GAAG1I,EAAAA,CAAGyB,GAAG,CAC3BzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAACA,CAAC,EAAE3C,EAAGS,CAAAA,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC0H,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,EAAG,KACxD3I,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACoB,SAAS,EAAE,IAAI,CAACA,SAAS,CAAA,CAAA;AAEvC,QAAA,IAAI,CAAC/B,EAAE,CAACgE,CAAC,GAAGtE,EAAAA,CAAG4E,GAAG,CAAC,CAAG5E,EAAAA,EAAAA,CAAGS,GAAG,CAACT,EAAGgB,CAAAA,IAAI,CAAC,IAAI,CAAC0H,YAAY,CAAG1I,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC0H,EAAE,EAAE,IAAI,CAAChG,CAAC,CAAA,CAAA,CAAA;AAC/E,QAAA,IAAI,CAACrC,EAAE,CAACsI,KAAK,GAAG5I,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC4B,SAAS,EAAE,IAAI,CAACM,CAAC,CAAA;AAC7C,QAAA,IAAI,CAACrC,EAAE,CAACuI,KAAK,GAAG7I,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgH,GAAG,EAAE,IAAI,CAACD,CAAC,CAAA;AACvC,QAAA,IAAI,CAAClI,EAAE,CAACwI,IAAI,GAAG9I,EAAAA,CAAGuD,GAAG,CAACvD,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC6D,CAAC,EAAE,IAAI,CAACsE,KAAK,CAAG5I,EAAAA,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACoI,KAAK,EAAE,IAAI,CAACD,KAAK,CAAA,CAAA;AAC/E,QAAA,IAAI,CAACtI,EAAE,CAACyI,GAAG,GAAG/I,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACkF,GAAG,EAAE,IAAI,CAACD,CAAC,CAAA;AACrC,QAAA,IAAI,CAAClH,OAAO,CAACtB,EAAAA,CAAG0G,IAAI,CAAC,IAAI,CAACoC,IAAI,EAAE,IAAI,CAACC,GAAG,CAAA,CAAA;AAC1C,KAAA,CAAA;AAEF,IAAA,OAAOpJ,KAAK,CAACO,QAAAA,CAAS,CAACkI,aAAAA,EAAeC,YAAYC,GAAKC,EAAAA,EAAAA,CAAAA;AACzD;AAEA,iBACO,SAASS,WAAYrJ,CAAAA,KAA4B,EAAEsF,SAAsB,EAAA;IAC9E,MAAMjF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,eAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGI,IAAI,CAAC,SAAA;KAAW,EAAE,WAAA;AACtC,QAAA,IAAI,CAACE,EAAE,CAACsC,EAAE,GAAG5C,EAAAA,CAAG0G,IAAI,CAAC1G,EAAGiJ,CAAAA,KAAK,CAAC,IAAI,CAACvD,OAAO,CAACwD,CAAC,EAAE,IAAI,CAACxD,OAAO,CAACyD,CAAC,CAAA,EAAGnJ,EAAGoJ,CAAAA,IAAI,CAAC,IAAI,CAAC1D,OAAO,CAAC2D,CAAC,CAAA,CAAA;AACrF,QAAA,IAAI,CAACzG,EAAE,GAAG5C,GAAGuD,GAAG,CAAC,IAAI,CAACX,EAAE,EAAE5C,EAAAA,CAAG0G,IAAI,CAAC,CAAA,GAAI/C,KAAKC,EAAE,EAAED,KAAKC,EAAE,CAAA,CAAA;AACtD,QAAA,IAAI,CAAChB,EAAE,GAAG5C,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACmB,EAAE,EAAE5C,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;AAClC,QAAA,IAAI,CAACpF,OAAO,CAAC,IAAI,CAACsB,EAAE,CAAA;AACtB,KAAA,CAAA;IACA,OAAOjD,KAAK,CAACO,QAAAA,CAAS,CAAC+E,SAAAA,CAAAA;AACzB;AAEA,iBACO,SAASqE,WAAY3J,CAAAA,KAA4B,EAAE4J,IAAiB,EAAA;IACzE,MAAMvJ,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,eAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA;KAAM,EAAE,WAAA;AACjC,QAAA,IAAI,CAACpG,EAAE,CAACkJ,KAAK,GAAGxJ,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGS,GAAG,CAAC,CAAA,EAAG,IAAI,CAACmC,EAAE,CAACyG,CAAC,CAAA,EAAG1F,KAAKC,EAAE,CAAA;QACpD,IAAI,CAACtD,EAAE,CAACmJ,GAAG,GAAGzJ,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGS,GAAG,CAACT,GAAGiB,GAAG,CAAC,IAAI,CAAC2B,EAAE,CAACuG,CAAC,EAAE,CAAA,CAAA,EAAI,CAAIxF,CAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA;QAC7D,IAAI,CAACtD,EAAE,CAAC6I,CAAC,GAAGnJ,EAAGiB,CAAAA,GAAG,CAACjB,EAAG0J,CAAAA,GAAG,CAAC,IAAI,CAACF,KAAK,CAAGxJ,EAAAA,EAAAA,CAAG2J,GAAG,CAAC,IAAI,CAACF,GAAG,CAAA,CAAA;QACtD,IAAI,CAACnJ,EAAE,CAAC4I,CAAC,GAAGlJ,EAAGiB,CAAAA,GAAG,CAACjB,EAAG0J,CAAAA,GAAG,CAAC,IAAI,CAACF,KAAK,CAAGxJ,EAAAA,EAAAA,CAAG0J,GAAG,CAAC,IAAI,CAACD,GAAG,CAAA,CAAA;QACtD,IAAI,CAACnJ,EAAE,CAAC+I,CAAC,GAAGrJ,GAAG2J,GAAG,CAAC,IAAI,CAACH,KAAK,CAAA;AAC7B,QAAA,IAAI,CAAClI,OAAO,CAACtB,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAAC+I,CAAC,EAAE,IAAI,CAACE,CAAC,EAAE,IAAI,CAACH,CAAC,CAAA,CAAA;AAC7C,KAAA,CAAA;IACA,OAAOvJ,KAAK,CAACO,QAAAA,CAAS,CAACqJ,IAAAA,CAAAA;AACzB;AAEA,iBACO,SAASK,oBACdjK,CAAAA,KAA4B,EAC5B4J,IAAiB,EACjBnB,aAA0B,EAC1BC,UAAuB,EAAA;IAEvB,MAAMrI,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,wBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA,CAAA;AAAO1G,QAAAA,EAAAA,CAAGK,KAAK,CAAC,cAAA,CAAA;AAAiBL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,WAAA;KAAa,EAAE,WAAA;QAClF,IAAI,CAACC,EAAE,CAACwI,IAAI,GAAG,IAAI,CAAClG,EAAE,CAACuG,CAAC;QACxB,IAAI,CAAC7I,EAAE,CAACyI,GAAG,GAAG,IAAI,CAACnG,EAAE,CAACyG,CAAC;AACvB,QAAA,IAAI,CAAC/I,EAAE,CAACkI,CAAC,GAAGxI,EAAGgB,CAAAA,IAAI,CACjBhB,EAAAA,CAAG4E,GAAG,CAAC,CAAA,EAAG5E,EAAGS,CAAAA,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACoB,SAAS,EAAE,IAAI,CAACA,SAAS,CAAGrC,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkB,YAAY,EAAE,IAAI,CAACA,YAAY,CAAA,CAAA,CAAA,CAAA;AAEtG,QAAA,IAAI,CAAC7B,EAAE,CAACmI,GAAG,GAAGzI,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACuH,CAAC,EAAE,IAAI,CAACO,GAAG,CAAA;AACrC,QAAA,IAAI,CAACzI,EAAE,CAACqC,CAAC,GAAG3C,EAAGgB,CAAAA,IAAI,CACjBhB,EAAAA,CAAG4E,GAAG,CAAC,CAAA,EAAG5E,EAAGyB,CAAAA,GAAG,CAACzB,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACwH,GAAG,EAAE,IAAI,CAACA,GAAG,CAAGzI,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkB,YAAY,EAAE,IAAI,CAACA,YAAY,CAAA,CAAA,CAAA,CAAA;AAE1F,QAAA,IAAI,CAAC7B,EAAE,CAACsI,KAAK,GAAG5I,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC4B,SAAS,EAAE,IAAI,CAACM,CAAC,CAAA;AAC7C,QAAA,IAAI,CAACrC,EAAE,CAACuI,KAAK,GAAG7I,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgH,GAAG,EAAE,IAAI,CAACD,CAAC,CAAA;AACvC,QAAA,IAAI,CAAClI,EAAE,CAACgE,CAAC,GAAGtE,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACmH,KAAK,EAAE5I,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC6H,IAAI,EAAE9I,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACoI,KAAK,EAAE,IAAI,CAACD,KAAK,CAAA,CAAA,CAAA;AAC9E,QAAA,IAAI,CAACtI,EAAE,CAACqI,EAAE,GAAG,IAAI,CAACjH,OAAO,CACvB1B,GAAG6J,KAAK,CAAC,IAAI,CAACvF,CAAC,EAAE,CAAA,CAAA,EACjBtE,EAAGK,CAAAA,KAAK,CAAC,CAAA,CAAA,EACTL,EAAGuD,CAAAA,GAAG,CACJvD,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACuH,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA,EAAGxI,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACwH,GAAG,EAAE,IAAI,CAACA,GAAG,CAAA,EAAGzI,GAAGiB,GAAG,CAAC,IAAI,CAACqD,CAAC,EAAE,IAAI,CAACA,CAAC,KACvFtE,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAAC2B,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA;QAG3B,IAAI,CAACqE,EAAE,GAAG3I,EAAG8J,CAAAA,KAAK,CAAC,IAAI,CAACnB,EAAE,EAAE,EAAI,EAAA,CAAA,CAAA;AAChC,QAAA,IAAI,CAACrH,OAAO,CAACtB,EAAAA,CAAG0G,IAAI,CAAC,IAAI,CAACiC,EAAE,EAAE,IAAI,CAAChG,CAAC,CAAA,CAAA;AACtC,KAAA,CAAA;AACA,IAAA,OAAOhD,KAAK,CAACO,QAAS,CAAA,CAACqJ,MAAMnB,aAAeC,EAAAA,UAAAA,CAAAA;AAC9C;AAEA,SAAS0B,QAAAA,CACPpK,KAA4B,EAC5BsF,SAAsB,EACtB4B,UAAuB,EACvBmD,wBAAqC,EACrCC,cAA2B,EAAA;IAE3B,MAAMjK,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,YAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;AAACF,QAAAA,EAAAA,CAAGI,IAAI,CAAC,SAAA,CAAA;AAAYJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGkK,IAAI,CAAC,sBAAA,CAAA;AAAyBlK,QAAAA,EAAAA,CAAGK,KAAK,CAAC,eAAA;KAAiB,EACrG,WAAA;QACE,IAAI,CAACC,EAAE,CAAC6J,cAAc,GAAGnK,GAAG2J,GAAG,CAAC,IAAI,CAACS,aAAa,CAAA;AAClD,QAAA,IAAI,CAAC9J,EAAE,CAACmC,QAAQ,GAAGzC,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAAC6E,OAAO,EAAE,IAAI,CAACjH,QAAQ,CAAA;AACrD,QAAA,IAAI,CAAC6B,EAAE,CAAC+J,SAAS,GAAGrK,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACqJ,oBAAoB,CAACvH,GAAG,EAAE,IAAI,CAACuH,oBAAoB,CAACnG,CAAC,CAAA;AACrF,QAAA,IAAI,CAAC/C,GAAG,CAACpB,EAAAA,CAAG2B,QAAQ,CAAC,IAAI,CAACc,QAAQ,EAAE,IAAI,CAAC0H,cAAc,CAAG,EAAA,WAAA;AACxD,YAAA,IAAI,CAAC7J,EAAE,CAACiK,MAAM,GAAGvK,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC0J,cAAc,EAAE,IAAI,CAAC1H,QAAQ,CAAA;AAC1D,YAAA,IAAI,CAACnC,EAAE,CAACkK,aAAa,GAAGxK,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGqD,GAAG,CAACrD,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACsJ,MAAM,EAAE,IAAU,CAAA,CAAA,EAAA,GAAA,CAAA;YACpE,IAAI,CAACjK,EAAE,CAACmK,QAAQ,GAAGzK,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGuD,GAAG,CAAC,GAAGvD,EAAGyB,CAAAA,GAAG,CAAC,IAAA,EAAMzB,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACsJ,MAAM,EAAE,GAAQ,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA;AAC7E,YAAA,IAAI,CAACF,SAAS,GAAGrK,GAAGiB,GAAG,CAAC,IAAI,CAACoJ,SAAS,EAAErK,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC+I,aAAa,EAAE,IAAI,CAACC,QAAQ,CAAA,CAAA;AAClF,SAAA,CAAA;AACA,QAAA,IAAI,CAACnJ,OAAO,CAAC,IAAI,CAAC+I,SAAS,CAAA;AAC7B,KAAA,CAAA;AAEF,IAAA,OAAO1K,KAAK,CAACO,QAAAA,CAAS,CAAC+E,SAAAA,EAAW4B,YAAYmD,wBAA0BC,EAAAA,cAAAA,CAAAA;AAC1E;AAEA,iBACO,SAASS,MACd/K,CAAAA,KAA4B,EAC5BkC,QAAqB,EACrB8I,UAAuB,EACvBC,gBAA6B,EAC7BX,cAA2B,EAC3B9E,mBAAgC,EAChC0F,aAA0B,EAAA;IAE1B,MAAM7K,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;AACjB,IAAA,MAAM+B,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;IACzCA,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;QAAWjC,EAAGkK,CAAAA,IAAI,CAAC,UAAA,CAAA,CAAYY,GAAG,EAAA;AAAI9K,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,eAAA;KAAiB,EAC7F,WAAA;AACE,QAAA,IAAI,CAACC,EAAE,CAACyC,GAAG,GAAG/C,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;QACtB,IAAI,CAACE,EAAE,CAACoF,OAAO,GAAG1F,GAAGuC,SAAS,CAAC,IAAI,CAACwI,QAAQ,CAAA;QAC5C,IAAI,CAAChI,GAAG,GAAG/C,EAAAA,CAAGyB,GAAG,CACf,IAAI,CAACsB,GAAG,EACR/C,EAAAA,CAAG8C,kBAAkB,CAAC+H,aAAAA,EAAe7B,YAAY,IAAI,EAAE,IAAI,CAACtD,OAAO,CAAG,EAAA,CAAA,CAAA,CAAG3C,GAAG,CAAA;QAE9E,IAAI,CAACzC,EAAE,CAAC0K,cAAc,GAAGtL,kBACvB,CAAA,IAAI,EACJM,EAAGI,CAAAA,IAAI,CAAC,CACR,CAAA,EAAA,IAAI,CAACgC,MAAM,CAACtE,WAAW,EACvBkC,EAAAA,CAAGI,IAAI,CAAC,CAAA,EAAGJ,GAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAEkC,GAAGiB,GAAG,CAACrD,cAAc,IAAI,CAACwE,MAAM,CAACtD,iBAAiB,IAAI,CACjG,CAAA,EAAA,IAAI,CAAC4G,OAAO,CAAA;AAEd,QAAA,IAAI,CAACpF,EAAE,CAAC2K,gBAAgB,GAAGrJ,mBACzB,IAAI,EACJ,IAAI,CAACQ,MAAM,EACXpC,EAAAA,CAAGI,IAAI,CAAC,GAAGJ,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtD,iBAAiB,EAAE,IAAI,CAACsD,MAAM,CAACtE,WAAW,GAAG,CAC3E,CAAA,EAAA,IAAI,CAACsE,MAAM,CAAC3D,QAAQ,EACpB0G,mBAAAA,CAAAA;AAEF,QAAA,IAAI,CAAC+F,QAAQ,GAAGlL,GAAGiB,GAAG,CAAC,IAAI,CAACmB,MAAM,CAACzD,UAAU,EAAEqB,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACe,gBAAgB,EAAE,CAAA,CAAA,CAAA;QAC9E,IAAI,CAAC7J,GAAG,CAACpB,EAAG2B,CAAAA,QAAQ,CAAC,IAAI,CAACqJ,cAAc,EAAE,CAAI,CAAA,EAAA,WAAA;AAC5C,YAAA,IAAI,CAACjI,GAAG,GAAG/C,EAAAA,CAAGyB,GAAG,CACf,IAAI,CAACsB,GAAG,EACRgH,QAAS,CAAA,IAAI,EAAE,IAAI,CAACrE,OAAO,EAAE,IAAI,CAACtD,MAAM,CAAC3D,QAAQ,EAAE,IAAI,CAACyM,QAAQ,EAAE,IAAI,CAACd,aAAa,CAAA,CAAA;AAExF,SAAA,CAAA;QACA,IAAI,CAAC9I,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC,IAAI,CAACnH,GAAG,EAAE,CAAA,CAAA,CAAA;AACjC,KAAA,CAAA;AAEF,IAAA,OAAOpD,KAAK,CAACO,QAAAA,CAAS,CAAC2B,QAAAA,EAAU8I,YAAYC,gBAAkBX,EAAAA,cAAAA,CAAAA;AACjE;AAEA,iBACO,SAAS1K,iBACdI,CAAAA,KAA4B,EAC5B4J,IAAiB,EACjB1H,QAAqB,EACrBsJ,WAAwB,EACxBC,UAAuB,EACvBC,KAAkB,EAClBC,uBAAoC,EAAA;IAEpC,MAAMtL,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,qBAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA,CAAA;AAAO1G,QAAAA,EAAAA,CAAGI,IAAI,CAAC,WAAA,CAAA;AAAcJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,KAAA;KAAO,EAC5F,WAAA;AACE,QAAA,IAAI,CAACE,EAAE,CAACiL,CAAC,GAAGvL,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACsK,QAAQ,EAAE,IAAI,CAACS,SAAS,CAAA;QAChD,IAAI,CAAClL,EAAE,CAACkF,GAAG,GAAGxF,GAAGQ,MAAM,CAAC,IAAI,CAAC+K,CAAC,CAAA;QAC9B,IAAI,CAACjL,EAAE,CAACoF,OAAO,GAAG1F,GAAGuC,SAAS,CAAC,IAAI,CAACgJ,CAAC,CAAA;AACrC,QAAA,IAAI,CAACjL,EAAE,CAACjC,UAAU,GAAG2B,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAACnB,MAAM,CAAC/D,UAAU,EAAE,IAAI,CAAC+D,MAAM,CAACtD,iBAAiB,CAAA;AACjF,QAAA,IAAI,CAACwB,EAAE,CAACmL,EAAE,GAAGzL,EAAAA,CAAG8J,KAAK,CAAC9J,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAACiC,GAAG,EAAE,IAAI,CAACnH,UAAU,GAAG,CAAG,EAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACiC,EAAE,CAACoL,MAAM,GAAG1L,GAAG8J,KAAK,CAAC9J,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACwK,EAAE,EAAE,IAAI,CAAG,EAAA,CAAA,CAAA;QACjD,IAAI,CAACnL,EAAE,CAACqL,EAAE,GAAG3L,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACwK,EAAE,EAAEzL,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACmL,GAAG,CAAC1C,CAAC,EAAE,CAAA,CAAA,CAAA;QAChD,IAAI,CAAC5I,EAAE,CAACuL,KAAK,GAAG7L,GAAG8L,KAAK,CAAC,IAAI,CAACH,EAAE,CAAA;QAChC,IAAI,CAACrL,EAAE,CAACyL,SAAS,GAAG/L,GAAG2F,GAAG,CAAC3F,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACoK,KAAK,EAAE,CAAI7L,CAAAA,EAAAA,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACmL,GAAG,CAAC1C,CAAC,EAAE,CAAA,CAAA,CAAA;AACrE,QAAA,IAAI,CAAC5I,EAAE,CAAC0L,MAAM,GAAGhM,GAAGS,GAAG,CAAC,IAAI,CAACkL,EAAE,EAAE3L,EAAAA,CAAG8L,KAAK,CAAC,IAAI,CAACH,EAAE,CAAA,CAAA;AACjD,QAAA,IAAI,CAACM,CAAC,GAAGjM,GAAGuD,GAAG,CAAC,IAAI,CAACX,EAAE,EAAE5C,EAAAA,CAAG0G,IAAI,CAAC,IAAI,CAACkF,GAAG,CAACzC,CAAC,EAAE,CAAA,CAAA,CAAA;QAC7C,IAAI,CAAC7I,EAAE,CAAC4L,GAAG,GAAGlM,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACwK,CAAC,EAAEjM,EAAAA,CAAG0G,IAAI,CAAC1G,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACsI,KAAK,EAAE,IAAI,CAACD,GAAG,CAAC1C,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;QACrE,IAAI,CAAC5I,EAAE,CAAC6L,GAAG,GAAGnM,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACwK,CAAC,EAAEjM,EAAAA,CAAG0G,IAAI,CAAC1G,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACwI,SAAS,EAAE,IAAI,CAACH,GAAG,CAAC1C,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;AACzE,QAAA,IAAI,CAAC5I,EAAE,CAAC8L,KAAK,GAAGpM,EAAAA,CAAG8C,kBAAkB,CAACwI,uBAAyB,EAAA,IAAI,CAACY,GAAG,EAAE,CAAA,CAAA;AACzE,QAAA,IAAI,CAAC5L,EAAE,CAAC+L,KAAK,GAAGrM,EAAAA,CAAG8C,kBAAkB,CAACwI,uBAAyB,EAAA,IAAI,CAACa,GAAG,EAAE,CAAA,CAAA;AACzE,QAAA,IAAI,CAAC7L,EAAE,CAACgM,IAAI,GAAGtM,EAAAA,CAAGuM,GAAG,CAAC,IAAI,CAACH,KAAK,EAAE,IAAI,CAACC,KAAK,EAAE,IAAI,CAACL,MAAM,CAAA;AACzD,QAAA,IAAI,CAAC1L,EAAE,CAACkM,YAAY,GAAGxM,GAAGiB,GAAG,CAAC,IAAI,CAACqL,IAAI,CAACvJ,GAAG,EAAE,IAAI,CAAC2I,MAAM,CAAA;;AAExD,QAAA,IAAI,CAACpL,EAAE,CAACmM,eAAe,GAAGzM,EAAGI,CAAAA,IAAI,CAAC,CAAA,EAAG,IAAI,CAACgC,MAAM,CAACtE,WAAW,EAAE,CAAA,CAAA;QAC9D,IAAI,CAACwC,EAAE,CAAClB,aAAa,GAAGY,EAAGa,CAAAA,GAAG,CAC5BzB,aACE,CAAA,IAAI,EACJ,IAAI,CAACgD,MAAM,EACXpC,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAAC+J,SAAS,EAAE,IAAI,CAACiB,eAAe,GAC3CzM,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACsJ,QAAQ,EAAE,IAAI,CAAC0B,eAAe,CAAA,CAAA,EAE5CzM,GAAGI,IAAI,CAAC,IAAI,CAAG,EAAA,CAAA,GAAI,GAAG,CAAI,GAAA,CAAA,CAAA,CAAA;AAE5B,QAAA,IAAI,CAACkB,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC,IAAI,CAACsC,YAAY,EAAE,IAAI,CAACpN,aAAa,CAAA,CAAA;AAC5D,KAAA,CAAA;AAEF,IAAA,OAAOO,KAAK,CAACO,QAAAA,CAAS,CAAC2B,QAAU0H,EAAAA,IAAAA,EAAM4B,aAAaC,UAAYC,EAAAA,KAAAA,CAAAA;AAClE;AAEA,iBACO,SAASqB,oBAAAA,CACd/M,KAA4B,EAC5BkC,QAAqB,EACrB0H,IAAiB,EACjBoD,UAAuB,EACvBxH,mBAAgC,EAChCC,qBAAkC,EAAA;IAElC,MAAMpF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAM4M,gBAAmB,GAAA,YAAA;IACzB5M,EAAGG,CAAAA,IAAI,CACLyM,gBACA,EAAA;QACE3K,MAAO,CAAA,QAAA,CAAA;AACPjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA,CAAA;QACRJ,EAAGI,CAAAA,IAAI,CAAC,SAAA,CAAA,CAAWyM,KAAK,EAAA;AACxB7M,QAAAA,EAAAA,CAAGK,KAAK,CAAC,QAAA,CAAA;QACTL,EAAGK,CAAAA,KAAK,CAAC,gBAAA,CAAA,CAAkBwM,KAAK;KACjC,EACD,WAAA;QACE,IAAI,CAACvM,EAAE,CAACwM,QAAQ,GAAG9M,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgE,MAAM,EAAEzF,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACG,MAAM,CAAA,CAAA;QACvE,IAAI,CAACvF,EAAE,CAACyM,WAAW,GAAG/M,GAAGQ,MAAM,CAAC,IAAI,CAACsM,QAAQ,CAAA;AAC7C,QAAA,IAAI,CAACxM,EAAE,CAAC0M,WAAW,GAAGhN,GAAG2B,QAAQ,CAAC,IAAI,CAACoL,WAAW,EAAE,IAAI,CAAC3K,MAAM,CAACtE,WAAW,CAAA;AAC3E,QAAA,IAAI,CAACwC,EAAE,CAAC2M,aAAa,GAAGjN,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACqM,QAAQ,EAAE,IAAI,CAACrH,MAAM,CAAA;QACzD,IAAI,CAACnF,EAAE,CAAC4M,gBAAgB,GAAGlN,GAAGQ,MAAM,CAAC,IAAI,CAACyM,aAAa,CAAA;AACvD,QAAA,IAAI,CAAC3M,EAAE,CAAC6M,gBAAgB,GAAGnN,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAAC0J,aAAa,EAAE,IAAI,CAACC,gBAAgB,CAAA;QAC3E,IAAI,CAAC5M,EAAE,CAAC8M,WAAW,GAAG1N,mBACpB,IAAI,EACJM,EAAGI,CAAAA,IAAI,CAAC,CAAA,CAAA,EACR,IAAI,CAACgC,MAAM,CAACtE,WAAW,EACvB,IAAI,CAAC2H,MAAM,EACX,IAAI,CAAC0H,gBAAgB,CAAA;QAEvB,IAAI,CAAC7M,EAAE,CAAC+M,YAAY,GAAGrN,GAAGsN,GAAG,CAC3BtN,EAAGqB,CAAAA,WAAW,CAAC,IAAI,CAAC+L,WAAW,EAAE,CACjCpN,CAAAA,EAAAA,EAAAA,CAAGqB,WAAW,CAAC,IAAI,CAAC6L,gBAAgB,EAAE,IAAI,CAACE,WAAW,CAAA,CAAA;AAExD,QAAA,IAAI,CAAC9M,EAAE,CAACiN,OAAO,GAAG,IAAI,CAAC9H,MAAM;AAC7B,QAAA,IAAI,CAACrE,GAAG,CAACpB,EAAAA,CAAGwN,EAAE,CAAC,IAAI,CAACR,WAAW,EAAE,IAAI,CAACK,YAAY,CAAG,EAAA,WAAA;AACnD,YAAA,IAAI,CAACE,OAAO,GAAGvN,GAAGyB,GAAG,CAAC,IAAI,CAAC8L,OAAO,EAAEvN,EAAGiB,CAAAA,GAAG,CAACjB,EAAGuC,CAAAA,SAAS,CAAC,IAAI,CAACgL,OAAO,CAAG,EAAA,IAAA,CAAA,CAAA;AACvE,YAAA,IAAI,CAACnM,GAAG,CAAC,IAAI,CAACiM,YAAY,EAAE,WAAA;gBAC1B,IAAI,CAAC/M,EAAE,CAACmN,iBAAiB,GAAGzN,GAAGuC,SAAS,CAAC,IAAI,CAACuK,QAAQ,CAAA;AACtD,gBAAA,IAAI,CAACxM,EAAE,CAACoN,eAAe,GAAG1N,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGuC,SAAS,CAAC,IAAI,CAACgL,OAAO,CAAA,EAAG,IAAI,CAACnL,MAAM,CAACtE,WAAW,CAAA;AACpF,gBAAA,IAAI,CAACwC,EAAE,CAACqN,eAAe,GAAG3N,GAAGiB,GAAG,CAAC,IAAI,CAACwM,iBAAiB,EAAE,IAAI,CAACrL,MAAM,CAACtE,WAAW,CAAA;AAChF,gBAAA,IAAI,CAACwC,EAAE,CAACsN,qBAAqB,GAAG5N,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC8M,OAAO,EAAE,IAAI,CAACI,eAAe,CAAA;gBACzE,IAAI,CAACvM,GAAG,CACNpB,EAAAA,CAAG2B,QAAQ,CAAC3B,EAAAA,CAAGa,GAAG,CAACb,EAAAA,CAAGuC,SAAS,CAAC,IAAI,CAACqL,qBAAqB,CAAA,EAAG,IAAI,CAACH,iBAAiB,GAAG,MACtF,CAAA,EAAA,WAAA;AACE,oBAAA,IAAI,CAACnN,EAAE,CAACuN,WAAW,GAAG7N,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACiM,eAAe,EAAE,IAAI,CAACC,eAAe,CAAG,EAAA,GAAA,CAAA;AACjF,oBAAA,IAAI,CAACrN,EAAE,CAACwN,mBAAmB,GAAG9N,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGuC,SAAS,CAAC,IAAI,CAACsL,WAAW,CAAA,EAAG,IAAI,CAACzL,MAAM,CAACtE,WAAW,CAAA;oBAC5F,IAAI,CAACgP,QAAQ,GAAG9M,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAAC8L,OAAO,EAAEvN,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACqN,mBAAmB,EAAE,IAAI,CAACP,OAAO,CAAG,EAAA,CAAA,CAAA,CAAA;AAC9F,iBAAA,CAAA;AAEJ,aAAA,CAAA,CAAGQ,KAAK,CAAC,WAAA;AACP,gBAAA,IAAI,CAACjB,QAAQ,GAAG9M,EAAGiB,CAAAA,GAAG,CAACjB,EAAGuC,CAAAA,SAAS,CAAC,IAAI,CAACuK,QAAQ,CAAA,EAAG,IAAI,CAAC1K,MAAM,CAACtE,WAAW,CAAA;AAC7E,aAAA,CAAA;AACA,YAAA,IAAI,CAACwC,EAAE,CAACiL,CAAC,GAAGvL,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACqM,QAAQ,EAAE,IAAI,CAACS,OAAO,CAAA;YAC9C,IAAI,CAACS,cAAc,GAAGhO,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAAC+K,CAAC,CAAA;AACtC,YAAA,IAAI,CAAC7F,OAAO,GAAG1F,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAACgI,CAAC,EAAE,IAAI,CAACyC,cAAc,CAAA;AACnD,SAAA,CAAA;AACA,QAAA,IAAI,CAAC1M,OAAO,CAAC,IAAI,CAACiM,OAAO,CAAA;AAC3B,KAAA,CAAA;AAEF,IAAA,MAAMrN,QAAW,GAAA,wBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA,CAAA;AAAO1G,QAAAA,EAAAA,CAAGI,IAAI,CAAC,KAAA,CAAA;AAAQJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,YAAA;KAAc,EAAE,WAAA;QAC3F,IAAI,CAACC,EAAE,CAAC2N,GAAG,GAAGjO,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAACwC,EAAE,EAAE,CAAA,CAAA;QAC/B,IAAI,CAACqL,GAAG,CAAC9E,CAAC,GAAGnJ,GAAGiB,GAAG,CAAC,IAAI,CAACgN,GAAG,CAAC9E,CAAC,EAAE,IAAI,CAACyC,GAAG,CAACzC,CAAC,EAAE,IAAI,CAACyC,GAAG,CAAC1C,CAAC,CAAA;AACtD,QAAA,IAAI,CAAC+E,GAAG,CAAC/E,CAAC,GAAGlJ,EAAAA,CAAGuD,GAAG,CAACvD,EAAG8L,CAAAA,KAAK,CAAC9L,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAAC0K,GAAG,CAAC9E,CAAC,EAAE,IAAI,CAACyC,GAAG,CAAC1C,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC0C,GAAG,CAACzC,CAAC,CAAA;QACxE,IAAI,CAAC8E,GAAG,CAAC9E,CAAC,GAAGnJ,EAAGuD,CAAAA,GAAG,CAACvD,EAAAA,CAAGkO,GAAG,CAAC,IAAI,CAACD,GAAG,CAAC9E,CAAC,EAAE,IAAI,CAACyC,GAAG,CAAC1C,CAAC,CAAA,EAAG,IAAI,CAAC0C,GAAG,CAACzC,CAAC,CAAA;AAC9D,QAAA,IAAI,CAAC8E,GAAG,GAAGjO,GAAGyB,GAAG,CAAC,IAAI,CAACwM,GAAG,EAAEjO,EAAGuD,CAAAA,GAAG,CAACvD,EAAGI,CAAAA,IAAI,CAAC,GAAM,CAAA,EAAA,IAAI,CAACwL,GAAG,CAAA,CAAA;QACzD,IAAI,CAACtL,EAAE,CAACuL,KAAK,GAAG,IAAI,CAACoC,GAAG,CAAC/E,CAAC,CAAA;AAC1B,QAAA,IAAI,CAAC5I,EAAE,CAACoF,OAAO,GAAG1F,EAAAA,CAAGuC,SAAS,CAC5BvC,EAAGiB,CAAAA,GAAG,CACJ,IAAI,CAACmB,MAAM,CAAC9D,iBAAiB,EAC7B0B,EAAAA,CAAGkK,IAAI,CACLlK,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACgN,GAAG,CAAC9E,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA,EAC9BnJ,EAAGuD,CAAAA,GAAG,CAACvD,EAAAA,CAAGS,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACgN,GAAG,CAAC5E,CAAC,EAAE,CAAA,CAAA,EAAI,CAAI,CAAA,EAAA,IAAI,CAACjH,MAAM,CAACvD,YAAY,CACjE,EAAA,EACA,EAAA,CAAA,CAAA,CAAA,CAEF0I,GAAG,CAAA;AAEP,QAAA,IAAI,CAACjH,EAAE,CAACmF,MAAM,GAAGzF,EAAAA,CAAGI,IAAI,CACtB,CACAJ,EAAAA,EAAAA,CAAGyB,GAAG,CAACzB,GAAGiB,GAAG,CAAC,IAAI,CAACkN,UAAU,EAAE,IAAI,CAAC/L,MAAM,CAACtD,iBAAiB,CAAA,EAAG,IAAI,CAACsD,MAAM,CAACtE,WAAW,CACtF,EAAA,CAAA,CAAA;AAEF,QAAA,IAAI,CAACwC,EAAE,CAACuF,MAAM,GAAG7F,GAAGiB,GAAG,CAAC,IAAI,CAAC4K,KAAK,EAAE,IAAI,CAACzJ,MAAM,CAAC/D,UAAU,CAAA;QAC1D,IAAI,CAACiC,EAAE,CAACwM,QAAQ,GAAG9M,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgE,MAAM,EAAEzF,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACG,MAAM,CAAA,CAAA;AACvE,QAAA,IAAI,CAACzE,GAAG,CAACpB,GAAG2B,QAAQ,CAAC3B,GAAGQ,MAAM,CAAC,IAAI,CAACsM,QAAQ,CAAG,EAAA,IAAI,CAAC1K,MAAM,CAACtE,WAAW,CAAG,EAAA,WAAA;AACvE,YAAA,IAAI,CAACgP,QAAQ,GAAG9M,EAAGiB,CAAAA,GAAG,CAACjB,EAAGuC,CAAAA,SAAS,CAAC,IAAI,CAACuK,QAAQ,CAAA,EAAG,IAAI,CAAC1K,MAAM,CAACtE,WAAW,CAAA;AAC3E,YAAA,IAAI,CAAC+H,MAAM,GAAG7F,EAAAA,CAAGQ,MAAM,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACgF,MAAM,EAAE,IAAI,CAACqH,QAAQ,CAAA,CAAA;AAC3D,SAAA,CAAA;QACA,IAAI,CAACxM,EAAE,CAACiF,KAAK,GAAGR,WACd,IAAI,EACJ,IAAI,CAAC3C,MAAM,EACX,IAAI,CAACqD,MAAM,EACX,IAAI,CAACC,OAAO,EACZ,IAAI,CAACG,MAAM,EACXV,mBACAC,EAAAA,qBAAAA,CAAAA;AAEF,QAAA,IAAI,CAAC9E,EAAE,CAACiB,EAAE,GAAGK,kBAAAA,CAAmB,IAAI,EAAE,IAAI,CAACQ,MAAM,EAAE,IAAI,CAACqD,MAAM,EAAE,IAAI,CAACC,OAAO,EAAEP,mBAAAA,CAAAA;AAC9E,QAAA,IAAI,CAAC7E,EAAE,CAACkB,EAAE,GAAGI,kBAAAA,CAAmB,IAAI,EAAE,IAAI,CAACQ,MAAM,EAAE,IAAI,CAAC0K,QAAQ,EAAE,IAAI,CAACpH,OAAO,EAAEP,mBAAAA,CAAAA;AAChF,QAAA,IAAI,CAAC7E,EAAE,CAAC2L,CAAC,GAAGjM,EAAG8J,CAAAA,KAAK,CAAC9J,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAAChC,EAAE,EAAEvB,EAAAA,CAAG4E,GAAG,CAAC,IAAI,CAACpD,EAAE,EAAExB,GAAGI,IAAI,CAAC,MAAWJ,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAGI,IAAI,CAAC,CAAIJ,CAAAA,EAAAA,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA,CAAA;QAC5F,IAAI,CAACkB,OAAO,CAACtB,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAAC3E,KAAK,EAAEvF,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAACoL,CAAC,EAAEjM,EAAGI,CAAAA,IAAI,CAAC,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5E,KAAA,CAAA;AACA,IAAA,OAAOT,KAAK,CAACO,QAAAA,CAAS,CAAC2B,QAAAA,EAAU0H,MAAMoD,UAAY/O,EAAAA,YAAAA,CAAAA;AACrD;AAEA,iBACO,SAASwQ,UAAAA,CACdzO,KAA4B,EAC5BkC,QAAqB,EACrB0H,IAAiB,EACjBpE,mBAAgC,EAChCC,qBAAkC,EAAA;IAElC,MAAMpF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,cAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA,CAAA;AAAO1G,QAAAA,EAAAA,CAAGK,KAAK,CAAC,YAAA;KAAc,EAAE,WAAA;QAC3E,IAAI,CAACC,EAAE,CAACoF,OAAO,GAAG4D,YAAY,IAAI,EAAE,IAAI,CAAC1G,EAAE,CAAA;QAC3C,IAAI,CAACtC,EAAE,CAACkD,CAAC,GAAGxD,GAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAEkC,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkN,UAAU,EAAE,IAAI,CAAC/L,MAAM,CAACtD,iBAAiB,CAAA,CAAA;AACjG,QAAA,IAAI,CAACwB,EAAE,CAACmF,MAAM,GAAGzF,EAAAA,CAAGI,IAAI,CAAC,CAAG,EAAA,IAAI,CAACoD,CAAC,EAAE,CAAA,CAAA;QACpC,IAAI,CAAClD,EAAE,CAACyC,GAAG,GAAGgC,WACZ,IAAI,EACJ,IAAI,CAAC3C,MAAM,EACX,IAAI,CAACqD,MAAM,EACX,IAAI,CAACC,OAAO,EACZ1F,EAAAA,CAAGK,KAAK,CAAC,EAAC,CAAA,EACV8E,mBACAC,EAAAA,qBAAAA,CAAAA;QAEF,IAAI,CAAC9D,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC,IAAI,CAACnH,GAAG,EAAE,CAAA,CAAA,CAAA;AACjC,KAAA,CAAA;AACA,IAAA,OAAOpD,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAU0H,IAAM3L,EAAAA,YAAAA,CAAAA;AACzC;AAEA,iBACO,SAASyQ,kBACd1O,CAAAA,KAA4B,EAC5BkC,QAAqB,EACrB0H,IAAiB,EACjBpE,mBAAgC,EAAA;IAEhC,MAAMnF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,sBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA;KAAM,EAAE,WAAA;AACnD,QAAA,IAAI,CAACpG,EAAE,CAACgO,IAAI,GAAGtO,GAAGS,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC2B,EAAE,CAACuG,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA;QAC5C,IAAI,CAAC7I,EAAE,CAACqC,CAAC,GAAG3C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC2B,EAAE,CAACyG,CAAC,EAAE,IAAI,CAACjH,MAAM,CAACrE,gBAAgB,CAAA,EAAG,IAAI,CAACqE,MAAM,CAACtE,WAAW,CAAA;AAC3F,QAAA,IAAI,CAACwC,EAAE,CAACmC,QAAQ,GAAG,IAAI,CAAC6L,IAAI;QAC5B,IAAI,CAAChO,EAAE,CAACiO,QAAQ,GAAGvO,EAAGgB,CAAAA,IAAI,CAAChB,EAAGS,CAAAA,GAAG,CAAC,CAAGT,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACwB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAA,CAAA,CAAA;AACxE,QAAA,IAAI,CAACnC,EAAE,CAAC7B,QAAQ,GAAGuB,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAACmO,QAAQ,EAAE,IAAI,CAAC9L,QAAQ,EAAE,CAAA,CAAA;AACzD,QAAA,IAAI,CAACnC,EAAE,CAACkC,CAAC,GAAGxC,EAAAA,CAAGI,IAAI,CAAC,CAAG,EAAA,IAAI,CAACuC,CAAC,EAAE,CAAA,CAAA;AAC/B,QAAA,IAAI,CAACrC,EAAE,CAACyC,GAAG,GAAG6D,uBAAAA,CAAwB,IAAI,EAAE,IAAI,CAACxE,MAAM,EAAE,IAAI,CAAC3D,QAAQ,EAAE,IAAI,CAAC+D,CAAC,EAAE2C,mBAAAA,CAAAA;QAChF,IAAI,CAAC7D,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC,IAAI,CAACnH,GAAG,EAAE,CAAA,CAAA,CAAA;AACjC,KAAA,CAAA;AACA,IAAA,OAAOpD,KAAK,CAACO,QAAS,CAAA,CAAC2B,QAAU0H,EAAAA,IAAAA,CAAAA;AACnC;AAEA,iBACO,SAASiF,gBAAAA,CAAiB7O,KAA4B,EAAEkC,QAAqB,EAAE0H,IAAiB,EAAA;IACrG,MAAMvJ,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,kBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA;KAAM,EAAE,WAAA;QACnD,IAAI,CAACpG,EAAE,CAACiF,KAAK,GAAGvF,GAAGkK,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;QACjC,IAAI,CAAC5J,EAAE,CAAC6B,YAAY,GAAG,IAAI,CAACC,MAAM,CAACtE,WAAW;AAC9C,QAAA,IAAI,CAACwC,EAAE,CAAC+B,SAAS,GAAGrC,GAAGyB,GAAG,CAAC,IAAI,CAACU,YAAY,EAAE,IAAI,CAACC,MAAM,CAACrE,gBAAgB,CAAA;AAC1E,QAAA,IAAI,CAACuC,EAAE,CAACmO,SAAS,GAAG7E,oBAAAA,CAAqB,IAAI,EAAE,IAAI,CAAChH,EAAE,EAAE,IAAI,CAACT,YAAY,EAAE,IAAI,CAACE,SAAS,CAAA;QACzF,IAAI,CAAC/B,EAAE,CAACoO,SAAS,GAAG,IAAI,CAACD,SAAS,CAACtF,CAAC;QACpC,IAAI,CAAC7I,EAAE,CAACqC,CAAC,GAAG,IAAI,CAAC8L,SAAS,CAACpF,CAAC;QAC5B,IAAI,CAAC/I,EAAE,CAACqO,SAAS,GAAG3O,EAAGgB,CAAAA,IAAI,CAAChB,EAAGS,CAAAA,GAAG,CAAC,CAAGT,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACyN,SAAS,EAAE,IAAI,CAACA,SAAS,CAAA,CAAA,CAAA;AAC3E,QAAA,IAAI,CAACpO,EAAE,CAACoF,OAAO,GAAG1F,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAACuO,SAAS,EAAE,IAAI,CAACD,SAAS,EAAE,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACpO,EAAE,CAACmF,MAAM,GAAGzF,EAAAA,CAAGI,IAAI,CAAC,CAAG,EAAA,IAAI,CAACuC,CAAC,EAAE,CAAA,CAAA;QACpC,IAAI,CAACrC,EAAE,CAACkF,GAAG,GAAG9F,kBAAmB,CAAA,IAAI,EAAEM,EAAAA,CAAGI,IAAI,CAAC,IAAI,IAAI,CAACiC,SAAS,EAAE,IAAI,CAACoD,MAAM,EAAE,IAAI,CAACC,OAAO,CAAA;QAC5F,IAAI,CAACpF,EAAE,CAACsO,QAAQ,GAAG5O,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgE,MAAM,EAAEzF,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACF,GAAG,CAAA,CAAA;QACpE,IAAI,CAAClE,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC9K,aAAAA,CAAc,IAAI,EAAE,IAAI,CAACgD,MAAM,EAAE,IAAI,CAACqD,MAAM,EAAE,IAAI,CAACmJ,QAAQ,CAAG,EAAA,CAAA,CAAA,CAAA;AACrF,KAAA,CAAA;AACA,IAAA,OAAOjP,KAAK,CAACO,QAAS,CAAA,CAAC2B,QAAU0H,EAAAA,IAAAA,CAAAA;AACnC;AAEA,iBACO,SAASsF,qBAAAA,GAAAA;IACd,OAAO,CAAC,CAACC,gBAAAA,IAAoB,CAAC,CAACC,sBAAsB,CAAC,CAACC,UAAc,IAAA,CAAC,CAACC,KAAAA;AACzE;AAEA,iBACO,SAASC,oBAAAA,CAAqB9M,MAAkC,EAAA;AACrE,IAAA,MAAM+M,cAAclQ,WAAYmD,CAAAA,MAAAA,CAAAA;AAChC,IAAA,IAAI+M,WAAY/P,CAAAA,aAAa,IAAI,CAAC0P,gBAAkB,EAAA;QAClDM,sBAAuBpQ,CAAAA,uBAAAA,CAAAA;AACzB;AACA,IAAA,IAAImQ,WAAY9P,CAAAA,eAAe,IAAI,CAAC0P,kBAAoB,EAAA;QACtDM,wBAAyBrQ,CAAAA,uBAAAA,CAAAA;AAC3B;AACA,IAAA,IAAImQ,WAAY7P,CAAAA,OAAO,IAAI,CAAC0P,UAAY,EAAA;QACtCM,gBAAiBtQ,CAAAA,uBAAAA,CAAAA;AACnB;AACA,IAAA,IAAImQ,WAAY5P,CAAAA,iBAAiB,IAAI,CAAC0P,KAAO,EAAA;QAC3CM,WAAYvQ,CAAAA,uBAAAA,CAAAA;AACd;AACF;AAEA,gBACA,IAAIwQ,uBAAsCC,GAAAA,SAAAA;AAC1C,IAAIC,yBAAwCD,GAAAA,SAAAA;AAC5C,IAAIE,iBAAgCF,GAAAA,SAAAA;AACpC,IAAIG,YAA2BH,GAAAA,SAAAA;AAC/B,IAAII,yBAAuCJ,GAAAA,SAAAA;AAC3C,IAAIX,gBAA8BW,GAAAA,SAAAA;AAClC,IAAIK,wBAAwCL,GAAAA,SAAAA;AAE5C,IAAIM,2BAAyCN,GAAAA,SAAAA;AAC7C,IAAIV,kBAAgCU,GAAAA,SAAAA;AACpC,IAAIO,yBAA2CP,GAAAA,SAAAA;AAC/C,IAAIQ,0BAA0CR,GAAAA,SAAAA;AAE9C,IAAIS,mBAAiCT,GAAAA,SAAAA;AACrC,IAAIT,UAAwBS,GAAAA,SAAAA;AAC5B,IAAIU,kBAAkCV,GAAAA,SAAAA;AAEtC,IAAIW,cAA4BX,GAAAA,SAAAA;AAChC,IAAIR,KAAmBQ,GAAAA,SAAAA;AACvB,IAAIY,aAA6BZ,GAAAA,SAAAA;AAEjC,iBACO,SAASa,mBAAAA,GAAAA;IACd,OAAOxB,gBAAAA;AACT;AAEA,iBACO,SAASyB,qBAAAA,GAAAA;IACd,OAAOxB,kBAAAA;AACT;AAEA,iBACO,SAASyB,aAAAA,GAAAA;IACd,OAAOxB,UAAAA;AACT;AAEA,iBACO,SAASyB,uBAAAA,GAAAA;IACd,OAAOxB,KAAAA;AACT;AAEA,iBACO,SAAS/M,yBAAAA,CAA0BlC,EAAkB,EAAA;IAC1D,OAAOA,EAAAA,CAAG0Q,YAAY,CAAC;AACrB1Q,QAAAA,EAAAA,CAAG2Q,IAAI,CAAC,mBAAA,CAAA;AACR3Q,QAAAA,EAAAA,CAAGkK,IAAI,CAAC,YAAA,CAAA;AACRlK,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AACRJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,cAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,aAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,kBAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,0BAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,qBAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,aAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,aAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,YAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,YAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,mBAAA;AACV,KAAA,CAAA;AACH;AAEA,iBACO,SAASuQ,6BAAAA,CAA8BC,MAAsB,EAAA;IAClE,MAAMC,OAAAA,GAAUD,MAAOE,CAAAA,kBAAkB,CAAC;AACxCC,QAAAA,MAAAA,CAAAA,CAAOhR,EAAE,EAAA;AACP,YAAA,IAAI,CAACiR,IAAI,GAAGjR,GAAGkG,GAAG,EAAA,CAAGgL,OAAO,CAAC,CAAA,CAAA;YAC7B,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGpR,EAAG0G,CAAAA,IAAI,EAAG2K,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAAC1O,EAAE,GAAG5C,GAAG0G,IAAI,EAAA;AAC1B1G,YAAAA,EAAAA,CAAGuR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAGzR,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACiH,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvD,IAAI,CAACE,QAAQ,CAAC1O,EAAE,GAAG5C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkQ,OAAO,CAACC,GAAG,CAACM,EAAE,EAAE,GAAA,CAAA,EAAM1R,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;gBACpE,IAAI,CAACtF,GAAG,CAACpB,EAAG2R,CAAAA,QAAQ,CAAC,IAAI,CAACV,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,oBAAA,IAAI,CAACO,SAAS,CAACC,QAAQ,CAACpI,CAAC,GAAGrJ,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAACkO,SAAS,CAACC,QAAQ,CAACpI,CAAC,CAAA;AAC9D,iBAAA,CAAA;AACF,aAAA,CAAA;AACF,SAAA;AACAuI,QAAAA,QAAAA,CAAAA,CAAS5R,EAAE,EAAA;AACT,YAAA,MAAMiC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,YAAA,IAAI,CAACoC,MAAM,GAAGH,MAAAA,EAAAA,CAASiP,OAAO,CAAC,CAAA,CAAA;AAC/B,YAAA,IAAI,CAACI,QAAQ,CAACO,QAAQ,GAAG7R,GAAGkK,IAAI,EAAA;AAChClK,YAAAA,EAAAA,CAAGuR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACD,QAAQ,CAACO,QAAQ,GAAGrD,iBAAiB,IAAI,EAAE,IAAI,CAACpM,MAAM,EAAE,IAAI,CAAC+O,OAAO,CAACvO,EAAE,CAAA;AAC9E,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACAkO,IAAAA,OAAAA,CAAQgB,IAAI,GAAG,0BAAA;IACf,OAAOhB,OAAAA;AACT;AAEA,iBACO,SAAS1B,sBAAAA,CAAuBhN,MAAwB,EAAA;AAC7D,IAAA,MAAMyO,MAASkB,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAIvC,4BAA4BC,SAAW,EAAA;QACzC,IAAI;AACFD,YAAAA,uBAAAA,GAA0BoB,6BAA8BC,CAAAA,MAAAA,CAAAA;AACxDhB,YAAAA,yBAAAA,GAA4BgB,OAAOmB,eAAe,CAACxC,uBAAwByC,CAAAA,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAC9FnD,YAAAA,gBAAAA,GAAmB+B,MAAOqB,CAAAA,eAAe,CAAC,SAAA,EAAW,KAAK,EAAI,EAAA;gBAC5DC,UAAY,EAAA;AACd,aAAA,CAAA;AACArD,YAAAA,gBAAAA,CAAiBgD,IAAI,GAAG,uBAAA;YACxBhC,wBAA2Be,GAAAA,MAAAA,CAAOuB,iBAAiB,CAAC;AAACtD,gBAAAA;aAAiB,EAAE,IAAA,CAAA;AAC1E,SAAA,CAAE,OAAOuD,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;YACd7C,uBAA0B,GAAA,IAAA;YAC1BK,yBAA4B,GAAA,IAAA;YAC5BC,wBAA2B,GAAA,IAAA;AAC7B;AACF;AACA,IAAA,IAAIN,uBAAyB,EAAA;AAC3BK,QAAAA,yBAAAA,CAA0B2C,QAAQ,CAAC,MAAA,EAAQ3B,OAAO4B,IAAI,KAAK,WAAW,CAAI,GAAA,CAAA,CAAA;QAC1E5C,yBAA0B2C,CAAAA,QAAQ,CAAC,QAAUpQ,EAAAA,MAAAA,CAAAA;AAC7CyO,QAAAA,MAAAA,CAAO6B,gBAAgB,EAAA;AACvB7B,QAAAA,MAAAA,CAAO8B,cAAc,CAAC7C,wBAAAA,CAAAA;AACtBe,QAAAA,MAAAA,CAAO+B,UAAU,CAACpD,uBAAAA,CAAAA;QAClBqB,MAAOgC,CAAAA,YAAY,CAAC,CAAGhD,EAAAA,yBAAAA,CAAAA;AACvBiD,QAAAA,kBAAAA,EAAAA;AACAjC,QAAAA,MAAAA,CAAOkC,eAAe,EAAA;AACxB;AACF;AAEA,iBACO,SAASC,+BAAAA,CAAgCnC,MAAsB,EAAA;IACpE,MAAMC,OAAAA,GAAUD,MAAOE,CAAAA,kBAAkB,CAAC;AACxCC,QAAAA,MAAAA,CAAAA,CAAOhR,EAAE,EAAA;AACP,YAAA,IAAI,CAACiR,IAAI,GAAGjR,GAAGkG,GAAG,EAAA,CAAGgL,OAAO,CAAC,CAAA,CAAA;YAC7B,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGpR,EAAG0G,CAAAA,IAAI,EAAG2K,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAAC1O,EAAE,GAAG5C,GAAG0G,IAAI,EAAA;AAC1B1G,YAAAA,EAAAA,CAAGuR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAGzR,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACiH,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvD,IAAI,CAACE,QAAQ,CAAC1O,EAAE,GAAG5C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkQ,OAAO,CAACC,GAAG,CAACM,EAAE,EAAE,GAAA,CAAA,EAAM1R,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;gBACpE,IAAI,CAACtF,GAAG,CAACpB,EAAG2R,CAAAA,QAAQ,CAAC,IAAI,CAACV,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,oBAAA,IAAI,CAACO,SAAS,CAACC,QAAQ,CAACpI,CAAC,GAAGrJ,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAACkO,SAAS,CAACC,QAAQ,CAACpI,CAAC,CAAA;AAC9D,iBAAA,CAAA;AACF,aAAA,CAAA;AACF,SAAA;AACAuI,QAAAA,QAAAA,CAAAA,CAAS5R,EAAE,EAAA;AACT,YAAA,MAAMiC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,YAAA,IAAI,CAACoC,MAAM,GAAGH,MAAAA,EAAAA,CAASiP,OAAO,CAAC,CAAA,CAAA;YAC/B,IAAI,CAAC9J,oBAAoB,GAAGpH,EAAAA,CAAGkK,IAAI,CAAC,EAAA,CAAG,EAAG+I,CAAAA,aAAa,CAAC,CAAA,CAAA;AACxD,YAAA,IAAI,CAACzE,gBAAgB,GAAGxO,GAAGkT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC3C,YAAA,IAAI,CAACI,QAAQ,CAACO,QAAQ,GAAG7R,GAAGkK,IAAI,EAAA;AAChClK,YAAAA,EAAAA,CAAGuR,IAAI,CAAC,WAAA;gBACN,IAAI,CAACD,QAAQ,CAACO,QAAQ,GAAGxD,kBACvB,CAAA,IAAI,EACJ,IAAI,CAACjM,MAAM,EACX,IAAI,CAAC+O,OAAO,CAACvO,EAAE,EACf,IAAI,CAAC4L,gBAAgB,CAAA;AAEzB,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACAsC,IAAAA,OAAAA,CAAQgB,IAAI,GAAG,4BAAA;IACf,OAAOhB,OAAAA;AACT;AAEA,iBACO,SAASzB,wBAAAA,CAAyBjN,MAAwB,EAAA;AAC/D,IAAA,MAAMyO,MAASkB,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAIrC,8BAA8BD,SAAW,EAAA;QAC3C,IAAI;AACFC,YAAAA,yBAAAA,GAA4BsD,+BAAgCnC,CAAAA,MAAAA,CAAAA;AAC5Dd,YAAAA,2BAAAA,GAA8Bc,OAAOmB,eAAe,CAACtC,yBAA0BuC,CAAAA,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAClGlD,YAAAA,kBAAAA,GAAqB8B,MAAOqB,CAAAA,eAAe,CAAC,SAAA,EAAW,IAAI,EAAI,EAAA;gBAC7DC,UAAY,EAAA;AACd,aAAA,CAAA;AACApD,YAAAA,kBAAAA,CAAmB+C,IAAI,GAAG,yBAAA;YAC1B7B,0BAA6BY,GAAAA,MAAAA,CAAOuB,iBAAiB,CAAC;AAACrD,gBAAAA;aAAmB,EAAE,IAAA,CAAA;YAC5EiB,yBAA4BD,GAAAA,2BAAAA,CAA4BoD,SAAS,CAAC,sBAAwB,EAAA,KAAA,CAAA;YAC1F,MAAMC,aAAAA,GAAgB,IAAIC,YAAAA,CAAa,EAAK,GAAA,CAAA,CAAA;AAC5C,YAAA,IAAK,IAAI/L,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAIA,CAAK,EAAA,CAAA;gBAC3B8L,aAAa,CAAC9L,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGF,oBAAoB,CAACE,CAAE,CAAA,CAAC6B,CAAC;gBACpDiK,aAAa,CAAC9L,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGF,oBAAoB,CAACE,CAAE,CAAA,CAAC+B,CAAC;gBACpD+J,aAAa,CAAC9L,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGF,oBAAoB,CAACE,CAAE,CAAA,CAAC4B,CAAC;AACpDkK,gBAAAA,aAAa,CAAC9L,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AAC7B;YACA0I,yBAA0BsD,CAAAA,aAAa,CAAC,CAAGF,EAAAA,aAAAA,CAAAA;AAC7C,SAAA,CAAE,OAAOf,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;YACd3C,yBAA4B,GAAA,IAAA;YAC5BK,2BAA8B,GAAA,IAAA;YAC9BE,0BAA6B,GAAA,IAAA;AAC/B;AACF;AACA,IAAA,IAAIP,yBAA2B,EAAA;AAC7BK,QAAAA,2BAAAA,CAA4ByC,QAAQ,CAAC,MAAA,EAAQ3B,OAAO4B,IAAI,KAAK,WAAW,CAAI,GAAA,CAAA,CAAA;QAC5E1C,2BAA4ByC,CAAAA,QAAQ,CAAC,QAAUpQ,EAAAA,MAAAA,CAAAA;;AAE/C2N,QAAAA,2BAAAA,CAA4BwD,UAAU,CACpC,kBACAzE,EAAAA,gBAAAA,EACA0E,YAAa,CAAA,oBAAA,CAAA,CAAA;AAEf3C,QAAAA,MAAAA,CAAO6B,gBAAgB,EAAA;AACvB7B,QAAAA,MAAAA,CAAO8B,cAAc,CAAC1C,0BAAAA,CAAAA;AACtBY,QAAAA,MAAAA,CAAO+B,UAAU,CAAClD,yBAAAA,CAAAA;QAClBmB,MAAOgC,CAAAA,YAAY,CAAC,CAAG9C,EAAAA,2BAAAA,CAAAA;AACvB+C,QAAAA,kBAAAA,EAAAA;AACAjC,QAAAA,MAAAA,CAAOkC,eAAe,EAAA;AACxB;AACF;AAEA,iBACO,SAASU,uBAAAA,CAAwB5C,MAAsB,EAAA;IAC5D,MAAMC,OAAAA,GAAUD,MAAOE,CAAAA,kBAAkB,CAAC;AACxCC,QAAAA,MAAAA,CAAAA,CAAOhR,EAAE,EAAA;AACP,YAAA,IAAI,CAACiR,IAAI,GAAGjR,GAAGkG,GAAG,EAAA,CAAGgL,OAAO,CAAC,CAAA,CAAA;YAC7B,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGpR,EAAG0G,CAAAA,IAAI,EAAG2K,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAAC1O,EAAE,GAAG5C,GAAG0G,IAAI,EAAA;AAC1B1G,YAAAA,EAAAA,CAAGuR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAGzR,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACiH,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvD,IAAI,CAACE,QAAQ,CAAC1O,EAAE,GAAG5C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkQ,OAAO,CAACC,GAAG,CAACM,EAAE,EAAE,GAAA,CAAA,EAAM1R,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;gBACpE,IAAI,CAACtF,GAAG,CAACpB,EAAG2R,CAAAA,QAAQ,CAAC,IAAI,CAACV,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,oBAAA,IAAI,CAACO,SAAS,CAACC,QAAQ,CAACpI,CAAC,GAAGrJ,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAACkO,SAAS,CAACC,QAAQ,CAACpI,CAAC,CAAA;AAC9D,iBAAA,CAAA;AACF,aAAA,CAAA;AACF,SAAA;AACAuI,QAAAA,QAAAA,CAAAA,CAAS5R,EAAE,EAAA;AACT,YAAA,MAAMiC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,YAAA,IAAI,CAACoC,MAAM,GAAGH,MAAAA,EAAAA,CAASiP,OAAO,CAAC,CAAA,CAAA;AAC/B,YAAA,IAAI,CAAC1C,gBAAgB,GAAGxO,GAAGkT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC3C,YAAA,IAAI,CAAC7C,kBAAkB,GAAGrO,GAAGkT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC7C,YAAA,IAAI,CAACI,QAAQ,CAACO,QAAQ,GAAG7R,GAAGkK,IAAI,EAAA;AAChClK,YAAAA,EAAAA,CAAGuR,IAAI,CAAC,WAAA;gBACN,IAAI,CAACD,QAAQ,CAACO,QAAQ,GAAGzD,WACvB,IAAI,EACJ,IAAI,CAAChM,MAAM,EACX,IAAI,CAAC+O,OAAO,CAACvO,EAAE,EACf,IAAI,CAAC4L,gBAAgB,EACrB,IAAI,CAACH,kBAAkB,CAAA;AAE3B,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACAyC,IAAAA,OAAAA,CAAQgB,IAAI,GAAG,oBAAA;IACf,OAAOhB,OAAAA;AACT;AAEA,iBACO,SAASxB,gBAAAA,CAAiBlN,MAAwB,EAAA;AACvD,IAAA,MAAMyO,MAASkB,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAIpC,sBAAsBF,SAAW,EAAA;QACnC,IAAI;AACFE,YAAAA,iBAAAA,GAAoB8D,uBAAwB5C,CAAAA,MAAAA,CAAAA;AAC5CX,YAAAA,mBAAAA,GAAsBW,OAAOmB,eAAe,CAACrC,iBAAkBsC,CAAAA,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAClFjD,YAAAA,UAAAA,GAAa6B,MAAOqB,CAAAA,eAAe,CAAC,SAAA,EAAW,KAAK,GAAK,EAAA;gBACvDC,UAAY,EAAA;AACd,aAAA,CAAA;AACAnD,YAAAA,UAAAA,CAAW8C,IAAI,GAAG,iBAAA;YAClB3B,kBAAqBU,GAAAA,MAAAA,CAAOuB,iBAAiB,CAAC;AAACpD,gBAAAA;aAAW,EAAE,IAAA,CAAA;AAC9D,SAAA,CAAE,OAAOqD,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;YACd1C,iBAAoB,GAAA,IAAA;YACpBO,mBAAsB,GAAA,IAAA;YACtBC,kBAAqB,GAAA,IAAA;AACvB;AACF;AACA,IAAA,IAAIR,iBAAmB,EAAA;AACrBO,QAAAA,mBAAAA,CAAoBsC,QAAQ,CAAC,MAAA,EAAQ3B,OAAO4B,IAAI,KAAK,WAAW,CAAI,GAAA,CAAA,CAAA;QACpEvC,mBAAoBsC,CAAAA,QAAQ,CAAC,QAAUpQ,EAAAA,MAAAA,CAAAA;AACvC8N,QAAAA,mBAAAA,CAAoBqD,UAAU,CAAC,kBAAoBzE,EAAAA,gBAAAA,EAAkB0E,YAAa,CAAA,oBAAA,CAAA,CAAA;AAClFtD,QAAAA,mBAAAA,CAAoBqD,UAAU,CAC5B,oBACAxE,EAAAA,kBAAAA,EACAyE,YAAa,CAAA,oBAAA,CAAA,CAAA;AAEf3C,QAAAA,MAAAA,CAAO6B,gBAAgB,EAAA;AACvB7B,QAAAA,MAAAA,CAAO8B,cAAc,CAACxC,kBAAAA,CAAAA;AACtBU,QAAAA,MAAAA,CAAO+B,UAAU,CAACjD,iBAAAA,CAAAA;QAClBkB,MAAOgC,CAAAA,YAAY,CAAC,CAAG3C,EAAAA,mBAAAA,CAAAA;AACvB4C,QAAAA,kBAAAA,EAAAA;AACAjC,QAAAA,MAAAA,CAAOkC,eAAe,EAAA;AACxB;AACF;AAEA,iBACO,SAASW,kBAAAA,CAAmB7C,MAAsB,EAAA;IACvD,MAAMC,OAAAA,GAAUD,MAAOE,CAAAA,kBAAkB,CAAC;AACxCC,QAAAA,MAAAA,CAAAA,CAAOhR,EAAE,EAAA;AACP,YAAA,IAAI,CAACiR,IAAI,GAAGjR,GAAGkG,GAAG,EAAA,CAAGgL,OAAO,CAAC,CAAA,CAAA;YAC7B,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGpR,EAAG0G,CAAAA,IAAI,EAAG2K,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAAC1O,EAAE,GAAG5C,GAAG0G,IAAI,EAAA;AAC1B1G,YAAAA,EAAAA,CAAGuR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAGzR,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACiH,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvD,IAAI,CAACE,QAAQ,CAAC1O,EAAE,GAAG5C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkQ,OAAO,CAACC,GAAG,CAACM,EAAE,EAAE,GAAA,CAAA,EAAM1R,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;gBACpE,IAAI,CAACtF,GAAG,CAACpB,EAAG2R,CAAAA,QAAQ,CAAC,IAAI,CAACV,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,oBAAA,IAAI,CAACO,SAAS,CAACC,QAAQ,CAACpI,CAAC,GAAGrJ,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAACkO,SAAS,CAACC,QAAQ,CAACpI,CAAC,CAAA;AAC9D,iBAAA,CAAA;AACF,aAAA,CAAA;AACF,SAAA;AACAuI,QAAAA,QAAAA,CAAAA,CAAS5R,EAAE,EAAA;AACT,YAAA,MAAMiC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,YAAA,IAAI,CAACoC,MAAM,GAAGH,MAAAA,EAAAA,CAASiP,OAAO,CAAC,CAAA,CAAA;AAC/B,YAAA,IAAI,CAAC1C,gBAAgB,GAAGxO,GAAGkT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC3C,YAAA,IAAI,CAAC7C,kBAAkB,GAAGrO,GAAGkT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC7C,YAAA,IAAI,CAACI,QAAQ,CAACO,QAAQ,GAAG7R,GAAGkK,IAAI,EAAA;AAChClK,YAAAA,EAAAA,CAAGuR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACD,QAAQ,CAACO,QAAQ,GAAGnF,oBAAAA,CACvB,IAAI,EACJ,IAAI,CAACtK,MAAM,EACX,IAAI,CAAC+O,OAAO,CAACvO,EAAE,EACf5C,EAAAA,CAAGI,IAAI,CAAC,EAAI,EAAA,EAAA,EAAI,EAChB,CAAA,EAAA,IAAI,CAACoO,gBAAgB,EACrB,IAAI,CAACH,kBAAkB,CAAA;AAE3B,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACAyC,IAAAA,OAAAA,CAAQgB,IAAI,GAAG,eAAA;IACf,OAAOhB,OAAAA;AACT;AAEA,iBACO,SAASvB,WAAAA,CAAYnN,MAAwB,EAAA;AAClD,IAAA,MAAMyO,MAASkB,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAInC,iBAAiBH,SAAW,EAAA;QAC9B,IAAI;AACFG,YAAAA,YAAAA,GAAe8D,kBAAmB7C,CAAAA,MAAAA,CAAAA;AAClCT,YAAAA,cAAAA,GAAiBS,OAAOmB,eAAe,CAACpC,YAAaqC,CAAAA,gBAAgB,CAAC,CAAE,CAAA,CAAA;AACxEhD,YAAAA,KAAAA,GAAQ4B,OAAOqB,eAAe,CAAC,SAAW,EAAA,EAAA,GAAK,IAAI,EAAI,EAAA;gBAAEC,UAAY,EAAA;AAAM,aAAA,CAAA;AAC3ElD,YAAAA,KAAAA,CAAM6C,IAAI,GAAG,YAAA;YACbzB,aAAgBQ,GAAAA,MAAAA,CAAOuB,iBAAiB,CAAC;AAACnD,gBAAAA;aAAM,EAAE,IAAA,CAAA;AACpD,SAAA,CAAE,OAAOoD,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;YACdzC,YAAe,GAAA,IAAA;YACfQ,cAAiB,GAAA,IAAA;YACjBC,aAAgB,GAAA,IAAA;AAClB;AACF;AACA,IAAA,IAAIT,YAAc,EAAA;AAChBQ,QAAAA,cAAAA,CAAeoC,QAAQ,CAAC,MAAA,EAAQ3B,OAAO4B,IAAI,KAAK,WAAW,CAAI,GAAA,CAAA,CAAA;QAC/DrC,cAAeoC,CAAAA,QAAQ,CAAC,QAAUpQ,EAAAA,MAAAA,CAAAA;AAClCgO,QAAAA,cAAAA,CAAemD,UAAU,CAAC,kBAAoBzE,EAAAA,gBAAAA,EAAkB0E,YAAa,CAAA,oBAAA,CAAA,CAAA;AAC7EpD,QAAAA,cAAAA,CAAemD,UAAU,CAAC,oBAAsBxE,EAAAA,kBAAAA,EAAoByE,YAAa,CAAA,oBAAA,CAAA,CAAA;AACjF3C,QAAAA,MAAAA,CAAO6B,gBAAgB,EAAA;AACvB7B,QAAAA,MAAAA,CAAO8B,cAAc,CAACtC,aAAAA,CAAAA;AACtBQ,QAAAA,MAAAA,CAAO+B,UAAU,CAAChD,YAAAA,CAAAA;QAClBiB,MAAOgC,CAAAA,YAAY,CAAC,CAAGzC,EAAAA,cAAAA,CAAAA;AACvB0C,QAAAA,kBAAAA,EAAAA;AACAjC,QAAAA,MAAAA,CAAOkC,eAAe,EAAA;AACxB;AACF;;;;"}
1
+ {"version":3,"file":"atmosphere.js","sources":["../../src/shaders/atmosphere.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../render/fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { uniformSphereSamples } from '../values';\r\nimport { getDevice } from '../app/api';\r\n\r\nconst TRANSMITTANCE_SAMPLES = 16;\r\nconst RAYLEIGH_SIGMA = [5.802, 13.558, 33.1];\r\nconst MIE_SIGMA = 3.996;\r\nconst MIE_ABSORPTION_SIGMA = 4.4;\r\nconst OZONE_ABSORPTION_SIGMA = [0.65, 1.881, 0.085];\r\n\r\n/** @internal */\r\nexport const CAMERA_POS_Y = 1;\r\n\r\n/** @internal */\r\nexport type AtmosphereParams = {\r\n plantRadius: number;\r\n atmosphereHeight: number;\r\n rayleighScatteringHeight: number;\r\n mieScatteringHeight: number;\r\n mieAnstropy: number;\r\n ozoneCenter: number;\r\n ozoneWidth: number;\r\n apDistance: number;\r\n cameraWorldMatrix: Matrix4x4;\r\n lightDir: Vector3;\r\n lightColor: Vector4;\r\n cameraAspect: number;\r\n cameraHeightScale: number;\r\n};\r\n\r\n/** @internal */\r\nexport function getDefaultAtmosphereParams() {\r\n return {\r\n plantRadius: 6360000,\r\n atmosphereHeight: 60000,\r\n rayleighScatteringHeight: 8000,\r\n mieScatteringHeight: 1200,\r\n mieAnstropy: 0.8,\r\n ozoneCenter: 25000,\r\n ozoneWidth: 15000,\r\n apDistance: 4000,\r\n cameraWorldMatrix: Matrix4x4.identity(),\r\n lightDir: new Vector3(1, 0, 0),\r\n lightColor: new Vector4(1, 1, 1, 10),\r\n cameraAspect: 1,\r\n cameraHeightScale: 1\r\n } as AtmosphereParams;\r\n}\r\n\r\nconst defaultAtmosphereParams = getDefaultAtmosphereParams();\r\n\r\nlet currentAtmosphereParams: Nullable<AtmosphereParams> = null;\r\n\r\nfunction checkParams(other?: Partial<AtmosphereParams>) {\r\n const result = {\r\n transmittance: false,\r\n multiScattering: false,\r\n skyView: false,\r\n aerialPerspective: false\r\n };\r\n other = { ...defaultAtmosphereParams, ...other };\r\n if (!currentAtmosphereParams) {\r\n currentAtmosphereParams = {\r\n ...defaultAtmosphereParams,\r\n lightDir: new Vector3(defaultAtmosphereParams.lightDir),\r\n lightColor: new Vector4(defaultAtmosphereParams.lightColor),\r\n cameraWorldMatrix: new Matrix4x4(defaultAtmosphereParams.cameraWorldMatrix)\r\n };\r\n result.transmittance = true;\r\n result.multiScattering = true;\r\n result.skyView = true;\r\n result.aerialPerspective = true;\r\n } else {\r\n result.transmittance =\r\n currentAtmosphereParams.plantRadius !== other.plantRadius ||\r\n currentAtmosphereParams.atmosphereHeight !== other.atmosphereHeight ||\r\n currentAtmosphereParams.rayleighScatteringHeight !== other.rayleighScatteringHeight ||\r\n currentAtmosphereParams.mieScatteringHeight !== other.mieScatteringHeight ||\r\n currentAtmosphereParams.ozoneCenter !== other.ozoneCenter ||\r\n currentAtmosphereParams.ozoneWidth !== other.ozoneWidth;\r\n result.multiScattering =\r\n result.transmittance || currentAtmosphereParams.mieAnstropy !== other.mieAnstropy;\r\n result.skyView =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n currentAtmosphereParams.cameraHeightScale !== other.cameraHeightScale ||\r\n !currentAtmosphereParams.lightDir.equalsTo(other.lightDir!) ||\r\n !currentAtmosphereParams.lightColor.equalsTo(other.lightColor!) ||\r\n !currentAtmosphereParams.cameraWorldMatrix.equalsTo(other.cameraWorldMatrix!);\r\n result.aerialPerspective =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n result.skyView ||\r\n currentAtmosphereParams.apDistance !== other.apDistance ||\r\n currentAtmosphereParams.cameraAspect !== other.cameraAspect;\r\n }\r\n if (result.transmittance) {\r\n currentAtmosphereParams.plantRadius = other.plantRadius!;\r\n currentAtmosphereParams.atmosphereHeight = other.atmosphereHeight!;\r\n currentAtmosphereParams.rayleighScatteringHeight = other.rayleighScatteringHeight!;\r\n currentAtmosphereParams.mieScatteringHeight = other.mieScatteringHeight!;\r\n currentAtmosphereParams.ozoneCenter = other.ozoneCenter!;\r\n currentAtmosphereParams.ozoneWidth = other.ozoneWidth!;\r\n }\r\n if (result.multiScattering) {\r\n currentAtmosphereParams.mieAnstropy = other.mieAnstropy!;\r\n }\r\n if (result.skyView) {\r\n currentAtmosphereParams.cameraHeightScale = other.cameraHeightScale!;\r\n currentAtmosphereParams.lightDir.set(other.lightDir!);\r\n currentAtmosphereParams.lightColor.set(other.lightColor!);\r\n currentAtmosphereParams.cameraWorldMatrix.set(other.cameraWorldMatrix!);\r\n }\r\n if (result.aerialPerspective) {\r\n currentAtmosphereParams.apDistance = other.apDistance!;\r\n currentAtmosphereParams.cameraAspect = other.cameraAspect!;\r\n }\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function rayIntersectSphere(\r\n scope: PBInsideFunctionScope,\r\n f3Center: PBShaderExp,\r\n fRadius: PBShaderExp,\r\n f3RayStart: PBShaderExp,\r\n f3RayDir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayIntersectSphere';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('center'), pb.float('radius'), pb.vec3('rayStart'), pb.vec3('rayDir')],\r\n function () {\r\n this.$l.OS = pb.length(pb.sub(this.center, this.rayStart));\r\n this.$l.SH = pb.dot(pb.sub(this.center, this.rayStart), this.rayDir);\r\n this.$l.OH = pb.sqrt(pb.sub(pb.mul(this.OS, this.OS), pb.mul(this.SH, this.SH)));\r\n this.$l.PH = pb.sqrt(pb.sub(pb.mul(this.radius, this.radius), pb.mul(this.OH, this.OH)));\r\n this.$if(pb.greaterThan(this.OH, this.radius), function () {\r\n this.$return(pb.float(-1));\r\n });\r\n this.$l.t1 = pb.sub(this.SH, this.PH);\r\n this.$l.t2 = pb.add(this.SH, this.PH);\r\n this.$return(this.$choice(pb.lessThan(this.t1, 0), this.t2, this.t1));\r\n }\r\n );\r\n return scope[funcName](f3Center, fRadius, f3RayStart, f3RayDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceToSky(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3Dir: PBShaderExp,\r\n texLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToSky';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('dir')], function () {\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.params.plantRadius, this.params.atmosphereHeight);\r\n this.$l.upVector = pb.normalize(this.p);\r\n this.$l.cosTheta = pb.dot(this.upVector, this.dir);\r\n this.$l.r = pb.length(this.p);\r\n this.$l.uv = transmittanceLutToUV(this, this.bottomRadius, this.topRadius, this.cosTheta, this.r);\r\n this.$return(pb.textureSampleLevel(texLut, this.uv, 0).rgb);\r\n });\r\n return scope[funcName](stParams, f3Pos, f3Dir);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fRayleighScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighCoefficient';\r\n pb.func(funcName, [pb.float('rayleighScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(RAYLEIGH_SIGMA[0], RAYLEIGH_SIGMA[1], RAYLEIGH_SIGMA[2]), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.rayleighScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fRayleighScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighPhase(scope: PBInsideFunctionScope, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighPhase';\r\n pb.func(funcName, [pb.float('cosTheta')], function () {\r\n this.$return(pb.mul(3 / (16 * Math.PI), pb.add(1, pb.mul(this.cosTheta, this.cosTheta))));\r\n });\r\n return scope[funcName](fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieCoefficient';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function miePhase(scope: PBInsideFunctionScope, fMieAnstropy: PBShaderExp, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_miePhase';\r\n pb.func(funcName, [pb.float('g'), pb.float('cosTheta')], function () {\r\n this.$l.g2 = pb.mul(this.g, this.g);\r\n this.$l.a = 3 / (8 * Math.PI);\r\n this.$l.b = pb.div(pb.sub(1, this.g2), pb.add(2, this.g2));\r\n this.$l.c = pb.add(1, pb.mul(this.cosTheta, this.cosTheta));\r\n this.$l.d = pb.pow(pb.sub(pb.add(1, this.g2), pb.mul(this.g, this.cosTheta, 2)), 1.5);\r\n this.$return(pb.div(pb.mul(this.a, this.b, this.c), this.d));\r\n });\r\n return scope[funcName](fMieAnstropy, fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieAbsorption';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_ABSORPTION_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function ozoneAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fOzoneLevelCenterHeight: PBShaderExp,\r\n fOzoneLevelWidth: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_ozoneAbsorption';\r\n pb.func(funcName, [pb.float('center'), pb.float('width'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(\r\n pb.vec3(OZONE_ABSORPTION_SIGMA[0], OZONE_ABSORPTION_SIGMA[1], OZONE_ABSORPTION_SIGMA[2]),\r\n 1e-6\r\n );\r\n this.$l.rho_h = pb.max(0, pb.sub(1, pb.div(pb.abs(pb.sub(this.h, this.center)), this.width)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fOzoneLevelCenterHeight, fOzoneLevelWidth, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyView(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3EyePos: PBShaderExp,\r\n f3ViewDir: PBShaderExp,\r\n fMaxDis: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp,\r\n withGround = true\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_getSkyView';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec3('eyePos'), pb.vec3('viewDir'), pb.float('maxDis')],\r\n function () {\r\n const N_SAMPLE = 32;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.eyePos,\r\n this.viewDir\r\n );\r\n this.$if(pb.lessThan(this.dis, 0), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n if (withGround) {\r\n this.$l.d = rayIntersectSphere(this, pb.vec3(0), this.params.plantRadius, this.eyePos, this.viewDir);\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n }\r\n this.$if(pb.greaterThanEqual(this.maxDis, 0), function () {\r\n this.dis = pb.min(this.dis, this.maxDis);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.eyePos, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.sunLuminance = pb.mul(this.params.lightColor.rgb, this.params.lightColor.a);\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.extinction = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.extinction, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.params.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n\r\n this.$l.inScattering = pb.mul(this.t1, this.s, this.t2, this.ds, this.sunLuminance);\r\n this.color = pb.add(this.color, this.inScattering);\r\n\r\n this.$l.multiScattering = getMultiScattering(this, this.params, this.p, texMultiScatteringLut);\r\n this.color = pb.add(this.color, pb.mul(this.multiScattering, this.t2, this.ds, this.sunLuminance));\r\n\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n this.$return(this.color);\r\n }\r\n );\r\n return scope[funcName](stParams, f3EyePos, f3ViewDir, fMaxDis);\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_getMultiScattering';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p')], function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.zenithAngle = pb.dot(pb.normalize(this.p), this.params.lightDir);\r\n this.$l.uv = pb.vec2(\r\n pb.add(pb.mul(this.zenithAngle, 0.5), 0.5),\r\n pb.div(this.h, this.params.atmosphereHeight)\r\n );\r\n this.$l.G_ALL = pb.textureSampleLevel(texMultiScatteringLut, this.uv, 0).rgb;\r\n this.$return(pb.mul(this.G_ALL, this.sigma_s));\r\n });\r\n return scope[funcName](stParams, f3Pos);\r\n}\r\n\r\n/** @internal */\r\nexport function integralMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f3SamplePoint: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const N_DIRECTION = 64;\r\n const N_SAMPLE = 32;\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_integralMultiScattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('lightDir'), pb.vec3('samplePoint')], function () {\r\n const uniformPhase = 1 / (4 * Math.PI);\r\n const sphereSolidAngle = (4 * Math.PI) / N_DIRECTION;\r\n this.$l.G_2 = pb.vec3(0);\r\n this.$l.f_ms = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_DIRECTION, function () {\r\n this.$l.viewDir = this.uniformSphereSamples.at(this.i).xyz;\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$l.d = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.samplePoint, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('j'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_a = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_t = pb.add(this.sigma_s, this.sigma_a);\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.sigma_t, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n this.G_2 = pb.add(this.G_2, pb.mul(this.t1, this.s, this.t2, uniformPhase, this.ds));\r\n this.f_ms = pb.add(this.f_ms, pb.mul(this.t2, this.sigma_s, uniformPhase, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n });\r\n this.G_2 = pb.mul(this.G_2, sphereSolidAngle);\r\n this.f_ms = pb.mul(this.f_ms, sphereSolidAngle);\r\n this.$return(pb.div(this.G_2, pb.sub(pb.vec3(1), this.f_ms)));\r\n });\r\n return scope[funcName](stParams, f3LightDir, f3SamplePoint);\r\n}\r\n\r\n/** @internal */\r\nexport function scattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3ViewDir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_scattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('viewDir')], function () {\r\n this.$l.cosTheta = pb.dot(this.params.lightDir, this.viewDir);\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.rayleigh = pb.mul(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n rayleighPhase(this, this.cosTheta)\r\n );\r\n this.$l.mie = pb.mul(\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n miePhase(this, this.params.mieAnstropy, this.cosTheta)\r\n );\r\n this.$return(pb.add(this.rayleigh, this.mie));\r\n });\r\n return scope[funcName](stParams, f3Pos, f3ViewDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittance(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3P1: PBShaderExp,\r\n f3P2: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_transmittance';\r\n pb.func(funcName, [Params('params'), pb.vec3('p1'), pb.vec3('p2')], function () {\r\n this.$l.dir = pb.normalize(pb.sub(this.p2, this.p1));\r\n this.$l.distance = pb.length(pb.sub(this.p2, this.p1));\r\n this.$l.ds = pb.div(this.distance, TRANSMITTANCE_SAMPLES);\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.p = pb.add(this.p1, pb.mul(this.dir, this.ds, 0.5));\r\n this.$for(pb.int('i'), 0, TRANSMITTANCE_SAMPLES, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.scattering = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.absorption = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.extinction = pb.add(this.scattering, this.absorption);\r\n this.sum = pb.add(this.sum, pb.mul(this.extinction, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.dir, this.ds));\r\n });\r\n this.$return(pb.exp(pb.neg(this.sum)));\r\n });\r\n return scope[funcName](stParams, f3P1, f3P2) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLutToUV(\r\n scope: PBInsideFunctionScope,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp,\r\n fMu: PBShaderExp,\r\n fR: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToUV';\r\n pb.func(\r\n funcName,\r\n [pb.float('bottomRadius'), pb.float('topRadius'), pb.float('mu'), pb.float('r')],\r\n function () {\r\n this.$l.H = pb.sqrt(\r\n pb.max(\r\n 0,\r\n pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius))\r\n )\r\n );\r\n this.$l.rho = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.r, this.r), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.discriminant = pb.add(\r\n pb.mul(this.r, this.r, pb.sub(pb.mul(this.mu, this.mu), 1)),\r\n pb.mul(this.topRadius, this.topRadius)\r\n );\r\n this.$l.d = pb.max(0, pb.sub(pb.sqrt(this.discriminant), pb.mul(this.mu, this.r)));\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.x_mu = pb.div(pb.sub(this.d, this.d_min), pb.sub(this.d_max, this.d_min));\r\n this.$l.x_r = pb.div(this.rho, this.H);\r\n this.$return(pb.vec2(this.x_mu, this.x_r));\r\n }\r\n );\r\n return scope[funcName](fBottomRadius, fTopRadius, fMu, fR) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function viewDirToUV(scope: PBInsideFunctionScope, f3ViewDir: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_viewDirToUV';\r\n pb.func(funcName, [pb.vec3('viewDir')], function () {\r\n this.$l.uv = pb.vec2(pb.atan2(this.viewDir.z, this.viewDir.x), pb.asin(this.viewDir.y));\r\n this.uv = pb.div(this.uv, pb.vec2(2 * Math.PI, Math.PI));\r\n this.uv = pb.add(this.uv, pb.vec2(0.5));\r\n this.$return(this.uv);\r\n });\r\n return scope[funcName](f3ViewDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function uvToViewDir(scope: PBInsideFunctionScope, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToViewDir';\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.theta = pb.mul(pb.sub(1, this.uv.y), Math.PI);\r\n this.$l.phi = pb.mul(pb.sub(pb.mul(this.uv.x, 2), 1), Math.PI);\r\n this.$l.x = pb.mul(pb.sin(this.theta), pb.cos(this.phi));\r\n this.$l.z = pb.mul(pb.sin(this.theta), pb.sin(this.phi));\r\n this.$l.y = pb.cos(this.theta);\r\n this.$return(pb.vec3(this.x, this.y, this.z));\r\n });\r\n return scope[funcName](f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function uvToTransmittanceLut(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToTransmittanceLut';\r\n pb.func(funcName, [pb.vec2('uv'), pb.float('bottomRadius'), pb.float('topRadius')], function () {\r\n this.$l.x_mu = this.uv.x;\r\n this.$l.x_r = this.uv.y;\r\n this.$l.H = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.rho = pb.mul(this.H, this.x_r);\r\n this.$l.r = pb.sqrt(\r\n pb.max(0, pb.add(pb.mul(this.rho, this.rho), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.d = pb.add(this.d_min, pb.mul(this.x_mu, pb.sub(this.d_max, this.d_min)));\r\n this.$l.mu = this.$choice(\r\n pb.equal(this.d, 0),\r\n pb.float(1),\r\n pb.div(\r\n pb.sub(pb.mul(this.H, this.H), pb.add(pb.mul(this.rho, this.rho), pb.mul(this.d, this.d))),\r\n pb.mul(this.r, this.d, 2)\r\n )\r\n );\r\n this.mu = pb.clamp(this.mu, -1, 1);\r\n this.$return(pb.vec2(this.mu, this.r));\r\n });\r\n return scope[funcName](f2UV, fBottomRadius, fTopRadius) as PBShaderExp;\r\n}\r\n\r\nfunction sunBloom(\r\n scope: PBInsideFunctionScope,\r\n f3ViewDir: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f4LightColorAndIntensity: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_sunBloom';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('viewDir'), pb.vec3('lightDir'), pb.vec4('sunColorAndIntensity'), pb.float('sunSolidAngle')],\r\n function () {\r\n this.$l.minSunCosTheta = pb.cos(this.sunSolidAngle);\r\n this.$l.cosTheta = pb.dot(this.viewDir, this.lightDir);\r\n this.$l.luminance = pb.mul(this.sunColorAndIntensity.rgb, this.sunColorAndIntensity.a);\r\n this.$if(pb.lessThan(this.cosTheta, this.minSunCosTheta), function () {\r\n this.$l.offset = pb.sub(this.minSunCosTheta, this.cosTheta);\r\n this.$l.gaussianBloom = pb.mul(pb.exp(pb.mul(this.offset, -50000)), 0.5);\r\n this.$l.invBloom = pb.mul(pb.div(1, pb.add(0.02, pb.mul(this.offset, 300))), 0.01);\r\n this.luminance = pb.mul(this.luminance, pb.add(this.gaussianBloom, this.invBloom));\r\n });\r\n this.$return(this.luminance);\r\n }\r\n );\r\n return scope[funcName](f3ViewDir, f3LightDir, f4LightColorAndIntensity, fSunSolidAngle) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function skyBox(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f4SunColor: PBShaderExp,\r\n f3SkyBoxWorldPos: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texSkyViewLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_skybox';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec4('sunColor').out(), pb.vec3('worldPos'), pb.float('sunSolidAngle')],\r\n function () {\r\n this.$l.rgb = pb.vec3(0);\r\n this.$l.viewDir = pb.normalize(this.worldPos);\r\n this.rgb = pb.add(\r\n this.rgb,\r\n pb.textureSampleLevel(texSkyViewLut, viewDirToUV(this, this.viewDir), 0).rgb\r\n );\r\n this.$l.groundDistance = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n pb.vec3(0, pb.add(this.params.plantRadius, pb.mul(CAMERA_POS_Y, this.params.cameraHeightScale)), 0),\r\n this.viewDir\r\n );\r\n this.$l.sunTransmittance = transmittanceToSky(\r\n this,\r\n this.params,\r\n pb.vec3(0, pb.add(this.params.cameraHeightScale, this.params.plantRadius), 0),\r\n this.params.lightDir,\r\n texTransmittanceLut\r\n );\r\n this.sunColor = pb.mul(this.params.lightColor, pb.vec4(this.sunTransmittance, 1));\r\n this.$if(pb.lessThan(this.groundDistance, 0), function () {\r\n this.rgb = pb.add(\r\n this.rgb,\r\n sunBloom(this, this.viewDir, this.params.lightDir, this.sunColor, this.sunSolidAngle)\r\n );\r\n });\r\n this.$return(pb.vec4(this.rgb, 1));\r\n }\r\n );\r\n return scope[funcName](stParams, f4SunColor, f3SkyBoxWorldPos, fSunSolidAngle) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspective(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n stParams: PBShaderExp,\r\n f3CameraPos: PBShaderExp,\r\n f3WorldPos: PBShaderExp,\r\n f3Dim: PBShaderExp,\r\n texAerialPerspectiveLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_aerialPerspective';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec2('uv'), pb.vec3('cameraPos'), pb.vec3('worldPos'), pb.vec3('dim')],\r\n function () {\r\n this.$l.V = pb.sub(this.worldPos, this.cameraPos);\r\n this.$l.dis = pb.length(this.V);\r\n this.$l.viewDir = pb.normalize(this.V);\r\n this.$l.apDistance = pb.div(this.params.apDistance, this.params.cameraHeightScale);\r\n this.$l.d0 = pb.clamp(pb.div(this.dis, this.apDistance), 0, 1);\r\n this.$l.weight = pb.clamp(pb.mul(this.d0, 2), 0, 1);\r\n this.$l.dz = pb.mul(this.d0, pb.sub(this.dim.z, 1));\r\n this.$l.slice = pb.floor(this.dz);\r\n this.$l.nextSlice = pb.min(pb.add(this.slice, 1), pb.sub(this.dim.z, 1));\r\n this.$l.factor = pb.sub(this.dz, pb.floor(this.dz));\r\n this.t = pb.div(this.uv, pb.vec2(this.dim.x, 1));\r\n this.$l.uv1 = pb.add(this.t, pb.vec2(pb.div(this.slice, this.dim.z), 0));\r\n this.$l.uv2 = pb.add(this.t, pb.vec2(pb.div(this.nextSlice, this.dim.z), 0));\r\n this.$l.data1 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv1, 0);\r\n this.$l.data2 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv2, 0);\r\n this.$l.data = pb.mix(this.data1, this.data2, this.factor);\r\n this.$l.inscattering = pb.mul(this.data.rgb, this.weight);\r\n //this.$l.transmittance = pb.sub(1, pb.mul(this.weight, pb.sub(1, this.data.a)));\r\n this.$l.planetTranslate = pb.vec3(0, this.params.plantRadius, 0);\r\n this.$l.transmittance = pb.dot(\r\n transmittance(\r\n this,\r\n this.params,\r\n pb.add(this.cameraPos, this.planetTranslate),\r\n pb.add(this.worldPos, this.planetTranslate)\r\n ),\r\n pb.vec3(1 / 3, 1 / 3, 1 / 3)\r\n );\r\n this.$return(pb.vec4(this.inscattering, this.transmittance));\r\n }\r\n );\r\n return scope[funcName](stParams, f2UV, f3CameraPos, f3WorldPos, f3Dim) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspectiveLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n f3VoxelDim: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcNameFixVoxel = 'z_fixVoxel';\r\n pb.func(\r\n funcNameFixVoxel,\r\n [\r\n Params('params'),\r\n pb.vec3('eyePos'),\r\n pb.vec3('viewDir').inout(),\r\n pb.float('maxDis'),\r\n pb.float('adjustedMaxDis').inout()\r\n ],\r\n function () {\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$l.voxelHeight = pb.length(this.voxelPos);\r\n this.$l.underGround = pb.lessThan(this.voxelHeight, this.params.plantRadius);\r\n this.$l.cameraToVoxel = pb.sub(this.voxelPos, this.eyePos);\r\n this.$l.cameraToVoxelLen = pb.length(this.cameraToVoxel);\r\n this.$l.cameraToVoxelDir = pb.div(this.cameraToVoxel, this.cameraToVoxelLen);\r\n this.$l.planetNearT = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.eyePos,\r\n this.cameraToVoxelDir\r\n );\r\n this.$l.belowHorizon = pb.and(\r\n pb.greaterThan(this.planetNearT, 0),\r\n pb.greaterThan(this.cameraToVoxelLen, this.planetNearT)\r\n );\r\n this.$l.eyePos2 = this.eyePos;\r\n this.$if(pb.or(this.underGround, this.belowHorizon), function () {\r\n this.eyePos2 = pb.add(this.eyePos2, pb.mul(pb.normalize(this.eyePos2), 0.02));\r\n this.$if(this.belowHorizon, function () {\r\n this.$l.voxelWorldPosNorm = pb.normalize(this.voxelPos);\r\n this.$l.camProjOnGround = pb.mul(pb.normalize(this.eyePos2), this.params.plantRadius);\r\n this.$l.voxProjOnGround = pb.mul(this.voxelWorldPosNorm, this.params.plantRadius);\r\n this.$l.voxelGroundToRayStart = pb.sub(this.eyePos2, this.voxProjOnGround);\r\n this.$if(\r\n pb.lessThan(pb.dot(pb.normalize(this.voxelGroundToRayStart), this.voxelWorldPosNorm), 0.0001),\r\n function () {\r\n this.$l.middlePoint = pb.mul(pb.add(this.camProjOnGround, this.voxProjOnGround), 0.5);\r\n this.$l.middlePointOnGround = pb.mul(pb.normalize(this.middlePoint), this.params.plantRadius);\r\n this.voxelPos = pb.add(this.eyePos2, pb.mul(pb.sub(this.middlePointOnGround, this.eyePos2), 2));\r\n }\r\n );\r\n }).$else(function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n });\r\n this.$l.V = pb.sub(this.voxelPos, this.eyePos2);\r\n this.adjustedMaxDis = pb.length(this.V);\r\n this.viewDir = pb.div(this.V, this.adjustedMaxDis);\r\n });\r\n this.$return(this.eyePos2);\r\n }\r\n );\r\n const funcName = 'z_aerialPerspectiveLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.vec3('dim'), pb.float('cameraPosY')], function () {\r\n this.$l.uvw = pb.vec3(this.uv, 0);\r\n this.uvw.x = pb.mul(this.uvw.x, this.dim.x, this.dim.z);\r\n this.uvw.z = pb.div(pb.floor(pb.div(this.uvw.x, this.dim.z)), this.dim.x);\r\n this.uvw.x = pb.div(pb.mod(this.uvw.x, this.dim.z), this.dim.x);\r\n this.uvw = pb.add(this.uvw, pb.div(pb.vec3(0.5), this.dim));\r\n this.$l.slice = this.uvw.z; //pb.mul(this.uvw.z, this.uvw.z);\r\n this.$l.viewDir = pb.normalize(\r\n pb.mul(\r\n this.params.cameraWorldMatrix,\r\n pb.vec4(\r\n pb.sub(pb.mul(this.uvw.x, 2), 1),\r\n pb.div(pb.sub(pb.mul(this.uvw.y, 2), 1), this.params.cameraAspect),\r\n -1,\r\n 0\r\n )\r\n ).xyz\r\n );\r\n this.$l.eyePos = pb.vec3(\r\n 0,\r\n pb.add(pb.mul(this.cameraPosY, this.params.cameraHeightScale), this.params.plantRadius),\r\n 0\r\n );\r\n this.$l.maxDis = pb.mul(this.slice, this.params.apDistance);\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$if(pb.lessThan(pb.length(this.voxelPos), this.params.plantRadius), function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n this.maxDis = pb.length(pb.sub(this.eyePos, this.voxelPos));\r\n });\r\n this.$l.color = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n this.maxDis,\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.eyePos, this.viewDir, texTransmittanceLut);\r\n this.$l.t2 = transmittanceToSky(this, this.params, this.voxelPos, this.viewDir, texTransmittanceLut);\r\n this.$l.t = pb.clamp(pb.div(this.t1, pb.max(this.t2, pb.vec3(0.0001))), pb.vec3(0), pb.vec3(1));\r\n this.$return(pb.vec4(this.color, pb.dot(this.t, pb.vec3(1 / 3, 1 / 3, 1 / 3))));\r\n });\r\n return scope[funcName](stParams, f2UV, f3VoxelDim, CAMERA_POS_Y) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function skyViewLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_skyViewLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.float('cameraPosY')], function () {\r\n this.$l.viewDir = uvToViewDir(this, this.uv);\r\n this.$l.h = pb.add(this.params.plantRadius, pb.mul(this.cameraPosY, this.params.cameraHeightScale));\r\n this.$l.eyePos = pb.vec3(0, this.h, 0);\r\n this.$l.rgb = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n pb.float(-1),\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV, CAMERA_POS_Y) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function multiScatteringLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_multiScatteringLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.mu_s = pb.sub(pb.mul(this.uv.x, 2), 1);\r\n this.$l.r = pb.add(pb.mul(this.uv.y, this.params.atmosphereHeight), this.params.plantRadius);\r\n this.$l.cosTheta = this.mu_s;\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, pb.mul(this.cosTheta, this.cosTheta)));\r\n this.$l.lightDir = pb.vec3(this.sinTheta, this.cosTheta, 0);\r\n this.$l.p = pb.vec3(0, this.r, 0);\r\n this.$l.rgb = integralMultiScattering(this, this.params, this.lightDir, this.p, texTransmittanceLut);\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLut(scope: PBInsideFunctionScope, stParams: PBShaderExp, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'transmittanceLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.color = pb.vec4(0, 0, 0, 1);\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.bottomRadius, this.params.atmosphereHeight);\r\n this.$l.lutParams = uvToTransmittanceLut(this, this.uv, this.bottomRadius, this.topRadius);\r\n this.$l.cos_theta = this.lutParams.x;\r\n this.$l.r = this.lutParams.y;\r\n this.$l.sin_theta = pb.sqrt(pb.sub(1, pb.mul(this.cos_theta, this.cos_theta)));\r\n this.$l.viewDir = pb.vec3(this.sin_theta, this.cos_theta, 0);\r\n this.$l.eyePos = pb.vec3(0, this.r, 0);\r\n this.$l.dis = rayIntersectSphere(this, pb.vec3(0), this.topRadius, this.eyePos, this.viewDir);\r\n this.$l.hitPoint = pb.add(this.eyePos, pb.mul(this.viewDir, this.dis));\r\n this.$return(pb.vec4(transmittance(this, this.params, this.eyePos, this.hitPoint), 1));\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function atmosphereLUTRendered() {\r\n return !!transmittanceLUT && !!multiScatteringLUT && !!skyViewLUT && !!ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAtmosphereLUTs(params?: Partial<AtmosphereParams>) {\r\n const checkResult = checkParams(params);\r\n if (checkResult.transmittance || !transmittanceLUT) {\r\n renderTransmittanceLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.multiScattering || !multiScatteringLUT) {\r\n renderMultiScatteringLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.skyView || !skyViewLUT) {\r\n renderSkyViewLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.aerialPerspective || !ApLut) {\r\n renderAPLut(currentAtmosphereParams!);\r\n }\r\n}\r\n\r\n/* For debug */\r\nlet transmittanceLutProgram: GPUProgram;\r\nlet multiScatteringLutProgram: GPUProgram;\r\nlet skyViewLutProgram: GPUProgram;\r\nlet APLutProgram: GPUProgram;\r\nlet transmittanceLutBindGroup: BindGroup;\r\nlet transmittanceLUT: Texture2D;\r\nlet transmittanceFramebuffer: FrameBuffer;\r\n\r\nlet multiScatteringLutBindGroup: BindGroup;\r\nlet multiScatteringLUT: Texture2D;\r\nlet uniformSphereSampleBuffer: GPUDataBuffer;\r\nlet multiScatteringFramebuffer: FrameBuffer;\r\n\r\nlet skyViewLutBindGroup: BindGroup;\r\nlet skyViewLUT: Texture2D;\r\nlet skyViewFramebuffer: FrameBuffer;\r\n\r\nlet APLutBindGroup: BindGroup;\r\nlet ApLut: Texture2D;\r\nlet APFramebuffer: FrameBuffer;\r\n\r\n/** @internal */\r\nexport function getTransmittanceLut() {\r\n return transmittanceLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScatteringLut() {\r\n return multiScatteringLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyViewLut() {\r\n return skyViewLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getAerialPerspectiveLut() {\r\n return ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function getAtmosphereParamsStruct(pb: ProgramBuilder) {\r\n return pb.defineStruct([\r\n pb.mat4('cameraWorldMatrix'),\r\n pb.vec4('lightColor'),\r\n pb.vec3('lightDir'),\r\n pb.float('cameraAspect'),\r\n pb.float('plantRadius'),\r\n pb.float('atmosphereHeight'),\r\n pb.float('rayleighScatteringHeight'),\r\n pb.float('mieScatteringHeight'),\r\n pb.float('mieAnstropy'),\r\n pb.float('ozoneCenter'),\r\n pb.float('ozoneWidth'),\r\n pb.float('apDistance'),\r\n pb.float('cameraHeightScale')\r\n ]);\r\n}\r\n\r\n/** @internal */\r\nexport function createTransmittanceLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = transmittanceLut(this, this.params, this.$inputs.uv);\r\n });\r\n }\r\n })!;\r\n program.name = '@TransmittanceLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderTransmittanceLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (transmittanceLutProgram === undefined) {\r\n try {\r\n transmittanceLutProgram = createTransmittanceLutProgram(device);\r\n transmittanceLutBindGroup = device.createBindGroup(transmittanceLutProgram.bindGroupLayouts[0]);\r\n transmittanceLUT = device.createTexture2D('rgba16f', 256, 64, {\r\n mipmapping: false\r\n })!;\r\n transmittanceLUT.name = 'DebugTransmittanceLut';\r\n transmittanceFramebuffer = device.createFrameBuffer([transmittanceLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (transmittanceLutProgram) {\r\n transmittanceLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n transmittanceLutBindGroup.setValue('params', params);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(transmittanceFramebuffer);\r\n device.setProgram(transmittanceLutProgram);\r\n device.setBindGroup(0, transmittanceLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createMultiScatteringLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.uniformSphereSamples = pb.vec4[64]().uniformBuffer(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = multiScatteringLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@MultiScatteringLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderMultiScatteringLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (multiScatteringLutProgram === undefined) {\r\n try {\r\n multiScatteringLutProgram = createMultiScatteringLutProgram(device);\r\n multiScatteringLutBindGroup = device.createBindGroup(multiScatteringLutProgram.bindGroupLayouts[0]);\r\n multiScatteringLUT = device.createTexture2D('rgba16f', 32, 32, {\r\n mipmapping: false\r\n })!;\r\n multiScatteringLUT.name = 'DebugMultiScatteringLut';\r\n multiScatteringFramebuffer = device.createFrameBuffer([multiScatteringLUT], null);\r\n uniformSphereSampleBuffer = multiScatteringLutBindGroup.getBuffer('uniformSphereSamples', false)!;\r\n const sphereSamples = new Float32Array(64 * 4);\r\n for (let i = 0; i < 64; i++) {\r\n sphereSamples[i * 4 + 0] = uniformSphereSamples[i].x;\r\n sphereSamples[i * 4 + 1] = uniformSphereSamples[i].y;\r\n sphereSamples[i * 4 + 2] = uniformSphereSamples[i].z;\r\n sphereSamples[i * 4 + 3] = 0;\r\n }\r\n uniformSphereSampleBuffer.bufferSubData(0, sphereSamples);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (multiScatteringLutProgram) {\r\n multiScatteringLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n multiScatteringLutBindGroup.setValue('params', params);\r\n //multiScatteringLutBindGroup.setBuffer('uniformSphereSamples', uniformSphereSampleBuffer);\r\n multiScatteringLutBindGroup.setTexture(\r\n 'transmittanceLut',\r\n transmittanceLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(multiScatteringFramebuffer);\r\n device.setProgram(multiScatteringLutProgram);\r\n device.setBindGroup(0, multiScatteringLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createSkyViewLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = skyViewLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@SkyViewLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderSkyViewLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (skyViewLutProgram === undefined) {\r\n try {\r\n skyViewLutProgram = createSkyViewLutProgram(device);\r\n skyViewLutBindGroup = device.createBindGroup(skyViewLutProgram.bindGroupLayouts[0]);\r\n skyViewLUT = device.createTexture2D('rgba16f', 256, 128, {\r\n mipmapping: false\r\n })!;\r\n skyViewLUT.name = 'DebugSkyViewLut';\r\n skyViewFramebuffer = device.createFrameBuffer([skyViewLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (skyViewLutProgram) {\r\n skyViewLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n skyViewLutBindGroup.setValue('params', params);\r\n skyViewLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n skyViewLutBindGroup.setTexture(\r\n 'multiScatteringLut',\r\n multiScatteringLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(skyViewFramebuffer);\r\n device.setProgram(skyViewLutProgram);\r\n device.setBindGroup(0, skyViewLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createAPLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = aerialPerspectiveLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n pb.vec3(32, 32, 32),\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@APLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAPLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (APLutProgram === undefined) {\r\n try {\r\n APLutProgram = createAPLutProgram(device);\r\n APLutBindGroup = device.createBindGroup(APLutProgram.bindGroupLayouts[0]);\r\n ApLut = device.createTexture2D('rgba16f', 32 * 32, 32, { mipmapping: false })!;\r\n ApLut.name = 'DebugAPLut';\r\n APFramebuffer = device.createFrameBuffer([ApLut], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (APLutProgram) {\r\n APLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n APLutBindGroup.setValue('params', params);\r\n APLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n APLutBindGroup.setTexture('multiScatteringLut', multiScatteringLUT, fetchSampler('clamp_linear_nomip'));\r\n device.pushDeviceStates();\r\n device.setFramebuffer(APFramebuffer);\r\n device.setProgram(APLutProgram);\r\n device.setBindGroup(0, APLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n"],"names":["TRANSMITTANCE_SAMPLES","RAYLEIGH_SIGMA","MIE_SIGMA","MIE_ABSORPTION_SIGMA","OZONE_ABSORPTION_SIGMA","CAMERA_POS_Y","getDefaultAtmosphereParams","plantRadius","atmosphereHeight","rayleighScatteringHeight","mieScatteringHeight","mieAnstropy","ozoneCenter","ozoneWidth","apDistance","cameraWorldMatrix","Matrix4x4","identity","lightDir","Vector3","lightColor","Vector4","cameraAspect","cameraHeightScale","defaultAtmosphereParams","currentAtmosphereParams","checkParams","other","result","transmittance","multiScattering","skyView","aerialPerspective","equalsTo","set","rayIntersectSphere","scope","f3Center","fRadius","f3RayStart","f3RayDir","pb","$builder","funcName","func","vec3","float","$l","OS","length","sub","center","rayStart","SH","dot","rayDir","OH","sqrt","mul","PH","radius","$if","greaterThan","$return","t1","t2","add","$choice","lessThan","transmittanceToSky","stParams","f3Pos","f3Dir","texLut","Params","getAtmosphereParamsStruct","bottomRadius","params","topRadius","upVector","normalize","p","cosTheta","dir","r","uv","transmittanceLutToUV","textureSampleLevel","rgb","rayleighCoefficient","fRayleighScatteringHeight","fH","sigma","rho_h","exp","neg","div","h","rayleighPhase","fCosTheta","Math","PI","mieCoefficient","fMieScatteringHeight","miePhase","fMieAnstropy","g2","g","a","b","c","d","pow","mieAbsorption","ozoneAbsorption","fOzoneLevelCenterHeight","fOzoneLevelWidth","max","abs","width","getSkyView","f3EyePos","f3ViewDir","fMaxDis","texTransmittanceLut","texMultiScatteringLut","withGround","N_SAMPLE","color","dis","eyePos","viewDir","min","greaterThanEqual","maxDis","ds","sunLuminance","opticalDepth","$for","int","extinction","s","scattering","inScattering","getMultiScattering","sigma_s","zenithAngle","vec2","G_ALL","integralMultiScattering","f3LightDir","f3SamplePoint","N_DIRECTION","uniformPhase","sphereSolidAngle","G_2","f_ms","uniformSphereSamples","at","i","xyz","samplePoint","sigma_a","sigma_t","rayleigh","mie","f3P1","f3P2","p2","p1","distance","sum","absorption","fBottomRadius","fTopRadius","fMu","fR","H","rho","discriminant","mu","d_min","d_max","x_mu","x_r","viewDirToUV","atan2","z","x","asin","y","uvToViewDir","f2UV","theta","phi","sin","cos","uvToTransmittanceLut","equal","clamp","sunBloom","f4LightColorAndIntensity","fSunSolidAngle","vec4","minSunCosTheta","sunSolidAngle","luminance","sunColorAndIntensity","offset","gaussianBloom","invBloom","skyBox","f4SunColor","f3SkyBoxWorldPos","texSkyViewLut","out","worldPos","groundDistance","sunTransmittance","sunColor","f3CameraPos","f3WorldPos","f3Dim","texAerialPerspectiveLut","V","cameraPos","d0","weight","dz","dim","slice","floor","nextSlice","factor","t","uv1","uv2","data1","data2","data","mix","inscattering","planetTranslate","aerialPerspectiveLut","f3VoxelDim","funcNameFixVoxel","inout","voxelPos","voxelHeight","underGround","cameraToVoxel","cameraToVoxelLen","cameraToVoxelDir","planetNearT","belowHorizon","and","eyePos2","or","voxelWorldPosNorm","camProjOnGround","voxProjOnGround","voxelGroundToRayStart","middlePoint","middlePointOnGround","$else","adjustedMaxDis","uvw","mod","cameraPosY","skyViewLut","multiScatteringLut","mu_s","sinTheta","transmittanceLut","lutParams","cos_theta","sin_theta","hitPoint","atmosphereLUTRendered","transmittanceLUT","multiScatteringLUT","skyViewLUT","ApLut","renderAtmosphereLUTs","checkResult","renderTransmittanceLut","renderMultiScatteringLut","renderSkyViewLut","renderAPLut","transmittanceLutProgram","multiScatteringLutProgram","skyViewLutProgram","APLutProgram","transmittanceLutBindGroup","transmittanceFramebuffer","multiScatteringLutBindGroup","uniformSphereSampleBuffer","multiScatteringFramebuffer","skyViewLutBindGroup","skyViewFramebuffer","APLutBindGroup","APFramebuffer","getTransmittanceLut","getMultiScatteringLut","getSkyViewLut","getAerialPerspectiveLut","defineStruct","mat4","createTransmittanceLutProgram","device","program","buildRenderProgram","vertex","flip","uniform","$inputs","pos","attrib","$outputs","main","$builtins","position","xy","notEqual","fragment","outColor","name","getDevice","undefined","createBindGroup","bindGroupLayouts","createTexture2D","mipmapping","createFrameBuffer","err","console","error","setValue","type","pushDeviceStates","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","createMultiScatteringLutProgram","uniformBuffer","tex2D","getBuffer","sphereSamples","Float32Array","bufferSubData","setTexture","fetchSampler","createSkyViewLutProgram","createAPLutProgram"],"mappings":"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"}