@fps-games/editor 0.2.1-beta.3 → 0.2.1-beta.4

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 (514) hide show
  1. package/dist/build-info.json +44 -44
  2. package/dist/editor-commands/capabilities/assets.d.ts +8 -0
  3. package/dist/editor-commands/capabilities/assets.d.ts.map +1 -0
  4. package/dist/{agent-bridge → editor-commands}/capabilities/assets.js +41 -41
  5. package/dist/editor-commands/capabilities/assets.js.map +1 -0
  6. package/dist/editor-commands/capabilities/editor-state.d.ts +5 -0
  7. package/dist/editor-commands/capabilities/editor-state.d.ts.map +1 -0
  8. package/dist/{agent-bridge → editor-commands}/capabilities/editor-state.js +22 -22
  9. package/dist/editor-commands/capabilities/editor-state.js.map +1 -0
  10. package/dist/editor-commands/capabilities/hierarchy.d.ts +4 -0
  11. package/dist/editor-commands/capabilities/hierarchy.d.ts.map +1 -0
  12. package/dist/{agent-bridge → editor-commands}/capabilities/hierarchy.js +5 -5
  13. package/dist/editor-commands/capabilities/hierarchy.js.map +1 -0
  14. package/dist/editor-commands/capabilities/host-lifecycle.d.ts +11 -0
  15. package/dist/editor-commands/capabilities/host-lifecycle.d.ts.map +1 -0
  16. package/dist/editor-commands/capabilities/host-lifecycle.js +149 -0
  17. package/dist/editor-commands/capabilities/host-lifecycle.js.map +1 -0
  18. package/dist/editor-commands/capabilities/prefabs.d.ts +5 -0
  19. package/dist/editor-commands/capabilities/prefabs.d.ts.map +1 -0
  20. package/dist/{agent-bridge → editor-commands}/capabilities/prefabs.js +93 -93
  21. package/dist/editor-commands/capabilities/prefabs.js.map +1 -0
  22. package/dist/editor-commands/capabilities/scene-objects.d.ts +8 -0
  23. package/dist/editor-commands/capabilities/scene-objects.d.ts.map +1 -0
  24. package/dist/editor-commands/capabilities/scene-objects.js +480 -0
  25. package/dist/editor-commands/capabilities/scene-objects.js.map +1 -0
  26. package/dist/editor-commands/capabilities/selection.d.ts +5 -0
  27. package/dist/editor-commands/capabilities/selection.d.ts.map +1 -0
  28. package/dist/editor-commands/capabilities/selection.js +60 -0
  29. package/dist/editor-commands/capabilities/selection.js.map +1 -0
  30. package/dist/editor-commands/capabilities/shadows.d.ts +5 -0
  31. package/dist/editor-commands/capabilities/shadows.d.ts.map +1 -0
  32. package/dist/{agent-bridge → editor-commands}/capabilities/shadows.js +74 -74
  33. package/dist/editor-commands/capabilities/shadows.js.map +1 -0
  34. package/dist/editor-commands/capabilities/transform.d.ts +5 -0
  35. package/dist/editor-commands/capabilities/transform.d.ts.map +1 -0
  36. package/dist/editor-commands/capabilities/transform.js +164 -0
  37. package/dist/editor-commands/capabilities/transform.js.map +1 -0
  38. package/dist/editor-commands/capabilities/ui-regions.d.ts +4 -0
  39. package/dist/editor-commands/capabilities/ui-regions.d.ts.map +1 -0
  40. package/dist/{agent-bridge → editor-commands}/capabilities/ui-regions.js +55 -57
  41. package/dist/editor-commands/capabilities/ui-regions.js.map +1 -0
  42. package/dist/editor-commands/capabilities/viewport.d.ts +5 -0
  43. package/dist/editor-commands/capabilities/viewport.d.ts.map +1 -0
  44. package/dist/{agent-bridge → editor-commands}/capabilities/viewport.js +100 -100
  45. package/dist/editor-commands/capabilities/viewport.js.map +1 -0
  46. package/dist/editor-commands/command-sources.d.ts +7 -0
  47. package/dist/editor-commands/command-sources.d.ts.map +1 -0
  48. package/dist/editor-commands/command-sources.js +34 -0
  49. package/dist/editor-commands/command-sources.js.map +1 -0
  50. package/dist/editor-commands/diagnostics.d.ts +12 -0
  51. package/dist/editor-commands/diagnostics.d.ts.map +1 -0
  52. package/dist/{agent-bridge → editor-commands}/diagnostics.js +4 -4
  53. package/dist/editor-commands/diagnostics.js.map +1 -0
  54. package/dist/{agent-bridge → editor-commands}/index.d.ts +1 -1
  55. package/dist/editor-commands/index.d.ts.map +1 -0
  56. package/dist/{agent-bridge → editor-commands}/index.js +1 -1
  57. package/dist/editor-commands/index.js.map +1 -0
  58. package/dist/editor-commands/register.d.ts +4 -0
  59. package/dist/editor-commands/register.d.ts.map +1 -0
  60. package/dist/{agent-bridge → editor-commands}/register.js +323 -286
  61. package/dist/editor-commands/register.js.map +1 -0
  62. package/dist/{agent-bridge → editor-commands}/shared.d.ts +80 -80
  63. package/dist/editor-commands/shared.d.ts.map +1 -0
  64. package/dist/{agent-bridge → editor-commands}/shared.js +29 -29
  65. package/dist/editor-commands/shared.js.map +1 -0
  66. package/dist/editor-commands/source-types.d.ts +110 -0
  67. package/dist/editor-commands/source-types.d.ts.map +1 -0
  68. package/dist/editor-commands/source-types.js.map +1 -0
  69. package/dist/editor-plugin-commands.d.ts +4 -0
  70. package/dist/editor-plugin-commands.d.ts.map +1 -0
  71. package/dist/editor-plugin-commands.js +18 -0
  72. package/dist/editor-plugin-commands.js.map +1 -0
  73. package/dist/index.d.ts +2 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/local-editor-commands.d.ts +2 -0
  78. package/dist/local-editor-commands.d.ts.map +1 -0
  79. package/dist/local-editor-commands.js +2 -0
  80. package/dist/local-editor-commands.js.map +1 -0
  81. package/dist/local-editor-harness.d.ts +35 -21
  82. package/dist/local-editor-harness.d.ts.map +1 -1
  83. package/dist/local-editor-harness.js +1721 -367
  84. package/dist/local-editor-harness.js.map +1 -1
  85. package/dist/local-editor-prefab-stage-transaction.d.ts +2 -1
  86. package/dist/local-editor-prefab-stage-transaction.d.ts.map +1 -1
  87. package/dist/local-editor-prefab-stage-transaction.js +6 -5
  88. package/dist/local-editor-prefab-stage-transaction.js.map +1 -1
  89. package/dist/local-editor-scene-view-interaction-runtime.d.ts.map +1 -1
  90. package/dist/local-editor-scene-view-interaction-runtime.js +2 -5
  91. package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
  92. package/dist/playable-local-editor-entry.d.ts +10 -0
  93. package/dist/playable-local-editor-entry.d.ts.map +1 -1
  94. package/dist/playable-local-editor-entry.js +10 -2
  95. package/dist/playable-local-editor-entry.js.map +1 -1
  96. package/dist/playable-local-editor-host.d.ts +3 -32
  97. package/dist/playable-local-editor-host.d.ts.map +1 -1
  98. package/dist/playable-local-editor-host.js +6 -70
  99. package/dist/playable-local-editor-host.js.map +1 -1
  100. package/dist/playable-product-local-editor.d.ts +1 -2
  101. package/dist/playable-product-local-editor.d.ts.map +1 -1
  102. package/dist/playable-product-local-editor.js +0 -1
  103. package/dist/playable-product-local-editor.js.map +1 -1
  104. package/dist/playable-product-projection-preview.d.ts.map +1 -1
  105. package/dist/playable-product-projection-preview.js +1 -1
  106. package/dist/playable-product-projection-preview.js.map +1 -1
  107. package/dist/playable-product-scene-capabilities.d.ts +0 -2
  108. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  109. package/dist/playable-product-scene-capabilities.js +33 -6
  110. package/dist/playable-product-scene-capabilities.js.map +1 -1
  111. package/dist/playable-runtime-babylon.d.ts +4 -0
  112. package/dist/playable-runtime-babylon.d.ts.map +1 -1
  113. package/dist/playable-runtime-babylon.js +4 -0
  114. package/dist/playable-runtime-babylon.js.map +1 -1
  115. package/dist/playable-sdk.d.ts +1 -1
  116. package/dist/playable-sdk.d.ts.map +1 -1
  117. package/dist/playable-sdk.js.map +1 -1
  118. package/dist/playable-standard-project.d.ts +0 -2
  119. package/dist/playable-standard-project.d.ts.map +1 -1
  120. package/dist/playable-standard-project.js +1 -2
  121. package/dist/playable-standard-project.js.map +1 -1
  122. package/dist/project-service-projection.d.ts +16 -0
  123. package/dist/project-service-projection.d.ts.map +1 -0
  124. package/dist/project-service-projection.js +67 -0
  125. package/dist/project-service-projection.js.map +1 -0
  126. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts +18 -0
  127. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts.map +1 -1
  128. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js +54 -18
  129. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
  130. package/node_modules/@fps-games/babylon-renderer/package.json +9 -9
  131. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +1 -0
  132. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  133. package/node_modules/@fps-games/editor-babylon/dist/projection.js +1 -1
  134. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  135. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +127 -13
  137. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  138. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  139. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +66 -1
  140. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  141. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  142. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts +32 -0
  143. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts.map +1 -0
  144. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js +254 -0
  145. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js.map +1 -0
  146. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
  147. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  148. package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
  149. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts +68 -0
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts.map +1 -0
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js +650 -0
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js.map +1 -0
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts +1 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts.map +1 -1
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js +22 -0
  157. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js.map +1 -1
  158. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +8 -0
  159. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +117 -6
  161. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
  162. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +14 -1
  163. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +100 -1
  165. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
  166. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +8 -1
  167. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  168. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +75 -2
  169. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  170. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +37 -12
  171. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  172. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  173. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +25 -2
  174. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  175. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +332 -107
  176. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  177. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  178. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts +107 -0
  179. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts.map +1 -0
  180. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js +1211 -0
  181. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js.map +1 -0
  182. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts +34 -0
  183. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts.map +1 -0
  184. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js +260 -0
  185. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js.map +1 -0
  186. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts +9 -0
  187. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts.map +1 -0
  188. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js +14 -0
  189. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js.map +1 -0
  190. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts +18 -0
  191. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts.map +1 -0
  192. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js +113 -0
  193. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js.map +1 -0
  194. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts +82 -0
  195. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts.map +1 -0
  196. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js +1098 -0
  197. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js.map +1 -0
  198. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts +6 -7
  199. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts.map +1 -1
  200. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js +62 -103
  201. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
  202. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts +30 -0
  203. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts.map +1 -0
  204. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js +540 -0
  205. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js.map +1 -0
  206. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts +9 -0
  207. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts.map +1 -0
  208. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js +61 -0
  209. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js.map +1 -0
  210. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +55 -0
  211. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
  212. package/node_modules/@fps-games/editor-core/dist/editor-session.js +247 -6
  213. package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
  214. package/node_modules/@fps-games/editor-core/dist/index.d.ts +6 -2
  215. package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
  216. package/node_modules/@fps-games/editor-core/dist/index.js +6 -2
  217. package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
  218. package/node_modules/@fps-games/editor-core/package.json +6 -6
  219. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts +0 -1
  220. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts.map +1 -1
  221. package/node_modules/@fps-games/editor-forge-play/dist/index.js +0 -1
  222. package/node_modules/@fps-games/editor-forge-play/dist/index.js.map +1 -1
  223. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts +2 -0
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts.map +1 -1
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +41 -1
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts +27 -1
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.js.map +1 -1
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts +2 -0
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +214 -7
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts +1 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js +11 -3
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts +2 -4
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js +0 -1
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.d.ts.map +1 -1
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js +77 -31
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts +8 -1
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts.map +1 -1
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.js.map +1 -1
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts +21 -1
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts.map +1 -1
  252. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js +90 -4
  253. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js.map +1 -1
  254. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts +27 -1
  255. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts.map +1 -1
  256. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js +161 -1
  257. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
  258. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts +2 -2
  259. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts.map +1 -1
  260. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js +5 -92
  261. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js.map +1 -1
  262. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts +7 -0
  263. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts.map +1 -1
  264. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js +26 -9
  265. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js.map +1 -1
  266. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts +9 -0
  267. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts.map +1 -1
  268. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js +19 -8
  269. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js.map +1 -1
  270. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts +5 -0
  271. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts.map +1 -1
  272. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js +16 -4
  273. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js.map +1 -1
  274. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts +9 -0
  275. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts.map +1 -1
  276. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js +12 -2
  277. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js.map +1 -1
  278. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts +2 -1
  279. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts.map +1 -1
  280. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js +10 -5
  281. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js.map +1 -1
  282. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts +1 -0
  283. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts.map +1 -1
  284. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js +1 -0
  285. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js.map +1 -1
  286. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts +17 -82
  287. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts.map +1 -1
  288. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js +53 -57
  289. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js.map +1 -1
  290. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.d.ts.map +1 -1
  291. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js +3 -2
  292. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js.map +1 -1
  293. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts +10 -0
  294. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts.map +1 -0
  295. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js +256 -0
  296. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js.map +1 -0
  297. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.d.ts.map +1 -1
  298. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js +7 -5
  299. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js.map +1 -1
  300. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  301. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +8 -0
  302. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  303. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts +1 -0
  304. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts.map +1 -1
  305. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.js.map +1 -1
  306. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +134 -12
  307. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  308. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map +1 -1
  309. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js +47 -0
  310. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js.map +1 -1
  311. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts +27 -0
  312. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts.map +1 -0
  313. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js +592 -0
  314. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js.map +1 -0
  315. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -1
  316. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  317. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +2 -1
  318. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  319. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -1
  320. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +61 -6
  321. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -1
  322. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts +0 -2
  323. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts.map +1 -1
  324. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js +1 -10
  325. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js.map +1 -1
  326. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  327. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +21 -0
  328. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  329. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts +13 -0
  330. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts.map +1 -0
  331. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js +18 -0
  332. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js.map +1 -0
  333. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts +28 -0
  334. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts.map +1 -0
  335. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js +863 -0
  336. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js.map +1 -0
  337. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +2 -0
  338. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -1
  339. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -1
  340. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  341. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts +1626 -0
  342. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts.map +1 -0
  343. package/node_modules/@fps-games/editor-protocol/dist/{agent-bridge.js → editor-command-capabilities.js} +766 -620
  344. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.js.map +1 -0
  345. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts +69 -0
  346. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts.map +1 -0
  347. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js +22 -0
  348. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js.map +1 -0
  349. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts +136 -0
  350. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts.map +1 -0
  351. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js +2 -0
  352. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js.map +1 -0
  353. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts +225 -0
  354. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts.map +1 -0
  355. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js +4 -0
  356. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js.map +1 -0
  357. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +6 -3
  358. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
  359. package/node_modules/@fps-games/editor-protocol/dist/index.js +6 -3
  360. package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
  361. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  362. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  363. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  364. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  365. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  366. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  367. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  368. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  369. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  370. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  371. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  372. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  373. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  374. package/node_modules/@fps-games/plugin-assets/package.json +6 -6
  375. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts +1 -0
  376. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts.map +1 -1
  377. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js +78 -4
  378. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js.map +1 -1
  379. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  380. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  381. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  382. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  383. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  384. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  385. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  386. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  387. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  388. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  389. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  390. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  391. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  392. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  393. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  394. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  395. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  396. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  397. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  398. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  399. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  400. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  401. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  402. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  403. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  404. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  405. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  406. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  407. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  408. package/package.json +23 -23
  409. package/dist/agent-bridge/capabilities/assets.d.ts +0 -8
  410. package/dist/agent-bridge/capabilities/assets.d.ts.map +0 -1
  411. package/dist/agent-bridge/capabilities/assets.js.map +0 -1
  412. package/dist/agent-bridge/capabilities/editor-state.d.ts +0 -5
  413. package/dist/agent-bridge/capabilities/editor-state.d.ts.map +0 -1
  414. package/dist/agent-bridge/capabilities/editor-state.js.map +0 -1
  415. package/dist/agent-bridge/capabilities/hierarchy.d.ts +0 -4
  416. package/dist/agent-bridge/capabilities/hierarchy.d.ts.map +0 -1
  417. package/dist/agent-bridge/capabilities/hierarchy.js.map +0 -1
  418. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts +0 -11
  419. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts.map +0 -1
  420. package/dist/agent-bridge/capabilities/host-lifecycle.js +0 -149
  421. package/dist/agent-bridge/capabilities/host-lifecycle.js.map +0 -1
  422. package/dist/agent-bridge/capabilities/prefabs.d.ts +0 -5
  423. package/dist/agent-bridge/capabilities/prefabs.d.ts.map +0 -1
  424. package/dist/agent-bridge/capabilities/prefabs.js.map +0 -1
  425. package/dist/agent-bridge/capabilities/scene-objects.d.ts +0 -8
  426. package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +0 -1
  427. package/dist/agent-bridge/capabilities/scene-objects.js +0 -480
  428. package/dist/agent-bridge/capabilities/scene-objects.js.map +0 -1
  429. package/dist/agent-bridge/capabilities/selection.d.ts +0 -5
  430. package/dist/agent-bridge/capabilities/selection.d.ts.map +0 -1
  431. package/dist/agent-bridge/capabilities/selection.js +0 -60
  432. package/dist/agent-bridge/capabilities/selection.js.map +0 -1
  433. package/dist/agent-bridge/capabilities/shadows.d.ts +0 -5
  434. package/dist/agent-bridge/capabilities/shadows.d.ts.map +0 -1
  435. package/dist/agent-bridge/capabilities/shadows.js.map +0 -1
  436. package/dist/agent-bridge/capabilities/transform.d.ts +0 -5
  437. package/dist/agent-bridge/capabilities/transform.d.ts.map +0 -1
  438. package/dist/agent-bridge/capabilities/transform.js +0 -164
  439. package/dist/agent-bridge/capabilities/transform.js.map +0 -1
  440. package/dist/agent-bridge/capabilities/ui-regions.d.ts +0 -4
  441. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +0 -1
  442. package/dist/agent-bridge/capabilities/ui-regions.js.map +0 -1
  443. package/dist/agent-bridge/capabilities/viewport.d.ts +0 -5
  444. package/dist/agent-bridge/capabilities/viewport.d.ts.map +0 -1
  445. package/dist/agent-bridge/capabilities/viewport.js.map +0 -1
  446. package/dist/agent-bridge/capability-sources.d.ts +0 -7
  447. package/dist/agent-bridge/capability-sources.d.ts.map +0 -1
  448. package/dist/agent-bridge/capability-sources.js +0 -34
  449. package/dist/agent-bridge/capability-sources.js.map +0 -1
  450. package/dist/agent-bridge/diagnostics.d.ts +0 -12
  451. package/dist/agent-bridge/diagnostics.d.ts.map +0 -1
  452. package/dist/agent-bridge/diagnostics.js.map +0 -1
  453. package/dist/agent-bridge/index.d.ts.map +0 -1
  454. package/dist/agent-bridge/index.js.map +0 -1
  455. package/dist/agent-bridge/register.d.ts +0 -4
  456. package/dist/agent-bridge/register.d.ts.map +0 -1
  457. package/dist/agent-bridge/register.js.map +0 -1
  458. package/dist/agent-bridge/shared.d.ts.map +0 -1
  459. package/dist/agent-bridge/shared.js.map +0 -1
  460. package/dist/agent-bridge/source-types.d.ts +0 -110
  461. package/dist/agent-bridge/source-types.d.ts.map +0 -1
  462. package/dist/agent-bridge/source-types.js.map +0 -1
  463. package/dist/editor-plugin-agent-capabilities.d.ts +0 -4
  464. package/dist/editor-plugin-agent-capabilities.d.ts.map +0 -1
  465. package/dist/editor-plugin-agent-capabilities.js +0 -64
  466. package/dist/editor-plugin-agent-capabilities.js.map +0 -1
  467. package/dist/local-editor-agent-actions.d.ts +0 -43
  468. package/dist/local-editor-agent-actions.d.ts.map +0 -1
  469. package/dist/local-editor-agent-actions.js +0 -321
  470. package/dist/local-editor-agent-actions.js.map +0 -1
  471. package/dist/local-editor-agent-bridge-transport.d.ts +0 -129
  472. package/dist/local-editor-agent-bridge-transport.d.ts.map +0 -1
  473. package/dist/local-editor-agent-bridge-transport.js +0 -403
  474. package/dist/local-editor-agent-bridge-transport.js.map +0 -1
  475. package/dist/local-editor-agent-bridge.d.ts +0 -2
  476. package/dist/local-editor-agent-bridge.d.ts.map +0 -1
  477. package/dist/local-editor-agent-bridge.js +0 -2
  478. package/dist/local-editor-agent-bridge.js.map +0 -1
  479. package/dist/local-editor-agent-context.d.ts +0 -68
  480. package/dist/local-editor-agent-context.d.ts.map +0 -1
  481. package/dist/local-editor-agent-context.js +0 -716
  482. package/dist/local-editor-agent-context.js.map +0 -1
  483. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +0 -22
  484. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +0 -1
  485. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +0 -106
  486. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +0 -1
  487. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts +0 -17
  488. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts.map +0 -1
  489. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js +0 -14
  490. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js.map +0 -1
  491. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts +0 -23
  492. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts.map +0 -1
  493. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js +0 -47
  494. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js.map +0 -1
  495. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts +0 -112
  496. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts.map +0 -1
  497. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js +0 -159
  498. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js.map +0 -1
  499. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts +0 -15
  500. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts.map +0 -1
  501. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js +0 -76
  502. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js.map +0 -1
  503. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +0 -1622
  504. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +0 -1
  505. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +0 -1
  506. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +0 -68
  507. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +0 -1
  508. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +0 -23
  509. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +0 -1
  510. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +0 -187
  511. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +0 -1
  512. package/node_modules/@fps-games/editor-protocol/dist/agent.js +0 -5
  513. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +0 -1
  514. /package/dist/{agent-bridge → editor-commands}/source-types.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"transform-gizmo-controller.js","sourceRoot":"","sources":["../src/transform-gizmo-controller.ts"],"names":[],"mappings":"AAqBA,OAAO,EACL,2CAA2C,EAC3C,+BAA+B,EAC/B,kCAAkC,EAClC,2BAA2B,EAC3B,qCAAqC,EACrC,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAwDlE,MAAM,UAAU,uCAAuC,CACrD,IAA4C,EAC5C,SAAyC;IAEzC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,aAAa;YAAE,OAAO,OAAO,CAAC;QAC9G,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC;QAC9F,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACpG,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,IAAI,SAAS,KAAK,mBAAmB;YAAE,OAAO,SAAS,CAAC;QACxD,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACpG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAoED,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,kCAAkC,GAAG,GAAG,CAAC;AAC/C,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,iCAAiC,GAAG,oBAAoB,CAAC;AAE/D,SAAS,iCAAiC;IACxC,MAAM,KAAK,GAAG,UAGb,CAAC;IACF,IAAI,KAAK,CAAC,kCAAkC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IACtC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,wCAAwC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAa,EAAE,UAAmC,EAAE;IACvF,IAAI,CAAC,iCAAiC,EAAE;QAAE,OAAO;IACjD,MAAM,SAAS,GAAG,OAAO,WAAW,KAAK,WAAW,IAAI,OAAO,WAAW,CAAC,GAAG,KAAK,UAAU;QAC3F,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,OAA+C;IAE/C,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,YAAa,CAAC;IACvD,IAAI,CAAC,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC/E,MAAM,eAAe,GAAG,4BAA4B,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAqD,EAAE,CAAC,CAAC;IAEjI,IAAI,IAAI,GAAwB,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC;IAChE,IAAI,KAAK,GAAyB,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC;IAClE,IAAI,UAAU,GAAuC,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC;IACxG,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,UAAU,GAAsB,IAAI,CAAC;IACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,iBAAiB,GAAG,sBAAsB,CAAC,2CAA2C,CAAC,CAAC;IAC5F,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,IAAI,iBAAiB,GAAuB,EAAE,CAAC;IAC/C,IAAI,UAAU,GAAe,IAAI,CAAC;IAClC,IAAI,cAAc,GAAe,IAAI,CAAC;IACtC,IAAI,sBAAsB,GAAe,IAAI,CAAC;IAC9C,IAAI,eAAe,GAAe,IAAI,CAAC;IACvC,IAAI,uBAAuB,GAAe,IAAI,CAAC;IAC/C,IAAI,OAAO,GAAe,IAAI,CAAC;IAC/B,IAAI,YAAY,GAAe,IAAI,CAAC;IACpC,IAAI,qBAAqB,GAAe,IAAI,CAAC;IAC7C,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,sBAAsB,GAAyB,IAAI,CAAC;IACxD,IAAI,4BAA4B,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAA0C,CAAC;IAE1G,SAAS,kBAAkB;QACzB,IAAI,OAAO,EAAE,CAAC;YACZ,2BAA2B,CAAC,eAAe,EAAE;gBAC3C,IAAI;gBACJ,cAAc;gBACd,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC;aACtC,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACtF,MAAM,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACtE,IAAI,wBAAwB,EAAE,CAAC;YAC7B,YAAY,GAAG,IAAI,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3D,qBAAqB,GAAG,IAAI,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpE,IAAI,CAAC;gBACH,qBAAqB,CAAC,iBAAiB,CAAC,wBAAwB,GAAG,KAAK,CAAC;YAC3E,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,OAAO,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,qBAAqB,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACzC,OAAO,CAAC,6BAA6B,GAAG,KAAK,CAAC;QAC9C,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACxC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAChC,2BAA2B,CAAC,iBAAiB,EAAE;YAC7C,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClH,wBAAwB,EAAE,CAAC,CAAC,wBAAwB;YACpD,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,IAAI,IAAI;SAC5D,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS,mBAAmB;QAC1B,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,SAAS,iBAAiB;QACxB,IAAI,cAAc,IAAI,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,cAAc,CAAC;QACtF,OAAO,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;IAED,SAAS,0BAA0B;QACjC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAClF,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,SAAS,4BAA4B;QACnC,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/B,CAAC,CAAC,0BAA0B,EAAE;YAC9B,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,SAAS,0BAA0B,CACjC,QAA6B,EAC7B,cAAiD;QAEjD,OAAO,kCAAkC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,sBAAsB,CAC7B,UAAkD,EAClD,gBAAoD;QAEpD,OAAO,qCAAqC,CAAC;YAC3C,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,gBAAgB;YAC5B,cAAc,EAAE,KAAK;YACrB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;SACnD,CAAC,CAAC;IACL,CAAC;IAED,SAAS,uBAAuB,CAC9B,UAAkD,EAClD,gBAAoD;QAEpD,OAAO,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC5D,CAAC;IAED,SAAS,gBAAgB;QACvB,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAClC,MAAM,aAAa,GAAI,OAAO,CAAC,OAAe,CAAC,aAAa,CAAC;QAC7D,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAChC,UAAU,GAAG,IAAI,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5E,UAAU,CAAC,QAAQ,GAAG;YACpB,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC9B,sBAAsB,EAAE,IAAI;SAC7B,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,SAAS,sBAAsB,CAC7B,KAA2B,EAC3B,WAAgC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAEpD,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACpC,KAAK,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnF,KAAK,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,qBAAqB,CAAC,QAA6B;QAC1D,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;YAAE,OAAO;QAC/B,KAAK,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,SAAS,kBAAkB;QACzB,KAAK,MAAM,OAAO,IAAI,iBAAiB;YAAE,OAAO,EAAE,CAAC;QACnD,iBAAiB,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,SAAS,WAAW,CAAC,UAAe,EAAE,QAAoB;QACxD,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM;YAAE,OAAO;QACpD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1B,IAAI,CAAC;gBAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,wBAAwB,CAC/B,UAAkD,EAClD,KAAU;QAEV,MAAM,UAAU,GAAqC;YACnD,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,mBAAmB;YACnB,aAAa;YACb,aAAa;YACb,aAAa;SACd,CAAC;QACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,gBAAgB,GAAG,uCAAuC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACxF,IAAI,CAAC,gBAAgB;gBAAE,SAAS;YAChC,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;YAClD,WAAW,CAAC,QAAQ,EAAE,qBAAqB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;YAC3F,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YACpD,WAAW,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,SAAS,qBAAqB;QAC5B,kBAAkB,EAAE,CAAC;QACrB,MAAM,aAAa,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3B,wBAAwB,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACtE,wBAAwB,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACxE,wBAAwB,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,oBAAoB;QAC3B,MAAM,aAAa,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3B,MAAM,MAAM,GAAoE;YAC9E,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,+BAA+B,EAAE,IAAI,EAAE;YACrF,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,+BAA+B,EAAE,IAAI,EAAE;YACrF,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,+BAA+B,EAAE,KAAK,EAAE;SACpF,CAAC;QACF,KAAK,MAAM,EAAE,KAAK,EAAE,+BAA+B,EAAE,IAAI,MAAM,EAAE,CAAC;YAChE,MAAM,iBAAiB,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,iBAAiB,IAAI,CAAC,+BAA+B;gBAAE,SAAS;YACrE,IAAI,CAAC;gBACH,IACE,wCAAwC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EACzD,CAAC;oBACD,KAAK,CAAC,sCAAsC,GAAG,iBAAiB,CAAC;gBACnE,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,KAAK,MAAM,IAAI,IAAI;gBACjB,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,iBAAiB;aACzB,EAAE,CAAC;gBACF,IAAI,CAAC;oBACH,IAAI,wCAAwC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC7D,IAAI,CAAC,sCAAsC,GAAG,iBAAiB,CAAC;oBAClE,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,+BAA+B,CAAC,KAAU;QACjD,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,KAAK,OAAO,CAAC;QAC1C,MAAM,mBAAmB,GAAG,UAAU,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE,MAAM,EAAE,UAAU;YACzF,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,UAAU,CAAC;QACf,OAAO,sBAAsB,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,cAAc,KAAK,OAAO,CAAC;IAC5F,CAAC;IAED,SAAS,qBAAqB;QAC5B,MAAM,aAAa,GAAG,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC;QACrD,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC;gBAAC,aAAa,CAAC,kBAAkB,GAAG,IAAI,KAAK,MAAM,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACtE,CAAC;IACH,CAAC;IAED,SAAS,sBAAsB,CAAC,aAAkB;QAChD,IAAI,CAAC;YAAC,aAAa,CAAC,UAAU,GAAG,kCAAkC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAC/E,KAAK,MAAM,KAAK,IAAI;YAClB,aAAa,CAAC,MAAM,EAAE,aAAa;YACnC,aAAa,CAAC,MAAM,EAAE,aAAa;YACnC,aAAa,CAAC,MAAM,EAAE,UAAU;SACjC,EAAE,CAAC;YACF,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,IAAI,CAAC;gBAAC,KAAK,CAAC,UAAU,GAAG,kCAAkC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACvE,IAAI,CAAC;gBAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,SAAS,sBAAsB;QAC7B,MAAM,SAAS,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACtF,kBAAkB,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC;gBACrC,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC;gBACrC,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAClC,IAAI,CAAC;oBAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YAChD,CAAC;YACD,oBAAoB,EAAE,CAAC;YACvB,2BAA2B,CAAC,oBAAoB,EAAE;gBAChD,MAAM,EAAE,aAAa;gBACrB,IAAI;gBACJ,cAAc;gBACd,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC;aACtC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,MAAM,aAAa,GAAG,kBAAkB,EAAE,CAAC;QAC3C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,oBAAoB,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACnC,aAAa,CAAC,oBAAoB,GAAG,UAAU,KAAK,MAAM,CAAC;QAC3D,aAAa,CAAC,oBAAoB,GAAG,UAAU,KAAK,QAAQ,CAAC;QAC7D,aAAa,CAAC,iBAAiB,GAAG,UAAU,KAAK,OAAO,CAAC;QACzD,sBAAsB,CAAC,aAAa,CAAC,CAAC;QACtC,qBAAqB,EAAE,CAAC;QACxB,oBAAoB,EAAE,CAAC;QACvB,qBAAqB,EAAE,CAAC;QAExB,IAAI,MAAM,GAAe,IAAI,CAAC;QAC9B,MAAM,kBAAkB,GAAG,4BAA4B,EAAE,CAAC;QAC1D,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QAChH,MAAM,GAAG,0BAA0B,CAAC,kBAAkB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAChF,IAAI,WAAW,GAAY,IAAI,CAAC;QAChC,IAAI,CAAC;YAAC,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACnE,WAAW,GAAG,KAAK,CAAC;YACpB,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,0DAA0D,EAAE,KAAK,CAAC,CAAC;QAC5F,CAAC;QACD,oBAAoB,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,UAAU,KAAK,MAAM;YACvC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa;YACrC,CAAC,CAAC,UAAU,KAAK,QAAQ;gBACvB,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa;gBACrC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC;QACvC,MAAM,kBAAkB,GAAG,EAAE,4BAA4B,CAAC;QAC1D,MAAM,oBAAoB,GAAG,GAA4B,EAAE;YACzD,MAAM,QAAQ,GAAG,WAAW,EAAE,SAAS,IAAI,WAAW,EAAE,QAAQ,IAAI,IAAI,CAAC;YACzE,MAAM,gBAAgB,GAAG,QAAQ,EAAE,mBAAmB,EAAE,EAAE,IAAI,QAAQ,EAAE,gBAAgB,IAAI,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC;YACvH,MAAM,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC;YAC1C,OAAO;gBACL,kBAAkB;gBAClB,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI;gBACjD,gBAAgB,EAAE,QAAQ,EAAE,SAAS,IAAI,IAAI;gBAC7C,mBAAmB,EAAE,QAAQ,EAAE,UAAU,IAAI,IAAI;gBACjD,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,IAAI;gBACtE,iBAAiB,EAAE,gBAAgB;oBACjC,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE;oBACzE,CAAC,CAAC,IAAI;gBACR,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;gBAC/E,eAAe,EAAE,WAAW,EAAE,UAAU,IAAI,IAAI;gBAChD,qBAAqB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI;gBAC9E,2BAA2B,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,IAAI,IAAI;gBACjG,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,EAAE,IAAI,IAAI;gBAC9E,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,IAAI;aACrD,CAAC;QACJ,CAAC,CAAC;QACF,2BAA2B,CAAC,mBAAmB,EAAE;YAC/C,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClH,IAAI;YACJ,KAAK;YACL,UAAU;YACV,cAAc;YACd,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC;YACrC,kBAAkB;YAClB,mBAAmB;YACnB,aAAa,EAAE,CAAC,CAAC,MAAM;YACvB,UAAU,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI;YAChC,mBAAmB,EAAE,aAAa,CAAC,YAAY,EAAE,IAAI,IAAI,aAAa,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI;YAClG,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,IAAI,IAAI;YAC1D,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,IAAI,IAAI;YAC1D,eAAe,EAAE,aAAa,CAAC,oBAAoB,KAAK,IAAI;YAC5D,eAAe,EAAE,aAAa,CAAC,oBAAoB,KAAK,IAAI;YAC5D,YAAY,EAAE,aAAa,CAAC,iBAAiB,KAAK,IAAI;YACtD,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,IAAI,IAAI;YAC3D,wBAAwB,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,IAAI,IAAI;YACrF,wBAAwB,EAAE,YAAY,EAAE,YAAY,IAAI,IAAI;YAC5D,WAAW,EAAE,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;YAC1G,GAAG,oBAAoB,EAAE;SAC1B,CAAC,CAAC;QACH,IAAI,iCAAiC,EAAE,EAAE,CAAC;YACxC,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE;gBACvE,2BAA2B,CAAC,wBAAwB,EAAE;oBACpD,IAAI;oBACJ,cAAc;oBACd,GAAG,oBAAoB,EAAE;iBAC1B,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,SAAS,mBAAmB,CAAC,aAAkB;QAC7C,IAAI,gBAAgB,EAAE,CAAC;YACrB,2BAA2B,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACtF,gBAAgB,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAC1C,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAC1C,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC;YACvC,sBAAsB,CAAC,aAAa,CAAC,CAAC;YACtC,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;YACnC,aAAa,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAC3C,aAAa,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAC3C,aAAa,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,mEAAmE,EAAE,KAAK,CAAC,CAAC;QACrG,CAAC;QACD,2BAA2B,CAAC,0BAA0B,EAAE;YACtD,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClH,gBAAgB,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa;YACvD,gBAAgB,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa;YACvD,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU;SAClD,CAAC,CAAC;IACL,CAAC;IAED,SAAS,qBAAqB;QAC5B,IAAI,sBAAsB;YAAE,OAAO,sBAAsB,CAAC;QAC1D,MAAM,SAAS,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACtF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAY,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,CAAC,YAAY,EAAE,qBAAqB,CAAC,EAAE,CAAC;YAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,iBAAiB,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;gBAC1D,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,CAAC;gBAChC,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,qBAAqB,KAAK,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBACzG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,2BAA2B,CAAC,0BAA0B,EAAE;YACtD,WAAW,EAAE,OAAO,CAAC,IAAI;SAC1B,CAAC,CAAC;QACH,sBAAsB,GAAG,OAAO,CAAC,UAAU,CACzC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAC7E,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACjB,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;YACnF,2BAA2B,CAAC,4BAA4B,EAAE;gBACxD,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClH,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,YAAY;aACb,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,sBAAsB,CAAC;IAChC,CAAC;IAED,SAAS,SAAS,CAChB,mBAAuD,UAAU,EACjE,SAA0C;QAE1C,IAAI,UAAU;YAAE,OAAO;QACvB,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,SAAS,GAAG,oBAAoB,CAAC;QACvC,oBAAoB,GAAG,KAAK,CAAC;QAC7B,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,EAAE,4BAA4B,EAAE,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAChH,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC7F,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,UAAU,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,SAAS,oBAAoB,CAC3B,UAAkD,EAClD,SAAmB,EACnB,gBAAoD,EACpD,SAAkB;QAElB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3D,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,sBAAsB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC7E,MAAM,eAAe,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACrD,SAAS,EAAE,cAAc;YACzB,QAAQ,EAAE,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;YACxI,IAAI,EAAE,UAAU;YAChB,cAAc,EAAE,KAAK;YACrB,KAAK,EAAE,eAAe,CAAC,cAAc;YACrC,eAAe;YACf,UAAU,EAAE,gBAAgB;YAC5B,gBAAgB;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAClD,eAAe,GAAG,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACjD,cAAc,GAAG,eAAe,CAAC,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC7F,CAAC,CAAC,eAAe,CAAC,QAAQ;YAC1B,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;QACxD,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,UAAU,EAAE,gBAAgB,CAAC;YAAE,OAAO,EAAE,CAAC;QACnF,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,SAAS,mBAAmB,CAC1B,SAAmB,EACnB,UAAkD,EAClD,gBAAoD;QAEpD,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,aAAa,GAAG,kBAAkB,EAAE,CAAC;QAC3C,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QACjC,IAAI,CAAC;YACH,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;YACrC,oBAAoB,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,0EAA0E,EAAE,KAAK,CAAC,CAAC;YAC1G,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,0BAA0B,CACjC,SAAmB,EACnB,UAAyD,EACzD,gBAAoD;QAEpD,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QAClG,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,MAAM,KAAK,GAAG,CAAC,UAAU,KAAK,MAAM,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,cAAc,CAAC;mBACjD,uBAAuB,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC;YAChD,CAAC,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,cAAc,GAAG,UAAU;YAC/B,CAAC,CAAC,sBAAsB,CAAC,UAAU,EAAE,uBAAuB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,cAAc;YAC1G,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,KAAK,OAAO;YACxE,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC,CAAC;YAC3E,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,OAAO,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,uBAAuB,CAAC,MAAc;QAC7C,OAAO,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,SAAS,oBAAoB,CAAC,SAAqD;QACjF,OAAO,SAAS;YACd,CAAC,CAAC;gBACE,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,2BAA2B,CAAC,SAAS,CAAC;aACjD;YACH,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,SAAS,oBAAoB,CAC3B,UAAmD,EACnD,SAA4B;QAE5B,MAAM,SAAS,GAA0B,SAAS;aAC/C,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;aACzB,MAAM,CAAC,CAAC,SAAS,EAAwC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;aACxE,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACpC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE;gBACR,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,QAA6B,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;gBAC3G,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,QAA6B,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;gBAC3G,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,QAA6B,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;aAC5G;SACF,CAAC;IACJ,CAAC;IAED,SAAS,eAAe,CAAC,SAAyC;QAChE,OAAO,SAAS,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC;YAC7D,CAAC,CAAC,SAAS,CAAC,QAAQ;YACpB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3B,CAAC;IAED,SAAS,2BAA2B,CAClC,UAAmD,EACnD,SAA4B;QAE5B,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACzB,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;YACjC,OAAO,CAAC,CAAC,SAAS,IAAI,+BAA+B,CAAC,SAAS,CAAC,CAAC;QACnE,CAAC,CAAC,IAAI,IAAI,CAAC;IACb,CAAC;IAED,SAAS,gBAAgB,CACvB,UAAkD,EAClD,SAAmB,EACnB,gBAAoD,EACpD,SAAS,GAAG,KAAK,EACjB,SAA0C;QAE1C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,MAAM,cAAc,GAAG,2BAA2B,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;QACrF,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,uBAAuB,CAAC;gBAC7B,UAAU;gBACV,SAAS,EAAE,cAAc;gBACzB,gBAAgB;gBAChB,gBAAgB;gBAChB,MAAM,EAAE,uBAAuB;gBAC/B,cAAc,EAAE,cAAc;gBAC9B,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,UAAU,KAAK,MAAM,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI;gBACtD,IAAI,EAAE,kBAA2B;gBACjC,QAAQ,EAAE,2BAA2B,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAE,CAAE,CAAC;aAC7E;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,kBAA2B;gBACjC,QAAQ,EAAE,2BAA2B,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAE,CAAE,CAAC;aAC7E,CAAC;QACN,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACjG,MAAM,eAAe,GAAG,sBAAsB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC7E,OAAO;YACL,MAAM,EAAE,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI;YAC/D,SAAS,EAAE,cAAc;YACzB,QAAQ,EAAE,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;YACxI,IAAI,EAAE,UAAU;YAChB,cAAc,EAAE,KAAK;YACrB,KAAK,EAAE,eAAe,CAAC,cAAc;YACrC,eAAe;YACf,UAAU,EAAE,gBAAgB;YAC5B,KAAK;YACL,MAAM;YACN,gBAAgB;YAChB,SAAS;YACT,SAAS;YACT,UAAU,EAAE,wBAAwB,CAAC,KAAK,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED,SAAS,uBAAuB,CAAC,KAQhC;QACC,MAAM,eAAe,GAAG,sBAAsB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACzF,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YACtC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC;YAC/D,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACzG,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI;YACjE,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,cAAc,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;YAC3I,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,cAAc,EAAE,KAAK;YACrB,KAAK,EAAE,eAAe,CAAC,cAAc;YACrC,eAAe;YACf,UAAU,EAAE,KAAK,CAAC,gBAAgB;YAClC,KAAK;YACL,MAAM;YACN,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,aAAa,EAAE,KAAK,CAAC,MAAM;YAC3B,eAAe,EAAE,KAAK,CAAC,cAAc;SACtC,CAAC;IACJ,CAAC;IAED,SAAS,UAAU;QACjB,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,OAAO,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;QAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ;YACjC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;YACvF,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAChD,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YACjF,IAAI,aAAa;gBAAE,yBAAyB,CAAC,aAAa,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,OAAO;QACd,MAAM,IAAI,GAAG,UAAU,CAAC;QACxB,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,UAAU,GAAG,IAAI,CAAC;QAClB,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,sBAAsB,EAAE,CAAC;IAC3B,CAAC;IAED,SAAS,SAAS,CAChB,IAAgB,EAChB,MAA2C,EAC3C,cAA6B;QAE7B,UAAU,GAAG,IAAI,CAAC;QAClB,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,sBAAsB,EAAE,CAAC;QACzB,OAAO,CAAC,aAAa,EAAE,CAAC;YACtB,GAAG,IAAI;YACP,MAAM;YACN,cAAc;SACf,CAAC,CAAC;IACL,CAAC;IAED,SAAS,kBAAkB,CAAC,IAAgB;QAC1C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,SAAS,mBAAmB,CAC1B,IAAgB,EAChB,eAAwD;QAExD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClB,MAAM;gBACN,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,OAAO,CAAC,SAAS,EAAE,CAAC;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,SAAS;iBACpB,GAAG,CAAC,CAAC,EAAE,EAAwC,EAAE;gBAChD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;gBAClC,OAAO,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACxD,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,MAAM,EAA2C,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;SACzE,CAAC,CAAC;IACL,CAAC;IAED,SAAS,qBAAqB,CAAC,IAAgB;QAC7C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,IAAI,CAAC,aAAa;gBAC1B,cAAc,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;aAC7C,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,2BAA2B,CAAC,UAAU,EAAE;YAC7D,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7B,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YAC9B,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;SAC5B,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI;YACpC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7B,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YAC9B,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;SAC5B,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC1H,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IAED,SAAS,oBAAoB,CAC3B,IAAgB,EAChB,KAA0B;QAE1B,MAAM,UAAU,GAA4C,EAAE,CAAC;QAC/D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,SAAS;YACzB,UAAU,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,SAAS,sBAAsB,CAC7B,IAAgB,EAChB,aAAkC;QAElC,MAAM,UAAU,GAA4C,EAAE,CAAC;QAC/D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC;gBACzC,MAAM;gBACN,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAC1B,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YACtE,CAAC;YACD,UAAU,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,SAAS,oBAAoB,CAC3B,IAAgB,EAChB,cAA0C,EAC1C,UAAsC;QAEtC,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,UAAU,IAAI,IAAI;YAAE,OAAO,4BAA4B,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACxF,OAAO,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC;IAED,SAAS,uBAAuB,CAAC,SAAqD;QACpF,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC5F,MAAM,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;QACjE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,SAAS,4BAA4B,CACnC,SAAqD,EACrD,KAAa;QAEb,IAAI,SAAS,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5D,IAAI,SAAS,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5D,IAAI,SAAS,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAC5D,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9B,CAAC;IAED,SAAS,qBAAqB,CAC5B,IAAgB,EAChB,UAA+B;QAE/B,MAAM,UAAU,GAA4C,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG;YAChB,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACpD,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC;gBACxC,MAAM;gBACN,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAC1B,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YACtE,CAAC;YACD,UAAU,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,SAAS,oBAAoB,CAC3B,IAAgB,EAChB,MAAc,EACd,KAA8B;QAE9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,OAAO,2BAA2B,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvF,CAAC;IAED,SAAS,wBAAwB,CAAC,KAA2B;QAC3D,OAAO,2BAA2B,CAAC,UAAU,EAAE;YAC7C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YAC9B,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,SAAS,2BAA2B,CAClC,IAAS,EACT,QAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAI,EAAE,kBAAkB,EAAE,aAAa,EAAE,EAAE,IAAI,IAAI,EAAE,QAAQ,CAAC;QAC/E,OAAO;YACL,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ;YAC3D,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ;YACrD,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,KAAK;SACrD,CAAC;IACJ,CAAC;IAED,SAAS,YAAY,CAAC,KAAU;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACxG,OAAO;YACL,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SACnB,CAAC;IACJ,CAAC;IAED,SAAS,OAAO,CAAC,IAAyB,EAAE,KAA0B;QACpE,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;SACpB,CAAC;IACJ,CAAC;IAED,SAAS,YAAY,CAAC,IAAyB,EAAE,KAA0B;QACzE,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;SACpB,CAAC;IACJ,CAAC;IAED,SAAS,SAAS,CAAC,KAA0B,EAAE,MAAc;QAC3D,OAAO;YACL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;YACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;YACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;SACpB,CAAC;IACJ,CAAC;IAED,SAAS,OAAO,CAAC,IAAyB,EAAE,KAA0B;QACpE,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,UAAU,CAAC,IAAyB,EAAE,KAA0B;QACvE,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvD,CAAC;IACJ,CAAC;IAED,SAAS,wBAAwB,CAAC,KAAmB;QACnD,IAAI,QAAQ,IAAI,UAAU,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAClF,MAAM,SAAS,GAAG,4BAA4B,EAAE,CAAC;QACjD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACpE,IAAI,UAAU,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/E,OAAO,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,oBAAoB,CAAC,KAAmB;QAC/C,IAAI,QAAQ,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/D,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,oBAAoB,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,SAAS;YAAE,oBAAoB,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,kBAAkB,CAAC,KAAmB;QAC7C,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnD,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,EAAE,4BAA4B,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAClG,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChG,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG;YACf,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU;SACX,CAAC;QACF,UAAU,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,uBAAuB,CAAC,KAAmB;QAClD,OAAO,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;IAC/B,CAAC;IAED,SAAS,mBAAmB,CAAC,KAAmB;QAC9C,MAAM,IAAI,GAAG,UAAU,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC/F,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClG,IAAI,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrD,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;YAC3B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;YACnE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACzC,IAAI,OAAO;YAAE,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,gBAAgB,CAAC,KAAmB;QAC3C,MAAM,IAAI,GAAG,UAAU,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC/F,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClG,MAAM,UAAU,GAAG,YAAY;YAC7B,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACnF,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChF,UAAU,GAAG,IAAI,CAAC;QAClB,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtC,sBAAsB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,wBAAwB,CAC/B,IAAgB,EAChB,UAAmD,EACnD,gBAAqC;QAErC,MAAM,aAAa,GAAG,2BAA2B,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,gBAAgB,CAAC;QACxF,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACrC,yBAAyB,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,2BAA2B,CAClC,IAAgB,EAChB,UAAmD;QAEnD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK;gBAAE,SAAS;YAChC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,2BAA2B,CAAC,KAAK,CAAC,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7H,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,yBAAyB,CAChC,OAAe,EACf,OAAe,EACf,UAA+B;QAE/B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,IAAK,OAAO,CAAC,KAAa,CAAC,sBAAsB,IAAI,IAAI,CAAC;QACnG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAc,CAAC;QAC/C,MAAM,MAAM,GAAI,OAAO,CAAC,OAAe,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACxG,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/G,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,iBAAiB,CAAC,MAAW;QACpC,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/E,IAAI,mBAAmB;YAAE,OAAO,mBAAmB,CAAC;QACpD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAc,CAAC;QAC/C,IAAI,CAAC,OAAO,IAAI,OAAO,MAAM,EAAE,YAAY,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,SAAS,gBAAgB,CACvB,OAAe,EACf,OAAe,EACf,IAAyB;QAEzB,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvE,OAAO,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,sBAAsB,CAAC,OAAe,EAAE,OAAe;QAC9D,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3E,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAClD,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YAC5B,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAED,SAAS,uBAAuB,CAAC,OAAe,EAAE,OAAe;QAC/D,IAAI,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvH,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnF,OAAO;YACL,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,MAAM,IAAI,SAAS;YAC3B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;SAC5E,CAAC;IACJ,CAAC;IAED,SAAS,sBAAsB,CAAC,IAAS;QACvC,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,QAAQ,EAAE,sBAAsB;gBAAE,OAAO,IAAI,CAAC;YAC1D,IAAI,OAAO,CAAC,QAAQ,EAAE,6BAA6B;gBAAE,OAAO,IAAI,CAAC;YACjE,IAAI,OAAO,CAAC,QAAQ,EAAE,qBAAqB;gBAAE,OAAO,IAAI,CAAC;YACzD,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,qBAAqB,CAAC,OAAe,EAAE,OAAe;QAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,IAAK,OAAO,CAAC,KAAa,CAAC,sBAAsB,IAAI,IAAI,CAAC;QACnG,MAAM,MAAM,GAAI,OAAO,CAAC,OAAe,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QAC5F,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IAC5G,CAAC;IAED,SAAS,qBAAqB;QAC5B,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;QAC5C,MAAM,WAAW,GAAI,OAAO,CAAC,OAAe,CAAC,WAAW,CAAC;QACzD,MAAM,gBAAgB,GAAI,OAAO,CAAC,OAAe,CAAC,gBAAgB,CAAC;QACnE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAa,CAAC;QAC7C,MAAM,aAAa,GAAG,kBAAkB,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,aAAa,EAAE,YAAY,EAAE,iBAAiB,CAAC;QACpE,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAC7D,eAAe,GAAG,WAAW,CAAC,YAAY,CACxC,yBAAyB,EACzB,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAChC,YAAY,CACb,CAAC;QACF,eAAe,CAAC,QAAQ,GAAG;YACzB,GAAG,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAC;YACnC,sBAAsB,EAAE,IAAI;YAC5B,qBAAqB,EAAE,IAAI;SAC5B,CAAC;QACF,eAAe,CAAC,UAAU,GAAG,KAAK,CAAC;QACnC,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAAC;YAC/B,uBAAuB,GAAG,IAAI,gBAAgB,CAAC,kCAAkC,EAAE,YAAY,CAAC,CAAC;YACjG,uBAAuB,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACpE,uBAAuB,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACpE,uBAAuB,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACrE,eAAe,CAAC,QAAQ,GAAG,uBAAuB,CAAC;QACrD,CAAC;QACD,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,SAAS,yBAAyB,CAAC,OAAgB;QACjD,IAAI,CAAC,eAAe;YAAE,OAAO;QAC7B,eAAe,CAAC,SAAS,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC;YAAC,eAAe,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACzD,CAAC;IAED,SAAS,kBAAkB,CAAC,GAA8B;QACxD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,yBAAyB,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;YAAE,OAAO;QAChC,MAAM,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9E,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,eAAe,CAAC,OAAe,EAAE,OAAe;QACvD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9B,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;QAC7B,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC;QAC9D,MAAM,WAAW,GAAG,OAAO,YAAY,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9F,IAAI,WAAW,EAAE,GAAG,IAAI,WAAW,CAAC,UAAU;YAAE,OAAO,WAAW,CAAC,UAAU,CAAC;QAC9E,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7F,OAAO,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,SAAS,oBAAoB,CAAC,OAAe,EAAE,OAAe;QAC5D,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9B,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;QAC7B,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC;QAC9D,MAAM,IAAI,GAAG,OAAO,YAAY,EAAE,IAAI,KAAK,UAAU;YACnD,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACpE,CAAC,CAAC,IAAI,CAAC;QACT,OAAO,IAAI,EAAE,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,CAAC;IAED,SAAS,oBAAoB;QAC3B,IAAI,cAAc;YAAE,OAAO,cAAc,CAAC;QAC1C,MAAM,WAAW,GAAI,OAAO,CAAC,OAAe,CAAC,WAAW,CAAC;QACzD,MAAM,gBAAgB,GAAI,OAAO,CAAC,OAAe,CAAC,gBAAgB,CAAC;QACnE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAa,CAAC;QAC7C,MAAM,aAAa,GAAG,kBAAkB,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,aAAa,EAAE,YAAY,EAAE,iBAAiB,CAAC;QACpE,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAC7D,cAAc,GAAG,WAAW,CAAC,YAAY,CACvC,iCAAiC,EACjC,EAAE,QAAQ,EAAE,yBAAyB,EAAE,QAAQ,EAAE,EAAE,EAAE,EACrD,YAAY,CACb,CAAC;QACF,cAAc,CAAC,QAAQ,GAAG;YACxB,GAAG,CAAC,cAAc,CAAC,QAAQ,IAAI,EAAE,CAAC;YAClC,sBAAsB,EAAE,IAAI;YAC5B,6BAA6B,EAAE,IAAI;SACpC,CAAC;QACF,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC;QACjC,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAAC;YAC/B,sBAAsB,GAAG,IAAI,gBAAgB,CAAC,0CAA0C,EAAE,YAAY,CAAC,CAAC;YACxG,sBAAsB,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACnE,sBAAsB,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACpE,sBAAsB,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnE,sBAAsB,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9C,cAAc,CAAC,QAAQ,GAAG,sBAAsB,CAAC;QACnD,CAAC;QACD,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,SAAS,wBAAwB,CAAC,OAAgB;QAChD,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,cAAc,CAAC,SAAS,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC;YAAC,cAAc,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACxD,CAAC;IAED,SAAS,yBAAyB,CAAC,QAA6B;QAC9D,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;YAAE,OAAO;QAChC,MAAM,SAAS,GAAG,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS;eAC9D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ;eAChD,IAAI,CAAC;QACV,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;YAC1B,MAAM,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,oBAAoB;QAC3B,IAAI,IAAI,KAAK,MAAM,IAAI,UAAU,EAAE,CAAC;YAClC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,4BAA4B,EAAE,CAAC;QACjD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ;eAC3B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,SAAS,WAAW,CAAC,IAAS;QAC5B,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,MAAM,KAAK,GAAG,wBAAwB,EAAE,CAAC;QACzC,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,oBAAoB,CAAC,OAAO,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChD,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpC,IAAI,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC7D,IAAI,OAAO,CAAC,QAAQ,EAAE,sBAAsB;gBAAE,OAAO,KAAK,CAAC;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,oBAAoB,CAAC,IAAS;QACrC,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,QAAQ,EAAE,6BAA6B;gBAAE,OAAO,IAAI,CAAC;YACjE,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,wBAAwB;QAC/B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAO,CAAC;QAC7B,MAAM,aAAa,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QACjC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,KAAK,MAAM;YACjC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa;YACrC,CAAC,CAAC,UAAU,KAAK,QAAQ;gBACvB,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa;gBACrC,CAAC,CAAC,UAAU,KAAK,OAAO;oBACtB,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU;oBAClC,CAAC,CAAC,IAAI,CAAC;QACb,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,iBAAiB,CAAC,KAAU,EAAE,KAAe;QACpD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QACvC,IAAI,KAAK,CAAC,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,QAAQ;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,YAAY;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,CAAC,EAAE,CAAC;YACnH,IAAI,KAAK,CAAC,GAAG,CAAC;gBAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAoC;QAClD,QAAQ;YACN,OAAO;gBACL,IAAI;gBACJ,KAAK;gBACL,cAAc;gBACd,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;gBAC3C,cAAc,EAAE,UAAU,EAAE,MAAM,IAAI,IAAI;gBAC1C,UAAU;aACX,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,OAAO;YACX,IAAI,QAAQ;gBAAE,OAAO;YACrB,2BAA2B,CAAC,mBAAmB,EAAE;gBAC/C,IAAI;gBACJ,cAAc;gBACd,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC;aACtC,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,kBAAkB,EAAE,CAAC;YAC3C,IAAI,CAAC,aAAa;gBAAE,OAAO;YAC3B,mBAAmB,CAAC,aAAa,CAAC,CAAC;YACnC,sBAAsB,EAAE,CAAC;YACzB,MAAM,qBAAqB,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,QAAQ;YACd,IAAI,QAAQ;gBAAE,OAAO;YACrB,2BAA2B,CAAC,gBAAgB,EAAE;gBAC5C,YAAY,EAAE,IAAI;gBAClB,QAAQ;gBACR,QAAQ,EAAE,IAAI,KAAK,QAAQ;gBAC3B,cAAc;gBACd,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC;aACtC,CAAC,CAAC;YACH,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC,UAAU;oBAAE,sBAAsB,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,UAAU,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,GAAG,QAAQ,CAAC;YAChB,UAAU,GAAG,0BAA0B,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC;YACpE,sBAAsB,EAAE,CAAC;QAC3B,CAAC;QACD,QAAQ,CAAC,SAAS;YAChB,IAAI,QAAQ;gBAAE,OAAO;YACrB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,UAAU;oBAAE,sBAAsB,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,UAAU,CAAC,UAAU,EAAE,CAAC;YACxB,KAAK,GAAG,SAAS,CAAC;YAClB,sBAAsB,EAAE,CAAC;QAC3B,CAAC;QACD,aAAa,CAAC,cAAc;YAC1B,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,UAAU,GAAG,0BAA0B,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC;YAC9E,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC9B,IAAI,CAAC,UAAU;oBAAE,sBAAsB,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,UAAU,CAAC,UAAU,EAAE,CAAC;YACxB,UAAU,GAAG,UAAU,CAAC;YACxB,sBAAsB,EAAE,CAAC;QAC3B,CAAC;QACD,oBAAoB,CAAC,QAAQ;YAC3B,IAAI,QAAQ;gBAAE,OAAO;YACrB,iBAAiB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,UAAU;gBAAE,UAAU,EAAE,CAAC;QAC/B,CAAC;QACD,kBAAkB,CAAC,KAAK;YACtB,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC3C,oBAAoB,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,eAAe,CAAC,UAAU;YACxB,IAAI,QAAQ;gBAAE,OAAO;YACrB,IAAI,cAAc,KAAK,UAAU,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO;YAC7F,UAAU,CAAC,UAAU,EAAE,CAAC;YACxB,cAAc,GAAG,UAAU,CAAC;YAC5B,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,sBAAsB,EAAE,CAAC;QAC3B,CAAC;QACD,YAAY,CAAC,SAAS;YACpB,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,2BAA2B,CAAC;YAClF,MAAM,WAAW,GAAG,cAAc;gBAChC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;YAC/B,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC;YACxC,2BAA2B,CAAC,qBAAqB,EAAE;gBACjD,gBAAgB,EAAE,cAAc;gBAChC,mBAAmB,EAAE,CAAC,GAAG,eAAe,CAAC;gBACzC,YAAY;gBACZ,eAAe,EAAE,CAAC,GAAG,WAAW,CAAC;gBACjC,IAAI;aACL,CAAC,CAAC;YACH,IACE,cAAc,KAAK,YAAY;mBAC5B,eAAe,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;mBAC7C,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC,EAClE,CAAC;gBACD,OAAO;YACT,CAAC;YACD,UAAU,CAAC,UAAU,EAAE,CAAC;YACxB,cAAc,GAAG,YAAY,CAAC;YAC9B,eAAe,GAAG,WAAW,CAAC;YAC9B,sBAAsB,EAAE,CAAC;QAC3B,CAAC;QACD,gBAAgB;YACd,IAAI,QAAQ;gBAAE,OAAO;YACrB,IAAI,UAAU;gBAAE,OAAO;YACvB,2BAA2B,CAAC,mBAAmB,EAAE;gBAC/C,cAAc;gBACd,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC;gBACrC,IAAI;aACL,CAAC,CAAC;YACH,sBAAsB,EAAE,CAAC;QAC3B,CAAC;QACD,oBAAoB;QACpB,wBAAwB;QACxB,kBAAkB;QAClB,mBAAmB;QACnB,gBAAgB;QAChB,gBAAgB;QAChB,kBAAkB;QAClB,UAAU;YACR,MAAM,IAAI,GAAG,UAAU,CAAC;YACxB,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,UAAU,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtC,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvE,CAAC;YACD,sBAAsB,EAAE,CAAC;YACzB,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO;YACL,IAAI,QAAQ;gBAAE,OAAO;YACrB,UAAU,CAAC,UAAU,EAAE,CAAC;YACxB,kBAAkB,EAAE,CAAC;YACrB,IAAI,CAAC;gBAAC,OAAO,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC/C,IAAI,CAAC;gBAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACtC,IAAI,CAAC;gBAAC,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC3C,IAAI,CAAC;gBAAC,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACpD,IAAI,CAAC;gBAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACzC,IAAI,CAAC;gBAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC7C,IAAI,CAAC;gBAAC,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACrD,IAAI,CAAC;gBAAC,eAAe,EAAE,OAAO,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC9C,IAAI,CAAC;gBAAC,uBAAuB,EAAE,OAAO,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACtD,UAAU,GAAG,IAAI,CAAC;YAClB,cAAc,GAAG,IAAI,CAAC;YACtB,sBAAsB,GAAG,IAAI,CAAC;YAC9B,eAAe,GAAG,IAAI,CAAC;YACvB,uBAAuB,GAAG,IAAI,CAAC;YAC/B,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,GAAG,IAAI,CAAC;YACpB,qBAAqB,GAAG,IAAI,CAAC;YAC7B,gBAAgB,GAAG,KAAK,CAAC;YACzB,sBAAsB,GAAG,IAAI,CAAC;YAC9B,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;KACF,CAAC;IAEF,sBAAsB,EAAE,CAAC;IACzB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAA0C;IAE1C,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO;YAC9B,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;YAChC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB;YAClD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;SACnC;QACD,aAAa,EAAE,QAAQ,CAAC,aAAa;KACtC,CAAC;AACJ,CAAC","sourcesContent":["import type {\n EditorPlacementHit,\n EditorPlacementMode,\n EditorTransformOperationSettings,\n EditorTransformOperationBlockReason,\n EditorTransformCanonicalConstraint,\n EditorTransformDocumentCapabilities,\n EditorSelectionState,\n EditorTransformBatchCommit,\n EditorTransformConstraint,\n EditorTransformGizmoCommit,\n EditorTransformGizmoState,\n EditorTransformOperationPolicy,\n EditorTransformPivot,\n EditorTransformSnapshot,\n EditorTransformSpace,\n EditorTransformTargetSnapshot,\n EditorTransformTrsSnapshot,\n EditorTransformTool,\n EditorTransformVec3,\n} from '@fps-games/editor-core';\nimport {\n DEFAULT_EDITOR_TRANSFORM_OPERATION_SETTINGS,\n isEditorTransformMatrixSnapshot,\n normalizeEditorTransformConstraint,\n readEditorTransformPosition,\n resolveEditorTransformOperationPolicy,\n snapEditorTransformSnapshot,\n} from '@fps-games/editor-core';\nimport type {\n BabylonRuntimeGlobal,\n RuntimeScene,\n} from './types';\nimport type { BabylonEditorProjection } from './projection';\nimport { createBabylonTransformSolver } from './transform-solver';\n\nexport interface BabylonTransformGizmoDragEvent {\n nodeId: string | null;\n targetIds: string[];\n activeId: string | null;\n tool: Exclude<EditorTransformTool, 'select'>;\n requestedSpace: EditorTransformSpace;\n space: EditorTransformSpace;\n operationPolicy: EditorTransformOperationPolicy;\n constraint: EditorTransformCanonicalConstraint;\n pivot: EditorTransformPivot;\n before: EditorTransformSnapshot | null;\n beforeTransforms: Record<string, EditorTransformSnapshot>;\n duplicate: boolean;\n}\n\ninterface BabylonTransformGizmoPolicyMetadata {\n requestedSpace?: EditorTransformSpace;\n operationPolicy?: EditorTransformOperationPolicy;\n}\n\nexport type BabylonTransformGizmoCommit =\n | (EditorTransformGizmoCommit & BabylonTransformGizmoPolicyMetadata)\n | (EditorTransformBatchCommit & BabylonTransformGizmoPolicyMetadata);\n\nexport interface BabylonTransformGizmoDuplicateDragInput {\n targetIds: string[];\n activeId: string | null;\n tool: Exclude<EditorTransformTool, 'select'>;\n requestedSpace: EditorTransformSpace;\n space: EditorTransformSpace;\n operationPolicy: EditorTransformOperationPolicy;\n constraint: EditorTransformCanonicalConstraint;\n beforeTransforms: Record<string, EditorTransformSnapshot>;\n}\n\nexport interface BabylonTransformGizmoDuplicateDragResult {\n targetIds: string[];\n activeId?: string | null;\n}\n\nexport interface BabylonTransformGizmoBlockEvent extends BabylonTransformGizmoDragEvent {\n reason: EditorTransformOperationBlockReason;\n failedTargetId: string | null;\n}\n\nexport type BabylonTransformGizmoHandleKey =\n | 'xGizmo'\n | 'yGizmo'\n | 'zGizmo'\n | 'xPlaneGizmo'\n | 'yPlaneGizmo'\n | 'zPlaneGizmo'\n | 'uniformScaleGizmo';\n\nexport function resolveBabylonTransformHandleConstraint(\n tool: Exclude<EditorTransformTool, 'select'>,\n handleKey: BabylonTransformGizmoHandleKey,\n): EditorTransformCanonicalConstraint | null {\n if (tool === 'move') {\n if (handleKey === 'xPlaneGizmo' || handleKey === 'yPlaneGizmo' || handleKey === 'zPlaneGizmo') return 'plane';\n if (handleKey === 'xGizmo' || handleKey === 'yGizmo' || handleKey === 'zGizmo') return 'axis';\n return null;\n }\n if (tool === 'rotate') {\n return handleKey === 'xGizmo' || handleKey === 'yGizmo' || handleKey === 'zGizmo' ? 'axis' : null;\n }\n if (tool === 'scale') {\n if (handleKey === 'uniformScaleGizmo') return 'uniform';\n return handleKey === 'xGizmo' || handleKey === 'yGizmo' || handleKey === 'zGizmo' ? 'axis' : null;\n }\n return null;\n}\n\nexport interface BabylonTransformGizmoControllerOptions {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n projection: BabylonEditorProjection;\n initialTool?: EditorTransformTool;\n initialSpace?: EditorTransformSpace;\n documentCapabilities?: Partial<EditorTransformDocumentCapabilities>;\n onDragStart?: (event: BabylonTransformGizmoDragEvent) => void;\n onDragUpdate?: (event: BabylonTransformGizmoDragEvent & { current: EditorTransformSnapshot }) => void;\n onDragEnd?: (event: BabylonTransformGizmoCommit) => void;\n onDragCancel?: (event: BabylonTransformGizmoDragEvent) => void;\n onDragBlocked?: (event: BabylonTransformGizmoBlockEvent) => void;\n onDuplicateDragStart?: (input: BabylonTransformGizmoDuplicateDragInput) => BabylonTransformGizmoDuplicateDragResult | null;\n logger?: Pick<Console, 'warn'>;\n}\n\nexport interface BabylonTransformGizmoController {\n getState(): EditorTransformGizmoState;\n prepare(): Promise<void>;\n setTool(tool: EditorTransformTool): void;\n setSpace(space: EditorTransformSpace): void;\n setConstraint(constraint: EditorTransformConstraint): void;\n setOperationSettings(settings: EditorTransformOperationSettings): void;\n preparePointerDrag(event: PointerEvent): void;\n setSelectedNode(nodeId: string | null): void;\n setSelection(selection: EditorSelectionState): void;\n refreshSelection(): void;\n isGizmoDragCandidate(event: PointerEvent): boolean;\n isViewPlaneMoveCandidate(event: PointerEvent): boolean;\n beginViewPlaneMove(event: PointerEvent): boolean;\n updateViewPlaneMove(event: PointerEvent): boolean;\n endViewPlaneMove(event: PointerEvent): boolean;\n pickPlacementHit(clientX: number, clientY: number, mode: EditorPlacementMode): EditorPlacementHit | null;\n setPlacementMarker(hit: EditorPlacementHit | null): void;\n cancelDrag(): void;\n dispose(): void;\n}\n\ninterface ActiveDrag {\n nodeId: string | null;\n targetIds: string[];\n activeId: string | null;\n tool: Exclude<EditorTransformTool, 'select'>;\n requestedSpace: EditorTransformSpace;\n space: EditorTransformSpace;\n operationPolicy: EditorTransformOperationPolicy;\n constraint: EditorTransformCanonicalConstraint;\n pivot: EditorTransformPivot;\n before: EditorTransformSnapshot | null;\n beforeTransforms: Record<string, EditorTransformSnapshot>;\n duplicate: boolean;\n handleKey?: BabylonTransformGizmoHandleKey;\n proxyStart?: EditorTransformTrsSnapshot;\n blockedReason?: EditorTransformOperationBlockReason;\n blockedTargetId?: string | null;\n viewPlane?: {\n pointerId: number;\n startPoint: EditorTransformVec3;\n };\n}\n\ntype ObserverDisposer = () => void;\ntype PreviewBatchTransformResult =\n | { ok: true; transforms: Record<string, EditorTransformSnapshot> }\n | { ok: false; reason: EditorTransformOperationBlockReason; failedTargetId: string | null };\n\nconst LARGE_SELECTION_GIZMO_LIMIT = 200;\nconst EDITOR_TRANSFORM_GIZMO_SCALE_RATIO = 0.9;\nconst FREE_MOVE_HANDLE_DIAMETER = 0.018;\nconst TRANSFORM_GIZMO_DIAGNOSTIC_PREFIX = '[fps-editor:gizmo]';\n\nfunction isTransformGizmoDiagnosticEnabled(): boolean {\n const scope = globalThis as typeof globalThis & {\n __FPS_EDITOR_DEBUG_TRANSFORM_GIZMO?: unknown;\n location?: { search?: unknown };\n };\n if (scope.__FPS_EDITOR_DEBUG_TRANSFORM_GIZMO === true) return true;\n const search = scope.location?.search;\n return typeof search === 'string' && /(?:^|[?&])debugGizmo=(?:1|true)(?:&|$)/.test(search);\n}\n\nfunction logTransformGizmoDiagnostic(event: string, details: Record<string, unknown> = {}): void {\n if (!isTransformGizmoDiagnosticEnabled()) return;\n const timestamp = typeof performance !== 'undefined' && typeof performance.now === 'function'\n ? Number(performance.now().toFixed(2))\n : Date.now();\n console.info(TRANSFORM_GIZMO_DIAGNOSTIC_PREFIX, event, { timestamp, ...details });\n}\n\nexport function createBabylonTransformGizmoController(\n options: BabylonTransformGizmoControllerOptions,\n): BabylonTransformGizmoController {\n const GizmoManagerCtor = options.babylon.GizmoManager!;\n if (!GizmoManagerCtor) throw new Error('Babylon runtime missing GizmoManager');\n const transformSolver = createBabylonTransformSolver({ babylon: options.babylon as BabylonRuntimeGlobal & Record<string, any> });\n\n let tool: EditorTransformTool = options.initialTool ?? 'select';\n let space: EditorTransformSpace = options.initialSpace ?? 'world';\n let constraint: EditorTransformCanonicalConstraint = normalizeConstraintForTool(tool, 'axis') ?? 'axis';\n let selectedNodeId: string | null = null;\n let selectedNodeIds: string[] = [];\n let activeDrag: ActiveDrag | null = null;\n let disposed = false;\n let operationSettings = cloneOperationSettings(DEFAULT_EDITOR_TRANSFORM_OPERATION_SETTINGS);\n let pendingDuplicateDrag = false;\n let observerDisposers: ObserverDisposer[] = [];\n let pivotProxy: any | null = null;\n let freeMoveHandle: any | null = null;\n let freeMoveHandleMaterial: any | null = null;\n let placementMarker: any | null = null;\n let placementMarkerMaterial: any | null = null;\n let manager: any | null = null;\n let utilityLayer: any | null = null;\n let keepDepthUtilityLayer: any | null = null;\n let managerPrewarmed = false;\n let materialPrewarmPromise: Promise<void> | null = null;\n let attachmentDiagnosticSequence = 0;\n const canvas = options.scene.getEngine?.().getRenderingCanvas?.() as HTMLCanvasElement | null | undefined;\n\n function ensureGizmoManager(): any | null {\n if (manager) {\n logTransformGizmoDiagnostic('manager.reuse', {\n tool,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n });\n return manager;\n }\n const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const UtilityLayerRendererCtor = options.babylon.UtilityLayerRenderer;\n if (UtilityLayerRendererCtor) {\n utilityLayer = new UtilityLayerRendererCtor(options.scene);\n keepDepthUtilityLayer = new UtilityLayerRendererCtor(options.scene);\n try {\n keepDepthUtilityLayer.utilityLayerScene.autoClearDepthAndStencil = false;\n } catch {}\n manager = new GizmoManagerCtor(options.scene, 1, utilityLayer, keepDepthUtilityLayer);\n } else {\n manager = new GizmoManagerCtor(options.scene);\n }\n manager.usePointerToAttachGizmos = false;\n manager.clearGizmoOnEmptyPointerEvent = false;\n manager.boundingBoxGizmoEnabled = false;\n applyGizmoPresentation(manager);\n logTransformGizmoDiagnostic('manager.created', {\n durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),\n editorOwnedUtilityLayers: !!UtilityLayerRendererCtor,\n sceneActiveCamera: options.scene.activeCamera?.name ?? null,\n });\n return manager;\n }\n\n function activeTransformTool(): Exclude<EditorTransformTool, 'select'> | null {\n return tool === 'select' ? null : tool;\n }\n\n function getActiveTargetId(): string | null {\n if (selectedNodeId && selectedNodeIds.includes(selectedNodeId)) return selectedNodeId;\n return selectedNodeIds[selectedNodeIds.length - 1] ?? null;\n }\n\n function getBatchTransformTargetIds(): string[] {\n if ((tool === 'select' || tool == null) || selectedNodeIds.length <= 1) return [];\n return selectedNodeIds.filter(nodeId => !!options.projection.getAttachableRoot(nodeId));\n }\n\n function getCurrentTransformTargetIds(): string[] {\n return selectedNodeIds.length > 1\n ? getBatchTransformTargetIds()\n : [getActiveTargetId()].filter((nodeId): nodeId is string => !!nodeId);\n }\n\n function normalizeConstraintForTool(\n nextTool: EditorTransformTool,\n nextConstraint?: EditorTransformConstraint | null,\n ): EditorTransformCanonicalConstraint | undefined {\n return normalizeEditorTransformConstraint(nextTool, nextConstraint);\n }\n\n function resolveOperationPolicy(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n activeConstraint: EditorTransformCanonicalConstraint,\n ): EditorTransformOperationPolicy {\n return resolveEditorTransformOperationPolicy({\n tool: activeTool,\n constraint: activeConstraint,\n requestedSpace: space,\n documentCapabilities: options.documentCapabilities,\n });\n }\n\n function resolveAttachConstraint(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n activeConstraint: EditorTransformCanonicalConstraint,\n ): EditorTransformCanonicalConstraint {\n return activeTool === 'scale' ? 'axis' : activeConstraint;\n }\n\n function ensurePivotProxy(): any | null {\n if (pivotProxy) return pivotProxy;\n const TransformNode = (options.babylon as any).TransformNode;\n if (!TransformNode) return null;\n pivotProxy = new TransformNode('editor.selectionPivotProxy', options.scene);\n pivotProxy.metadata = {\n ...(pivotProxy.metadata ?? {}),\n editorProjectionHelper: true,\n };\n return pivotProxy;\n }\n\n function setPivotProxyTransform(\n pivot: EditorTransformPivot,\n rotation: EditorTransformVec3 = { x: 0, y: 0, z: 0 },\n ): any | null {\n const proxy = ensurePivotProxy();\n const Vector3 = options.babylon.Vector3;\n if (!proxy || !Vector3) return null;\n proxy.position = new Vector3(pivot.position.x, pivot.position.y, pivot.position.z);\n proxy.rotation = new Vector3(rotation.x, rotation.y, rotation.z);\n proxy.scaling = new Vector3(1, 1, 1);\n return proxy;\n }\n\n function setPivotProxyPosition(position: EditorTransformVec3): void {\n const proxy = ensurePivotProxy();\n const Vector3 = options.babylon.Vector3;\n if (!proxy || !Vector3) return;\n proxy.position = new Vector3(position.x, position.y, position.z);\n }\n\n function clearDragObservers(): void {\n for (const dispose of observerDisposers) dispose();\n observerDisposers = [];\n }\n\n function addObserver(observable: any, callback: () => void): void {\n if (!observable?.add || !observable?.remove) return;\n const observer = observable.add(callback);\n observerDisposers.push(() => {\n try { observable.remove(observer); } catch {}\n });\n }\n\n function registerDragObserversFor(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n gizmo: any,\n ): void {\n const handleKeys: BabylonTransformGizmoHandleKey[] = [\n 'xGizmo',\n 'yGizmo',\n 'zGizmo',\n 'uniformScaleGizmo',\n 'xPlaneGizmo',\n 'yPlaneGizmo',\n 'zPlaneGizmo',\n ];\n for (const handleKey of handleKeys) {\n const activeConstraint = resolveBabylonTransformHandleConstraint(activeTool, handleKey);\n if (!activeConstraint) continue;\n const behavior = gizmo?.[handleKey]?.dragBehavior;\n addObserver(behavior?.onDragStartObservable, () => beginDrag(activeConstraint, handleKey));\n addObserver(behavior?.onDragObservable, updateDrag);\n addObserver(behavior?.onDragEndObservable, endDrag);\n }\n }\n\n function registerDragObservers(): void {\n clearDragObservers();\n const activeManager = manager;\n if (!activeManager) return;\n registerDragObserversFor('move', activeManager.gizmos?.positionGizmo);\n registerDragObserversFor('rotate', activeManager.gizmos?.rotationGizmo);\n registerDragObserversFor('scale', activeManager.gizmos?.scaleGizmo);\n }\n\n function applySpacePreference(): void {\n const activeManager = manager;\n if (!activeManager) return;\n const gizmos: Array<{ gizmo: any; supportsWorldRotationPreference: boolean }> = [\n { gizmo: activeManager.gizmos?.positionGizmo, supportsWorldRotationPreference: true },\n { gizmo: activeManager.gizmos?.rotationGizmo, supportsWorldRotationPreference: true },\n { gizmo: activeManager.gizmos?.scaleGizmo, supportsWorldRotationPreference: false },\n ];\n for (const { gizmo, supportsWorldRotationPreference } of gizmos) {\n const matchAttachedMesh = shouldMatchAttachedMeshForGizmo(gizmo);\n if (!matchAttachedMesh && !supportsWorldRotationPreference) continue;\n try {\n if (\n 'updateGizmoRotationToMatchAttachedMesh' in (gizmo ?? {})\n ) {\n gizmo.updateGizmoRotationToMatchAttachedMesh = matchAttachedMesh;\n }\n } catch {}\n for (const axis of [\n gizmo?.xGizmo,\n gizmo?.yGizmo,\n gizmo?.zGizmo,\n gizmo?.xPlaneGizmo,\n gizmo?.yPlaneGizmo,\n gizmo?.zPlaneGizmo,\n gizmo?.uniformScaleGizmo,\n ]) {\n try {\n if ('updateGizmoRotationToMatchAttachedMesh' in (axis ?? {})) {\n axis.updateGizmoRotationToMatchAttachedMesh = matchAttachedMesh;\n }\n } catch {}\n }\n }\n }\n\n function shouldMatchAttachedMeshForGizmo(gizmo: any): boolean {\n const activeTool = activeTransformTool();\n if (!activeTool) return space === 'local';\n const operationConstraint = activeTool === 'scale' && gizmo === manager?.gizmos?.scaleGizmo\n ? 'axis'\n : constraint;\n return resolveOperationPolicy(activeTool, operationConstraint).effectiveSpace === 'local';\n }\n\n function applyHandlePreference(): void {\n const positionGizmo = manager?.gizmos?.positionGizmo;\n if (positionGizmo) {\n try { positionGizmo.planarGizmoEnabled = tool === 'move'; } catch {}\n }\n }\n\n function applyGizmoPresentation(activeManager: any): void {\n try { activeManager.scaleRatio = EDITOR_TRANSFORM_GIZMO_SCALE_RATIO; } catch {}\n for (const gizmo of [\n activeManager.gizmos?.positionGizmo,\n activeManager.gizmos?.rotationGizmo,\n activeManager.gizmos?.scaleGizmo,\n ]) {\n if (!gizmo) continue;\n try { gizmo.scaleRatio = EDITOR_TRANSFORM_GIZMO_SCALE_RATIO; } catch {}\n try { gizmo.updateScale = true; } catch {}\n }\n }\n\n function attachCurrentSelection(): void {\n const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();\n clearDragObservers();\n const activeTool = activeTransformTool();\n if (!activeTool) {\n if (manager) {\n manager.positionGizmoEnabled = false;\n manager.rotationGizmoEnabled = false;\n manager.scaleGizmoEnabled = false;\n try { manager.attachToNode?.(null); } catch {}\n }\n updateFreeMoveHandle();\n logTransformGizmoDiagnostic('attachment.skipped', {\n reason: 'select-tool',\n tool,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n });\n return;\n }\n const activeManager = ensureGizmoManager();\n if (!activeManager) {\n updateFreeMoveHandle();\n return;\n }\n prewarmGizmoManager(activeManager);\n activeManager.positionGizmoEnabled = activeTool === 'move';\n activeManager.rotationGizmoEnabled = activeTool === 'rotate';\n activeManager.scaleGizmoEnabled = activeTool === 'scale';\n applyGizmoPresentation(activeManager);\n applyHandlePreference();\n applySpacePreference();\n registerDragObservers();\n\n let target: any | null = null;\n const requestedTargetIds = getCurrentTransformTargetIds();\n const attachableTargetIds = requestedTargetIds.filter(nodeId => !!options.projection.getAttachableRoot(nodeId));\n target = attachNativeTransformProxy(requestedTargetIds, activeTool, constraint);\n let attachError: unknown = null;\n try { activeManager.attachToNode?.(target ?? null); } catch (error) {\n attachError = error;\n options.logger?.warn?.('[BabylonTransformGizmoController] failed to attach gizmo', error);\n }\n updateFreeMoveHandle();\n const activeGizmo = activeTool === 'move'\n ? activeManager.gizmos?.positionGizmo\n : activeTool === 'rotate'\n ? activeManager.gizmos?.rotationGizmo\n : activeManager.gizmos?.scaleGizmo;\n const diagnosticSequence = ++attachmentDiagnosticSequence;\n const collectRenderDetails = (): Record<string, unknown> => {\n const rootMesh = activeGizmo?._rootMesh ?? activeGizmo?.rootMesh ?? null;\n const absolutePosition = rootMesh?.getAbsolutePosition?.() ?? rootMesh?.absolutePosition ?? rootMesh?.position ?? null;\n const scaling = rootMesh?.scaling ?? null;\n return {\n diagnosticSequence,\n gizmoRootEnabled: rootMesh?.isEnabled?.() ?? null,\n gizmoRootVisible: rootMesh?.isVisible ?? null,\n gizmoRootVisibility: rootMesh?.visibility ?? null,\n gizmoRootChildCount: rootMesh?.getChildMeshes?.(false)?.length ?? null,\n gizmoRootPosition: absolutePosition\n ? { x: absolutePosition.x, y: absolutePosition.y, z: absolutePosition.z }\n : null,\n gizmoRootScaling: scaling ? { x: scaling.x, y: scaling.y, z: scaling.z } : null,\n gizmoScaleRatio: activeGizmo?.scaleRatio ?? null,\n utilityLayerMeshCount: utilityLayer?.utilityLayerScene?.meshes?.length ?? null,\n utilityLayerActiveMeshCount: utilityLayer?.utilityLayerScene?.getActiveMeshes?.()?.length ?? null,\n utilityLayerRenderId: utilityLayer?.utilityLayerScene?.getRenderId?.() ?? null,\n sceneRenderId: options.scene.getRenderId?.() ?? null,\n };\n };\n logTransformGizmoDiagnostic('attachment.result', {\n durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),\n tool,\n space,\n constraint,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n requestedTargetIds,\n attachableTargetIds,\n targetCreated: !!target,\n targetName: target?.name ?? null,\n managerAttachedNode: activeManager.attachedNode?.name ?? activeManager._attachedNode?.name ?? null,\n gizmoAttachedNode: activeGizmo?.attachedNode?.name ?? null,\n gizmoAttachedMesh: activeGizmo?.attachedMesh?.name ?? null,\n positionEnabled: activeManager.positionGizmoEnabled === true,\n rotationEnabled: activeManager.rotationGizmoEnabled === true,\n scaleEnabled: activeManager.scaleGizmoEnabled === true,\n sceneActiveCamera: options.scene.activeCamera?.name ?? null,\n utilityLayerActiveCamera: utilityLayer?.utilityLayerScene?.activeCamera?.name ?? null,\n utilityLayerShouldRender: utilityLayer?.shouldRender ?? null,\n attachError: attachError instanceof Error ? attachError.message : attachError ? String(attachError) : null,\n ...collectRenderDetails(),\n });\n if (isTransformGizmoDiagnosticEnabled()) {\n utilityLayer?.utilityLayerScene?.onAfterRenderObservable?.addOnce?.(() => {\n logTransformGizmoDiagnostic('utility-layer.rendered', {\n tool,\n selectedNodeId,\n ...collectRenderDetails(),\n });\n });\n }\n }\n\n function prewarmGizmoManager(activeManager: any): void {\n if (managerPrewarmed) {\n logTransformGizmoDiagnostic('manager.prewarm.reuse', { tool });\n return;\n }\n const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();\n managerPrewarmed = true;\n try {\n activeManager.positionGizmoEnabled = true;\n activeManager.rotationGizmoEnabled = true;\n activeManager.scaleGizmoEnabled = true;\n applyGizmoPresentation(activeManager);\n activeManager.attachToNode?.(null);\n activeManager.positionGizmoEnabled = false;\n activeManager.rotationGizmoEnabled = false;\n activeManager.scaleGizmoEnabled = false;\n } catch (error) {\n options.logger?.warn?.('[BabylonTransformGizmoController] failed to prewarm gizmo manager', error);\n }\n logTransformGizmoDiagnostic('manager.prewarm.complete', {\n durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),\n hasPositionGizmo: !!activeManager.gizmos?.positionGizmo,\n hasRotationGizmo: !!activeManager.gizmos?.rotationGizmo,\n hasScaleGizmo: !!activeManager.gizmos?.scaleGizmo,\n });\n }\n\n function prewarmGizmoMaterials(): Promise<void> {\n if (materialPrewarmPromise) return materialPrewarmPromise;\n const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const targets = new Map<any, any>();\n for (const layer of [utilityLayer, keepDepthUtilityLayer]) {\n for (const mesh of layer?.utilityLayerScene?.meshes ?? []) {\n const material = mesh?.material;\n if (!material || typeof material.forceCompilationAsync !== 'function' || targets.has(material)) continue;\n targets.set(material, mesh);\n }\n }\n logTransformGizmoDiagnostic('material-prewarm.started', {\n targetCount: targets.size,\n });\n materialPrewarmPromise = Promise.allSettled(\n [...targets].map(([material, mesh]) => material.forceCompilationAsync(mesh)),\n ).then((results) => {\n const failureCount = results.filter(result => result.status === 'rejected').length;\n logTransformGizmoDiagnostic('material-prewarm.completed', {\n durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),\n targetCount: targets.size,\n failureCount,\n });\n });\n return materialPrewarmPromise;\n }\n\n function beginDrag(\n activeConstraint: EditorTransformCanonicalConstraint = constraint,\n handleKey?: BabylonTransformGizmoHandleKey,\n ): void {\n if (activeDrag) return;\n const activeTool = activeTransformTool();\n if (!activeTool) return;\n const duplicate = pendingDuplicateDrag;\n pendingDuplicateDrag = false;\n const targetIds = resolveDragTargetIds(activeTool, getCurrentTransformTargetIds(), activeConstraint, duplicate);\n const drag = createActiveDrag(activeTool, targetIds, activeConstraint, duplicate, handleKey);\n if (!drag) return;\n activeDrag = drag;\n options.onDragStart?.(activeDrag);\n }\n\n function resolveDragTargetIds(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n targetIds: string[],\n activeConstraint: EditorTransformCanonicalConstraint,\n duplicate: boolean,\n ): string[] {\n if (!duplicate || targetIds.length === 0) return targetIds;\n const beforeTransforms = options.projection.readNodeTransforms(targetIds);\n const validTargetIds = targetIds.filter(nodeId => !!beforeTransforms[nodeId]);\n if (validTargetIds.length === 0) return [];\n const operationPolicy = resolveOperationPolicy(activeTool, activeConstraint);\n const duplicateResult = options.onDuplicateDragStart?.({\n targetIds: validTargetIds,\n activeId: selectedNodeId && validTargetIds.includes(selectedNodeId) ? selectedNodeId : validTargetIds[validTargetIds.length - 1] ?? null,\n tool: activeTool,\n requestedSpace: space,\n space: operationPolicy.effectiveSpace,\n operationPolicy,\n constraint: activeConstraint,\n beforeTransforms,\n });\n if (!duplicateResult?.targetIds.length) return [];\n selectedNodeIds = [...duplicateResult.targetIds];\n selectedNodeId = duplicateResult.activeId && selectedNodeIds.includes(duplicateResult.activeId)\n ? duplicateResult.activeId\n : selectedNodeIds[selectedNodeIds.length - 1] ?? null;\n if (!attachDragTargetIds(selectedNodeIds, activeTool, activeConstraint)) return [];\n return selectedNodeIds;\n }\n\n function attachDragTargetIds(\n targetIds: string[],\n activeTool: Exclude<EditorTransformTool, 'select'>,\n activeConstraint: EditorTransformCanonicalConstraint,\n ): boolean {\n const target = attachNativeTransformProxy(targetIds, activeTool, activeConstraint);\n if (!target) return false;\n const activeManager = ensureGizmoManager();\n if (!activeManager) return false;\n try {\n activeManager.attachToNode?.(target);\n updateFreeMoveHandle();\n return true;\n } catch (error) {\n options.logger?.warn?.('[BabylonTransformGizmoController] failed to attach duplicate drag target', error);\n return false;\n }\n }\n\n function attachNativeTransformProxy(\n targetIds: string[],\n activeTool: Exclude<EditorTransformTool, 'select'> | null,\n activeConstraint: EditorTransformCanonicalConstraint,\n ): any | null {\n const validTargetIds = targetIds.filter(nodeId => !!options.projection.getAttachableRoot(nodeId));\n if (validTargetIds.length === 0) return null;\n const pivot = (activeTool === 'move' || validTargetIds.length > 1)\n ? options.projection.getSelectionPivot(validTargetIds)\n ?? createSingleTargetPivot(validTargetIds[0]!)\n : createSingleTargetPivot(validTargetIds[0]!);\n if (!pivot) return null;\n const effectiveSpace = activeTool\n ? resolveOperationPolicy(activeTool, resolveAttachConstraint(activeTool, activeConstraint)).effectiveSpace\n : space;\n const rotation = validTargetIds.length === 1 && effectiveSpace === 'local'\n ? readTrsRotation(options.projection.readNodeTransform(validTargetIds[0]!))\n : { x: 0, y: 0, z: 0 };\n return setPivotProxyTransform(pivot, rotation);\n }\n\n function createSingleTargetPivot(nodeId: string): EditorTransformPivot | null {\n return createTransformPivot(options.projection.readNodeTransform(nodeId));\n }\n\n function createTransformPivot(transform: EditorTransformSnapshot | null | undefined): EditorTransformPivot | null {\n return transform\n ? {\n mode: 'selection-center',\n position: readEditorTransformPosition(transform),\n }\n : null;\n }\n\n function createSelectionPivot(\n transforms: Record<string, EditorTransformSnapshot>,\n targetIds: readonly string[],\n ): EditorTransformPivot | null {\n const positions: EditorTransformVec3[] = targetIds\n .map(id => transforms[id])\n .filter((transform): transform is EditorTransformSnapshot => !!transform)\n .map(readEditorTransformPosition);\n if (positions.length === 0) return null;\n return {\n mode: 'selection-center',\n position: {\n x: positions.reduce((sum: number, position: EditorTransformVec3) => sum + position.x, 0) / positions.length,\n y: positions.reduce((sum: number, position: EditorTransformVec3) => sum + position.y, 0) / positions.length,\n z: positions.reduce((sum: number, position: EditorTransformVec3) => sum + position.z, 0) / positions.length,\n },\n };\n }\n\n function readTrsRotation(transform: EditorTransformSnapshot | null): EditorTransformVec3 {\n return transform && !isEditorTransformMatrixSnapshot(transform)\n ? transform.rotation\n : { x: 0, y: 0, z: 0 };\n }\n\n function findMatrixTransformTargetId(\n transforms: Record<string, EditorTransformSnapshot>,\n targetIds: readonly string[],\n ): string | null {\n return targetIds.find(id => {\n const transform = transforms[id];\n return !!transform && isEditorTransformMatrixSnapshot(transform);\n }) ?? null;\n }\n\n function createActiveDrag(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n targetIds: string[],\n activeConstraint: EditorTransformCanonicalConstraint,\n duplicate = false,\n handleKey?: BabylonTransformGizmoHandleKey,\n ): ActiveDrag | null {\n if (targetIds.length === 0) return null;\n const beforeTransforms = options.projection.readNodeTransforms(targetIds);\n const validTargetIds = targetIds.filter(nodeId => !!beforeTransforms[nodeId]);\n if (validTargetIds.length === 0) return null;\n const matrixTargetId = findMatrixTransformTargetId(beforeTransforms, validTargetIds);\n if (matrixTargetId) {\n return createBlockedActiveDrag({\n activeTool,\n targetIds: validTargetIds,\n activeConstraint,\n beforeTransforms,\n reason: 'unsupported-transform',\n failedTargetId: matrixTargetId,\n duplicate,\n });\n }\n const pivot = (activeTool === 'move' || validTargetIds.length > 1)\n ? options.projection.getSelectionPivot(validTargetIds) ?? {\n mode: 'selection-center' as const,\n position: readEditorTransformPosition(beforeTransforms[validTargetIds[0]!]!),\n }\n : {\n mode: 'selection-center' as const,\n position: readEditorTransformPosition(beforeTransforms[validTargetIds[0]!]!),\n };\n if (!pivot) return null;\n const before = validTargetIds.length === 1 ? beforeTransforms[validTargetIds[0]!] ?? null : null;\n const operationPolicy = resolveOperationPolicy(activeTool, activeConstraint);\n return {\n nodeId: validTargetIds.length === 1 ? validTargetIds[0]! : null,\n targetIds: validTargetIds,\n activeId: selectedNodeId && validTargetIds.includes(selectedNodeId) ? selectedNodeId : validTargetIds[validTargetIds.length - 1] ?? null,\n tool: activeTool,\n requestedSpace: space,\n space: operationPolicy.effectiveSpace,\n operationPolicy,\n constraint: activeConstraint,\n pivot,\n before,\n beforeTransforms,\n duplicate,\n handleKey,\n proxyStart: readNativeProxyTransform(pivot),\n };\n }\n\n function createBlockedActiveDrag(input: {\n activeTool: Exclude<EditorTransformTool, 'select'>;\n targetIds: string[];\n activeConstraint: EditorTransformCanonicalConstraint;\n beforeTransforms: Record<string, EditorTransformSnapshot>;\n reason: EditorTransformOperationBlockReason;\n failedTargetId: string | null;\n duplicate: boolean;\n }): ActiveDrag | null {\n const operationPolicy = resolveOperationPolicy(input.activeTool, input.activeConstraint);\n const pivot = input.targetIds.length > 1\n ? createSelectionPivot(input.beforeTransforms, input.targetIds)\n : createTransformPivot(input.beforeTransforms[input.targetIds[0]!] ?? null);\n if (!pivot) return null;\n const before = input.targetIds.length === 1 ? input.beforeTransforms[input.targetIds[0]!] ?? null : null;\n return {\n nodeId: input.targetIds.length === 1 ? input.targetIds[0]! : null,\n targetIds: input.targetIds,\n activeId: selectedNodeId && input.targetIds.includes(selectedNodeId) ? selectedNodeId : input.targetIds[input.targetIds.length - 1] ?? null,\n tool: input.activeTool,\n requestedSpace: space,\n space: operationPolicy.effectiveSpace,\n operationPolicy,\n constraint: input.activeConstraint,\n pivot,\n before,\n beforeTransforms: input.beforeTransforms,\n duplicate: input.duplicate,\n blockedReason: input.reason,\n blockedTargetId: input.failedTargetId,\n };\n }\n\n function updateDrag(): void {\n if (!activeDrag) return;\n const preview = previewBatchTransform(activeDrag);\n if (!preview.ok) {\n blockDrag(activeDrag, preview.reason, preview.failedTargetId);\n return;\n }\n const currentTransforms = preview.transforms;\n const current = activeDrag.activeId\n ? currentTransforms[activeDrag.activeId] ?? Object.values(currentTransforms)[0] ?? null\n : Object.values(currentTransforms)[0] ?? null;\n if (!current) return;\n if (activeDrag.tool === 'move') {\n const pivotPosition = resolvePreviewPivotPosition(activeDrag, currentTransforms);\n if (pivotPosition) setFreeMoveHandlePosition(pivotPosition);\n }\n options.onDragUpdate?.({ ...activeDrag, current });\n }\n\n function endDrag(): void {\n const drag = activeDrag;\n if (!drag) return;\n const preview = previewBatchTransform(drag);\n if (!preview.ok) {\n blockDrag(drag, preview.reason, preview.failedTargetId);\n return;\n }\n activeDrag = null;\n emitTransformCommit(drag, preview.transforms);\n attachCurrentSelection();\n }\n\n function blockDrag(\n drag: ActiveDrag,\n reason: EditorTransformOperationBlockReason,\n failedTargetId: string | null,\n ): void {\n activeDrag = null;\n restoreDragPreview(drag);\n attachCurrentSelection();\n options.onDragBlocked?.({\n ...drag,\n reason,\n failedTargetId,\n });\n }\n\n function restoreDragPreview(drag: ActiveDrag): void {\n if (drag.targetIds.length > 1) {\n options.projection.setNodeTransformsPreview(drag.beforeTransforms);\n } else if (drag.nodeId && drag.before) {\n options.projection.setNodeTransformPreview(drag.nodeId, drag.before);\n }\n }\n\n function emitTransformCommit(\n drag: ActiveDrag,\n afterTransforms: Record<string, EditorTransformSnapshot>,\n ): void {\n if (drag.targetIds.length === 1) {\n const nodeId = drag.targetIds[0]!;\n const before = drag.beforeTransforms[nodeId];\n const after = afterTransforms[nodeId];\n if (!before || !after) {\n options.onDragCancel?.(drag);\n return;\n }\n options.onDragEnd?.({\n nodeId,\n tool: drag.tool,\n requestedSpace: drag.requestedSpace,\n space: drag.space,\n operationPolicy: drag.operationPolicy,\n constraint: drag.constraint,\n before,\n after,\n });\n return;\n }\n options.onDragEnd?.({\n targetIds: drag.targetIds,\n activeId: drag.activeId,\n tool: drag.tool,\n requestedSpace: drag.requestedSpace,\n space: drag.space,\n operationPolicy: drag.operationPolicy,\n constraint: drag.constraint,\n pivot: drag.pivot,\n targets: drag.targetIds\n .map((id): EditorTransformTargetSnapshot | null => {\n const before = drag.beforeTransforms[id];\n const after = afterTransforms[id];\n return before && after ? { id, before, after } : null;\n })\n .filter((target): target is EditorTransformTargetSnapshot => !!target),\n });\n }\n\n function previewBatchTransform(drag: ActiveDrag): PreviewBatchTransformResult {\n if (drag.blockedReason) {\n return {\n ok: false,\n reason: drag.blockedReason,\n failedTargetId: drag.blockedTargetId ?? null,\n };\n }\n const pivotTransform = readProjectionLikeTransform(pivotProxy, {\n position: drag.pivot.position,\n rotation: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n });\n const proxyStart = drag.proxyStart ?? {\n position: drag.pivot.position,\n rotation: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n };\n if (drag.tool === 'move') {\n return { ok: true, transforms: previewMoveWithDelta(drag, subtractVec3(pivotTransform.position, proxyStart.position)) };\n }\n if (drag.tool === 'rotate') {\n return previewRotateWithDelta(drag, resolveRotationDelta(drag, pivotTransform, proxyStart));\n }\n if (drag.tool === 'scale') {\n return previewScaleWithDelta(drag, divideVec3(pivotTransform.scale, proxyStart.scale));\n }\n return { ok: true, transforms: {} };\n }\n\n function previewMoveWithDelta(\n drag: ActiveDrag,\n delta: EditorTransformVec3,\n ): Record<string, EditorTransformSnapshot> {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n for (const nodeId of drag.targetIds) {\n const before = drag.beforeTransforms[nodeId];\n if (!before) continue;\n const result = transformSolver.solveMove({ before, delta });\n if (!result.ok) continue;\n transforms[nodeId] = applySnapToTransform(drag, nodeId, result.transform);\n }\n options.projection.setNodeTransformsPreview(transforms);\n return transforms;\n }\n\n function previewRotateWithDelta(\n drag: ActiveDrag,\n rotationDelta: EditorTransformVec3,\n ): PreviewBatchTransformResult {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n for (const nodeId of drag.targetIds) {\n const before = drag.beforeTransforms[nodeId];\n if (!before) continue;\n const result = transformSolver.solveRotate({\n before,\n pivot: drag.pivot.position,\n delta: rotationDelta,\n space: drag.space,\n });\n if (!result.ok) {\n return { ok: false, reason: result.reason, failedTargetId: nodeId };\n }\n transforms[nodeId] = applySnapToTransform(drag, nodeId, result.transform);\n }\n options.projection.setNodeTransformsPreview(transforms);\n return { ok: true, transforms };\n }\n\n function resolveRotationDelta(\n drag: ActiveDrag,\n pivotTransform: EditorTransformTrsSnapshot,\n proxyStart: EditorTransformTrsSnapshot,\n ): EditorTransformVec3 {\n const angleDelta = readRotationHandleAngle(drag.handleKey);\n if (angleDelta != null) return rotationDeltaFromHandleAngle(drag.handleKey, angleDelta);\n return subtractVec3(pivotTransform.rotation, proxyStart.rotation);\n }\n\n function readRotationHandleAngle(handleKey: BabylonTransformGizmoHandleKey | undefined): number | null {\n if (handleKey !== 'xGizmo' && handleKey !== 'yGizmo' && handleKey !== 'zGizmo') return null;\n const angle = manager?.gizmos?.rotationGizmo?.[handleKey]?.angle;\n return Number.isFinite(angle) ? Number(angle) : null;\n }\n\n function rotationDeltaFromHandleAngle(\n handleKey: BabylonTransformGizmoHandleKey | undefined,\n angle: number,\n ): EditorTransformVec3 {\n if (handleKey === 'xGizmo') return { x: angle, y: 0, z: 0 };\n if (handleKey === 'yGizmo') return { x: 0, y: angle, z: 0 };\n if (handleKey === 'zGizmo') return { x: 0, y: 0, z: angle };\n return { x: 0, y: 0, z: 0 };\n }\n\n function previewScaleWithDelta(\n drag: ActiveDrag,\n scaleDelta: EditorTransformVec3,\n ): PreviewBatchTransformResult {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n const safeScale = {\n x: Number.isFinite(scaleDelta.x) ? scaleDelta.x : 1,\n y: Number.isFinite(scaleDelta.y) ? scaleDelta.y : 1,\n z: Number.isFinite(scaleDelta.z) ? scaleDelta.z : 1,\n };\n for (const nodeId of drag.targetIds) {\n const before = drag.beforeTransforms[nodeId];\n if (!before) continue;\n const result = transformSolver.solveScale({\n before,\n pivot: drag.pivot.position,\n delta: safeScale,\n space: drag.space,\n });\n if (!result.ok) {\n return { ok: false, reason: result.reason, failedTargetId: nodeId };\n }\n transforms[nodeId] = applySnapToTransform(drag, nodeId, result.transform);\n }\n options.projection.setNodeTransformsPreview(transforms);\n return { ok: true, transforms };\n }\n\n function applySnapToTransform(\n drag: ActiveDrag,\n nodeId: string,\n after: EditorTransformSnapshot,\n ): EditorTransformSnapshot {\n if (!operationSettings.snap.enabled) return after;\n const before = drag.beforeTransforms[nodeId];\n if (!before) return after;\n return snapEditorTransformSnapshot(before, after, drag.tool, operationSettings.snap);\n }\n\n function readNativeProxyTransform(pivot: EditorTransformPivot): EditorTransformTrsSnapshot {\n return readProjectionLikeTransform(pivotProxy, {\n position: pivot.position,\n rotation: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n });\n }\n\n function readProjectionLikeTransform(\n node: any,\n fallback: EditorTransformTrsSnapshot,\n ): EditorTransformTrsSnapshot {\n const rotation = node?.rotationQuaternion?.toEulerAngles?.() ?? node?.rotation;\n return {\n position: readVec3Like(node?.position) ?? fallback.position,\n rotation: readVec3Like(rotation) ?? fallback.rotation,\n scale: readVec3Like(node?.scaling) ?? fallback.scale,\n };\n }\n\n function readVec3Like(value: any): EditorTransformVec3 | null {\n if (!Number.isFinite(value?.x) || !Number.isFinite(value?.y) || !Number.isFinite(value?.z)) return null;\n return {\n x: Number(value.x),\n y: Number(value.y),\n z: Number(value.z),\n };\n }\n\n function addVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x + right.x,\n y: left.y + right.y,\n z: left.z + right.z,\n };\n }\n\n function subtractVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x - right.x,\n y: left.y - right.y,\n z: left.z - right.z,\n };\n }\n\n function scaleVec3(value: EditorTransformVec3, factor: number): EditorTransformVec3 {\n return {\n x: value.x * factor,\n y: value.y * factor,\n z: value.z * factor,\n };\n }\n\n function dotVec3(left: EditorTransformVec3, right: EditorTransformVec3): number {\n return left.x * right.x + left.y * right.y + left.z * right.z;\n }\n\n function divideVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: Math.abs(right.x) > 0.000001 ? left.x / right.x : 1,\n y: Math.abs(right.y) > 0.000001 ? left.y / right.y : 1,\n z: Math.abs(right.z) > 0.000001 ? left.z / right.z : 1,\n };\n }\n\n function isViewPlaneMoveCandidate(event: PointerEvent): boolean {\n if (disposed || activeDrag || tool !== 'move' || event.button !== 0) return false;\n const targetIds = getCurrentTransformTargetIds();\n if (targetIds.length === 0) return false;\n if (pickFreeMoveHandleAt(event.clientX, event.clientY)) return true;\n if (constraint !== 'free') return false;\n const pickedId = options.projection.pickNodeIdAt(event.clientX, event.clientY);\n return !!pickedId && targetIds.includes(pickedId);\n }\n\n function isGizmoDragCandidate(event: PointerEvent): boolean {\n if (disposed || activeDrag || event.button !== 0) return false;\n const activeTool = activeTransformTool();\n if (!activeTool) return false;\n const picked = pickGizmoMeshAt(event.clientX, event.clientY);\n if (isFreeMoveHandleNode(picked)) return false;\n const candidate = !!picked && isGizmoNode(picked);\n if (candidate) pendingDuplicateDrag = isDuplicateDragModifier(event);\n return candidate;\n }\n\n function beginViewPlaneMove(event: PointerEvent): boolean {\n if (!isViewPlaneMoveCandidate(event)) return false;\n const duplicate = isDuplicateDragModifier(event);\n const targetIds = resolveDragTargetIds('move', getCurrentTransformTargetIds(), 'free', duplicate);\n const drag = createActiveDrag('move', targetIds, 'free', duplicate);\n if (!drag) return false;\n const startPoint = projectPointerToViewPlane(event.clientX, event.clientY, drag.pivot.position);\n if (!startPoint) return false;\n drag.viewPlane = {\n pointerId: event.pointerId,\n startPoint,\n };\n activeDrag = drag;\n options.onDragStart?.(drag);\n return true;\n }\n\n function isDuplicateDragModifier(event: PointerEvent): boolean {\n return event.altKey === true;\n }\n\n function updateViewPlaneMove(event: PointerEvent): boolean {\n const drag = activeDrag;\n if (!drag?.viewPlane || drag.viewPlane.pointerId !== event.pointerId || disposed) return false;\n if (drag.blockedReason) {\n blockDrag(drag, drag.blockedReason, drag.blockedTargetId ?? null);\n return true;\n }\n const currentPoint = projectPointerToViewPlane(event.clientX, event.clientY, drag.pivot.position);\n if (!currentPoint) return false;\n const delta = subtractVec3(currentPoint, drag.viewPlane.startPoint);\n const transforms = previewMoveWithDelta(drag, delta);\n syncFreeMovePreviewPivot(drag, transforms, addVec3(drag.pivot.position, delta));\n const current = drag.activeId\n ? transforms[drag.activeId] ?? Object.values(transforms)[0] ?? null\n : Object.values(transforms)[0] ?? null;\n if (current) options.onDragUpdate?.({ ...drag, current });\n return true;\n }\n\n function endViewPlaneMove(event: PointerEvent): boolean {\n const drag = activeDrag;\n if (!drag?.viewPlane || drag.viewPlane.pointerId !== event.pointerId || disposed) return false;\n if (drag.blockedReason) {\n blockDrag(drag, drag.blockedReason, drag.blockedTargetId ?? null);\n return true;\n }\n const currentPoint = projectPointerToViewPlane(event.clientX, event.clientY, drag.pivot.position);\n const transforms = currentPoint\n ? previewMoveWithDelta(drag, subtractVec3(currentPoint, drag.viewPlane.startPoint))\n : previewMoveWithDelta(drag, { x: 0, y: 0, z: 0 });\n syncFreeMovePreviewPivot(drag, transforms, currentPoint ?? drag.pivot.position);\n activeDrag = null;\n emitTransformCommit(drag, transforms);\n attachCurrentSelection();\n return true;\n }\n\n function syncFreeMovePreviewPivot(\n drag: ActiveDrag,\n transforms: Record<string, EditorTransformSnapshot>,\n fallbackPosition: EditorTransformVec3,\n ): void {\n const pivotPosition = resolvePreviewPivotPosition(drag, transforms) ?? fallbackPosition;\n setPivotProxyPosition(pivotPosition);\n setFreeMoveHandlePosition(pivotPosition);\n }\n\n function resolvePreviewPivotPosition(\n drag: ActiveDrag,\n transforms: Record<string, EditorTransformSnapshot>,\n ): EditorTransformVec3 | null {\n for (const nodeId of drag.targetIds) {\n const before = drag.beforeTransforms[nodeId];\n const after = transforms[nodeId];\n if (!before || !after) continue;\n return addVec3(drag.pivot.position, subtractVec3(readEditorTransformPosition(after), readEditorTransformPosition(before)));\n }\n return null;\n }\n\n function projectPointerToViewPlane(\n clientX: number,\n clientY: number,\n planePoint: EditorTransformVec3,\n ): EditorTransformVec3 | null {\n const camera = options.scene.activeCamera ?? (options.scene as any).cameraToUseForPointers ?? null;\n const Vector3 = options.babylon.Vector3 as any;\n const Matrix = (options.babylon as any).Matrix;\n if (!canvas || !camera || !Vector3 || !Matrix?.Identity || !options.scene.createPickingRay) return null;\n const rect = canvas.getBoundingClientRect();\n const ray = options.scene.createPickingRay(clientX - rect.left, clientY - rect.top, Matrix.Identity(), camera);\n const origin = readVec3Like(ray?.origin);\n const direction = readVec3Like(ray?.direction);\n const normal = readCameraForward(camera);\n if (!origin || !direction || !normal) return null;\n const denominator = dotVec3(direction, normal);\n if (Math.abs(denominator) < 0.000001) return null;\n const t = dotVec3(subtractVec3(planePoint, origin), normal) / denominator;\n if (!Number.isFinite(t)) return null;\n return addVec3(origin, scaleVec3(direction, t));\n }\n\n function readCameraForward(camera: any): EditorTransformVec3 | null {\n const forwardRayDirection = readVec3Like(camera?.getForwardRay?.()?.direction);\n if (forwardRayDirection) return forwardRayDirection;\n const Vector3 = options.babylon.Vector3 as any;\n if (!Vector3 || typeof camera?.getDirection !== 'function') return null;\n const forwardZ = options.scene.useRightHandedSystem ? -1 : 1;\n return readVec3Like(camera.getDirection(new Vector3(0, 0, forwardZ)));\n }\n\n function pickPlacementHit(\n clientX: number,\n clientY: number,\n mode: EditorPlacementMode,\n ): EditorPlacementHit | null {\n if (mode === 'off') return null;\n if (mode === 'ground') return pickGroundPlacementHit(clientX, clientY);\n return pickSurfacePlacementHit(clientX, clientY);\n }\n\n function pickGroundPlacementHit(clientX: number, clientY: number): EditorPlacementHit | null {\n const ray = createScenePointerRay(clientX, clientY);\n const origin = readVec3Like(ray?.origin);\n const direction = readVec3Like(ray?.direction);\n if (!origin || !direction || Math.abs(direction.y) < 0.000001) return null;\n const t = -origin.y / direction.y;\n if (!Number.isFinite(t) || t < 0) return null;\n return {\n mode: 'ground',\n position: addVec3(origin, scaleVec3(direction, t)),\n normal: { x: 0, y: 1, z: 0 },\n nodeId: null,\n };\n }\n\n function pickSurfacePlacementHit(clientX: number, clientY: number): EditorPlacementHit | null {\n if (!canvas || typeof options.scene.pick !== 'function') return null;\n const rect = canvas.getBoundingClientRect();\n const pick = options.scene.pick(clientX - rect.left, clientY - rect.top, (mesh: any) => !isPlacementPickIgnored(mesh));\n const point = readVec3Like(pick?.pickedPoint);\n if (!pick?.hit || !point) return null;\n const normal = readVec3Like(pick?.getNormal?.(true)) ?? readVec3Like(pick?.normal);\n return {\n mode: 'surface',\n position: point,\n normal: normal ?? undefined,\n nodeId: options.projection.resolveProjectionNodeId(pick.pickedMesh ?? null),\n };\n }\n\n function isPlacementPickIgnored(node: any): boolean {\n let current = node;\n while (current) {\n if (current.metadata?.editorProjectionHelper) return true;\n if (current.metadata?.editorTransformFreeMoveHandle) return true;\n if (current.metadata?.editorPlacementMarker) return true;\n current = current.parent ?? null;\n }\n return false;\n }\n\n function createScenePointerRay(clientX: number, clientY: number): any | null {\n const camera = options.scene.activeCamera ?? (options.scene as any).cameraToUseForPointers ?? null;\n const Matrix = (options.babylon as any).Matrix;\n if (!canvas || !camera || !Matrix?.Identity || !options.scene.createPickingRay) return null;\n const rect = canvas.getBoundingClientRect();\n return options.scene.createPickingRay(clientX - rect.left, clientY - rect.top, Matrix.Identity(), camera);\n }\n\n function ensurePlacementMarker(): any | null {\n if (placementMarker) return placementMarker;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = options.babylon.Color3 as any;\n const activeManager = ensureGizmoManager();\n const utilityScene = activeManager?.utilityLayer?.utilityLayerScene;\n if (!MeshBuilder?.CreateSphere || !utilityScene) return null;\n placementMarker = MeshBuilder.CreateSphere(\n 'editor.placement.marker',\n { diameter: 0.32, segments: 16 },\n utilityScene,\n );\n placementMarker.metadata = {\n ...(placementMarker.metadata ?? {}),\n editorProjectionHelper: true,\n editorPlacementMarker: true,\n };\n placementMarker.isPickable = false;\n if (StandardMaterial && Color3) {\n placementMarkerMaterial = new StandardMaterial('editor.placement.marker.material', utilityScene);\n placementMarkerMaterial.diffuseColor = new Color3(0.18, 0.86, 0.78);\n placementMarkerMaterial.emissiveColor = new Color3(0.1, 0.62, 0.56);\n placementMarkerMaterial.specularColor = new Color3(0.04, 0.18, 0.16);\n placementMarker.material = placementMarkerMaterial;\n }\n setPlacementMarkerVisible(false);\n return placementMarker;\n }\n\n function setPlacementMarkerVisible(visible: boolean): void {\n if (!placementMarker) return;\n placementMarker.isVisible = visible;\n try { placementMarker.setEnabled?.(visible); } catch {}\n }\n\n function setPlacementMarker(hit: EditorPlacementHit | null): void {\n if (!hit) {\n setPlacementMarkerVisible(false);\n return;\n }\n const marker = ensurePlacementMarker();\n const Vector3 = options.babylon.Vector3;\n if (!marker || !Vector3) return;\n marker.position = new Vector3(hit.position.x, hit.position.y, hit.position.z);\n setPlacementMarkerVisible(true);\n }\n\n function pickGizmoMeshAt(clientX: number, clientY: number): any | null {\n if (!canvas) return null;\n const rect = canvas.getBoundingClientRect();\n const x = clientX - rect.left;\n const y = clientY - rect.top;\n const utilityScene = manager?.utilityLayer?.utilityLayerScene;\n const utilityPick = typeof utilityScene?.pick === 'function' ? utilityScene.pick(x, y) : null;\n if (utilityPick?.hit && utilityPick.pickedMesh) return utilityPick.pickedMesh;\n const scenePick = typeof options.scene.pick === 'function' ? options.scene.pick(x, y) : null;\n return scenePick?.hit ? scenePick.pickedMesh ?? null : null;\n }\n\n function pickFreeMoveHandleAt(clientX: number, clientY: number): any | null {\n if (!canvas || !freeMoveHandle) return null;\n const rect = canvas.getBoundingClientRect();\n const x = clientX - rect.left;\n const y = clientY - rect.top;\n const utilityScene = manager?.utilityLayer?.utilityLayerScene;\n const pick = typeof utilityScene?.pick === 'function'\n ? utilityScene.pick(x, y, (mesh: any) => isFreeMoveHandleNode(mesh))\n : null;\n return pick?.hit && isFreeMoveHandleNode(pick.pickedMesh) ? pick.pickedMesh : null;\n }\n\n function ensureFreeMoveHandle(): any | null {\n if (freeMoveHandle) return freeMoveHandle;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = options.babylon.Color3 as any;\n const activeManager = ensureGizmoManager();\n const utilityScene = activeManager?.utilityLayer?.utilityLayerScene;\n if (!MeshBuilder?.CreateSphere || !utilityScene) return null;\n freeMoveHandle = MeshBuilder.CreateSphere(\n 'editor.transform.freeMoveHandle',\n { diameter: FREE_MOVE_HANDLE_DIAMETER, segments: 16 },\n utilityScene,\n );\n freeMoveHandle.metadata = {\n ...(freeMoveHandle.metadata ?? {}),\n editorProjectionHelper: true,\n editorTransformFreeMoveHandle: true,\n };\n freeMoveHandle.isPickable = true;\n if (StandardMaterial && Color3) {\n freeMoveHandleMaterial = new StandardMaterial('editor.transform.freeMoveHandle.material', utilityScene);\n freeMoveHandleMaterial.diffuseColor = new Color3(0.94, 0.96, 0.98);\n freeMoveHandleMaterial.emissiveColor = new Color3(0.88, 0.91, 0.95);\n freeMoveHandleMaterial.specularColor = new Color3(0.08, 0.1, 0.12);\n freeMoveHandleMaterial.disableLighting = true;\n freeMoveHandle.material = freeMoveHandleMaterial;\n }\n setFreeMoveHandleVisible(false);\n return freeMoveHandle;\n }\n\n function setFreeMoveHandleVisible(visible: boolean): void {\n if (!freeMoveHandle) return;\n freeMoveHandle.isVisible = visible;\n try { freeMoveHandle.setEnabled?.(visible); } catch {}\n }\n\n function setFreeMoveHandlePosition(position: EditorTransformVec3): void {\n const handle = ensureFreeMoveHandle();\n const Vector3 = options.babylon.Vector3;\n if (!handle || !Vector3) return;\n const gizmoRoot = manager?.gizmos?.positionGizmo?.xGizmo?._rootMesh\n ?? manager?.gizmos?.positionGizmo?.xGizmo?.rootMesh\n ?? null;\n if (gizmoRoot) {\n handle.parent = gizmoRoot;\n handle.position = new Vector3(0, 0, 0);\n } else {\n handle.parent = null;\n handle.position = new Vector3(position.x, position.y, position.z);\n }\n setFreeMoveHandleVisible(true);\n }\n\n function updateFreeMoveHandle(): void {\n if (tool !== 'move' || activeDrag) {\n setFreeMoveHandleVisible(false);\n return;\n }\n const targetIds = getCurrentTransformTargetIds();\n if (targetIds.length === 0) {\n setFreeMoveHandleVisible(false);\n return;\n }\n const pivot = options.projection.getSelectionPivot(targetIds);\n const position = pivot?.position\n ?? (targetIds[0] ? createTransformPivot(options.projection.readNodeTransform(targetIds[0]))?.position : null);\n if (!position) {\n setFreeMoveHandleVisible(false);\n return;\n }\n setFreeMoveHandlePosition(position);\n }\n\n function isGizmoNode(node: any): boolean {\n let current = node;\n const roots = collectCurrentGizmoRoots();\n while (current) {\n if (isFreeMoveHandleNode(current)) return false;\n if (roots.has(current)) return true;\n if (current.metadata?.editorProjection?.nodeId) return false;\n if (current.metadata?.editorProjectionHelper) return false;\n const name = String(current.name ?? current.id ?? '').toLowerCase();\n if (name.includes('gizmo')) return true;\n current = current.parent ?? null;\n }\n return false;\n }\n\n function isFreeMoveHandleNode(node: any): boolean {\n let current = node;\n while (current) {\n if (current.metadata?.editorTransformFreeMoveHandle) return true;\n current = current.parent ?? null;\n }\n return false;\n }\n\n function collectCurrentGizmoRoots(): Set<any> {\n const roots = new Set<any>();\n const activeManager = manager;\n if (!activeManager) return roots;\n const activeTool = activeTransformTool();\n const gizmo = activeTool === 'move'\n ? activeManager.gizmos?.positionGizmo\n : activeTool === 'rotate'\n ? activeManager.gizmos?.rotationGizmo\n : activeTool === 'scale'\n ? activeManager.gizmos?.scaleGizmo\n : null;\n collectGizmoRoots(gizmo, roots);\n return roots;\n }\n\n function collectGizmoRoots(value: any, roots: Set<any>): void {\n if (!value || roots.has(value)) return;\n if (value._rootMesh) roots.add(value._rootMesh);\n if (value.rootMesh) roots.add(value.rootMesh);\n if (value.attachedMesh) roots.add(value.attachedMesh);\n for (const key of ['xGizmo', 'yGizmo', 'zGizmo', 'xPlaneGizmo', 'yPlaneGizmo', 'zPlaneGizmo', 'uniformScaleGizmo']) {\n if (value[key]) collectGizmoRoots(value[key], roots);\n }\n }\n\n const controller: BabylonTransformGizmoController = {\n getState() {\n return {\n tool,\n space,\n selectedNodeId,\n dragPhase: activeDrag ? 'dragging' : 'idle',\n draggingNodeId: activeDrag?.nodeId ?? null,\n constraint,\n };\n },\n async prepare() {\n if (disposed) return;\n logTransformGizmoDiagnostic('prepare.requested', {\n tool,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n });\n const activeManager = ensureGizmoManager();\n if (!activeManager) return;\n prewarmGizmoManager(activeManager);\n attachCurrentSelection();\n await prewarmGizmoMaterials();\n },\n setTool(nextTool) {\n if (disposed) return;\n logTransformGizmoDiagnostic('tool.requested', {\n previousTool: tool,\n nextTool,\n repeated: tool === nextTool,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n });\n if (tool === nextTool) {\n if (!activeDrag) attachCurrentSelection();\n return;\n }\n controller.cancelDrag();\n tool = nextTool;\n constraint = normalizeConstraintForTool(tool, constraint) ?? 'axis';\n attachCurrentSelection();\n },\n setSpace(nextSpace) {\n if (disposed) return;\n if (space === nextSpace) {\n if (!activeDrag) attachCurrentSelection();\n return;\n }\n controller.cancelDrag();\n space = nextSpace;\n attachCurrentSelection();\n },\n setConstraint(nextConstraint) {\n if (disposed) return;\n const normalized = normalizeConstraintForTool(tool, nextConstraint) ?? 'axis';\n if (constraint === normalized) {\n if (!activeDrag) attachCurrentSelection();\n return;\n }\n controller.cancelDrag();\n constraint = normalized;\n attachCurrentSelection();\n },\n setOperationSettings(settings) {\n if (disposed) return;\n operationSettings = cloneOperationSettings(settings);\n if (activeDrag) updateDrag();\n },\n preparePointerDrag(event) {\n if (disposed || event.button !== 0) return;\n pendingDuplicateDrag = isDuplicateDragModifier(event);\n },\n setSelectedNode(nextNodeId) {\n if (disposed) return;\n if (selectedNodeId === nextNodeId && selectedNodeIds.length === (nextNodeId ? 1 : 0)) return;\n controller.cancelDrag();\n selectedNodeId = nextNodeId;\n selectedNodeIds = nextNodeId ? [nextNodeId] : [];\n attachCurrentSelection();\n },\n setSelection(selection) {\n if (disposed) return;\n const largeSelection = selection.selectedIds.length > LARGE_SELECTION_GIZMO_LIMIT;\n const nextNodeIds = largeSelection\n ? [selection.activeId].filter((id): id is string => !!id)\n : [...selection.selectedIds];\n const nextActiveId = selection.activeId;\n logTransformGizmoDiagnostic('selection.requested', {\n previousActiveId: selectedNodeId,\n previousSelectedIds: [...selectedNodeIds],\n nextActiveId,\n nextSelectedIds: [...nextNodeIds],\n tool,\n });\n if (\n selectedNodeId === nextActiveId\n && selectedNodeIds.length === nextNodeIds.length\n && selectedNodeIds.every((id, index) => id === nextNodeIds[index])\n ) {\n return;\n }\n controller.cancelDrag();\n selectedNodeId = nextActiveId;\n selectedNodeIds = nextNodeIds;\n attachCurrentSelection();\n },\n refreshSelection() {\n if (disposed) return;\n if (activeDrag) return;\n logTransformGizmoDiagnostic('selection.refresh', {\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n tool,\n });\n attachCurrentSelection();\n },\n isGizmoDragCandidate,\n isViewPlaneMoveCandidate,\n beginViewPlaneMove,\n updateViewPlaneMove,\n endViewPlaneMove,\n pickPlacementHit,\n setPlacementMarker,\n cancelDrag() {\n const drag = activeDrag;\n if (!drag) return;\n activeDrag = null;\n if (drag.targetIds.length > 1) {\n options.projection.setNodeTransformsPreview(drag.beforeTransforms);\n } else if (drag.nodeId && drag.before) {\n options.projection.setNodeTransformPreview(drag.nodeId, drag.before);\n }\n attachCurrentSelection();\n options.onDragCancel?.(drag);\n },\n dispose() {\n if (disposed) return;\n controller.cancelDrag();\n clearDragObservers();\n try { manager?.attachToNode?.(null); } catch {}\n try { manager?.dispose?.(); } catch {}\n try { utilityLayer?.dispose?.(); } catch {}\n try { keepDepthUtilityLayer?.dispose?.(); } catch {}\n try { pivotProxy?.dispose?.(); } catch {}\n try { freeMoveHandle?.dispose?.(); } catch {}\n try { freeMoveHandleMaterial?.dispose?.(); } catch {}\n try { placementMarker?.dispose?.(); } catch {}\n try { placementMarkerMaterial?.dispose?.(); } catch {}\n pivotProxy = null;\n freeMoveHandle = null;\n freeMoveHandleMaterial = null;\n placementMarker = null;\n placementMarkerMaterial = null;\n manager = null;\n utilityLayer = null;\n keepDepthUtilityLayer = null;\n managerPrewarmed = false;\n materialPrewarmPromise = null;\n disposed = true;\n },\n };\n\n attachCurrentSelection();\n return controller;\n}\n\nfunction cloneOperationSettings(\n settings: EditorTransformOperationSettings,\n): EditorTransformOperationSettings {\n return {\n snap: {\n enabled: settings.snap.enabled,\n moveStep: settings.snap.moveStep,\n rotateStepDegrees: settings.snap.rotateStepDegrees,\n scaleStep: settings.snap.scaleStep,\n },\n placementMode: settings.placementMode,\n };\n}\n"]}
1
+ {"version":3,"file":"transform-gizmo-controller.js","sourceRoot":"","sources":["../src/transform-gizmo-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n EditorPlacementHit,\n EditorPlacementMode,\n EditorTransformOperationSettings,\n EditorTransformOperationBlockReason,\n EditorTransformCanonicalConstraint,\n EditorTransformDocumentCapabilities,\n EditorSelectionState,\n EditorTransformBatchCommit,\n EditorTransformConstraint,\n EditorTransformGizmoCommit,\n EditorTransformGizmoState,\n EditorTransformOperationPolicy,\n EditorTransformPivot,\n EditorTransformSnapshot,\n EditorTransformSpace,\n EditorTransformTargetSnapshot,\n EditorTransformTrsSnapshot,\n EditorTransformTool,\n EditorTransformVec3,\n} from '@fps-games/editor-core';\nimport {\n DEFAULT_EDITOR_TRANSFORM_OPERATION_SETTINGS,\n isEditorTransformMatrixSnapshot,\n normalizeEditorTransformConstraint,\n readEditorTransformPosition,\n resolveEditorTransformOperationPolicy,\n snapEditorTransformSnapshot,\n} from '@fps-games/editor-core';\nimport type {\n BabylonRuntimeGlobal,\n RuntimeScene,\n} from './types';\nimport type { BabylonEditorProjection } from './projection';\nimport { createBabylonTransformSolver } from './transform-solver';\n\nexport interface BabylonTransformGizmoDragEvent {\n nodeId: string | null;\n targetIds: string[];\n activeId: string | null;\n tool: Exclude<EditorTransformTool, 'select'>;\n requestedSpace: EditorTransformSpace;\n space: EditorTransformSpace;\n operationPolicy: EditorTransformOperationPolicy;\n constraint: EditorTransformCanonicalConstraint;\n pivot: EditorTransformPivot;\n before: EditorTransformSnapshot | null;\n beforeTransforms: Record<string, EditorTransformSnapshot>;\n duplicate: boolean;\n}\n\ninterface BabylonTransformGizmoPolicyMetadata {\n requestedSpace?: EditorTransformSpace;\n operationPolicy?: EditorTransformOperationPolicy;\n}\n\nexport type BabylonTransformGizmoCommit =\n | (EditorTransformGizmoCommit & BabylonTransformGizmoPolicyMetadata)\n | (EditorTransformBatchCommit & BabylonTransformGizmoPolicyMetadata);\n\nexport interface BabylonTransformGizmoDuplicateDragInput {\n targetIds: string[];\n activeId: string | null;\n tool: Exclude<EditorTransformTool, 'select'>;\n requestedSpace: EditorTransformSpace;\n space: EditorTransformSpace;\n operationPolicy: EditorTransformOperationPolicy;\n constraint: EditorTransformCanonicalConstraint;\n beforeTransforms: Record<string, EditorTransformSnapshot>;\n}\n\nexport interface BabylonTransformGizmoDuplicateDragResult {\n targetIds: string[];\n activeId?: string | null;\n}\n\nexport interface BabylonTransformGizmoBlockEvent extends BabylonTransformGizmoDragEvent {\n reason: EditorTransformOperationBlockReason;\n failedTargetId: string | null;\n}\n\nexport type BabylonTransformGizmoHandleKey =\n | 'xGizmo'\n | 'yGizmo'\n | 'zGizmo'\n | 'xPlaneGizmo'\n | 'yPlaneGizmo'\n | 'zPlaneGizmo'\n | 'uniformScaleGizmo';\n\nexport function resolveBabylonTransformHandleConstraint(\n tool: Exclude<EditorTransformTool, 'select'>,\n handleKey: BabylonTransformGizmoHandleKey,\n): EditorTransformCanonicalConstraint | null {\n if (tool === 'move') {\n if (handleKey === 'xPlaneGizmo' || handleKey === 'yPlaneGizmo' || handleKey === 'zPlaneGizmo') return 'plane';\n if (handleKey === 'xGizmo' || handleKey === 'yGizmo' || handleKey === 'zGizmo') return 'axis';\n return null;\n }\n if (tool === 'rotate') {\n return handleKey === 'xGizmo' || handleKey === 'yGizmo' || handleKey === 'zGizmo' ? 'axis' : null;\n }\n if (tool === 'scale') {\n if (handleKey === 'uniformScaleGizmo') return 'uniform';\n return handleKey === 'xGizmo' || handleKey === 'yGizmo' || handleKey === 'zGizmo' ? 'axis' : null;\n }\n return null;\n}\n\nexport interface BabylonTransformGizmoControllerOptions {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n projection: BabylonEditorProjection;\n initialTool?: EditorTransformTool;\n initialSpace?: EditorTransformSpace;\n documentCapabilities?: Partial<EditorTransformDocumentCapabilities>;\n onDragStart?: (event: BabylonTransformGizmoDragEvent) => void;\n onDragUpdate?: (event: BabylonTransformGizmoDragEvent & { current: EditorTransformSnapshot }) => void;\n onDragEnd?: (event: BabylonTransformGizmoCommit) => void;\n onDragCancel?: (event: BabylonTransformGizmoDragEvent) => void;\n onDragBlocked?: (event: BabylonTransformGizmoBlockEvent) => void;\n onDuplicateDragStart?: (input: BabylonTransformGizmoDuplicateDragInput) => BabylonTransformGizmoDuplicateDragResult | null;\n logger?: Pick<Console, 'warn'>;\n}\n\nexport interface BabylonTransformGizmoController {\n getState(): EditorTransformGizmoState;\n prepare(): Promise<void>;\n setTool(tool: EditorTransformTool): void;\n setSpace(space: EditorTransformSpace): void;\n setConstraint(constraint: EditorTransformConstraint): void;\n setOperationSettings(settings: EditorTransformOperationSettings): void;\n preparePointerDrag(event: PointerEvent): void;\n setSelectedNode(nodeId: string | null): void;\n setSelection(selection: EditorSelectionState): void;\n refreshSelection(): void;\n isGizmoDragCandidate(event: PointerEvent): boolean;\n isViewPlaneMoveCandidate(event: PointerEvent): boolean;\n beginViewPlaneMove(event: PointerEvent): boolean;\n updateViewPlaneMove(event: PointerEvent): boolean;\n endViewPlaneMove(event: PointerEvent): boolean;\n pickPlacementHit(clientX: number, clientY: number, mode: EditorPlacementMode): EditorPlacementHit | null;\n setPlacementMarker(hit: EditorPlacementHit | null): void;\n cancelDrag(): void;\n dispose(): void;\n}\n\ninterface ActiveDrag {\n nodeId: string | null;\n targetIds: string[];\n activeId: string | null;\n tool: Exclude<EditorTransformTool, 'select'>;\n requestedSpace: EditorTransformSpace;\n space: EditorTransformSpace;\n operationPolicy: EditorTransformOperationPolicy;\n constraint: EditorTransformCanonicalConstraint;\n pivot: EditorTransformPivot;\n before: EditorTransformSnapshot | null;\n beforeTransforms: Record<string, EditorTransformSnapshot>;\n duplicate: boolean;\n handleKey?: BabylonTransformGizmoHandleKey;\n proxyStart?: EditorTransformTrsSnapshot;\n blockedReason?: EditorTransformOperationBlockReason;\n blockedTargetId?: string | null;\n viewPlane?: {\n pointerId: number;\n startPoint: EditorTransformVec3;\n };\n}\n\ntype ObserverDisposer = () => void;\ntype PreviewBatchTransformResult =\n | { ok: true; transforms: Record<string, EditorTransformSnapshot> }\n | { ok: false; reason: EditorTransformOperationBlockReason; failedTargetId: string | null };\n\nconst LARGE_SELECTION_GIZMO_LIMIT = 200;\nconst EDITOR_TRANSFORM_GIZMO_SCALE_RATIO = 0.9;\nconst FREE_MOVE_HANDLE_DIAMETER = 0.018;\nconst TRANSFORM_GIZMO_DIAGNOSTIC_PREFIX = '[fps-editor:gizmo]';\n\nfunction isTransformGizmoDiagnosticEnabled(): boolean {\n const scope = globalThis as typeof globalThis & {\n __FPS_EDITOR_DEBUG_TRANSFORM_GIZMO?: unknown;\n location?: { search?: unknown };\n };\n if (scope.__FPS_EDITOR_DEBUG_TRANSFORM_GIZMO === true) return true;\n const search = scope.location?.search;\n return typeof search === 'string' && /(?:^|[?&])debugGizmo=(?:1|true)(?:&|$)/.test(search);\n}\n\nfunction logTransformGizmoDiagnostic(event: string, details: Record<string, unknown> = {}): void {\n if (!isTransformGizmoDiagnosticEnabled()) return;\n const timestamp = typeof performance !== 'undefined' && typeof performance.now === 'function'\n ? Number(performance.now().toFixed(2))\n : Date.now();\n console.info(TRANSFORM_GIZMO_DIAGNOSTIC_PREFIX, event, { timestamp, ...details });\n}\n\nexport function createBabylonTransformGizmoController(\n options: BabylonTransformGizmoControllerOptions,\n): BabylonTransformGizmoController {\n const GizmoManagerCtor = options.babylon.GizmoManager!;\n if (!GizmoManagerCtor) throw new Error('Babylon runtime missing GizmoManager');\n const transformSolver = createBabylonTransformSolver({ babylon: options.babylon as BabylonRuntimeGlobal & Record<string, any> });\n\n let tool: EditorTransformTool = options.initialTool ?? 'select';\n let space: EditorTransformSpace = options.initialSpace ?? 'world';\n let constraint: EditorTransformCanonicalConstraint = normalizeConstraintForTool(tool, 'axis') ?? 'axis';\n let selectedNodeId: string | null = null;\n let selectedNodeIds: string[] = [];\n let activeDrag: ActiveDrag | null = null;\n let disposed = false;\n let operationSettings = cloneOperationSettings(DEFAULT_EDITOR_TRANSFORM_OPERATION_SETTINGS);\n let pendingDuplicateDrag = false;\n let observerDisposers: ObserverDisposer[] = [];\n let pivotProxy: any | null = null;\n let freeMoveHandle: any | null = null;\n let freeMoveHandleMaterial: any | null = null;\n let placementMarker: any | null = null;\n let placementMarkerMaterial: any | null = null;\n let manager: any | null = null;\n let utilityLayer: any | null = null;\n let keepDepthUtilityLayer: any | null = null;\n let managerPrewarmed = false;\n let materialPrewarmPromise: Promise<void> | null = null;\n let attachmentDiagnosticSequence = 0;\n const canvas = options.scene.getEngine?.().getRenderingCanvas?.() as HTMLCanvasElement | null | undefined;\n\n function ensureGizmoManager(): any | null {\n if (manager) {\n logTransformGizmoDiagnostic('manager.reuse', {\n tool,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n });\n return manager;\n }\n const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const UtilityLayerRendererCtor = options.babylon.UtilityLayerRenderer;\n if (UtilityLayerRendererCtor) {\n utilityLayer = new UtilityLayerRendererCtor(options.scene);\n keepDepthUtilityLayer = new UtilityLayerRendererCtor(options.scene);\n try {\n keepDepthUtilityLayer.utilityLayerScene.autoClearDepthAndStencil = false;\n } catch {}\n manager = new GizmoManagerCtor(options.scene, 1, utilityLayer, keepDepthUtilityLayer);\n } else {\n manager = new GizmoManagerCtor(options.scene);\n }\n manager.usePointerToAttachGizmos = false;\n manager.clearGizmoOnEmptyPointerEvent = false;\n manager.boundingBoxGizmoEnabled = false;\n applyGizmoPresentation(manager);\n logTransformGizmoDiagnostic('manager.created', {\n durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),\n editorOwnedUtilityLayers: !!UtilityLayerRendererCtor,\n sceneActiveCamera: options.scene.activeCamera?.name ?? null,\n });\n return manager;\n }\n\n function activeTransformTool(): Exclude<EditorTransformTool, 'select'> | null {\n return tool === 'select' ? null : tool;\n }\n\n function getActiveTargetId(): string | null {\n if (selectedNodeId && selectedNodeIds.includes(selectedNodeId)) return selectedNodeId;\n return selectedNodeIds[selectedNodeIds.length - 1] ?? null;\n }\n\n function getBatchTransformTargetIds(): string[] {\n if ((tool === 'select' || tool == null) || selectedNodeIds.length <= 1) return [];\n return selectedNodeIds.filter(nodeId => !!options.projection.getAttachableRoot(nodeId));\n }\n\n function getCurrentTransformTargetIds(): string[] {\n return selectedNodeIds.length > 1\n ? getBatchTransformTargetIds()\n : [getActiveTargetId()].filter((nodeId): nodeId is string => !!nodeId);\n }\n\n function normalizeConstraintForTool(\n nextTool: EditorTransformTool,\n nextConstraint?: EditorTransformConstraint | null,\n ): EditorTransformCanonicalConstraint | undefined {\n return normalizeEditorTransformConstraint(nextTool, nextConstraint);\n }\n\n function resolveOperationPolicy(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n activeConstraint: EditorTransformCanonicalConstraint,\n ): EditorTransformOperationPolicy {\n return resolveEditorTransformOperationPolicy({\n tool: activeTool,\n constraint: activeConstraint,\n requestedSpace: space,\n documentCapabilities: options.documentCapabilities,\n });\n }\n\n function resolveAttachConstraint(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n activeConstraint: EditorTransformCanonicalConstraint,\n ): EditorTransformCanonicalConstraint {\n return activeTool === 'scale' ? 'axis' : activeConstraint;\n }\n\n function ensurePivotProxy(): any | null {\n if (pivotProxy) return pivotProxy;\n const TransformNode = (options.babylon as any).TransformNode;\n if (!TransformNode) return null;\n pivotProxy = new TransformNode('editor.selectionPivotProxy', options.scene);\n pivotProxy.metadata = {\n ...(pivotProxy.metadata ?? {}),\n editorProjectionHelper: true,\n };\n return pivotProxy;\n }\n\n function setPivotProxyTransform(\n pivot: EditorTransformPivot,\n rotation: EditorTransformVec3 = { x: 0, y: 0, z: 0 },\n ): any | null {\n const proxy = ensurePivotProxy();\n const Vector3 = options.babylon.Vector3;\n if (!proxy || !Vector3) return null;\n proxy.position = new Vector3(pivot.position.x, pivot.position.y, pivot.position.z);\n proxy.rotation = new Vector3(rotation.x, rotation.y, rotation.z);\n proxy.scaling = new Vector3(1, 1, 1);\n return proxy;\n }\n\n function setPivotProxyPosition(position: EditorTransformVec3): void {\n const proxy = ensurePivotProxy();\n const Vector3 = options.babylon.Vector3;\n if (!proxy || !Vector3) return;\n proxy.position = new Vector3(position.x, position.y, position.z);\n }\n\n function clearDragObservers(): void {\n for (const dispose of observerDisposers) dispose();\n observerDisposers = [];\n }\n\n function addObserver(observable: any, callback: () => void): void {\n if (!observable?.add || !observable?.remove) return;\n const observer = observable.add(callback);\n observerDisposers.push(() => {\n try { observable.remove(observer); } catch {}\n });\n }\n\n function registerDragObserversFor(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n gizmo: any,\n ): void {\n const handleKeys: BabylonTransformGizmoHandleKey[] = [\n 'xGizmo',\n 'yGizmo',\n 'zGizmo',\n 'uniformScaleGizmo',\n 'xPlaneGizmo',\n 'yPlaneGizmo',\n 'zPlaneGizmo',\n ];\n for (const handleKey of handleKeys) {\n const activeConstraint = resolveBabylonTransformHandleConstraint(activeTool, handleKey);\n if (!activeConstraint) continue;\n const behavior = gizmo?.[handleKey]?.dragBehavior;\n addObserver(behavior?.onDragStartObservable, () => beginDrag(activeConstraint, handleKey));\n addObserver(behavior?.onDragObservable, updateDrag);\n addObserver(behavior?.onDragEndObservable, endDrag);\n }\n }\n\n function registerDragObservers(): void {\n clearDragObservers();\n const activeManager = manager;\n if (!activeManager) return;\n registerDragObserversFor('move', activeManager.gizmos?.positionGizmo);\n registerDragObserversFor('rotate', activeManager.gizmos?.rotationGizmo);\n registerDragObserversFor('scale', activeManager.gizmos?.scaleGizmo);\n }\n\n function applySpacePreference(): void {\n const activeManager = manager;\n if (!activeManager) return;\n const gizmos: Array<{ gizmo: any; supportsWorldRotationPreference: boolean }> = [\n { gizmo: activeManager.gizmos?.positionGizmo, supportsWorldRotationPreference: true },\n { gizmo: activeManager.gizmos?.rotationGizmo, supportsWorldRotationPreference: true },\n { gizmo: activeManager.gizmos?.scaleGizmo, supportsWorldRotationPreference: false },\n ];\n for (const { gizmo, supportsWorldRotationPreference } of gizmos) {\n const matchAttachedMesh = shouldMatchAttachedMeshForGizmo(gizmo);\n if (!matchAttachedMesh && !supportsWorldRotationPreference) continue;\n try {\n if (\n 'updateGizmoRotationToMatchAttachedMesh' in (gizmo ?? {})\n ) {\n gizmo.updateGizmoRotationToMatchAttachedMesh = matchAttachedMesh;\n }\n } catch {}\n for (const axis of [\n gizmo?.xGizmo,\n gizmo?.yGizmo,\n gizmo?.zGizmo,\n gizmo?.xPlaneGizmo,\n gizmo?.yPlaneGizmo,\n gizmo?.zPlaneGizmo,\n gizmo?.uniformScaleGizmo,\n ]) {\n try {\n if ('updateGizmoRotationToMatchAttachedMesh' in (axis ?? {})) {\n axis.updateGizmoRotationToMatchAttachedMesh = matchAttachedMesh;\n }\n } catch {}\n }\n }\n }\n\n function shouldMatchAttachedMeshForGizmo(gizmo: any): boolean {\n const activeTool = activeTransformTool();\n if (!activeTool) return space === 'local';\n const operationConstraint = activeTool === 'scale' && gizmo === manager?.gizmos?.scaleGizmo\n ? 'axis'\n : constraint;\n return resolveOperationPolicy(activeTool, operationConstraint).effectiveSpace === 'local';\n }\n\n function applyHandlePreference(): void {\n const positionGizmo = manager?.gizmos?.positionGizmo;\n if (positionGizmo) {\n try { positionGizmo.planarGizmoEnabled = tool === 'move'; } catch {}\n }\n }\n\n function applyGizmoPresentation(activeManager: any): void {\n try { activeManager.scaleRatio = EDITOR_TRANSFORM_GIZMO_SCALE_RATIO; } catch {}\n for (const gizmo of [\n activeManager.gizmos?.positionGizmo,\n activeManager.gizmos?.rotationGizmo,\n activeManager.gizmos?.scaleGizmo,\n ]) {\n if (!gizmo) continue;\n try { gizmo.scaleRatio = EDITOR_TRANSFORM_GIZMO_SCALE_RATIO; } catch {}\n try { gizmo.updateScale = true; } catch {}\n }\n }\n\n function attachCurrentSelection(): void {\n const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();\n clearDragObservers();\n const activeTool = activeTransformTool();\n if (!activeTool) {\n if (manager) {\n manager.positionGizmoEnabled = false;\n manager.rotationGizmoEnabled = false;\n manager.scaleGizmoEnabled = false;\n try { manager.attachToNode?.(null); } catch {}\n }\n updateFreeMoveHandle();\n logTransformGizmoDiagnostic('attachment.skipped', {\n reason: 'select-tool',\n tool,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n });\n return;\n }\n const activeManager = ensureGizmoManager();\n if (!activeManager) {\n updateFreeMoveHandle();\n return;\n }\n prewarmGizmoManager(activeManager);\n activeManager.positionGizmoEnabled = activeTool === 'move';\n activeManager.rotationGizmoEnabled = activeTool === 'rotate';\n activeManager.scaleGizmoEnabled = activeTool === 'scale';\n applyGizmoPresentation(activeManager);\n applyHandlePreference();\n applySpacePreference();\n registerDragObservers();\n\n let target: any | null = null;\n const requestedTargetIds = getCurrentTransformTargetIds();\n const attachableTargetIds = requestedTargetIds.filter(nodeId => !!options.projection.getAttachableRoot(nodeId));\n target = attachNativeTransformProxy(requestedTargetIds, activeTool, constraint);\n let attachError: unknown = null;\n try { activeManager.attachToNode?.(target ?? null); } catch (error) {\n attachError = error;\n options.logger?.warn?.('[BabylonTransformGizmoController] failed to attach gizmo', error);\n }\n updateFreeMoveHandle();\n const activeGizmo = activeTool === 'move'\n ? activeManager.gizmos?.positionGizmo\n : activeTool === 'rotate'\n ? activeManager.gizmos?.rotationGizmo\n : activeManager.gizmos?.scaleGizmo;\n const diagnosticSequence = ++attachmentDiagnosticSequence;\n const collectRenderDetails = (): Record<string, unknown> => {\n const rootMesh = activeGizmo?._rootMesh ?? activeGizmo?.rootMesh ?? null;\n const absolutePosition = rootMesh?.getAbsolutePosition?.() ?? rootMesh?.absolutePosition ?? rootMesh?.position ?? null;\n const scaling = rootMesh?.scaling ?? null;\n return {\n diagnosticSequence,\n gizmoRootEnabled: rootMesh?.isEnabled?.() ?? null,\n gizmoRootVisible: rootMesh?.isVisible ?? null,\n gizmoRootVisibility: rootMesh?.visibility ?? null,\n gizmoRootChildCount: rootMesh?.getChildMeshes?.(false)?.length ?? null,\n gizmoRootPosition: absolutePosition\n ? { x: absolutePosition.x, y: absolutePosition.y, z: absolutePosition.z }\n : null,\n gizmoRootScaling: scaling ? { x: scaling.x, y: scaling.y, z: scaling.z } : null,\n gizmoScaleRatio: activeGizmo?.scaleRatio ?? null,\n utilityLayerMeshCount: utilityLayer?.utilityLayerScene?.meshes?.length ?? null,\n utilityLayerActiveMeshCount: utilityLayer?.utilityLayerScene?.getActiveMeshes?.()?.length ?? null,\n utilityLayerRenderId: utilityLayer?.utilityLayerScene?.getRenderId?.() ?? null,\n sceneRenderId: options.scene.getRenderId?.() ?? null,\n };\n };\n logTransformGizmoDiagnostic('attachment.result', {\n durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),\n tool,\n space,\n constraint,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n requestedTargetIds,\n attachableTargetIds,\n targetCreated: !!target,\n targetName: target?.name ?? null,\n managerAttachedNode: activeManager.attachedNode?.name ?? activeManager._attachedNode?.name ?? null,\n gizmoAttachedNode: activeGizmo?.attachedNode?.name ?? null,\n gizmoAttachedMesh: activeGizmo?.attachedMesh?.name ?? null,\n positionEnabled: activeManager.positionGizmoEnabled === true,\n rotationEnabled: activeManager.rotationGizmoEnabled === true,\n scaleEnabled: activeManager.scaleGizmoEnabled === true,\n sceneActiveCamera: options.scene.activeCamera?.name ?? null,\n utilityLayerActiveCamera: utilityLayer?.utilityLayerScene?.activeCamera?.name ?? null,\n utilityLayerShouldRender: utilityLayer?.shouldRender ?? null,\n attachError: attachError instanceof Error ? attachError.message : attachError ? String(attachError) : null,\n ...collectRenderDetails(),\n });\n if (isTransformGizmoDiagnosticEnabled()) {\n utilityLayer?.utilityLayerScene?.onAfterRenderObservable?.addOnce?.(() => {\n logTransformGizmoDiagnostic('utility-layer.rendered', {\n tool,\n selectedNodeId,\n ...collectRenderDetails(),\n });\n });\n }\n }\n\n function prewarmGizmoManager(activeManager: any): void {\n if (managerPrewarmed) {\n logTransformGizmoDiagnostic('manager.prewarm.reuse', { tool });\n return;\n }\n const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();\n managerPrewarmed = true;\n try {\n activeManager.positionGizmoEnabled = true;\n activeManager.rotationGizmoEnabled = true;\n activeManager.scaleGizmoEnabled = true;\n applyGizmoPresentation(activeManager);\n activeManager.attachToNode?.(null);\n activeManager.positionGizmoEnabled = false;\n activeManager.rotationGizmoEnabled = false;\n activeManager.scaleGizmoEnabled = false;\n } catch (error) {\n options.logger?.warn?.('[BabylonTransformGizmoController] failed to prewarm gizmo manager', error);\n }\n logTransformGizmoDiagnostic('manager.prewarm.complete', {\n durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),\n hasPositionGizmo: !!activeManager.gizmos?.positionGizmo,\n hasRotationGizmo: !!activeManager.gizmos?.rotationGizmo,\n hasScaleGizmo: !!activeManager.gizmos?.scaleGizmo,\n });\n }\n\n function prewarmGizmoMaterials(): Promise<void> {\n if (materialPrewarmPromise) return materialPrewarmPromise;\n const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const targets = new Map<any, any>();\n for (const layer of [utilityLayer, keepDepthUtilityLayer]) {\n for (const mesh of layer?.utilityLayerScene?.meshes ?? []) {\n const material = mesh?.material;\n if (!material || typeof material.forceCompilationAsync !== 'function' || targets.has(material)) continue;\n targets.set(material, mesh);\n }\n }\n logTransformGizmoDiagnostic('material-prewarm.started', {\n targetCount: targets.size,\n });\n materialPrewarmPromise = Promise.allSettled(\n [...targets].map(([material, mesh]) => material.forceCompilationAsync(mesh)),\n ).then((results) => {\n const failureCount = results.filter(result => result.status === 'rejected').length;\n logTransformGizmoDiagnostic('material-prewarm.completed', {\n durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),\n targetCount: targets.size,\n failureCount,\n });\n });\n return materialPrewarmPromise;\n }\n\n function beginDrag(\n activeConstraint: EditorTransformCanonicalConstraint = constraint,\n handleKey?: BabylonTransformGizmoHandleKey,\n ): void {\n if (activeDrag) return;\n const activeTool = activeTransformTool();\n if (!activeTool) return;\n const duplicate = pendingDuplicateDrag;\n pendingDuplicateDrag = false;\n const targetIds = resolveDragTargetIds(activeTool, getCurrentTransformTargetIds(), activeConstraint, duplicate);\n const drag = createActiveDrag(activeTool, targetIds, activeConstraint, duplicate, handleKey);\n if (!drag) return;\n activeDrag = drag;\n logTransformGizmoDiagnostic('drag.started', {\n targetIds: [...drag.targetIds],\n activeId: drag.activeId,\n tool: drag.tool,\n constraint: drag.constraint,\n handleKey: drag.handleKey ?? null,\n source: 'gizmo-handle',\n });\n options.onDragStart?.(activeDrag);\n }\n\n function resolveDragTargetIds(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n targetIds: string[],\n activeConstraint: EditorTransformCanonicalConstraint,\n duplicate: boolean,\n ): string[] {\n if (!duplicate || targetIds.length === 0) return targetIds;\n const beforeTransforms = options.projection.readNodeTransforms(targetIds);\n const validTargetIds = targetIds.filter(nodeId => !!beforeTransforms[nodeId]);\n if (validTargetIds.length === 0) return [];\n const operationPolicy = resolveOperationPolicy(activeTool, activeConstraint);\n const duplicateResult = options.onDuplicateDragStart?.({\n targetIds: validTargetIds,\n activeId: selectedNodeId && validTargetIds.includes(selectedNodeId) ? selectedNodeId : validTargetIds[validTargetIds.length - 1] ?? null,\n tool: activeTool,\n requestedSpace: space,\n space: operationPolicy.effectiveSpace,\n operationPolicy,\n constraint: activeConstraint,\n beforeTransforms,\n });\n if (!duplicateResult?.targetIds.length) return [];\n selectedNodeIds = [...duplicateResult.targetIds];\n selectedNodeId = duplicateResult.activeId && selectedNodeIds.includes(duplicateResult.activeId)\n ? duplicateResult.activeId\n : selectedNodeIds[selectedNodeIds.length - 1] ?? null;\n if (!attachDragTargetIds(selectedNodeIds, activeTool, activeConstraint)) return [];\n return selectedNodeIds;\n }\n\n function attachDragTargetIds(\n targetIds: string[],\n activeTool: Exclude<EditorTransformTool, 'select'>,\n activeConstraint: EditorTransformCanonicalConstraint,\n ): boolean {\n const target = attachNativeTransformProxy(targetIds, activeTool, activeConstraint);\n if (!target) return false;\n const activeManager = ensureGizmoManager();\n if (!activeManager) return false;\n try {\n activeManager.attachToNode?.(target);\n updateFreeMoveHandle();\n return true;\n } catch (error) {\n options.logger?.warn?.('[BabylonTransformGizmoController] failed to attach duplicate drag target', error);\n return false;\n }\n }\n\n function attachNativeTransformProxy(\n targetIds: string[],\n activeTool: Exclude<EditorTransformTool, 'select'> | null,\n activeConstraint: EditorTransformCanonicalConstraint,\n ): any | null {\n const validTargetIds = targetIds.filter(nodeId => !!options.projection.getAttachableRoot(nodeId));\n if (validTargetIds.length === 0) return null;\n const pivot = (activeTool === 'move' || validTargetIds.length > 1)\n ? options.projection.getSelectionPivot(validTargetIds)\n ?? createSingleTargetPivot(validTargetIds[0]!)\n : createSingleTargetPivot(validTargetIds[0]!);\n if (!pivot) return null;\n const effectiveSpace = activeTool\n ? resolveOperationPolicy(activeTool, resolveAttachConstraint(activeTool, activeConstraint)).effectiveSpace\n : space;\n const rotation = validTargetIds.length === 1 && effectiveSpace === 'local'\n ? readTrsRotation(options.projection.readNodeTransform(validTargetIds[0]!))\n : { x: 0, y: 0, z: 0 };\n return setPivotProxyTransform(pivot, rotation);\n }\n\n function createSingleTargetPivot(nodeId: string): EditorTransformPivot | null {\n return createTransformPivot(options.projection.readNodeTransform(nodeId));\n }\n\n function createTransformPivot(transform: EditorTransformSnapshot | null | undefined): EditorTransformPivot | null {\n return transform\n ? {\n mode: 'selection-center',\n position: readEditorTransformPosition(transform),\n }\n : null;\n }\n\n function createSelectionPivot(\n transforms: Record<string, EditorTransformSnapshot>,\n targetIds: readonly string[],\n ): EditorTransformPivot | null {\n const positions: EditorTransformVec3[] = targetIds\n .map(id => transforms[id])\n .filter((transform): transform is EditorTransformSnapshot => !!transform)\n .map(readEditorTransformPosition);\n if (positions.length === 0) return null;\n return {\n mode: 'selection-center',\n position: {\n x: positions.reduce((sum: number, position: EditorTransformVec3) => sum + position.x, 0) / positions.length,\n y: positions.reduce((sum: number, position: EditorTransformVec3) => sum + position.y, 0) / positions.length,\n z: positions.reduce((sum: number, position: EditorTransformVec3) => sum + position.z, 0) / positions.length,\n },\n };\n }\n\n function readTrsRotation(transform: EditorTransformSnapshot | null): EditorTransformVec3 {\n return transform && !isEditorTransformMatrixSnapshot(transform)\n ? transform.rotation\n : { x: 0, y: 0, z: 0 };\n }\n\n function findMatrixTransformTargetId(\n transforms: Record<string, EditorTransformSnapshot>,\n targetIds: readonly string[],\n ): string | null {\n return targetIds.find(id => {\n const transform = transforms[id];\n return !!transform && isEditorTransformMatrixSnapshot(transform);\n }) ?? null;\n }\n\n function createActiveDrag(\n activeTool: Exclude<EditorTransformTool, 'select'>,\n targetIds: string[],\n activeConstraint: EditorTransformCanonicalConstraint,\n duplicate = false,\n handleKey?: BabylonTransformGizmoHandleKey,\n ): ActiveDrag | null {\n if (targetIds.length === 0) return null;\n const beforeTransforms = options.projection.readNodeTransforms(targetIds);\n const validTargetIds = targetIds.filter(nodeId => !!beforeTransforms[nodeId]);\n if (validTargetIds.length === 0) return null;\n const matrixTargetId = findMatrixTransformTargetId(beforeTransforms, validTargetIds);\n if (matrixTargetId) {\n return createBlockedActiveDrag({\n activeTool,\n targetIds: validTargetIds,\n activeConstraint,\n beforeTransforms,\n reason: 'unsupported-transform',\n failedTargetId: matrixTargetId,\n duplicate,\n });\n }\n const pivot = (activeTool === 'move' || validTargetIds.length > 1)\n ? options.projection.getSelectionPivot(validTargetIds) ?? {\n mode: 'selection-center' as const,\n position: readEditorTransformPosition(beforeTransforms[validTargetIds[0]!]!),\n }\n : {\n mode: 'selection-center' as const,\n position: readEditorTransformPosition(beforeTransforms[validTargetIds[0]!]!),\n };\n if (!pivot) return null;\n const before = validTargetIds.length === 1 ? beforeTransforms[validTargetIds[0]!] ?? null : null;\n const operationPolicy = resolveOperationPolicy(activeTool, activeConstraint);\n return {\n nodeId: validTargetIds.length === 1 ? validTargetIds[0]! : null,\n targetIds: validTargetIds,\n activeId: selectedNodeId && validTargetIds.includes(selectedNodeId) ? selectedNodeId : validTargetIds[validTargetIds.length - 1] ?? null,\n tool: activeTool,\n requestedSpace: space,\n space: operationPolicy.effectiveSpace,\n operationPolicy,\n constraint: activeConstraint,\n pivot,\n before,\n beforeTransforms,\n duplicate,\n handleKey,\n proxyStart: readNativeProxyTransform(pivot),\n };\n }\n\n function createBlockedActiveDrag(input: {\n activeTool: Exclude<EditorTransformTool, 'select'>;\n targetIds: string[];\n activeConstraint: EditorTransformCanonicalConstraint;\n beforeTransforms: Record<string, EditorTransformSnapshot>;\n reason: EditorTransformOperationBlockReason;\n failedTargetId: string | null;\n duplicate: boolean;\n }): ActiveDrag | null {\n const operationPolicy = resolveOperationPolicy(input.activeTool, input.activeConstraint);\n const pivot = input.targetIds.length > 1\n ? createSelectionPivot(input.beforeTransforms, input.targetIds)\n : createTransformPivot(input.beforeTransforms[input.targetIds[0]!] ?? null);\n if (!pivot) return null;\n const before = input.targetIds.length === 1 ? input.beforeTransforms[input.targetIds[0]!] ?? null : null;\n return {\n nodeId: input.targetIds.length === 1 ? input.targetIds[0]! : null,\n targetIds: input.targetIds,\n activeId: selectedNodeId && input.targetIds.includes(selectedNodeId) ? selectedNodeId : input.targetIds[input.targetIds.length - 1] ?? null,\n tool: input.activeTool,\n requestedSpace: space,\n space: operationPolicy.effectiveSpace,\n operationPolicy,\n constraint: input.activeConstraint,\n pivot,\n before,\n beforeTransforms: input.beforeTransforms,\n duplicate: input.duplicate,\n blockedReason: input.reason,\n blockedTargetId: input.failedTargetId,\n };\n }\n\n function updateDrag(): void {\n if (!activeDrag) return;\n const preview = previewBatchTransform(activeDrag);\n if (!preview.ok) {\n blockDrag(activeDrag, preview.reason, preview.failedTargetId);\n return;\n }\n const currentTransforms = preview.transforms;\n const current = activeDrag.activeId\n ? currentTransforms[activeDrag.activeId] ?? Object.values(currentTransforms)[0] ?? null\n : Object.values(currentTransforms)[0] ?? null;\n if (!current) return;\n if (activeDrag.tool === 'move') {\n const pivotPosition = resolvePreviewPivotPosition(activeDrag, currentTransforms);\n if (pivotPosition) setFreeMoveHandlePosition(pivotPosition);\n }\n logTransformGizmoDiagnostic('drag.updated', {\n targetIds: [...activeDrag.targetIds],\n activeId: activeDrag.activeId,\n tool: activeDrag.tool,\n constraint: activeDrag.constraint,\n handleKey: activeDrag.handleKey ?? null,\n source: 'gizmo-handle',\n });\n options.onDragUpdate?.({ ...activeDrag, current });\n }\n\n function endDrag(): void {\n const drag = activeDrag;\n if (!drag) return;\n const preview = previewBatchTransform(drag);\n if (!preview.ok) {\n blockDrag(drag, preview.reason, preview.failedTargetId);\n return;\n }\n activeDrag = null;\n logTransformGizmoDiagnostic('drag.ended', {\n targetIds: [...drag.targetIds],\n activeId: drag.activeId,\n tool: drag.tool,\n constraint: drag.constraint,\n handleKey: drag.handleKey ?? null,\n source: 'gizmo-handle',\n });\n emitTransformCommit(drag, preview.transforms);\n attachCurrentSelection();\n }\n\n function blockDrag(\n drag: ActiveDrag,\n reason: EditorTransformOperationBlockReason,\n failedTargetId: string | null,\n ): void {\n activeDrag = null;\n logTransformGizmoDiagnostic('drag.blocked', {\n targetIds: [...drag.targetIds],\n activeId: drag.activeId,\n tool: drag.tool,\n constraint: drag.constraint,\n handleKey: drag.handleKey ?? null,\n reason,\n failedTargetId,\n });\n restoreDragPreview(drag);\n attachCurrentSelection();\n options.onDragBlocked?.({\n ...drag,\n reason,\n failedTargetId,\n });\n }\n\n function restoreDragPreview(drag: ActiveDrag): void {\n if (drag.targetIds.length > 1) {\n options.projection.setNodeTransformsPreview(drag.beforeTransforms);\n } else if (drag.nodeId && drag.before) {\n options.projection.setNodeTransformPreview(drag.nodeId, drag.before);\n }\n }\n\n function emitTransformCommit(\n drag: ActiveDrag,\n afterTransforms: Record<string, EditorTransformSnapshot>,\n ): void {\n if (drag.targetIds.length === 1) {\n const nodeId = drag.targetIds[0]!;\n const before = drag.beforeTransforms[nodeId];\n const after = afterTransforms[nodeId];\n if (!before || !after) {\n options.onDragCancel?.(drag);\n return;\n }\n options.onDragEnd?.({\n nodeId,\n tool: drag.tool,\n requestedSpace: drag.requestedSpace,\n space: drag.space,\n operationPolicy: drag.operationPolicy,\n constraint: drag.constraint,\n before,\n after,\n });\n return;\n }\n options.onDragEnd?.({\n targetIds: drag.targetIds,\n activeId: drag.activeId,\n tool: drag.tool,\n requestedSpace: drag.requestedSpace,\n space: drag.space,\n operationPolicy: drag.operationPolicy,\n constraint: drag.constraint,\n pivot: drag.pivot,\n targets: drag.targetIds\n .map((id): EditorTransformTargetSnapshot | null => {\n const before = drag.beforeTransforms[id];\n const after = afterTransforms[id];\n return before && after ? { id, before, after } : null;\n })\n .filter((target): target is EditorTransformTargetSnapshot => !!target),\n });\n }\n\n function previewBatchTransform(drag: ActiveDrag): PreviewBatchTransformResult {\n if (drag.blockedReason) {\n return {\n ok: false,\n reason: drag.blockedReason,\n failedTargetId: drag.blockedTargetId ?? null,\n };\n }\n const pivotTransform = readProjectionLikeTransform(pivotProxy, {\n position: drag.pivot.position,\n rotation: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n });\n const proxyStart = drag.proxyStart ?? {\n position: drag.pivot.position,\n rotation: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n };\n if (drag.tool === 'move') {\n return { ok: true, transforms: previewMoveWithDelta(drag, subtractVec3(pivotTransform.position, proxyStart.position)) };\n }\n if (drag.tool === 'rotate') {\n return previewRotateWithDelta(drag, resolveRotationDelta(drag, pivotTransform, proxyStart));\n }\n if (drag.tool === 'scale') {\n return previewScaleWithDelta(drag, divideVec3(pivotTransform.scale, proxyStart.scale));\n }\n return { ok: true, transforms: {} };\n }\n\n function previewMoveWithDelta(\n drag: ActiveDrag,\n delta: EditorTransformVec3,\n ): Record<string, EditorTransformSnapshot> {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n for (const nodeId of drag.targetIds) {\n const before = drag.beforeTransforms[nodeId];\n if (!before) continue;\n const result = transformSolver.solveMove({ before, delta });\n if (!result.ok) continue;\n transforms[nodeId] = applySnapToTransform(drag, nodeId, result.transform);\n }\n options.projection.setNodeTransformsPreview(transforms);\n return transforms;\n }\n\n function previewRotateWithDelta(\n drag: ActiveDrag,\n rotationDelta: EditorTransformVec3,\n ): PreviewBatchTransformResult {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n for (const nodeId of drag.targetIds) {\n const before = drag.beforeTransforms[nodeId];\n if (!before) continue;\n const result = transformSolver.solveRotate({\n before,\n pivot: drag.pivot.position,\n delta: rotationDelta,\n space: drag.space,\n });\n if (!result.ok) {\n return { ok: false, reason: result.reason, failedTargetId: nodeId };\n }\n transforms[nodeId] = applySnapToTransform(drag, nodeId, result.transform);\n }\n options.projection.setNodeTransformsPreview(transforms);\n return { ok: true, transforms };\n }\n\n function resolveRotationDelta(\n drag: ActiveDrag,\n pivotTransform: EditorTransformTrsSnapshot,\n proxyStart: EditorTransformTrsSnapshot,\n ): EditorTransformVec3 {\n const angleDelta = readRotationHandleAngle(drag.handleKey);\n if (angleDelta != null) return rotationDeltaFromHandleAngle(drag.handleKey, angleDelta);\n return subtractVec3(pivotTransform.rotation, proxyStart.rotation);\n }\n\n function readRotationHandleAngle(handleKey: BabylonTransformGizmoHandleKey | undefined): number | null {\n if (handleKey !== 'xGizmo' && handleKey !== 'yGizmo' && handleKey !== 'zGizmo') return null;\n const angle = manager?.gizmos?.rotationGizmo?.[handleKey]?.angle;\n return Number.isFinite(angle) ? Number(angle) : null;\n }\n\n function rotationDeltaFromHandleAngle(\n handleKey: BabylonTransformGizmoHandleKey | undefined,\n angle: number,\n ): EditorTransformVec3 {\n if (handleKey === 'xGizmo') return { x: angle, y: 0, z: 0 };\n if (handleKey === 'yGizmo') return { x: 0, y: angle, z: 0 };\n if (handleKey === 'zGizmo') return { x: 0, y: 0, z: angle };\n return { x: 0, y: 0, z: 0 };\n }\n\n function previewScaleWithDelta(\n drag: ActiveDrag,\n scaleDelta: EditorTransformVec3,\n ): PreviewBatchTransformResult {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n const safeScale = {\n x: Number.isFinite(scaleDelta.x) ? scaleDelta.x : 1,\n y: Number.isFinite(scaleDelta.y) ? scaleDelta.y : 1,\n z: Number.isFinite(scaleDelta.z) ? scaleDelta.z : 1,\n };\n for (const nodeId of drag.targetIds) {\n const before = drag.beforeTransforms[nodeId];\n if (!before) continue;\n const result = transformSolver.solveScale({\n before,\n pivot: drag.pivot.position,\n delta: safeScale,\n space: drag.space,\n });\n if (!result.ok) {\n return { ok: false, reason: result.reason, failedTargetId: nodeId };\n }\n transforms[nodeId] = applySnapToTransform(drag, nodeId, result.transform);\n }\n options.projection.setNodeTransformsPreview(transforms);\n return { ok: true, transforms };\n }\n\n function applySnapToTransform(\n drag: ActiveDrag,\n nodeId: string,\n after: EditorTransformSnapshot,\n ): EditorTransformSnapshot {\n if (!operationSettings.snap.enabled) return after;\n const before = drag.beforeTransforms[nodeId];\n if (!before) return after;\n return snapEditorTransformSnapshot(before, after, drag.tool, operationSettings.snap);\n }\n\n function readNativeProxyTransform(pivot: EditorTransformPivot): EditorTransformTrsSnapshot {\n return readProjectionLikeTransform(pivotProxy, {\n position: pivot.position,\n rotation: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n });\n }\n\n function readProjectionLikeTransform(\n node: any,\n fallback: EditorTransformTrsSnapshot,\n ): EditorTransformTrsSnapshot {\n const rotation = node?.rotationQuaternion?.toEulerAngles?.() ?? node?.rotation;\n return {\n position: readVec3Like(node?.position) ?? fallback.position,\n rotation: readVec3Like(rotation) ?? fallback.rotation,\n scale: readVec3Like(node?.scaling) ?? fallback.scale,\n };\n }\n\n function readVec3Like(value: any): EditorTransformVec3 | null {\n if (!Number.isFinite(value?.x) || !Number.isFinite(value?.y) || !Number.isFinite(value?.z)) return null;\n return {\n x: Number(value.x),\n y: Number(value.y),\n z: Number(value.z),\n };\n }\n\n function addVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x + right.x,\n y: left.y + right.y,\n z: left.z + right.z,\n };\n }\n\n function subtractVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x - right.x,\n y: left.y - right.y,\n z: left.z - right.z,\n };\n }\n\n function scaleVec3(value: EditorTransformVec3, factor: number): EditorTransformVec3 {\n return {\n x: value.x * factor,\n y: value.y * factor,\n z: value.z * factor,\n };\n }\n\n function dotVec3(left: EditorTransformVec3, right: EditorTransformVec3): number {\n return left.x * right.x + left.y * right.y + left.z * right.z;\n }\n\n function divideVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: Math.abs(right.x) > 0.000001 ? left.x / right.x : 1,\n y: Math.abs(right.y) > 0.000001 ? left.y / right.y : 1,\n z: Math.abs(right.z) > 0.000001 ? left.z / right.z : 1,\n };\n }\n\n function isViewPlaneMoveCandidate(event: PointerEvent): boolean {\n if (disposed || activeDrag || tool !== 'move' || event.button !== 0) return false;\n const targetIds = getCurrentTransformTargetIds();\n if (targetIds.length === 0) return false;\n if (pickFreeMoveHandleAt(event.clientX, event.clientY)) return true;\n if (constraint !== 'free') return false;\n const pickedId = options.projection.pickNodeIdAt(event.clientX, event.clientY);\n return !!pickedId && targetIds.includes(pickedId);\n }\n\n function isGizmoDragCandidate(event: PointerEvent): boolean {\n if (disposed || activeDrag || event.button !== 0) return false;\n const activeTool = activeTransformTool();\n if (!activeTool) return false;\n const picked = pickGizmoMeshAt(event.clientX, event.clientY);\n if (isFreeMoveHandleNode(picked)) return false;\n const candidate = !!picked && isGizmoNode(picked);\n if (candidate) pendingDuplicateDrag = isDuplicateDragModifier(event);\n return candidate;\n }\n\n function beginViewPlaneMove(event: PointerEvent): boolean {\n if (!isViewPlaneMoveCandidate(event)) return false;\n const duplicate = isDuplicateDragModifier(event);\n const targetIds = resolveDragTargetIds('move', getCurrentTransformTargetIds(), 'free', duplicate);\n const drag = createActiveDrag('move', targetIds, 'free', duplicate);\n if (!drag) return false;\n const startPoint = projectPointerToViewPlane(event.clientX, event.clientY, drag.pivot.position);\n if (!startPoint) return false;\n drag.viewPlane = {\n pointerId: event.pointerId,\n startPoint,\n };\n activeDrag = drag;\n logTransformGizmoDiagnostic('drag.started', {\n targetIds: [...drag.targetIds],\n activeId: drag.activeId,\n tool: drag.tool,\n constraint: drag.constraint,\n handleKey: null,\n source: 'view-plane',\n });\n options.onDragStart?.(drag);\n return true;\n }\n\n function isDuplicateDragModifier(event: PointerEvent): boolean {\n return event.altKey === true;\n }\n\n function updateViewPlaneMove(event: PointerEvent): boolean {\n const drag = activeDrag;\n if (!drag?.viewPlane || drag.viewPlane.pointerId !== event.pointerId || disposed) return false;\n if (drag.blockedReason) {\n blockDrag(drag, drag.blockedReason, drag.blockedTargetId ?? null);\n return true;\n }\n const currentPoint = projectPointerToViewPlane(event.clientX, event.clientY, drag.pivot.position);\n if (!currentPoint) return false;\n const delta = subtractVec3(currentPoint, drag.viewPlane.startPoint);\n const transforms = previewMoveWithDelta(drag, delta);\n syncFreeMovePreviewPivot(drag, transforms, addVec3(drag.pivot.position, delta));\n const current = drag.activeId\n ? transforms[drag.activeId] ?? Object.values(transforms)[0] ?? null\n : Object.values(transforms)[0] ?? null;\n if (current) {\n logTransformGizmoDiagnostic('drag.updated', {\n targetIds: [...drag.targetIds],\n activeId: drag.activeId,\n tool: drag.tool,\n constraint: drag.constraint,\n handleKey: null,\n source: 'view-plane',\n });\n options.onDragUpdate?.({ ...drag, current });\n }\n return true;\n }\n\n function endViewPlaneMove(event: PointerEvent): boolean {\n const drag = activeDrag;\n if (!drag?.viewPlane || drag.viewPlane.pointerId !== event.pointerId || disposed) return false;\n if (drag.blockedReason) {\n blockDrag(drag, drag.blockedReason, drag.blockedTargetId ?? null);\n return true;\n }\n const currentPoint = projectPointerToViewPlane(event.clientX, event.clientY, drag.pivot.position);\n const transforms = currentPoint\n ? previewMoveWithDelta(drag, subtractVec3(currentPoint, drag.viewPlane.startPoint))\n : previewMoveWithDelta(drag, { x: 0, y: 0, z: 0 });\n syncFreeMovePreviewPivot(drag, transforms, currentPoint ?? drag.pivot.position);\n activeDrag = null;\n logTransformGizmoDiagnostic('drag.ended', {\n targetIds: [...drag.targetIds],\n activeId: drag.activeId,\n tool: drag.tool,\n constraint: drag.constraint,\n handleKey: null,\n source: 'view-plane',\n });\n emitTransformCommit(drag, transforms);\n attachCurrentSelection();\n return true;\n }\n\n function syncFreeMovePreviewPivot(\n drag: ActiveDrag,\n transforms: Record<string, EditorTransformSnapshot>,\n fallbackPosition: EditorTransformVec3,\n ): void {\n const pivotPosition = resolvePreviewPivotPosition(drag, transforms) ?? fallbackPosition;\n setPivotProxyPosition(pivotPosition);\n setFreeMoveHandlePosition(pivotPosition);\n }\n\n function resolvePreviewPivotPosition(\n drag: ActiveDrag,\n transforms: Record<string, EditorTransformSnapshot>,\n ): EditorTransformVec3 | null {\n for (const nodeId of drag.targetIds) {\n const before = drag.beforeTransforms[nodeId];\n const after = transforms[nodeId];\n if (!before || !after) continue;\n return addVec3(drag.pivot.position, subtractVec3(readEditorTransformPosition(after), readEditorTransformPosition(before)));\n }\n return null;\n }\n\n function projectPointerToViewPlane(\n clientX: number,\n clientY: number,\n planePoint: EditorTransformVec3,\n ): EditorTransformVec3 | null {\n const camera = options.scene.activeCamera ?? (options.scene as any).cameraToUseForPointers ?? null;\n const Vector3 = options.babylon.Vector3 as any;\n const Matrix = (options.babylon as any).Matrix;\n if (!canvas || !camera || !Vector3 || !Matrix?.Identity || !options.scene.createPickingRay) return null;\n const rect = canvas.getBoundingClientRect();\n const ray = options.scene.createPickingRay(clientX - rect.left, clientY - rect.top, Matrix.Identity(), camera);\n const origin = readVec3Like(ray?.origin);\n const direction = readVec3Like(ray?.direction);\n const normal = readCameraForward(camera);\n if (!origin || !direction || !normal) return null;\n const denominator = dotVec3(direction, normal);\n if (Math.abs(denominator) < 0.000001) return null;\n const t = dotVec3(subtractVec3(planePoint, origin), normal) / denominator;\n if (!Number.isFinite(t)) return null;\n return addVec3(origin, scaleVec3(direction, t));\n }\n\n function readCameraForward(camera: any): EditorTransformVec3 | null {\n const forwardRayDirection = readVec3Like(camera?.getForwardRay?.()?.direction);\n if (forwardRayDirection) return forwardRayDirection;\n const Vector3 = options.babylon.Vector3 as any;\n if (!Vector3 || typeof camera?.getDirection !== 'function') return null;\n const forwardZ = options.scene.useRightHandedSystem ? -1 : 1;\n return readVec3Like(camera.getDirection(new Vector3(0, 0, forwardZ)));\n }\n\n function pickPlacementHit(\n clientX: number,\n clientY: number,\n mode: EditorPlacementMode,\n ): EditorPlacementHit | null {\n if (mode === 'off') return null;\n if (mode === 'ground') return pickGroundPlacementHit(clientX, clientY);\n return pickSurfacePlacementHit(clientX, clientY);\n }\n\n function pickGroundPlacementHit(clientX: number, clientY: number): EditorPlacementHit | null {\n const ray = createScenePointerRay(clientX, clientY);\n const origin = readVec3Like(ray?.origin);\n const direction = readVec3Like(ray?.direction);\n if (!origin || !direction || Math.abs(direction.y) < 0.000001) return null;\n const t = -origin.y / direction.y;\n if (!Number.isFinite(t) || t < 0) return null;\n return {\n mode: 'ground',\n position: addVec3(origin, scaleVec3(direction, t)),\n normal: { x: 0, y: 1, z: 0 },\n nodeId: null,\n };\n }\n\n function pickSurfacePlacementHit(clientX: number, clientY: number): EditorPlacementHit | null {\n if (!canvas || typeof options.scene.pick !== 'function') return null;\n const rect = canvas.getBoundingClientRect();\n const pick = options.scene.pick(clientX - rect.left, clientY - rect.top, (mesh: any) => !isPlacementPickIgnored(mesh));\n const point = readVec3Like(pick?.pickedPoint);\n if (!pick?.hit || !point) return null;\n const normal = readVec3Like(pick?.getNormal?.(true)) ?? readVec3Like(pick?.normal);\n return {\n mode: 'surface',\n position: point,\n normal: normal ?? undefined,\n nodeId: options.projection.resolveProjectionNodeId(pick.pickedMesh ?? null),\n };\n }\n\n function isPlacementPickIgnored(node: any): boolean {\n let current = node;\n while (current) {\n if (current.metadata?.editorProjectionHelper) return true;\n if (current.metadata?.editorTransformFreeMoveHandle) return true;\n if (current.metadata?.editorPlacementMarker) return true;\n current = current.parent ?? null;\n }\n return false;\n }\n\n function createScenePointerRay(clientX: number, clientY: number): any | null {\n const camera = options.scene.activeCamera ?? (options.scene as any).cameraToUseForPointers ?? null;\n const Matrix = (options.babylon as any).Matrix;\n if (!canvas || !camera || !Matrix?.Identity || !options.scene.createPickingRay) return null;\n const rect = canvas.getBoundingClientRect();\n return options.scene.createPickingRay(clientX - rect.left, clientY - rect.top, Matrix.Identity(), camera);\n }\n\n function ensurePlacementMarker(): any | null {\n if (placementMarker) return placementMarker;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = options.babylon.Color3 as any;\n const activeManager = ensureGizmoManager();\n const utilityScene = activeManager?.utilityLayer?.utilityLayerScene;\n if (!MeshBuilder?.CreateSphere || !utilityScene) return null;\n placementMarker = MeshBuilder.CreateSphere(\n 'editor.placement.marker',\n { diameter: 0.32, segments: 16 },\n utilityScene,\n );\n placementMarker.metadata = {\n ...(placementMarker.metadata ?? {}),\n editorProjectionHelper: true,\n editorPlacementMarker: true,\n };\n placementMarker.isPickable = false;\n if (StandardMaterial && Color3) {\n placementMarkerMaterial = new StandardMaterial('editor.placement.marker.material', utilityScene);\n placementMarkerMaterial.diffuseColor = new Color3(0.18, 0.86, 0.78);\n placementMarkerMaterial.emissiveColor = new Color3(0.1, 0.62, 0.56);\n placementMarkerMaterial.specularColor = new Color3(0.04, 0.18, 0.16);\n placementMarker.material = placementMarkerMaterial;\n }\n setPlacementMarkerVisible(false);\n return placementMarker;\n }\n\n function setPlacementMarkerVisible(visible: boolean): void {\n if (!placementMarker) return;\n placementMarker.isVisible = visible;\n try { placementMarker.setEnabled?.(visible); } catch {}\n }\n\n function setPlacementMarker(hit: EditorPlacementHit | null): void {\n if (!hit) {\n setPlacementMarkerVisible(false);\n return;\n }\n const marker = ensurePlacementMarker();\n const Vector3 = options.babylon.Vector3;\n if (!marker || !Vector3) return;\n marker.position = new Vector3(hit.position.x, hit.position.y, hit.position.z);\n setPlacementMarkerVisible(true);\n }\n\n function pickGizmoMeshAt(clientX: number, clientY: number): any | null {\n if (!canvas) return null;\n const rect = canvas.getBoundingClientRect();\n const x = clientX - rect.left;\n const y = clientY - rect.top;\n const utilityScene = manager?.utilityLayer?.utilityLayerScene;\n const utilityPick = typeof utilityScene?.pick === 'function' ? utilityScene.pick(x, y) : null;\n if (utilityPick?.hit && utilityPick.pickedMesh) return utilityPick.pickedMesh;\n const scenePick = typeof options.scene.pick === 'function' ? options.scene.pick(x, y) : null;\n return scenePick?.hit ? scenePick.pickedMesh ?? null : null;\n }\n\n function pickFreeMoveHandleAt(clientX: number, clientY: number): any | null {\n if (!canvas || !freeMoveHandle) return null;\n const rect = canvas.getBoundingClientRect();\n const x = clientX - rect.left;\n const y = clientY - rect.top;\n const utilityScene = manager?.utilityLayer?.utilityLayerScene;\n const pick = typeof utilityScene?.pick === 'function'\n ? utilityScene.pick(x, y, (mesh: any) => isFreeMoveHandleNode(mesh))\n : null;\n return pick?.hit && isFreeMoveHandleNode(pick.pickedMesh) ? pick.pickedMesh : null;\n }\n\n function ensureFreeMoveHandle(): any | null {\n if (freeMoveHandle) return freeMoveHandle;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = options.babylon.Color3 as any;\n const activeManager = ensureGizmoManager();\n const utilityScene = activeManager?.utilityLayer?.utilityLayerScene;\n if (!MeshBuilder?.CreateSphere || !utilityScene) return null;\n freeMoveHandle = MeshBuilder.CreateSphere(\n 'editor.transform.freeMoveHandle',\n { diameter: FREE_MOVE_HANDLE_DIAMETER, segments: 16 },\n utilityScene,\n );\n freeMoveHandle.metadata = {\n ...(freeMoveHandle.metadata ?? {}),\n editorProjectionHelper: true,\n editorTransformFreeMoveHandle: true,\n };\n freeMoveHandle.isPickable = true;\n if (StandardMaterial && Color3) {\n freeMoveHandleMaterial = new StandardMaterial('editor.transform.freeMoveHandle.material', utilityScene);\n freeMoveHandleMaterial.diffuseColor = new Color3(0.94, 0.96, 0.98);\n freeMoveHandleMaterial.emissiveColor = new Color3(0.88, 0.91, 0.95);\n freeMoveHandleMaterial.specularColor = new Color3(0.08, 0.1, 0.12);\n freeMoveHandleMaterial.disableLighting = true;\n freeMoveHandle.material = freeMoveHandleMaterial;\n }\n setFreeMoveHandleVisible(false);\n return freeMoveHandle;\n }\n\n function setFreeMoveHandleVisible(visible: boolean): void {\n if (!freeMoveHandle) return;\n freeMoveHandle.isVisible = visible;\n try { freeMoveHandle.setEnabled?.(visible); } catch {}\n }\n\n function setFreeMoveHandlePosition(position: EditorTransformVec3): void {\n const handle = ensureFreeMoveHandle();\n const Vector3 = options.babylon.Vector3;\n if (!handle || !Vector3) return;\n const gizmoRoot = manager?.gizmos?.positionGizmo?.xGizmo?._rootMesh\n ?? manager?.gizmos?.positionGizmo?.xGizmo?.rootMesh\n ?? null;\n if (gizmoRoot) {\n handle.parent = gizmoRoot;\n handle.position = new Vector3(0, 0, 0);\n } else {\n handle.parent = null;\n handle.position = new Vector3(position.x, position.y, position.z);\n }\n setFreeMoveHandleVisible(true);\n }\n\n function updateFreeMoveHandle(): void {\n if (tool !== 'move' || activeDrag) {\n setFreeMoveHandleVisible(false);\n return;\n }\n const targetIds = getCurrentTransformTargetIds();\n if (targetIds.length === 0) {\n setFreeMoveHandleVisible(false);\n return;\n }\n const pivot = options.projection.getSelectionPivot(targetIds);\n const position = pivot?.position\n ?? (targetIds[0] ? createTransformPivot(options.projection.readNodeTransform(targetIds[0]))?.position : null);\n if (!position) {\n setFreeMoveHandleVisible(false);\n return;\n }\n setFreeMoveHandlePosition(position);\n }\n\n function isGizmoNode(node: any): boolean {\n let current = node;\n const roots = collectCurrentGizmoRoots();\n while (current) {\n if (isFreeMoveHandleNode(current)) return false;\n if (roots.has(current)) return true;\n if (current.metadata?.editorProjection?.nodeId) return false;\n if (current.metadata?.editorProjectionHelper) return false;\n const name = String(current.name ?? current.id ?? '').toLowerCase();\n if (name.includes('gizmo')) return true;\n current = current.parent ?? null;\n }\n return false;\n }\n\n function isFreeMoveHandleNode(node: any): boolean {\n let current = node;\n while (current) {\n if (current.metadata?.editorTransformFreeMoveHandle) return true;\n current = current.parent ?? null;\n }\n return false;\n }\n\n function collectCurrentGizmoRoots(): Set<any> {\n const roots = new Set<any>();\n const activeManager = manager;\n if (!activeManager) return roots;\n const activeTool = activeTransformTool();\n const gizmo = activeTool === 'move'\n ? activeManager.gizmos?.positionGizmo\n : activeTool === 'rotate'\n ? activeManager.gizmos?.rotationGizmo\n : activeTool === 'scale'\n ? activeManager.gizmos?.scaleGizmo\n : null;\n collectGizmoRoots(gizmo, roots);\n return roots;\n }\n\n function collectGizmoRoots(value: any, roots: Set<any>): void {\n if (!value || roots.has(value)) return;\n if (value._rootMesh) roots.add(value._rootMesh);\n if (value.rootMesh) roots.add(value.rootMesh);\n if (value.attachedMesh) roots.add(value.attachedMesh);\n for (const key of ['xGizmo', 'yGizmo', 'zGizmo', 'xPlaneGizmo', 'yPlaneGizmo', 'zPlaneGizmo', 'uniformScaleGizmo']) {\n if (value[key]) collectGizmoRoots(value[key], roots);\n }\n }\n\n const controller: BabylonTransformGizmoController = {\n getState() {\n return {\n tool,\n space,\n selectedNodeId,\n dragPhase: activeDrag ? 'dragging' : 'idle',\n draggingNodeId: activeDrag?.nodeId ?? null,\n constraint,\n };\n },\n async prepare() {\n if (disposed) return;\n logTransformGizmoDiagnostic('prepare.requested', {\n tool,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n });\n const activeManager = ensureGizmoManager();\n if (!activeManager) return;\n prewarmGizmoManager(activeManager);\n attachCurrentSelection();\n await prewarmGizmoMaterials();\n },\n setTool(nextTool) {\n if (disposed) return;\n logTransformGizmoDiagnostic('tool.requested', {\n previousTool: tool,\n nextTool,\n repeated: tool === nextTool,\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n });\n if (tool === nextTool) {\n if (!activeDrag) attachCurrentSelection();\n return;\n }\n controller.cancelDrag();\n tool = nextTool;\n constraint = normalizeConstraintForTool(tool, constraint) ?? 'axis';\n attachCurrentSelection();\n },\n setSpace(nextSpace) {\n if (disposed) return;\n if (space === nextSpace) {\n if (!activeDrag) attachCurrentSelection();\n return;\n }\n controller.cancelDrag();\n space = nextSpace;\n attachCurrentSelection();\n },\n setConstraint(nextConstraint) {\n if (disposed) return;\n const normalized = normalizeConstraintForTool(tool, nextConstraint) ?? 'axis';\n if (constraint === normalized) {\n if (!activeDrag) attachCurrentSelection();\n return;\n }\n controller.cancelDrag();\n constraint = normalized;\n attachCurrentSelection();\n },\n setOperationSettings(settings) {\n if (disposed) return;\n operationSettings = cloneOperationSettings(settings);\n if (activeDrag) updateDrag();\n },\n preparePointerDrag(event) {\n if (disposed || event.button !== 0) return;\n pendingDuplicateDrag = isDuplicateDragModifier(event);\n },\n setSelectedNode(nextNodeId) {\n if (disposed) return;\n if (selectedNodeId === nextNodeId && selectedNodeIds.length === (nextNodeId ? 1 : 0)) return;\n controller.cancelDrag();\n selectedNodeId = nextNodeId;\n selectedNodeIds = nextNodeId ? [nextNodeId] : [];\n attachCurrentSelection();\n },\n setSelection(selection) {\n if (disposed) return;\n const largeSelection = selection.selectedIds.length > LARGE_SELECTION_GIZMO_LIMIT;\n const nextNodeIds = largeSelection\n ? [selection.activeId].filter((id): id is string => !!id)\n : [...selection.selectedIds];\n const nextActiveId = selection.activeId;\n logTransformGizmoDiagnostic('selection.requested', {\n previousActiveId: selectedNodeId,\n previousSelectedIds: [...selectedNodeIds],\n nextActiveId,\n nextSelectedIds: [...nextNodeIds],\n tool,\n });\n if (\n selectedNodeId === nextActiveId\n && selectedNodeIds.length === nextNodeIds.length\n && selectedNodeIds.every((id, index) => id === nextNodeIds[index])\n ) {\n return;\n }\n controller.cancelDrag();\n selectedNodeId = nextActiveId;\n selectedNodeIds = nextNodeIds;\n attachCurrentSelection();\n },\n refreshSelection() {\n if (disposed) return;\n if (activeDrag) return;\n logTransformGizmoDiagnostic('selection.refresh', {\n selectedNodeId,\n selectedNodeIds: [...selectedNodeIds],\n tool,\n });\n attachCurrentSelection();\n },\n isGizmoDragCandidate,\n isViewPlaneMoveCandidate,\n beginViewPlaneMove,\n updateViewPlaneMove,\n endViewPlaneMove,\n pickPlacementHit,\n setPlacementMarker,\n cancelDrag() {\n const drag = activeDrag;\n if (!drag) return;\n activeDrag = null;\n if (drag.targetIds.length > 1) {\n options.projection.setNodeTransformsPreview(drag.beforeTransforms);\n } else if (drag.nodeId && drag.before) {\n options.projection.setNodeTransformPreview(drag.nodeId, drag.before);\n }\n attachCurrentSelection();\n logTransformGizmoDiagnostic('drag.canceled', {\n targetIds: [...drag.targetIds],\n activeId: drag.activeId,\n tool: drag.tool,\n constraint: drag.constraint,\n handleKey: drag.handleKey ?? null,\n });\n options.onDragCancel?.(drag);\n },\n dispose() {\n if (disposed) return;\n controller.cancelDrag();\n clearDragObservers();\n try { manager?.attachToNode?.(null); } catch {}\n try { manager?.dispose?.(); } catch {}\n try { utilityLayer?.dispose?.(); } catch {}\n try { keepDepthUtilityLayer?.dispose?.(); } catch {}\n try { pivotProxy?.dispose?.(); } catch {}\n try { freeMoveHandle?.dispose?.(); } catch {}\n try { freeMoveHandleMaterial?.dispose?.(); } catch {}\n try { placementMarker?.dispose?.(); } catch {}\n try { placementMarkerMaterial?.dispose?.(); } catch {}\n pivotProxy = null;\n freeMoveHandle = null;\n freeMoveHandleMaterial = null;\n placementMarker = null;\n placementMarkerMaterial = null;\n manager = null;\n utilityLayer = null;\n keepDepthUtilityLayer = null;\n managerPrewarmed = false;\n materialPrewarmPromise = null;\n disposed = true;\n },\n };\n\n attachCurrentSelection();\n return controller;\n}\n\nfunction cloneOperationSettings(\n settings: EditorTransformOperationSettings,\n): EditorTransformOperationSettings {\n return {\n snap: {\n enabled: settings.snap.enabled,\n moveStep: settings.snap.moveStep,\n rotateStepDegrees: settings.snap.rotateStepDegrees,\n scaleStep: settings.snap.scaleStep,\n },\n placementMode: settings.placementMode,\n };\n}\n"]}