@realsee/five-webgpu 1.0.0-alpha.5 → 1.0.0-alpha.7

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 (378) hide show
  1. package/ai_guides/api.md +9 -8
  2. package/ai_guides/features/camera-animation.md +1 -1
  3. package/ai_guides/features/event.md +0 -1
  4. package/ai_guides/features/five.md +78 -9
  5. package/ai_guides/features/gesture.md +1 -1
  6. package/ai_guides/features/load-external-model.md +6 -6
  7. package/ai_guides/features/load-progress.md +2 -2
  8. package/ai_guides/features/material.md +35 -8
  9. package/ai_guides/features/mode.md +26 -29
  10. package/ai_guides/features/model.md +1 -1
  11. package/ai_guides/features/state.md +2 -2
  12. package/ai_guides/features/ultra-hdr.md +41 -32
  13. package/ai_guides/quick-start.md +2 -2
  14. package/ai_guides/release_notes/6.8.md +2 -2
  15. package/ai_guides/support.md +0 -4
  16. package/docs/assets/hierarchy.js +1 -1
  17. package/docs/assets/navigation.js +1 -1
  18. package/docs/assets/search.js +1 -1
  19. package/docs/classes/index.AdaptiveLuminancePass.html +1 -1
  20. package/docs/classes/index.BoundingMesh.html +1 -1
  21. package/docs/classes/index.Camera.html +1 -1
  22. package/docs/classes/index.EffectComposer.html +1 -1
  23. package/docs/classes/index.EyeDomeLightingPass.html +1 -1
  24. package/docs/classes/index.Five.html +69 -67
  25. package/docs/classes/index.FivePass.html +1 -1
  26. package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
  27. package/docs/classes/index.FlowingLight2DPass.html +1 -1
  28. package/docs/classes/index.FlowingLight3DPass.html +2 -2
  29. package/docs/classes/index.GaussianBlurPass.html +1 -1
  30. package/docs/classes/index.InternalWebGPURenderer.html +8 -5
  31. package/docs/classes/index.Model.html +1 -1
  32. package/docs/classes/index.ModelScene.html +1 -1
  33. package/docs/classes/index.NetworkSubscribe.html +1 -1
  34. package/docs/classes/index.PBMCustomNode.html +8 -8
  35. package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +8 -6
  36. package/docs/classes/index.PBMGaussianSplattingObject.html +10 -4
  37. package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +26 -15
  38. package/docs/classes/index.PBMGroup.html +1 -1
  39. package/docs/classes/index.PBMMesh.html +1 -1
  40. package/docs/classes/index.PBMMeshBasicMaterial.html +13 -8
  41. package/docs/classes/index.PBMMeshBasicNodeMaterial.html +15 -10
  42. package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +13 -8
  43. package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +13 -8
  44. package/docs/classes/index.PBMMeshPhongMaterial.html +13 -8
  45. package/docs/classes/index.PBMMeshPhongNodeMaterial.html +15 -10
  46. package/docs/classes/index.PBMMeshPhysicalMaterial.html +13 -8
  47. package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +15 -10
  48. package/docs/classes/index.PBMPanoFilter.html +8 -8
  49. package/docs/classes/index.PBMPointCloud.html +6 -7
  50. package/docs/classes/index.PBMPointCloudMaterial.html +83 -0
  51. package/docs/classes/index.PBMSkinnedMesh.html +1 -1
  52. package/docs/classes/index.PBMUpdateable.html +1 -1
  53. package/docs/classes/index.PanoCircleMesh.html +1 -1
  54. package/docs/classes/index.PanoCircleMeshCustom.html +5 -5
  55. package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
  56. package/docs/classes/index.Parameter.html +57 -56
  57. package/docs/classes/index.Scene.html +1 -1
  58. package/docs/classes/index.Subscribe.html +1 -1
  59. package/docs/classes/index.TextureLoader.html +4 -1
  60. package/docs/classes/index.Tile3D.html +23 -21
  61. package/docs/classes/index.TileNode.html +1 -1
  62. package/docs/classes/index.Tileset.html +4 -4
  63. package/docs/classes/index.TrajectoryNode.html +3 -3
  64. package/docs/classes/index.Work.html +20 -18
  65. package/docs/classes/index.WorkResolvedObserver.html +22 -22
  66. package/docs/classes/index.XRButton.html +3 -0
  67. package/docs/documents/api.html +11 -10
  68. package/docs/documents/features_camera-animation.html +1 -1
  69. package/docs/documents/features_event.html +0 -1
  70. package/docs/documents/features_five.html +51 -9
  71. package/docs/documents/features_gesture.html +1 -1
  72. package/docs/documents/features_load-external-model.html +6 -6
  73. package/docs/documents/features_load-progress.html +1 -1
  74. package/docs/documents/features_material.html +20 -9
  75. package/docs/documents/features_mode.html +28 -13
  76. package/docs/documents/features_model.html +1 -1
  77. package/docs/documents/features_state.html +1 -1
  78. package/docs/documents/features_ultra-hdr.html +50 -44
  79. package/docs/documents/quick-start.html +1 -1
  80. package/docs/documents/release_notes_6.8.html +2 -2
  81. package/docs/documents/support.html +1 -3
  82. package/docs/functions/index.customNodesCacheKey.html +1 -1
  83. package/docs/functions/index.parseWork.html +1 -1
  84. package/docs/functions/index.workToJson.html +1 -1
  85. package/docs/hierarchy.html +1 -1
  86. package/docs/interfaces/index.AddableObject.html +1 -1
  87. package/docs/interfaces/index.AjaxOptions.html +1 -1
  88. package/docs/interfaces/index.BaseEvent.html +2 -2
  89. package/docs/interfaces/index.Clock.html +24 -0
  90. package/docs/interfaces/index.DeviceProfile.html +8 -0
  91. package/docs/interfaces/index.EventCallback.html +49 -47
  92. package/docs/interfaces/index.FiveInitArgs.html +65 -41
  93. package/docs/interfaces/index.GainmapCfgData.html +15 -0
  94. package/docs/interfaces/index.GestureEvent.html +2 -2
  95. package/docs/interfaces/index.IPBMMaterial.html +12 -7
  96. package/docs/interfaces/index.ImageOptions.html +1 -1
  97. package/docs/interfaces/index.IntersectEvent.html +2 -2
  98. package/docs/interfaces/index.IntersectMesh.html +1 -1
  99. package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
  100. package/docs/interfaces/index.Intersection.html +1 -1
  101. package/docs/interfaces/index.LoosePanoWork.html +2 -2
  102. package/docs/interfaces/index.LooseWork.html +2 -2
  103. package/docs/interfaces/index.LooseWorkInitial.html +2 -2
  104. package/docs/interfaces/index.LooseWorkModel.html +2 -2
  105. package/docs/interfaces/index.LooseWorkObserver.html +2 -2
  106. package/docs/interfaces/index.LooseWorkPanorama.html +4 -3
  107. package/docs/interfaces/index.LooseWorkWithExtrinsics.html +15 -9
  108. package/docs/interfaces/index.ModeChangeEvent.html +2 -2
  109. package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
  110. package/docs/interfaces/index.ModelEvent.html +2 -2
  111. package/docs/interfaces/index.ModelSceneEvent.html +2 -2
  112. package/docs/interfaces/index.ModelTileEvent.html +2 -2
  113. package/docs/interfaces/index.MovePanoOptions.html +1 -1
  114. package/docs/interfaces/index.NetworkAbortError.html +1 -1
  115. package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
  116. package/docs/interfaces/index.NetworkOptions.html +1 -1
  117. package/docs/interfaces/index.NetworkProxyError.html +1 -1
  118. package/docs/interfaces/index.NetworkResourceEvent.html +2 -2
  119. package/docs/interfaces/index.NetworkResponseError.html +1 -1
  120. package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
  121. package/docs/interfaces/index.ObjectEvent.html +2 -2
  122. package/docs/interfaces/index.PBMClipperParameter.html +2 -2
  123. package/docs/interfaces/index.PBMCustomNodeContext.html +60 -12
  124. package/docs/interfaces/index.PBMCustomNodeOptions.html +4 -4
  125. package/docs/interfaces/index.PBMCustomNodePanoContext.html +13 -6
  126. package/docs/interfaces/index.PBMCustomNodeSlots.html +6 -6
  127. package/docs/interfaces/index.PBMGaussianSplattingNodeMaterialOptions.html +4 -0
  128. package/docs/interfaces/index.PBMPanoDepth.html +5 -5
  129. package/docs/interfaces/index.PBMPanoFilterValue.html +2 -2
  130. package/docs/interfaces/index.PBMPanoGainmap.html +6 -0
  131. package/docs/interfaces/index.PBMPanoPicture.html +9 -8
  132. package/docs/interfaces/index.PBMRefinedScreen.html +2 -2
  133. package/docs/interfaces/index.PanoCircleMeshCustomOptions.html +2 -2
  134. package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
  135. package/docs/interfaces/index.PanoEvent.html +2 -2
  136. package/docs/interfaces/index.PanoPrepareEvent.html +15 -0
  137. package/docs/interfaces/index.PanoTextureEvent.html +2 -2
  138. package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +9 -9
  139. package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
  140. package/docs/interfaces/index.ParameterMaterialValue.html +42 -41
  141. package/docs/interfaces/index.ParameterTilesetValue.html +15 -15
  142. package/docs/interfaces/index.ParameterValue.html +56 -55
  143. package/docs/interfaces/index.Pose.html +1 -1
  144. package/docs/interfaces/index.RenderEvent.html +2 -2
  145. package/docs/interfaces/index.ResolvedParameterValue.html +56 -55
  146. package/docs/interfaces/index.State.html +1 -1
  147. package/docs/interfaces/index.StateEvent.html +2 -2
  148. package/docs/interfaces/index.TextureOptions.html +1 -1
  149. package/docs/interfaces/index.TilesetOptions.html +7 -2
  150. package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
  151. package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +37 -0
  152. package/docs/interfaces/index.ViewLayer.html +23 -21
  153. package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +10 -0
  154. package/docs/interfaces/index.WorkCubeImage.html +5 -9
  155. package/docs/interfaces/index.WorkImage.html +8 -12
  156. package/docs/interfaces/index.WorkInitial.html +8 -8
  157. package/docs/interfaces/index.WorkModel.html +8 -8
  158. package/docs/interfaces/index.WorkModelLayer.html +6 -6
  159. package/docs/interfaces/index.WorkObserver.html +23 -23
  160. package/docs/interfaces/index.WorkPanoramaJson.html +3 -2
  161. package/docs/interfaces/index.WorkTile.html +8 -12
  162. package/docs/interfaces/index.WorksEvent.html +2 -2
  163. package/docs/interfaces/index.XRControllerEvent.html +2 -2
  164. package/docs/interfaces/index.XRGestureEvent.html +2 -2
  165. package/docs/interfaces/index.XRPanoramaControllerCustomInitArgs.html +52 -0
  166. package/docs/interfaces/index.XRSessionEvent.html +2 -2
  167. package/docs/modules/index.html +1 -1
  168. package/docs/types/index.ControllerCustomInitTypes.html +4 -2
  169. package/docs/types/index.ControllerEventTypes.html +25 -23
  170. package/docs/types/index.DeviceProfileOverride.html +5 -0
  171. package/docs/types/index.EventTypes.html +26 -26
  172. package/docs/types/index.FlowingLightLineInput.html +11 -0
  173. package/docs/types/index.Mode.html +6 -3
  174. package/docs/types/index.OutputTextureDataType.html +1 -1
  175. package/docs/types/index.PBMCustomNodeTargetType.html +1 -1
  176. package/docs/types/index.ParseOptions.html +14 -8
  177. package/docs/types/index.XRMachineType.html +7 -0
  178. package/docs/variables/index.GSPLAT_PIPELINE_AUTO.html +2 -0
  179. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_CPU_SORT.html +2 -0
  180. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_GPU_SORT.html +2 -0
  181. package/docs/variables/index.PBMVertexMarkFlag.html +4 -0
  182. package/docs/variables/index.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
  183. package/docs/variables/index.controllersDefaultInitArgs.html +1 -1
  184. package/five/application/controllers.d.ts +8 -0
  185. package/five/application/events.d.ts +1 -1
  186. package/five/application/five.d.ts +6 -1
  187. package/five/application/fiveInitArgs.d.ts +32 -1
  188. package/five/application/mode.d.ts +8 -1
  189. package/five/cardboard/helper.d.ts +2 -0
  190. package/five/cardboard/index.d.ts +13 -0
  191. package/five/cardboard/sensor.d.ts +158 -0
  192. package/five/controllers/base.d.ts +3 -0
  193. package/five/controllers/events.d.ts +5 -3
  194. package/five/controllers/panorama.d.ts +2 -2
  195. package/five/controllers/vrPanorama.d.ts +56 -0
  196. package/five/controllers/xrPanorama.d.ts +506 -0
  197. package/five/core/internalWebGPURenderer.d.ts +7 -1
  198. package/five/core/panoVideo.d.ts +4 -1
  199. package/five/core/tiling.d.ts +25 -11
  200. package/five/core/webglAsyncReadFix.d.ts +25 -0
  201. package/five/gaussian-splatting/gpu-sort/prefixSumKernel.d.ts +65 -0
  202. package/five/gaussian-splatting/gpu-sort/radixSortModule.d.ts +128 -0
  203. package/five/gaussian-splatting/gpu-sort/shaders/prefixSum.d.ts +2 -0
  204. package/five/gaussian-splatting/gpu-sort/shaders/radixHistogram.d.ts +2 -0
  205. package/five/gaussian-splatting/gpu-sort/shaders/radixReorder.d.ts +2 -0
  206. package/five/gaussian-splatting/gpu-sort/shaders/sortKeygen.d.ts +2 -0
  207. package/five/gaussian-splatting/gpu-sort/sortAdapter.d.ts +234 -0
  208. package/five/gaussian-splatting/pipelines/cpuSortPipeline.d.ts +159 -0
  209. package/five/gaussian-splatting/pipelines/gpuSortPipeline.d.ts +98 -0
  210. package/five/gaussian-splatting/pipelines/gsplatPipeline.d.ts +104 -0
  211. package/five/gaussian-splatting/pipelines/pipelineMode.d.ts +42 -0
  212. package/five/gaussian-splatting/pipelines/sortThrottle.d.ts +45 -0
  213. package/five/index.d.ts +8 -2
  214. package/five/index.js +272 -269
  215. package/five/index.mjs +8389 -4487
  216. package/five/meshes/panoCircleMeshCustom.d.ts +1 -0
  217. package/five/model/index.d.ts +3 -2
  218. package/five/model/materials/pbmGaussianSplattingNodeMaterial.d.ts +4 -0
  219. package/five/model/materials/pbmMaterial.d.ts +126 -19
  220. package/five/model/materials/pbmMeshMaterial.d.ts +0 -9
  221. package/five/model/materials/pbmPointCloudNodeMaterial.d.ts +1 -1
  222. package/five/model/materials/tsl/defines.d.ts +6 -1
  223. package/five/model/materials/tsl/outputBuilder.d.ts +1 -12
  224. package/five/model/materials/tsl/panoColor.d.ts +8 -2
  225. package/five/model/materials/tsl/utils.d.ts +13 -0
  226. package/five/model/objects/pbmGaussianSplattingObject.d.ts +9 -0
  227. package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +67 -101
  228. package/five/model/objects/pbmPointCloud.d.ts +0 -1
  229. package/five/model/objects/pbmPointCloudObject.d.ts +1 -1
  230. package/five/model/parameter.d.ts +5 -4
  231. package/five/model/tile3d/index.d.ts +2 -0
  232. package/five/model/tile3d/tileset.d.ts +5 -0
  233. package/five/model/tile3d/trajectory-content.d.ts +53 -0
  234. package/five/renderer/index.d.ts +1 -1
  235. package/five/renderer/postprocessing/index.d.ts +1 -1
  236. package/five/texture/loader.d.ts +6 -0
  237. package/five/types/cube.d.ts +0 -1
  238. package/five/utils/detector.d.ts +11 -1
  239. package/five/utils/error.d.ts +1 -0
  240. package/five/utils/event.d.ts +26 -3
  241. package/five/utils/gainmap-data.d.ts +23 -0
  242. package/five/webxr/XRControllerModelFactory.d.ts +55 -0
  243. package/five/webxr/buttonStateMachine.d.ts +31 -0
  244. package/five/webxr/deviceProfile.d.ts +70 -0
  245. package/five/webxr/inputSourceTracker.d.ts +59 -0
  246. package/five/webxr/referenceSpace.d.ts +60 -0
  247. package/five/webxr/renderTargetBridge.d.ts +45 -0
  248. package/five/webxr/xrButton.d.ts +4 -0
  249. package/five/webxr/xrManager.d.ts +174 -0
  250. package/five/work/index.d.ts +1 -1
  251. package/five/work/looseWorkType.d.ts +2 -1
  252. package/five/work/work.d.ts +30 -7
  253. package/five/work/workJsonType.d.ts +2 -1
  254. package/gltf-loader/gltf-object.d.ts +17 -0
  255. package/gltf-loader/index.d.ts +45 -0
  256. package/gltf-loader/index.js +255 -0
  257. package/gltf-loader/index.mjs +302 -0
  258. package/line/circle_png.d.ts +1 -0
  259. package/line/index.d.ts +49 -0
  260. package/line/index.js +255 -0
  261. package/line/index.mjs +340 -0
  262. package/package.json +30 -5
  263. package/plugins/BackgroundPlugin/Controller.d.ts +20 -0
  264. package/plugins/BackgroundPlugin/index.d.ts +5 -0
  265. package/plugins/BackgroundPlugin/typings.d.ts +44 -0
  266. package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
  267. package/plugins/CSS2DPlugin/index.d.ts +5 -0
  268. package/plugins/CSS2DPlugin/typing.d.ts +31 -0
  269. package/plugins/CSS3DPlugin/Controller.d.ts +64 -0
  270. package/plugins/CSS3DPlugin/index.d.ts +5 -0
  271. package/plugins/CSS3DPlugin/typing.d.ts +33 -0
  272. package/plugins/FloorplanPlugin/Controller.d.ts +100 -0
  273. package/plugins/FloorplanPlugin/index.d.ts +6 -0
  274. package/plugins/FloorplanPlugin/render/assets.d.ts +9 -0
  275. package/plugins/FloorplanPlugin/render/index.d.ts +35 -0
  276. package/plugins/FloorplanPlugin/render/isPointInPolygon.d.ts +5 -0
  277. package/plugins/FloorplanPlugin/render/renderFloor.d.ts +22 -0
  278. package/plugins/FloorplanPlugin/render/roomLabelVisibility.d.ts +10 -0
  279. package/plugins/FloorplanPlugin/typing.d.ts +156 -0
  280. package/plugins/FloorplanPlugin/typings/floorplanData.d.ts +112 -0
  281. package/plugins/FloorplanPlugin/typings/floorplanJson.d.ts +167 -0
  282. package/plugins/FloorplanPlugin/typings/floorplanServerData.d.ts +78 -0
  283. package/plugins/FloorplanPlugin/typings/index.d.ts +3 -0
  284. package/plugins/FloorplanPlugin/utils/changeMode.d.ts +5 -0
  285. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.d.ts +6 -0
  286. package/plugins/FloorplanPlugin/utils/correctFiveState.d.ts +11 -0
  287. package/plugins/FloorplanPlugin/utils/equal.d.ts +9 -0
  288. package/plugins/FloorplanPlugin/utils/filter.d.ts +8 -0
  289. package/plugins/FloorplanPlugin/utils/fiveModelLoad.d.ts +6 -0
  290. package/plugins/FloorplanPlugin/utils/formatData.d.ts +6 -0
  291. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.d.ts +20 -0
  292. package/plugins/FloorplanPlugin/utils/formatPosition.d.ts +33 -0
  293. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.d.ts +6 -0
  294. package/plugins/FloorplanPlugin/utils/getPxmm.d.ts +19 -0
  295. package/plugins/FloorplanPlugin/utils/isTruelyObject.d.ts +4 -0
  296. package/plugins/FloorplanPlugin/utils/nearlyEqual.d.ts +8 -0
  297. package/plugins/FloorplanPlugin/utils/polylabel.d.ts +8 -0
  298. package/plugins/FloorplanPlugin/utils/to.d.ts +5 -0
  299. package/plugins/Object3DHelperPlugin/Controller.d.ts +99 -0
  300. package/plugins/Object3DHelperPlugin/Controllers/BaseController.d.ts +142 -0
  301. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.d.ts +16 -0
  302. package/plugins/Object3DHelperPlugin/Controllers/MoveController.d.ts +66 -0
  303. package/plugins/Object3DHelperPlugin/Controllers/RotateController.d.ts +61 -0
  304. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.d.ts +17 -0
  305. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.d.ts +97 -0
  306. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.d.ts +16 -0
  307. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.d.ts +37 -0
  308. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.d.ts +93 -0
  309. package/plugins/Object3DHelperPlugin/constant.d.ts +27 -0
  310. package/plugins/Object3DHelperPlugin/index.d.ts +6 -0
  311. package/plugins/Object3DHelperPlugin/typing.d.ts +143 -0
  312. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.d.ts +22 -0
  313. package/plugins/Object3DHelperPlugin/utils/CenterHandle.d.ts +23 -0
  314. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.d.ts +19 -0
  315. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.d.ts +5 -0
  316. package/plugins/Object3DHelperPlugin/utils/cameraHooks.d.ts +3 -0
  317. package/plugins/Object3DHelperPlugin/utils/direction.d.ts +14 -0
  318. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.d.ts +5 -0
  319. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.d.ts +8 -0
  320. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.d.ts +8 -0
  321. package/plugins/Object3DHelperPlugin/utils/solidGuide.d.ts +27 -0
  322. package/plugins/Object3DHelperPlugin/utils/tipsDom.d.ts +8 -0
  323. package/plugins/PanoAnimePlugin/Controller.d.ts +49 -0
  324. package/plugins/PanoAnimePlugin/index.d.ts +5 -0
  325. package/plugins/PanoAnimePlugin/typing.d.ts +37 -0
  326. package/plugins/index.d.ts +6 -0
  327. package/plugins/index.js +748 -3
  328. package/plugins/index.mjs +28761 -88
  329. package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
  330. package/plugins/thirdParty/CSS3DRenderer.d.ts +45 -0
  331. package/plugins/thirdParty/OrbitControls.d.ts +78 -0
  332. package/plugins/thirdParty/doctorstrange-model.d.ts +92 -0
  333. package/plugins/thirdParty/domevents.d.ts +36 -0
  334. package/plugins/utils/clamp.d.ts +2 -0
  335. package/plugins/utils/uuid.d.ts +2 -0
  336. package/react/index.js +2 -2
  337. package/react/index.mjs +2 -2
  338. package/sticker/geometry.d.ts +3 -0
  339. package/sticker/index.d.ts +68 -0
  340. package/sticker/index.js +255 -0
  341. package/sticker/index.mjs +358 -0
  342. package/umd/five-gltf-loader.js +255 -0
  343. package/umd/five-line.js +322 -0
  344. package/umd/five-plugins.js +816 -3
  345. package/umd/five-react.js +2 -2
  346. package/umd/five-sticker.js +255 -0
  347. package/umd/five-vfx.js +323 -0
  348. package/umd/five.js +347 -344
  349. package/vfx/airflow/airflow.d.ts +18 -0
  350. package/vfx/common/simplex-noise.d.ts +2 -0
  351. package/vfx/frame/frame.d.ts +27 -0
  352. package/vfx/index.d.ts +7 -0
  353. package/vfx/index.js +255 -0
  354. package/vfx/index.mjs +738 -0
  355. package/vfx/particle/instance.d.ts +36 -0
  356. package/vfx/particle/particle.d.ts +119 -0
  357. package/vfx/particle/utils.d.ts +11 -0
  358. package/vfx/particle-gpu/particle.d.ts +75 -0
  359. package/vfx/particle-gpu/utils.d.ts +11 -0
  360. package/vfx/spotLight/spotLight.d.ts +15 -0
  361. package/work-downloader/components/model-3d-tile.d.ts +2 -0
  362. package/work-downloader/components/model.d.ts +3 -0
  363. package/work-downloader/components/observer.d.ts +9 -0
  364. package/work-downloader/download.d.ts +16 -0
  365. package/work-downloader/index.d.ts +2 -0
  366. package/work-downloader/index.js +255 -0
  367. package/work-downloader/index.mjs +595 -0
  368. package/work-downloader/type.d.ts +28 -0
  369. package/work-downloader/utils/download-to-file.d.ts +1 -0
  370. package/work-downloader/utils/image-processing.d.ts +7 -0
  371. package/work-downloader/utils/join-url.d.ts +2 -0
  372. package/work-downloader/utils/log.d.ts +1 -0
  373. package/work-downloader/utils/relative-url.d.ts +1 -0
  374. package/docs/interfaces/index.PBMHDRConfig.html +0 -12
  375. package/five/gaussian-splatting/worker/dataWorker.d.ts +0 -1
  376. package/five/three-version-check.d.ts +0 -1
  377. package/five/utils/hdr-data.d.ts +0 -13
  378. package/five/utils/shaderContentFix.d.ts +0 -7
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 8/31/2026
5
- * Version: 1.0.0-alpha.5
4
+ * Generated: 10/14/2026
5
+ * Version: 1.0.0-alpha.7
6
6
  * Terms:
7
7
  * Realsee SDK License Agreement
8
8
  * Update: July 28, 2021
@@ -252,4 +252,817 @@
252
252
  * No amendment to or modification of this Agreement will be binding unless in
253
253
  * writing and signed by Realsee. You and Realsee hereto confirm that this
254
254
  * Agreement and all related documents shall be drafted in English.
255
- */(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("@realsee/five-webgpu")):typeof define==`function`&&define.amd?define([`exports`,`@realsee/five-webgpu`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.FiveSDK_Plugins={},e.FiveSDK))})(this,function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function n(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}function r(e){return/^https?:\/\/|^\/\//.test(e)||/^data:/.test(e)}function i(e,t){return r(t)?t:`${e}${t}`}var a;(function(e){class n{constructor(e,n){this.hooks=new t.Subscribe,this.staticPrefix=`//vr-image-4.realsee-cdn.cn`,this.five=e,n!=null&&n.staticPrefix&&(this.staticPrefix=n.staticPrefix)}getCurrentState(){return this.state}absoluteUrl(e){return i(this.staticPrefix,e)}}e.Controller=n})(a||(a={}));function o(e){"@babel/helpers - typeof";return o=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},o(e)}function s(e,t){if(o(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(o(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function c(e){var t=s(e,`string`);return o(t)==`symbol`?t:t+``}function l(e,t,n){return(t=c(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?u(Object(n),!0).forEach(function(t){l(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var f=1e3,p=1001,m=1002,h=1006,g=1008,_=1009,v=1023,y=2300,b=2301,x=2302,S=2303,C=2400,w=2401,T=2402,E=`srgb`,D=`srgb-linear`,O=`linear`,k=`srgb`,A=2e3;function ee(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function te(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}var ne={},j=null;function re(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.`}return e}function M(...e){e=re(e);let t=`THREE.`+e.shift();if(j)j(`warn`,t,...e);else{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function N(...e){e=re(e);let t=`THREE.`+e.shift();if(j)j(`error`,t,...e);else{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function ie(...e){let t=e.join(` `);t in ne||(ne[t]=!0,M(...e))}var ae=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n===void 0?!1:n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n<r;n++)t[n].call(this,e);e.target=null}}},P=`00.01.02.03.04.05.06.07.08.09.0a.0b.0c.0d.0e.0f.10.11.12.13.14.15.16.17.18.19.1a.1b.1c.1d.1e.1f.20.21.22.23.24.25.26.27.28.29.2a.2b.2c.2d.2e.2f.30.31.32.33.34.35.36.37.38.39.3a.3b.3c.3d.3e.3f.40.41.42.43.44.45.46.47.48.49.4a.4b.4c.4d.4e.4f.50.51.52.53.54.55.56.57.58.59.5a.5b.5c.5d.5e.5f.60.61.62.63.64.65.66.67.68.69.6a.6b.6c.6d.6e.6f.70.71.72.73.74.75.76.77.78.79.7a.7b.7c.7d.7e.7f.80.81.82.83.84.85.86.87.88.89.8a.8b.8c.8d.8e.8f.90.91.92.93.94.95.96.97.98.99.9a.9b.9c.9d.9e.9f.a0.a1.a2.a3.a4.a5.a6.a7.a8.a9.aa.ab.ac.ad.ae.af.b0.b1.b2.b3.b4.b5.b6.b7.b8.b9.ba.bb.bc.bd.be.bf.c0.c1.c2.c3.c4.c5.c6.c7.c8.c9.ca.cb.cc.cd.ce.cf.d0.d1.d2.d3.d4.d5.d6.d7.d8.d9.da.db.dc.dd.de.df.e0.e1.e2.e3.e4.e5.e6.e7.e8.e9.ea.eb.ec.ed.ee.ef.f0.f1.f2.f3.f4.f5.f6.f7.f8.f9.fa.fb.fc.fd.fe.ff`.split(`.`);Math.PI/180,180/Math.PI;function oe(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,r=Math.random()*4294967295|0;return(P[e&255]+P[e>>8&255]+P[e>>16&255]+P[e>>24&255]+`-`+P[t&255]+P[t>>8&255]+`-`+P[t>>16&15|64]+P[t>>24&255]+`-`+P[n&63|128]+P[n>>8&255]+`-`+P[n>>16&255]+P[n>>24&255]+P[r&255]+P[r>>8&255]+P[r>>16&255]+P[r>>24&255]).toLowerCase()}function F(e,t,n){return Math.max(t,Math.min(n,e))}function se(e,t){return(e%t+t)%t}function ce(e,t,n){return(1-n)*e+n*t}var I=class e{constructor(t=0,n=0){e.prototype.isVector2=!0,this.x=t,this.y=n}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=F(this.x,e.x,t.x),this.y=F(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=F(this.x,e,t),this.y=F(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(F(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(F(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},le=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:M(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(F(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},L=class e{constructor(t=0,n=0,r=0){e.prototype.isVector3=!0,this.x=t,this.y=n,this.z=r}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(de.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(de.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=F(this.x,e.x,t.x),this.y=F(this.y,e.y,t.y),this.z=F(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=F(this.x,e,t),this.y=F(this.y,e,t),this.z=F(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(F(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return ue.copy(this).projectOnVector(e),this.sub(ue)}reflect(e){return this.sub(ue.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(F(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},ue=new L,de=new le,fe=class e{constructor(t,n,r,i,a,o,s,c,l){e.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(pe.makeScale(e,t)),this}rotate(e){return this.premultiply(pe.makeRotation(-e)),this}translate(e,t){return this.premultiply(pe.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}},pe=new fe,me=new fe().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),he=new fe().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function ge(){let e={enabled:!0,workingColorSpace:D,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n?e:(this.spaces[t].transfer===`srgb`&&(e.r=z(e.r),e.g=z(e.g),e.b=z(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=_e(e.r),e.g=_e(e.g),e.b=_e(e.b)),e)},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?O:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return ie(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return ie(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[D]:{primaries:t,whitePoint:r,transfer:O,toXYZ:me,fromXYZ:he,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:E},outputColorSpaceConfig:{drawingBufferColorSpace:E}},[E]:{primaries:t,whitePoint:r,transfer:k,toXYZ:me,fromXYZ:he,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:E}}}),e}var R=ge();function z(e){return e<.04045?e*.0773993808:Math.pow(e*.9478672986+.0521327014,2.4)}function _e(e){return e<.0031308?e*12.92:1.055*Math.pow(e,.41666)-.055}var ve,ye=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{ve===void 0&&(ve=te(`canvas`)),ve.width=e.width,ve.height=e.height;let t=ve.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=ve}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=te(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e<i.length;e++)i[e]=z(i[e]/255)*255;return n.putImageData(r,0,0),t}else if(e.data){let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(z(t[e]/255)*255):t[e]=z(t[e]);return{data:t,width:e.width,height:e.height}}else return M(`ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.`),e}},be=0,xe=class{constructor(e=null){this.isSource=!0,Object.defineProperty(this,"id",{value:be++}),this.uuid=oe(),this.data=e,this.dataReady=!0,this.version=0}getSize(e){let t=this.data;return typeof HTMLVideoElement<`u`&&t instanceof HTMLVideoElement?e.set(t.videoWidth,t.videoHeight,0):typeof VideoFrame<`u`&&t instanceof VideoFrame?e.set(t.displayHeight,t.displayWidth,0):t===null?e.set(0,0,0):e.set(t.width,t.height,t.depth||0),e}set needsUpdate(e){e===!0&&this.version++}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:``},r=this.data;if(r!==null){let e;if(Array.isArray(r)){e=[];for(let t=0,n=r.length;t<n;t++)r[t].isDataTexture?e.push(Se(r[t].image)):e.push(Se(r[t]))}else e=Se(r);n.url=e}return t||(e.images[this.uuid]=n),n}};function Se(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap?ye.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(M(`Texture: Unable to serialize Texture.`),{})}var Ce=0,we=new L,Te=class e extends ae{constructor(t=e.DEFAULT_IMAGE,n=e.DEFAULT_MAPPING,r=p,i=p,a=h,o=g,s=v,c=_,l=e.DEFAULT_ANISOTROPY,u=``){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Ce++}),this.uuid=oe(),this.name=``,this.source=new xe(t),this.mipmaps=[],this.mapping=n,this.channel=0,this.wrapS=r,this.wrapT=i,this.magFilter=a,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=c,this.offset=new I(0,0),this.repeat=new I(1,1),this.center=new I(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new fe,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(we).x}get height(){return this.source.getSize(we).y}get depth(){return this.source.getSize(we).z}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){M(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){M(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case f:e.x-=Math.floor(e.x);break;case p:e.x=e.x<0?0:1;break;case m:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case f:e.y-=Math.floor(e.y);break;case p:e.y=e.y<0?0:1;break;case m:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Te.DEFAULT_IMAGE=null,Te.DEFAULT_MAPPING=300,Te.DEFAULT_ANISOTROPY=1;var Ee=class e{constructor(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g){e.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return this.determinant()===0?(e.set(1,0,0),t.set(0,1,0),n.set(0,0,1),this):(e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){if(e.determinant()===0)return this.identity();let t=this.elements,n=e.elements,r=1/De.setFromMatrixColumn(e,0).length(),i=1/De.setFromMatrixColumn(e,1).length(),a=1/De.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(Oe,e,ke)}lookAt(e,t,n){let r=this.elements;return H.subVectors(e,t),H.lengthSq()===0&&(H.z=1),H.normalize(),V.crossVectors(n,H),V.lengthSq()===0&&(Math.abs(n.z)===1?H.x+=1e-4:H.z+=1e-4,H.normalize(),V.crossVectors(n,H)),V.normalize(),Ae.crossVectors(H,V),r[0]=V.x,r[4]=Ae.x,r[8]=H.x,r[1]=V.y,r[5]=Ae.y,r[9]=H.y,r[2]=V.z,r[6]=Ae.z,r[10]=H.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],w=r[12],T=r[1],E=r[5],D=r[9],O=r[13],k=r[2],A=r[6],ee=r[10],te=r[14],ne=r[3],j=r[7],re=r[11],M=r[15];return i[0]=a*x+o*T+s*k+c*ne,i[4]=a*S+o*E+s*A+c*j,i[8]=a*C+o*D+s*ee+c*re,i[12]=a*w+o*O+s*te+c*M,i[1]=l*x+u*T+d*k+f*ne,i[5]=l*S+u*E+d*A+f*j,i[9]=l*C+u*D+d*ee+f*re,i[13]=l*w+u*O+d*te+f*M,i[2]=p*x+m*T+h*k+g*ne,i[6]=p*S+m*E+h*A+g*j,i[10]=p*C+m*D+h*ee+g*re,i[14]=p*w+m*O+h*te+g*M,i[3]=_*x+v*T+y*k+b*ne,i[7]=_*S+v*E+y*A+b*j,i[11]=_*C+v*D+y*ee+b*re,i[15]=_*w+v*O+y*te+b*M,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15],_=s*f-c*d,v=o*f-c*u,y=o*d-s*u,b=a*f-c*l,x=a*d-s*l,S=a*u-o*l;return t*(m*_-h*v+g*y)-n*(p*_-h*b+g*x)+r*(p*v-m*b+g*S)-i*(p*y-m*x+h*S)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=t*o-n*a,v=t*s-r*a,y=t*c-i*a,b=n*s-r*o,x=n*c-i*o,S=r*c-i*s,C=l*m-u*p,w=l*h-d*p,T=l*g-f*p,E=u*h-d*m,D=u*g-f*m,O=d*g-f*h,k=_*O-v*D+y*E+b*T-x*w+S*C;if(k===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let A=1/k;return e[0]=(o*O-s*D+c*E)*A,e[1]=(r*D-n*O-i*E)*A,e[2]=(m*S-h*x+g*b)*A,e[3]=(d*x-u*S-f*b)*A,e[4]=(s*T-a*O-c*w)*A,e[5]=(t*O-r*T+i*w)*A,e[6]=(h*y-p*S-g*v)*A,e[7]=(l*S-d*y+f*v)*A,e[8]=(a*D-o*T+c*C)*A,e[9]=(n*T-t*D-i*C)*A,e[10]=(p*x-m*y+g*_)*A,e[11]=(u*y-l*x-f*_)*A,e[12]=(o*w-a*E-s*C)*A,e[13]=(t*E-n*w+r*C)*A,e[14]=(m*v-p*b-h*_)*A,e[15]=(l*b-u*v+d*_)*A,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements;e.x=r[12],e.y=r[13],e.z=r[14];let i=this.determinant();if(i===0)return n.set(1,1,1),t.identity(),this;let a=De.set(r[0],r[1],r[2]).length(),o=De.set(r[4],r[5],r[6]).length(),s=De.set(r[8],r[9],r[10]).length();i<0&&(a=-a),B.copy(this);let c=1/a,l=1/o,u=1/s;return B.elements[0]*=c,B.elements[1]*=c,B.elements[2]*=c,B.elements[4]*=l,B.elements[5]*=l,B.elements[6]*=l,B.elements[8]*=u,B.elements[9]*=u,B.elements[10]*=u,t.setFromRotationMatrix(B),n.x=a,n.y=o,n.z=s,this}makePerspective(e,t,n,r,i,a,o=A,s=!1){let c=this.elements,l=2*i/(t-e),u=2*i/(n-r),d=(t+e)/(t-e),f=(n+r)/(n-r),p,m;if(s)p=i/(a-i),m=a*i/(a-i);else if(o===2e3)p=-(a+i)/(a-i),m=-2*a*i/(a-i);else if(o===2001)p=-a/(a-i),m=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=d,c[12]=0,c[1]=0,c[5]=u,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=A,s=!1){let c=this.elements,l=2/(t-e),u=2/(n-r),d=-(t+e)/(t-e),f=-(n+r)/(n-r),p,m;if(s)p=1/(a-i),m=a/(a-i);else if(o===2e3)p=-2/(a-i),m=-(a+i)/(a-i);else if(o===2001)p=-1/(a-i),m=-i/(a-i);else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=0,c[12]=d,c[1]=0,c[5]=u,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}},De=new L,B=new Ee,Oe=new L(0,0,0),ke=new L(1,1,1),V=new L,Ae=new L,H=new L,je=new Ee,Me=new le,Ne=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(F(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-F(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(F(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-F(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(F(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-F(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:M(`Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return je.makeRotationFromQuaternion(e),this.setFromRotationMatrix(je,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Me.setFromEuler(this),this.setFromQuaternion(Me,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Ne.DEFAULT_ORDER=`XYZ`;var Pe=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return(this.mask&(1<<e|0))!=0}},Fe=0,Ie=new L,Le=new le,U=new Ee,Re=new L,ze=new L,Be=new L,Ve=new le,He=new L(1,0,0),Ue=new L(0,1,0),We=new L(0,0,1),Ge={type:`added`},Ke={type:`removed`},qe={type:`childadded`,child:null},Je={type:`childremoved`,child:null},Ye=class e extends ae{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Fe++}),this.uuid=oe(),this.name=``,this.type=`Object3D`,this.parent=null,this.children=[],this.up=e.DEFAULT_UP.clone();let t=new L,n=new Ne,r=new le,i=new L(1,1,1);function a(){r.setFromEuler(n,!1)}function o(){n.setFromQuaternion(r,void 0,!1)}n._onChange(a),r._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:n},quaternion:{configurable:!0,enumerable:!0,value:r},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Ee},normalMatrix:{value:new fe}}),this.matrix=new Ee,this.matrixWorld=new Ee,this.matrixAutoUpdate=e.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=e.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new Pe,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return Le.setFromAxisAngle(e,t),this.quaternion.multiply(Le),this}rotateOnWorldAxis(e,t){return Le.setFromAxisAngle(e,t),this.quaternion.premultiply(Le),this}rotateX(e){return this.rotateOnAxis(He,e)}rotateY(e){return this.rotateOnAxis(Ue,e)}rotateZ(e){return this.rotateOnAxis(We,e)}translateOnAxis(e,t){return Ie.copy(e).applyQuaternion(this.quaternion),this.position.add(Ie.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(He,e)}translateY(e){return this.translateOnAxis(Ue,e)}translateZ(e){return this.translateOnAxis(We,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(U.copy(this.matrixWorld).invert())}lookAt(e,t,n){e.isVector3?Re.copy(e):Re.set(e,t,n);let r=this.parent;this.updateWorldMatrix(!0,!1),ze.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?U.lookAt(ze,Re,this.up):U.lookAt(Re,ze,this.up),this.quaternion.setFromRotationMatrix(U),r&&(U.extractRotation(r.matrixWorld),Le.setFromRotationMatrix(U),this.quaternion.premultiply(Le.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?(N(`Object3D.add: object can't be added as a child of itself.`,e),this):(e&&e.isObject3D?(e.removeFromParent(),e.parent=this,this.children.push(e),e.dispatchEvent(Ge),qe.child=e,this.dispatchEvent(qe),qe.child=null):N(`Object3D.add: object not an instance of THREE.Object3D.`,e),this)}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return t!==-1&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(Ke),Je.child=e,this.dispatchEvent(Je),Je.child=null),this}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}clear(){return this.remove(...this.children)}attach(e){return this.updateWorldMatrix(!0,!1),U.copy(this.matrixWorld).invert(),e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),U.multiply(e.parent.matrixWorld)),e.applyMatrix4(U),e.removeFromParent(),e.parent=this,this.children.push(e),e.updateWorldMatrix(!1,!0),e.dispatchEvent(Ge),qe.child=e,this.dispatchEvent(qe),qe.child=null,this}getObjectById(e){return this.getObjectByProperty(`id`,e)}getObjectByName(e){return this.getObjectByProperty(`name`,e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,r=this.children.length;n<r;n++){let r=this.children[n].getObjectByProperty(e,t);if(r!==void 0)return r}}getObjectsByProperty(e,t,n=[]){this[e]===t&&n.push(this);let r=this.children;for(let i=0,a=r.length;i<a;i++)r[i].getObjectsByProperty(e,t,n);return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(ze,e,Be),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(ze,Ve,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;t!==null&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let e=this.pivot;if(e!==null){let t=e.x,n=e.y,r=e.z,i=this.matrix.elements;i[12]+=t-i[0]*t-i[4]*n-i[8]*r,i[13]+=n-i[1]*t-i[5]*n-i[9]*r,i[14]+=r-i[2]*t-i[6]*n-i[10]*r}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].updateMatrixWorld(e)}updateWorldMatrix(e,t){let n=this.parent;if(e===!0&&n!==null&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),t===!0){let e=this.children;for(let t=0,n=e.length;t<n;t++)e[t].updateWorldMatrix(!1,!0)}}toJSON(e){let t=e===void 0||typeof e==`string`,n={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:`Object`,generator:`Object3D.toJSON`});let r={};r.uuid=this.uuid,r.type=this.type,this.name!==``&&(r.name=this.name),this.castShadow===!0&&(r.castShadow=!0),this.receiveShadow===!0&&(r.receiveShadow=!0),this.visible===!1&&(r.visible=!1),this.frustumCulled===!1&&(r.frustumCulled=!1),this.renderOrder!==0&&(r.renderOrder=this.renderOrder),this.static!==!1&&(r.static=this.static),Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>d(d({},e),{},{boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>d({},e)),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t<r;t++){let r=n[t];i(e.shapes,r)}else i(e.shapes,n)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(i(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let t=[];for(let n=0,r=this.material.length;n<r;n++)t.push(i(e.materials,this.material[n]));r.material=t}else r.material=i(e.materials,this.material);if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let n=this.animations[t];r.animations.push(i(e.animations,n))}}if(t){let t=a(e.geometries),r=a(e.materials),i=a(e.textures),o=a(e.images),s=a(e.shapes),c=a(e.skeletons),l=a(e.animations),u=a(e.nodes);t.length>0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),e.pivot!==null&&(this.pivot=e.pivot.clone()),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t<e.children.length;t++){let n=e.children[t];this.add(n.clone())}return this}};Ye.DEFAULT_UP=new L(0,1,0),Ye.DEFAULT_MATRIX_AUTO_UPDATE=!0,Ye.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var Xe={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},W={h:0,s:0,l:0},Ze={h:0,s:0,l:0};function Qe(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var $e=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=E){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,R.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=R.workingColorSpace){return this.r=e,this.g=t,this.b=n,R.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=R.workingColorSpace){if(e=se(e,1),t=F(t,0,1),n=F(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=Qe(i,r,e+1/3),this.g=Qe(i,r,e),this.b=Qe(i,r,e-1/3)}return R.colorSpaceToWorking(this,r),this}setStyle(e,t=E){function n(t){t!==void 0&&parseFloat(t)<1&&M(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:M(`Color: Unknown color model `+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);M(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=E){let n=Xe[e.toLowerCase()];return n===void 0?M(`Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=z(e.r),this.g=z(e.g),this.b=z(e.b),this}copyLinearToSRGB(e){return this.r=_e(e.r),this.g=_e(e.g),this.b=_e(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=E){return R.workingToColorSpace(G.copy(this),e),Math.round(F(G.r*255,0,255))*65536+Math.round(F(G.g*255,0,255))*256+Math.round(F(G.b*255,0,255))}getHexString(e=E){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=R.workingColorSpace){R.workingToColorSpace(G.copy(this),t);let n=G.r,r=G.g,i=G.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r<i?6:0);break;case r:s=(i-n)/e+2;break;case i:s=(n-r)/e+4;break}s/=6}return e.h=s,e.s=c,e.l=l,e}getRGB(e,t=R.workingColorSpace){return R.workingToColorSpace(G.copy(this),t),e.r=G.r,e.g=G.g,e.b=G.b,e}getStyle(e=E){R.workingToColorSpace(G.copy(this),e);let t=G.r,n=G.g,r=G.b;return e===`srgb`?`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(r*255)})`:`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${r.toFixed(3)})`}offsetHSL(e,t,n){return this.getHSL(W),this.setHSL(W.h+e,W.s+t,W.l+n)}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(W),e.getHSL(Ze);let n=ce(W.h,Ze.h,t),r=ce(W.s,Ze.s,t),i=ce(W.l,Ze.l,t);return this.setHSL(n,r,i),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,r=this.b,i=e.elements;return this.r=i[0]*t+i[3]*n+i[6]*r,this.g=i[1]*t+i[4]*n+i[7]*r,this.b=i[2]*t+i[5]*n+i[8]*r,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}},G=new $e;$e.NAMES=Xe;var et=class{constructor(e=new L(1/0,1/0,1/0),t=new L(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(q.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(q.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=q.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let n=e.geometry;if(n!==void 0){let r=n.getAttribute(`position`);if(t===!0&&r!==void 0&&e.isInstancedMesh!==!0)for(let t=0,n=r.count;t<n;t++)e.isMesh===!0?e.getVertexPosition(t,q):q.fromBufferAttribute(r,t),q.applyMatrix4(e.matrixWorld),this.expandByPoint(q);else e.boundingBox===void 0?(n.boundingBox===null&&n.computeBoundingBox(),tt.copy(n.boundingBox)):(e.boundingBox===null&&e.computeBoundingBox(),tt.copy(e.boundingBox)),tt.applyMatrix4(e.matrixWorld),this.union(tt)}let r=e.children;for(let e=0,n=r.length;e<n;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return e.x>=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,q),q.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(ot),st.subVectors(this.max,ot),nt.subVectors(e.a,ot),rt.subVectors(e.b,ot),it.subVectors(e.c,ot),J.subVectors(rt,nt),Y.subVectors(it,rt),at.subVectors(nt,it);let t=[0,-J.z,J.y,0,-Y.z,Y.y,0,-at.z,at.y,J.z,0,-J.x,Y.z,0,-Y.x,at.z,0,-at.x,-J.y,J.x,0,-Y.y,Y.x,0,-at.y,at.x,0];return!ut(t,nt,rt,it,st)||(t=[1,0,0,0,1,0,0,0,1],!ut(t,nt,rt,it,st))?!1:(ct.crossVectors(J,Y),t=[ct.x,ct.y,ct.z],ut(t,nt,rt,it,st))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,q).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(q).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(K[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),K[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),K[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),K[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),K[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),K[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),K[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),K[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(K),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}},K=[new L,new L,new L,new L,new L,new L,new L,new L],q=new L,tt=new et,nt=new L,rt=new L,it=new L,J=new L,Y=new L,at=new L,ot=new L,st=new L,ct=new L,lt=new L;function ut(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){lt.fromArray(e,a);let o=i.x*Math.abs(lt.x)+i.y*Math.abs(lt.y)+i.z*Math.abs(lt.z),s=t.dot(lt),c=n.dot(lt),l=r.dot(lt);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}var X=new L,dt=new L,ft=new L,Z=new L,pt=new L,mt=new L,ht=new L,gt=class{constructor(e=new L,t=new L(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,X)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=X.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(X.copy(this.origin).addScaledVector(this.direction,t),X.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){dt.copy(e).add(t).multiplyScalar(.5),ft.copy(t).sub(e).normalize(),Z.copy(this.origin).sub(dt);let i=e.distanceTo(t)*.5,a=-this.direction.dot(ft),o=Z.dot(this.direction),s=-Z.dot(ft),c=Z.lengthSq(),l=Math.abs(1-a*a),u,d,f,p;if(l>0)if(u=a*s-o,d=a*o-s,p=i*l,u>=0)if(d>=-p)if(d<=p){let e=1/l;u*=e,d*=e,f=u*(u+a*d+2*o)+d*(a*u+d+2*s)+c}else d=i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d=-i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d<=-p?(u=Math.max(0,-(-a*i+o)),d=u>0?-i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c):d<=p?(u=0,d=Math.min(Math.max(-i,-s),i),f=d*(d+2*s)+c):(u=Math.max(0,-(a*i+o)),d=u>0?i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c);else d=a>0?-i:i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),r&&r.copy(dt).addScaledVector(ft,d),f}intersectSphere(e,t){X.subVectors(e.center,this.origin);let n=X.dot(this.direction),r=X.dot(X)-n*n,i=e.radius*e.radius;if(r>i)return null;let a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(n=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),l>=0?(i=(e.min.y-d.y)*l,a=(e.max.y-d.y)*l):(i=(e.max.y-d.y)*l,a=(e.min.y-d.y)*l),n>a||i>r||((i>n||isNaN(n))&&(n=i),(a<r||isNaN(r))&&(r=a),u>=0?(o=(e.min.z-d.z)*u,s=(e.max.z-d.z)*u):(o=(e.max.z-d.z)*u,s=(e.min.z-d.z)*u),n>s||o>r)||((o>n||n!==n)&&(n=o),(s<r||r!==r)&&(r=s),r<0)?null:this.at(n>=0?n:r,t)}intersectsBox(e){return this.intersectBox(e,X)!==null}intersectTriangle(e,t,n,r,i){pt.subVectors(t,e),mt.subVectors(n,e),ht.crossVectors(pt,mt);let a=this.direction.dot(ht),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;Z.subVectors(this.origin,e);let s=o*this.direction.dot(mt.crossVectors(Z,mt));if(s<0)return null;let c=o*this.direction.dot(pt.cross(Z));if(c<0||s+c>a)return null;let l=-o*Z.dot(ht);return l<0?null:this.at(l/a,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},_t=class{constructor(){this.type=`Curve`,this.arcLengthDivisions=200,this.needsUpdate=!1,this.cacheArcLengths=null}getPoint(){M(`Curve: .getPoint() not implemented.`)}getPointAt(e,t){let n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],n,r=this.getPoint(0),i=0;t.push(0);for(let a=1;a<=e;a++)n=this.getPoint(a/e),i+=n.distanceTo(r),t.push(i),r=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t=null){let n=this.getLengths(),r=0,i=n.length,a;a=t||e*n[i-1];let o=0,s=i-1,c;for(;o<=s;)if(r=Math.floor(o+(s-o)/2),c=n[r]-a,c<0)o=r+1;else if(c>0)s=r-1;else{s=r;break}if(r=s,n[r]===a)return r/(i-1);let l=n[r],u=n[r+1]-l,d=(a-l)/u;return(r+d)/(i-1)}getTangent(e,t){let n=1e-4,r=e-n,i=e+n;r<0&&(r=0),i>1&&(i=1);let a=this.getPoint(r),o=this.getPoint(i),s=t||(a.isVector2?new I:new L);return s.copy(o).sub(a).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t=!1){let n=new L,r=[],i=[],a=[],o=new L,s=new Ee;for(let t=0;t<=e;t++){let n=t/e;r[t]=this.getTangentAt(n,new L)}i[0]=new L,a[0]=new L;let c=Number.MAX_VALUE,l=Math.abs(r[0].x),u=Math.abs(r[0].y),d=Math.abs(r[0].z);l<=c&&(c=l,n.set(1,0,0)),u<=c&&(c=u,n.set(0,1,0)),d<=c&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(let t=1;t<=e;t++){if(i[t]=i[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>Number.EPSILON){o.normalize();let e=Math.acos(F(r[t-1].dot(r[t]),-1,1));i[t].applyMatrix4(s.makeRotationAxis(o,e))}a[t].crossVectors(r[t],i[t])}if(t===!0){let t=Math.acos(F(i[0].dot(i[e]),-1,1));t/=e,r[0].dot(o.crossVectors(i[0],i[e]))>0&&(t=-t);for(let n=1;n<=e;n++)i[n].applyMatrix4(s.makeRotationAxis(r[n],t*n)),a[n].crossVectors(r[n],i[n])}return{tangents:r,normals:i,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.7,type:`Curve`,generator:`Curve.toJSON`}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}};function vt(){let e=0,t=0,n=0,r=0;function i(i,a,o,s){e=i,t=o,n=-3*i+3*a-2*o-s,r=2*i-2*a+o+s}return{initCatmullRom:function(e,t,n,r,a){i(t,n,a*(n-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,n,r,a,o,s){let c=(t-e)/a-(n-e)/(a+o)+(n-t)/o,l=(n-t)/o-(r-t)/(o+s)+(r-n)/s;c*=o,l*=o,i(t,n,c,l)},calc:function(i){let a=i*i,o=a*i;return e+t*i+n*a+r*o}}}var yt=new L,bt=new vt,xt=new vt,St=new vt,Ct=class extends _t{constructor(e=[],t=!1,n=`centripetal`,r=.5){super(),this.isCatmullRomCurve3=!0,this.type=`CatmullRomCurve3`,this.points=e,this.closed=t,this.curveType=n,this.tension=r}getPoint(e,t=new L){let n=t,r=this.points,i=r.length,a=(i-+!this.closed)*e,o=Math.floor(a),s=a-o;this.closed?o+=o>0?0:(Math.floor(Math.abs(o)/i)+1)*i:s===0&&o===i-1&&(o=i-2,s=1);let c,l;this.closed||o>0?c=r[(o-1)%i]:(yt.subVectors(r[0],r[1]).add(r[0]),c=yt);let u=r[o%i],d=r[(o+1)%i];if(this.closed||o+2<i?l=r[(o+2)%i]:(yt.subVectors(r[i-1],r[i-2]).add(r[i-1]),l=yt),this.curveType===`centripetal`||this.curveType===`chordal`){let e=this.curveType===`chordal`?.5:.25,t=Math.pow(c.distanceToSquared(u),e),n=Math.pow(u.distanceToSquared(d),e),r=Math.pow(d.distanceToSquared(l),e);n<1e-4&&(n=1),t<1e-4&&(t=n),r<1e-4&&(r=n),bt.initNonuniformCatmullRom(c.x,u.x,d.x,l.x,t,n,r),xt.initNonuniformCatmullRom(c.y,u.y,d.y,l.y,t,n,r),St.initNonuniformCatmullRom(c.z,u.z,d.z,l.z,t,n,r)}else this.curveType===`catmullrom`&&(bt.initCatmullRom(c.x,u.x,d.x,l.x,this.tension),xt.initCatmullRom(c.y,u.y,d.y,l.y,this.tension),St.initCatmullRom(c.z,u.z,d.z,l.z,this.tension));return n.set(bt.calc(s),xt.calc(s),St.calc(s)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(n.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,n=this.points.length;t<n;t++){let n=this.points[t];e.points.push(n.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(new L().fromArray(n))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}};function wt(e,t){return!e||e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}var Tt=class{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r===void 0?new t.constructor(n):r,this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,r=t[n],i=t[n-1];validate_interval:{seek:{let a;linear_scan:{forward_scan:if(!(e<r)){for(let a=n+2;;){if(r===void 0){if(e<i)break forward_scan;return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===a)break;if(i=r,r=t[++n],e<r)break seek}a=t.length;break linear_scan}if(!(e>=i)){let o=t[1];e<o&&(n=2,i=o);for(let a=n-2;;){if(i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(r=i,i=t[--n-1],e>=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n<a;){let r=n+a>>>1;e<t[r]?a=r:n=r+1}if(r=t[n],i=t[n-1],i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(r===void 0)return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,i,r)}return this.interpolate_(n,i,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,i=e*r;for(let e=0;e!==r;++e)t[e]=n[i+e];return t}interpolate_(){throw Error(`call to abstract method`)}intervalChanged_(){}},Et=class extends Tt{constructor(e,t,n,r){super(e,t,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:C,endingEnd:C}}intervalChanged_(e,t,n){let r=this.parameterPositions,i=e-2,a=e+1,o=r[i],s=r[a];if(o===void 0)switch(this.getSettings_().endingStart){case w:i=e,o=2*t-n;break;case T:i=r.length-2,o=t+r[i]-r[i+1];break;default:i=e,o=n}if(s===void 0)switch(this.getSettings_().endingEnd){case w:a=e,s=2*n-t;break;case T:a=1,s=n+r[1]-r[0];break;default:a=e-1,s=t}let c=(n-t)*.5,l=this.valueSize;this._weightPrev=c/(t-o),this._weightNext=c/(s-n),this._offsetPrev=i*l,this._offsetNext=a*l}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this._offsetPrev,u=this._offsetNext,d=this._weightPrev,f=this._weightNext,p=(n-t)/(r-t),m=p*p,h=m*p,g=-d*h+2*d*m-d*p,_=(1+d)*h+(-1.5-2*d)*m+(-.5+d)*p+1,v=(-1-f)*h+(1.5+f)*m+.5*p,y=f*h-f*m;for(let e=0;e!==o;++e)i[e]=g*a[l+e]+_*a[c+e]+v*a[s+e]+y*a[u+e];return i}},Dt=class extends Tt{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=(n-t)/(r-t),u=1-l;for(let e=0;e!==o;++e)i[e]=a[c+e]*u+a[s+e]*l;return i}},Ot=class extends Tt{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e){return this.copySampleValue_(e-1)}},kt=class extends Tt{interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this.settings||this.DefaultSettings_,u=l.inTangents,d=l.outTangents;if(!u||!d){let e=(n-t)/(r-t),l=1-e;for(let t=0;t!==o;++t)i[t]=a[c+t]*l+a[s+t]*e;return i}let f=o*2,p=e-1;for(let l=0;l!==o;++l){let o=a[c+l],m=a[s+l],h=p*f+l*2,g=d[h],_=d[h+1],v=e*f+l*2,y=u[v],b=u[v+1],x=(n-t)/(r-t),S,C,w,T,E;for(let e=0;e<8;e++){S=x*x,C=S*x,w=1-x,T=w*w,E=T*w;let e=E*t+3*T*x*g+3*w*S*y+C*r-n;if(Math.abs(e)<1e-10)break;let i=3*T*(g-t)+6*w*x*(y-g)+3*S*(r-y);if(Math.abs(i)<1e-10)break;x-=e/i,x=Math.max(0,Math.min(1,x))}i[l]=E*o+3*T*x*_+3*w*S*b+C*m}return i}},Q=class{constructor(e,t,n,r){if(e===void 0)throw Error(`THREE.KeyframeTrack: track name is undefined`);if(t===void 0||t.length===0)throw Error(`THREE.KeyframeTrack: no keyframes in track named `+e);this.name=e,this.times=wt(t,this.TimeBufferType),this.values=wt(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,n;if(t.toJSON!==this.toJSON)n=t.toJSON(e);else{n={name:e.name,times:wt(e.times,Array),values:wt(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(n.interpolation=t)}return n.type=e.ValueTypeName,n}InterpolantFactoryMethodDiscrete(e){return new Ot(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new Dt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new Et(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodBezier(e){let t=new kt(this.times,this.values,this.getValueSize(),e);return this.settings&&(t.settings=this.settings),t}setInterpolation(e){let t;switch(e){case y:t=this.InterpolantFactoryMethodDiscrete;break;case b:t=this.InterpolantFactoryMethodLinear;break;case x:t=this.InterpolantFactoryMethodSmooth;break;case S:t=this.InterpolantFactoryMethodBezier;break}if(t===void 0){let t=`unsupported interpolation for `+this.ValueTypeName+` keyframe track named `+this.name;if(this.createInterpolant===void 0)if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t);return M(`KeyframeTrack:`,t),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return y;case this.InterpolantFactoryMethodLinear:return b;case this.InterpolantFactoryMethodSmooth:return x;case this.InterpolantFactoryMethodBezier:return S}}getValueSize(){return this.values.length/this.times.length}shift(e){if(e!==0){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]+=e}return this}scale(e){if(e!==1){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]*=e}return this}trim(e,t){let n=this.times,r=n.length,i=0,a=r-1;for(;i!==r&&n[i]<e;)++i;for(;a!==-1&&n[a]>t;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(N(`KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(N(`KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){N(`KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){N(`KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&ee(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){N(`KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===x,i=e.length-1,a=1;for(let o=1;o<i;++o){let i=!1,s=e[o];if(s!==e[o+1]&&(o!==1||s!==e[0]))if(r)i=!0;else{let e=o*n,r=e-n,a=e+n;for(let o=0;o!==n;++o){let n=t[e+o];if(n!==t[r+o]||n!==t[a+o]){i=!0;break}}}if(i){if(o!==a){e[a]=e[o];let r=o*n,i=a*n;for(let e=0;e!==n;++e)t[i+e]=t[r+e]}++a}}if(i>0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};Q.prototype.ValueTypeName=``,Q.prototype.TimeBufferType=Float32Array,Q.prototype.ValueBufferType=Float32Array,Q.prototype.DefaultInterpolation=b;var At=class extends Q{constructor(e,t,n){super(e,t,n)}};At.prototype.ValueTypeName=`bool`,At.prototype.ValueBufferType=Array,At.prototype.DefaultInterpolation=y,At.prototype.InterpolantFactoryMethodLinear=void 0,At.prototype.InterpolantFactoryMethodSmooth=void 0;var jt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};jt.prototype.ValueTypeName=`color`;var Mt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};Mt.prototype.ValueTypeName=`number`;var Nt=class extends Tt{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)le.slerpFlat(i,0,a,c-o,a,c,s);return i}},Pt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}InterpolantFactoryMethodLinear(e){return new Nt(this.times,this.values,this.getValueSize(),e)}};Pt.prototype.ValueTypeName=`quaternion`,Pt.prototype.InterpolantFactoryMethodSmooth=void 0;var Ft=class extends Q{constructor(e,t,n){super(e,t,n)}};Ft.prototype.ValueTypeName=`string`,Ft.prototype.ValueBufferType=Array,Ft.prototype.DefaultInterpolation=y,Ft.prototype.InterpolantFactoryMethodLinear=void 0,Ft.prototype.InterpolantFactoryMethodSmooth=void 0;var It=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};It.prototype.ValueTypeName=`vector`;var Lt=new class{constructor(e,t,n){let r=this,i=!1,a=0,o=0,s,c=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=n,this._abortController=null,this.itemStart=function(e){o++,i===!1&&r.onStart!==void 0&&r.onStart(e,a,o),i=!0},this.itemEnd=function(e){a++,r.onProgress!==void 0&&r.onProgress(e,a,o),a===o&&(i=!1,r.onLoad!==void 0&&r.onLoad())},this.itemError=function(e){r.onError!==void 0&&r.onError(e)},this.resolveURL=function(e){return s?s(e):e},this.setURLModifier=function(e){return s=e,this},this.addHandler=function(e,t){return c.push(e,t),this},this.removeHandler=function(e){let t=c.indexOf(e);return t!==-1&&c.splice(t,2),this},this.getHandler=function(e){for(let t=0,n=c.length;t<n;t+=2){let n=c[t],r=c[t+1];if(n.global&&(n.lastIndex=0),n.test(e))return r}return null},this.abort=function(){return this.abortController.abort(),this._abortController=null,this}}get abortController(){return this._abortController||(this._abortController=new AbortController),this._abortController}},Rt=class{constructor(e){this.manager=e===void 0?Lt:e,this.crossOrigin=`anonymous`,this.withCredentials=!1,this.path=``,this.resourcePath=``,this.requestHeader={},typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}load(){}loadAsync(e,t){let n=this;return new Promise(function(r,i){n.load(e,r,t,i)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}abort(){return this}};Rt.DEFAULT_MATERIAL_NAME=`__DEFAULT`;var zt=`\\[\\]\\.:\\/`,Bt=RegExp(`[\\[\\]\\.:\\/]`,`g`),Vt=`[^\\[\\]\\.:\\/]`,Ht=`[^`+zt.replace(`\\.`,``)+`]`,Ut=`((?:WC+[\\/:])*)`.replace(`WC`,Vt),Wt=`(WCOD+)?`.replace(`WCOD`,Ht),Gt=`(?:\\.(WC+)(?:\\[(.+)\\])?)?`.replace(`WC`,Vt),Kt=`\\.(WC+)(?:\\[(.+)\\])?`.replace(`WC`,Vt),qt=RegExp(`^`+Ut+Wt+Gt+Kt+`$`),Jt=[`material`,`materials`,`bones`,`map`],Yt=class{constructor(e,t,n){let r=n||$.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},$=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\s/g,`_`).replace(Bt,``)}static parseTrackName(e){let t=qt.exec(e);if(t===null)throw Error(`PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);Jt.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e){for(let r=0;r<e.length;r++){let i=e[r];if(i.name===t||i.uuid===t)return i;let a=n(i.children);if(a)return a}return null},r=n(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)e[t++]=n[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let t=this.node,n=this.parsedPath,r=n.objectName,i=n.propertyName,a=n.propertyIndex;if(t||(t=e.findNode(this.rootNode,n.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){M(`PropertyBinding: No target node found for track: `+this.path+`.`);return}if(r){let e=n.objectIndex;switch(r){case`materials`:if(!t.material){N(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.materials){N(`PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.`,this);return}t=t.material.materials;break;case`bones`:if(!t.skeleton){N(`PropertyBinding: Can not bind to bones as node does not have a skeleton.`,this);return}t=t.skeleton.bones;for(let n=0;n<t.length;n++)if(t[n].name===e){e=n;break}break;case`map`:if(`map`in t){t=t.map;break}if(!t.material){N(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.map){N(`PropertyBinding: Can not bind to material.map as node.material does not have a map.`,this);return}t=t.material.map;break;default:if(t[r]===void 0){N(`PropertyBinding: Can not bind to objectName of node undefined.`,this);return}t=t[r]}if(e!==void 0){if(t[e]===void 0){N(`PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.`,this,t);return}t=t[e]}}let o=t[i];if(o===void 0){let e=n.nodeName;N(`PropertyBinding: Trying to update property for track: `+e+`.`+i+` but it wasn't found.`,t);return}let s=this.Versioning.None;this.targetObject=t,t.isMaterial===!0?s=this.Versioning.NeedsUpdate:t.isObject3D===!0&&(s=this.Versioning.MatrixWorldNeedsUpdate);let c=this.BindingType.Direct;if(a!==void 0){if(i===`morphTargetInfluences`){if(!t.geometry){N(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.`,this);return}if(!t.geometry.morphAttributes){N(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.`,this);return}t.morphTargetDictionary[a]!==void 0&&(a=t.morphTargetDictionary[a])}c=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=a}else o.fromArray!==void 0&&o.toArray!==void 0?(c=this.BindingType.HasFromToArray,this.resolvedProperty=o):Array.isArray(o)?(c=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=i;this.getValue=this.GetterByBindingType[c],this.setValue=this.SetterByBindingTypeAndVersioning[c][s]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};$.Composite=Yt,$.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},$.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},$.prototype.GetterByBindingType=[$.prototype._getValue_direct,$.prototype._getValue_array,$.prototype._getValue_arrayElement,$.prototype._getValue_toArray],$.prototype.SetterByBindingTypeAndVersioning=[[$.prototype._setValue_direct,$.prototype._setValue_direct_setNeedsUpdate,$.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[$.prototype._setValue_array,$.prototype._setValue_array_setNeedsUpdate,$.prototype._setValue_array_setMatrixWorldNeedsUpdate],[$.prototype._setValue_arrayElement,$.prototype._setValue_arrayElement_setNeedsUpdate,$.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[$.prototype._setValue_fromArray,$.prototype._setValue_fromArray_setNeedsUpdate,$.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]],typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`register`,{detail:{revision:`183`}})),typeof window<`u`&&(window.__THREE__?M(`WARNING: Multiple instances of Three.js being imported.`):window.__THREE__=`183`);var Xt=class{constructor(e,t,n,r,i){this.R=e,this.Q=t,this.A=n,this.B=r,this.C=i,this.cov=NaN,this.x=NaN}filter(e,t=0){if(isNaN(this.x))this.x=1/this.C*e,this.cov=1/this.C*this.Q*(1/this.C);else{let n=this.A*this.x+this.B*t,r=this.A*this.cov*this.A+this.R,i=r*this.C*(1/(this.C*r*this.C+this.Q));this.x=n+i*(e-this.C*n),this.cov=r-i*this.C*r}return this.x}},Zt=class extends a.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){var n,r,i;super(e),this.boundingAABB=null,this.cancelAnimation=null,this.boundsSet=!1,this.keyframes=[],this.five=e,this.state={enabled:!0,visible:!0},this.duration=(n=t==null?void 0:t.duration)==null?5e3:n,this.curveHeight=(r=t==null?void 0:t.curveHeight)==null?1.5:r,this.pointDuration=(i=t==null?void 0:t.pointDuration)==null?3e3:i}load(){return n(this,void 0,void 0,function*(){})}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!0},n)}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!1},n)}dispose(){this.disable(),this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null);try{let e=this.findRenderMesh();e&&(e.material.aggregationEnabled=!1,e.material.aggregationProgress=1)}catch(e){}}extractKeyframes(e){let t=[];if(!e.content.data)throw Error(`轨迹数据未加载`);let n=e.content.data.positionArray,r=n.length/3,i=.01,a=.1,o=new Xt(i,a,1,0,1),s=new Xt(i,a,1,0,1),c=new Xt(i,a,1,0,1),l=new Float32Array(r);for(let e=0;e<r;e++)if(e===0)l[e]=0;else{let t=new L(n[(e-1)*3],n[(e-1)*3+1],n[(e-1)*3+2]);l[e]=new L(n[e*3],n[e*3+1],n[e*3+2]).distanceTo(t)+l[e-1]}for(let i=0;i<r;i++){let a=new L(0,0,0),u=0;for(let e=i-5;e<i+6;e++)e>=0&&e<r&&(a.add(new L(n[e*3],n[e*3+1],n[e*3+2])),u++);a.divideScalar(u).applyMatrix4(e.transform);let d=o.filter(a.x),f=s.filter(a.y),p=c.filter(a.z);t.push({position:new L(d,f,p),location:l[i]})}return t}computeAABB2D(e){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let a of e)a.position.x<t&&(t=a.position.x),a.position.x>n&&(n=a.position.x),a.position.z<r&&(r=a.position.z),a.position.z>i&&(i=a.position.z);return{min:new I(t,r),max:new I(n,i)}}findClosestKeyframeToRay(e,t){let n=1/0,r=t[0].position.clone(),i=new L;for(let a of t){e.closestPointToPoint(a.position,i);let t=i.distanceTo(a.position);t<n&&(n=t,r=a.position.clone())}return r}findRenderMesh(){let e=null;if(this.five.scene.traverse(t=>{if(e)return;let n=t,r=n.material;r&&r.isPBMGaussianSplattingMaterial&&(e=n)}),!e)throw Error(`未找到 GaussianSplatting 渲染网格`);return e}loadTrajectoryDataIfNeeded(e){return n(this,void 0,void 0,function*(){var n,r,i,a,o,s,c,l;if((n=e.content)!=null&&n.data)return;if(((r=e.content)==null?void 0:r.loadState)===`LOADING`){yield new Promise(n=>{let r=t.AnimationFrameLoop.shared.add(()=>{var t;let i=(t=e.content)==null?void 0:t.loadState;(i===`READY`||i===`FAILED`||i===`UNLOADED`)&&(r(),n())})});return}let u=(i=this.five.model.viewLayers)==null?void 0:i[0],d=u==null?void 0:u.fetcher,f=u==null?void 0:u.search,p=(a=e.content)==null?void 0:a.uri;if(!d||!p)return;let m=f?p.includes(`?`)?`${p}&${f.replace(/^\?/,``)}`:`${p}${f.startsWith(`?`)?f:`?${f}`}`:p;e.content.loadState=`LOADING`;try{let n=yield(0,t.loadPly)(m,{type:`geometry`,customPropertyMapping:{time:{itemType:`uint32`,itemNames:[`time_milisec`]}},fetcher:d}),r=n.scene,i=r.getAttribute(`position`),a=r.getAttribute(`time`),u=(o=i==null?void 0:i.array)==null?new Float32Array:o,f=(s=a==null?void 0:a.array)==null?new Uint32Array:s;e.content.data={uri:m,byteLength:(c=n.byteLength)==null?0:c,memoryUsage:(l=n.memoryUsage)==null?0:l,positionArray:u,timeArray:f,object:null},e.content.loadState=`READY`}catch(t){console.warn(`[GaussianSplattingEntranceAnimationPlugin] trajectory ply 加载失败,将使用 3DGS AABB 回退`,t),e.content.data=void 0,e.content.loadState=`FAILED`}})}computeGSSceneBounds(){let e=new et,t=new et;return this.five.scene.traverse(n=>{let r=n;(r==null?void 0:r.boundingBox)instanceof et&&!r.boundingBox.isEmpty()&&(t.copy(r.boundingBox),r.matrixWorld&&t.applyMatrix4(r.matrixWorld),e.union(t))}),e.isEmpty()?null:e}getCameraCurve(){return n(this,void 0,void 0,function*(){var e,t,n,r,i,a,o,s,c,l;let u=(r=(n=(t=(e=this.five.model.viewLayers)==null?void 0:e[0])==null?void 0:t.trajectories)==null?void 0:n[0])==null?(s=(o=(a=(i=this.five.model.viewLayers)==null?void 0:i[0])==null?void 0:a.scene)==null?void 0:o.trajectories)==null?void 0:s[0]:r,d=null,f=null;if(u&&(yield this.loadTrajectoryDataIfNeeded(u),(c=u.content)!=null&&c.data&&((l=u.content.data.positionArray)==null?void 0:l.length)>=6&&(d=this.extractKeyframes(u),d.length>=2?f=this.computeAABB2D(d):d=null)),!d||!f){let e=this.computeGSSceneBounds();if(!e)throw Error(`未找到可用于计算入场曲线的 3DGS 边界或轨迹`);f={min:new I(e.min.x,e.min.z),max:new I(e.max.x,e.max.z)};let t=(f.min.x+f.max.x)/2,n=(f.min.y+f.max.y)/2,r=(e.min.y+e.max.y)/2,i=Math.max(f.max.x-f.min.x,f.max.y-f.min.y)*.5;d=[];let a=0,o=null;for(let e=0;e<16;e++){let s=e/16*Math.PI*2,c=new L(t+Math.cos(s)*i,r,n+Math.sin(s)*i);o&&(a+=c.distanceTo(o)),d.push({position:c,location:a}),o=c}}this.keyframes=d,this.boundingAABB=f;let p=this.curveHeight,m=new L((f.min.x+f.max.x)/2,p,(f.min.y+f.max.y)/2),h=(f.max.x-f.min.x)/2,g=(f.max.y-f.min.y)/2,_=Math.sqrt(h*h+g*g),v=e=>{let t=new L().subVectors(e,m);return t.length()<.001&&t.set(1,0,0),m.clone().add(t.normalize().multiplyScalar(_))},y=new L(d[0].position.x,p,d[0].position.z),b=v(y),x=new L().subVectors(m,y).normalize(),S=new gt(y,x),C=new gt(m,new L(-x.z,0,x.x).normalize()),w=this.findClosestKeyframeToRay(C,d),T=v(new L(w.x,p,w.z)),E=this.findClosestKeyframeToRay(S,d);return new Ct([b,T,v(new L(E.x,p,E.z))],!1,`centripetal`,.5)})}setBounding(e,t,n){let r=this.findRenderMesh();r.material.aggregationBoundsMin.copy(e),r.material.aggregationBoundsMax.copy(t),this.boundsSet=!0}setBounds(){if(!this.boundingAABB)throw Error(`请先调用 getCameraCurve 计算轨迹边界`);let e=this.boundingAABB,t=this.findRenderMesh(),n=new L(e.min.x,0,e.min.y),r=new L(e.max.x,3,e.max.y);t.material.aggregationBoundsMin.copy(n),t.material.aggregationBoundsMax.copy(r),this.boundsSet=!0}normalizedPointDuration(){let e=this.pointDuration;return e<=0?.01:Math.min(e<=1?e:e/this.duration,1)}resetToPointCloud(){return n(this,void 0,void 0,function*(){this.boundingAABB||(yield this.getCameraCurve()),this.setBounds();let e=this.findRenderMesh().material;e.aggregationEnabled=!0,e.aggregationProgress=0,e.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0})}startAggregation(){if(!this.boundsSet)throw Error(`请先调用 setBounds 设置聚合边界`);let e=this.findRenderMesh().material;e.aggregationEnabled=!0,e.aggregationProgress=0,e.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let n=performance.now(),r=this.duration;this.cancelAnimation=t.AnimationFrameLoop.shared.add(()=>{let t=performance.now()-n,i=Math.min(t/r,1);e.aggregationProgress=i*i*(3-2*i),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0,i>=1&&(e.aggregationEnabled=!1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null))})}playEntrance(){return n(this,void 0,void 0,function*(){let e=yield this.getCameraCurve(),n=this.boundingAABB,r=new L((n.min.x+n.max.x)/2,this.curveHeight,(n.min.y+n.max.y)/2),i=e.getPointAt(0),a=new t.Camera(90).copy(this.five.camera);a.position.copy(i),a.lookAt(r),a.computePose(0),this.five.setState(Object.assign({},a.pose)),this.setBounds();let o=this.findRenderMesh().material;o.aggregationEnabled=!0,o.aggregationProgress=0,o.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let s=this.duration,c=performance.now();return new Promise(n=>{this.cancelAnimation=t.AnimationFrameLoop.shared.add(()=>{let t=performance.now()-c,i=Math.min(t/s,1),l=i*i*(3-2*i);o.aggregationProgress=l,this.five.modelSceneNeedsRender=!0;let u=e.getPointAt(l);a.position.copy(u),a.lookAt(r),a.computePose(0),this.five.setState(Object.assign({},a.pose)),this.five.needsRender=!0,i>=1&&(o.aggregationEnabled=!1,o.aggregationProgress=1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null),n())})})})}};Object.defineProperty(e,"BasePlugin",{enumerable:!0,get:function(){return a}}),e.GaussianSplattingEntranceAnimationPlugin=(e,t)=>new Zt(e,t)});
255
+ */(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("@realsee/five-webgpu")):typeof define==`function`&&define.amd?define([`exports`,`@realsee/five-webgpu`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.FiveSDK_Plugins={},e.FiveSDK))})(this,function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function n(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function r(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}function i(e){return/^https?:\/\/|^\/\//.test(e)||/^data:/.test(e)}function a(e,t){return i(t)?t:`${e}${t}`}var o;(function(e){class n{constructor(e,n){this.hooks=new t.Subscribe,this.staticPrefix=`//vr-image-4.realsee-cdn.cn`,this.five=e,n!=null&&n.staticPrefix&&(this.staticPrefix=n.staticPrefix)}getCurrentState(){return this.state}absoluteUrl(e){return a(this.staticPrefix,e)}}e.Controller=n})(o||(o={}));var s=class extends o.Controller{constructor(e,t){super(e),this.data={},this.pluginName=`BackgroundPlugin`,this._onFiveCameraUpdate=e=>{let t=(Math.PI/2-Math.max(e.latitude,0))/(Math.PI/2),n=Math.max(.2-t,0)*10;this.gradientBg&&(this.gradientBg.style.transform=`translateY(-${(1-t)*50}%)`),this.groundBg&&(this.groundBg.style.backgroundImage=`radial-gradient(circle, #2E303350 ${n*100}%, transparent ${n*120}%)`)},this._addEventListener=()=>{this.five.on(`cameraUpdate`,this._onFiveCameraUpdate)},this._removeEventListener=()=>{this.five.off(`cameraUpdate`,this._onFiveCameraUpdate)},this.load=()=>r(this,void 0,void 0,function*(){}),this.setState=(e,t={})=>{},this.enable=()=>{var e;let t=(e=this.five.getElement())==null?void 0:e.parentNode;if(!t){this.five.ready().then(()=>this.enable());return}this.state.enabled||(this._onFiveCameraUpdate(this.five.getPose(),!1),this.gradientBg&&t.appendChild(this.gradientBg),this.groundBg&&t.appendChild(this.groundBg),this.style&&document.head.appendChild(this.style),this._addEventListener(),this.hooks.emit(`enable`,{userAction:!0}),this.state.enabled=!0)},this.disable=(e={})=>{var t,n,r,i;this.state.enabled&&((n=(t=this.gradientBg)==null?void 0:t.parentNode)==null||n.removeChild(this.gradientBg),(i=(r=this.groundBg)==null?void 0:r.parentNode)==null||i.removeChild(this.groundBg),this.style&&document.head.removeChild(this.style),this._removeEventListener(),this.hooks.emit(`disable`,{userAction:!0}),this.state.enabled=!1)},this.dispose=()=>{this._removeEventListener(),this.hooks.emit(`disable`,{userAction:!0}),this.state.enabled=!1},this.state={enabled:!1},!(typeof document>`u`)&&(this.gradientBg=document.createElement(`div`),this.groundBg=document.createElement(`div`),this.style=document.createElement(`style`),this.gradientBg.className=`BackgroundPluginBg`,this.groundBg.className=`BackgroundPluginGroundBg`,this.style.innerHTML=`
256
+ .BackgroundPluginBg {
257
+ position: absolute;
258
+ top: 0;
259
+ right: 0;
260
+ left: 0;
261
+ height: 200%;
262
+ background: linear-gradient(#0A0B0D, #2E3033);
263
+ z-index: -1;
264
+ pointerEvents: none;
265
+ }
266
+ .BackgroundPluginGroundBg {
267
+ position: absolute;
268
+ top: 0;
269
+ right: 0;
270
+ left: 0;
271
+ bottom: 0;
272
+ background-image: radial-gradient(circle, #2E303350 0, transparent 0);
273
+ z-index: -1;
274
+ pointerEvents: none;
275
+ }
276
+ `,this.enable())}},c=(e,t)=>new s(e,t);function l(e){"@babel/helpers - typeof";return l=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},l(e)}function u(e,t){if(l(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(l(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function d(e){var t=u(e,`string`);return l(t)==`symbol`?t:t+``}function f(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function m(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?p(Object(n),!0).forEach(function(t){f(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function h(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function g(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){h(a,r,i,o,s,`next`,e)}function s(e){h(a,r,i,o,s,`throw`,e)}o(void 0)})}}var _=1e3,v=1001,y=1002,b=1003,x=1006,S=1008,C=1008,ee=1009,te=1014,ne=1015,w=1016,re=1023,ie=1026,ae=1030,oe=2300,se=2301,ce=2302,le=2303,ue=2400,de=2401,fe=2402,pe=`srgb`,me=`srgb-linear`,he=`linear`,ge=`srgb`,_e=7680,ve=35044,ye=35048,be=2e3,xe=2001,Se={TEXTURE_COMPARE:`depthTextureCompare`};function Ce(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}function we(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Te(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}var Ee={},De=null;function Oe(...e){let t=`THREE.`+e.shift();De?De(`log`,t,...e):console.log(t,...e)}function ke(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.`}return e}function T(...e){e=ke(e);let t=`THREE.`+e.shift();if(De)De(`warn`,t,...e);else{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function E(...e){e=ke(e);let t=`THREE.`+e.shift();if(De)De(`error`,t,...e);else{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function Ae(...e){let t=e.join(` `);t in Ee||(Ee[t]=!0,T(...e))}var je=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n===void 0?!1:n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n<r;n++)t[n].call(this,e);e.target=null}}},Me=`00.01.02.03.04.05.06.07.08.09.0a.0b.0c.0d.0e.0f.10.11.12.13.14.15.16.17.18.19.1a.1b.1c.1d.1e.1f.20.21.22.23.24.25.26.27.28.29.2a.2b.2c.2d.2e.2f.30.31.32.33.34.35.36.37.38.39.3a.3b.3c.3d.3e.3f.40.41.42.43.44.45.46.47.48.49.4a.4b.4c.4d.4e.4f.50.51.52.53.54.55.56.57.58.59.5a.5b.5c.5d.5e.5f.60.61.62.63.64.65.66.67.68.69.6a.6b.6c.6d.6e.6f.70.71.72.73.74.75.76.77.78.79.7a.7b.7c.7d.7e.7f.80.81.82.83.84.85.86.87.88.89.8a.8b.8c.8d.8e.8f.90.91.92.93.94.95.96.97.98.99.9a.9b.9c.9d.9e.9f.a0.a1.a2.a3.a4.a5.a6.a7.a8.a9.aa.ab.ac.ad.ae.af.b0.b1.b2.b3.b4.b5.b6.b7.b8.b9.ba.bb.bc.bd.be.bf.c0.c1.c2.c3.c4.c5.c6.c7.c8.c9.ca.cb.cc.cd.ce.cf.d0.d1.d2.d3.d4.d5.d6.d7.d8.d9.da.db.dc.dd.de.df.e0.e1.e2.e3.e4.e5.e6.e7.e8.e9.ea.eb.ec.ed.ee.ef.f0.f1.f2.f3.f4.f5.f6.f7.f8.f9.fa.fb.fc.fd.fe.ff`.split(`.`),Ne=1234567,Pe=Math.PI/180,Fe=180/Math.PI;function Ie(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,r=Math.random()*4294967295|0;return(Me[e&255]+Me[e>>8&255]+Me[e>>16&255]+Me[e>>24&255]+`-`+Me[t&255]+Me[t>>8&255]+`-`+Me[t>>16&15|64]+Me[t>>24&255]+`-`+Me[n&63|128]+Me[n>>8&255]+`-`+Me[n>>16&255]+Me[n>>24&255]+Me[r&255]+Me[r>>8&255]+Me[r>>16&255]+Me[r>>24&255]).toLowerCase()}function Le(e,t,n){return Math.max(t,Math.min(n,e))}function Re(e,t){return(e%t+t)%t}function ze(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)}function Be(e,t,n){return e===t?0:(n-e)/(t-e)}function Ve(e,t,n){return(1-n)*e+n*t}function He(e,t,n,r){return Ve(e,t,1-Math.exp(-n*r))}function Ue(e,t=1){return t-Math.abs(Re(e,t*2)-t)}function We(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*(3-2*e))}function Ge(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10))}function Ke(e,t){return e+Math.floor(Math.random()*(t-e+1))}function qe(e,t){return e+Math.random()*(t-e)}function Je(e){return e*(.5-Math.random())}function Ye(e){e!==void 0&&(Ne=e);let t=Ne+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function Xe(e){return e*Pe}function Ze(e){return e*Fe}function Qe(e){return(e&e-1)==0&&e!==0}function $e(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))}function et(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}function tt(e,t,n,r,i){let a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((t+r)/2),u=o((t+r)/2),d=a((t-r)/2),f=o((t-r)/2),p=a((r-t)/2),m=o((r-t)/2);switch(i){case`XYX`:e.set(s*u,c*d,c*f,s*l);break;case`YZY`:e.set(c*f,s*u,c*d,s*l);break;case`ZXZ`:e.set(c*d,c*f,s*u,s*l);break;case`XZX`:e.set(s*u,c*m,c*p,s*l);break;case`YXY`:e.set(c*p,s*u,c*m,s*l);break;case`ZYZ`:e.set(c*m,c*p,s*u,s*l);break;default:T(`MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: `+i)}}function nt(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error(`Invalid component type.`)}}function rt(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error(`Invalid component type.`)}}var it={DEG2RAD:Pe,RAD2DEG:Fe,generateUUID:Ie,clamp:Le,euclideanModulo:Re,mapLinear:ze,inverseLerp:Be,lerp:Ve,damp:He,pingpong:Ue,smoothstep:We,smootherstep:Ge,randInt:Ke,randFloat:qe,randFloatSpread:Je,seededRandom:Ye,degToRad:Xe,radToDeg:Ze,isPowerOfTwo:Qe,ceilPowerOfTwo:$e,floorPowerOfTwo:et,setQuaternionFromProperEuler:tt,normalize:rt,denormalize:nt},at=class e{constructor(t=0,n=0){e.prototype.isVector2=!0,this.x=t,this.y=n}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Le(this.x,e.x,t.x),this.y=Le(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Le(this.x,e,t),this.y=Le(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Le(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Le(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},ot=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:T(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Le(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},D=class e{constructor(t=0,n=0,r=0){e.prototype.isVector3=!0,this.x=t,this.y=n,this.z=r}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(ct.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(ct.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Le(this.x,e.x,t.x),this.y=Le(this.y,e.y,t.y),this.z=Le(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Le(this.x,e,t),this.y=Le(this.y,e,t),this.z=Le(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Le(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return st.copy(this).projectOnVector(e),this.sub(st)}reflect(e){return this.sub(st.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Le(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},st=new D,ct=new ot,lt=class e{constructor(t,n,r,i,a,o,s,c,l){e.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(ut.makeScale(e,t)),this}rotate(e){return this.premultiply(ut.makeRotation(-e)),this}translate(e,t){return this.premultiply(ut.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}},ut=new lt,dt=new lt().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),ft=new lt().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function pt(){let e={enabled:!0,workingColorSpace:me,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n?e:(this.spaces[t].transfer===`srgb`&&(e.r=ht(e.r),e.g=ht(e.g),e.b=ht(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=gt(e.r),e.g=gt(e.g),e.b=gt(e.b)),e)},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?he:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return Ae(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return Ae(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[me]:{primaries:t,whitePoint:r,transfer:he,toXYZ:dt,fromXYZ:ft,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:pe},outputColorSpaceConfig:{drawingBufferColorSpace:pe}},[pe]:{primaries:t,whitePoint:r,transfer:ge,toXYZ:dt,fromXYZ:ft,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:pe}}}),e}var mt=pt();function ht(e){return e<.04045?e*.0773993808:Math.pow(e*.9478672986+.0521327014,2.4)}function gt(e){return e<.0031308?e*12.92:1.055*Math.pow(e,.41666)-.055}var _t,vt=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{_t===void 0&&(_t=Te(`canvas`)),_t.width=e.width,_t.height=e.height;let t=_t.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=_t}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=Te(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e<i.length;e++)i[e]=ht(i[e]/255)*255;return n.putImageData(r,0,0),t}else if(e.data){let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(ht(t[e]/255)*255):t[e]=ht(t[e]);return{data:t,width:e.width,height:e.height}}else return T(`ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.`),e}},yt=0,bt=class{constructor(e=null){this.isSource=!0,Object.defineProperty(this,"id",{value:yt++}),this.uuid=Ie(),this.data=e,this.dataReady=!0,this.version=0}getSize(e){let t=this.data;return typeof HTMLVideoElement<`u`&&t instanceof HTMLVideoElement?e.set(t.videoWidth,t.videoHeight,0):typeof VideoFrame<`u`&&t instanceof VideoFrame?e.set(t.displayHeight,t.displayWidth,0):t===null?e.set(0,0,0):e.set(t.width,t.height,t.depth||0),e}set needsUpdate(e){e===!0&&this.version++}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:``},r=this.data;if(r!==null){let e;if(Array.isArray(r)){e=[];for(let t=0,n=r.length;t<n;t++)r[t].isDataTexture?e.push(xt(r[t].image)):e.push(xt(r[t]))}else e=xt(r);n.url=e}return t||(e.images[this.uuid]=n),n}};function xt(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap?vt.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(T(`Texture: Unable to serialize Texture.`),{})}var St=0,Ct=new D,wt=class e extends je{constructor(t=e.DEFAULT_IMAGE,n=e.DEFAULT_MAPPING,r=v,i=v,a=x,o=S,s=re,c=ee,l=e.DEFAULT_ANISOTROPY,u=``){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:St++}),this.uuid=Ie(),this.name=``,this.source=new bt(t),this.mipmaps=[],this.mapping=n,this.channel=0,this.wrapS=r,this.wrapT=i,this.magFilter=a,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=c,this.offset=new at(0,0),this.repeat=new at(1,1),this.center=new at(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new lt,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(Ct).x}get height(){return this.source.getSize(Ct).y}get depth(){return this.source.getSize(Ct).z}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){T(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){T(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case _:e.x-=Math.floor(e.x);break;case v:e.x=e.x<0?0:1;break;case y:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case _:e.y-=Math.floor(e.y);break;case v:e.y=e.y<0?0:1;break;case y:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};wt.DEFAULT_IMAGE=null,wt.DEFAULT_MAPPING=300,wt.DEFAULT_ANISOTROPY=1;var Tt=class e{constructor(t=0,n=0,r=0,i=1){e.prototype.isVector4=!0,this.x=t,this.y=n,this.z=r,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)<a&&Math.abs(u-m)<a&&Math.abs(p-h)<a){if(Math.abs(l+d)<o&&Math.abs(u+m)<o&&Math.abs(p+h)<o&&Math.abs(c+f+g-3)<o)return this.set(1,0,0,0),this;t=Math.PI;let e=(c+1)/2,s=(f+1)/2,_=(g+1)/2,v=(l+d)/4,y=(u+m)/4,b=(p+h)/4;return e>s&&e>_?e<a?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(e),r=v/n,i=y/n):s>_?s<a?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(s),n=v/r,i=b/r):_<a?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(_),n=y/i,r=b/i),this.set(n,r,i,t),this}let _=Math.sqrt((h-p)*(h-p)+(u-m)*(u-m)+(d-l)*(d-l));return Math.abs(_)<.001&&(_=1),this.x=(h-p)/_,this.y=(u-m)/_,this.z=(d-l)/_,this.w=Math.acos((c+f+g-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Le(this.x,e.x,t.x),this.y=Le(this.y,e.y,t.y),this.z=Le(this.z,e.z,t.z),this.w=Le(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=Le(this.x,e,t),this.y=Le(this.y,e,t),this.z=Le(this.z,e,t),this.w=Le(this.w,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Le(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},Et=class extends je{constructor(e=1,t=1,n={}){super(),n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:x,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},n),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=n.depth,this.scissor=new Tt(0,0,e,t),this.scissorTest=!1,this.viewport=new Tt(0,0,e,t),this.textures=[];let r=new wt({width:e,height:t,depth:n.depth}),i=n.count;for(let e=0;e<i;e++)this.textures[e]=r.clone(),this.textures[e].isRenderTargetTexture=!0,this.textures[e].renderTarget=this;this._setTextureOptions(n),this.depthBuffer=n.depthBuffer,this.stencilBuffer=n.stencilBuffer,this.resolveDepthBuffer=n.resolveDepthBuffer,this.resolveStencilBuffer=n.resolveStencilBuffer,this._depthTexture=null,this.depthTexture=n.depthTexture,this.samples=n.samples,this.multiview=n.multiview}_setTextureOptions(e={}){let t={minFilter:x,generateMipmaps:!1,flipY:!1,internalFormat:null};e.mapping!==void 0&&(t.mapping=e.mapping),e.wrapS!==void 0&&(t.wrapS=e.wrapS),e.wrapT!==void 0&&(t.wrapT=e.wrapT),e.wrapR!==void 0&&(t.wrapR=e.wrapR),e.magFilter!==void 0&&(t.magFilter=e.magFilter),e.minFilter!==void 0&&(t.minFilter=e.minFilter),e.format!==void 0&&(t.format=e.format),e.type!==void 0&&(t.type=e.type),e.anisotropy!==void 0&&(t.anisotropy=e.anisotropy),e.colorSpace!==void 0&&(t.colorSpace=e.colorSpace),e.flipY!==void 0&&(t.flipY=e.flipY),e.generateMipmaps!==void 0&&(t.generateMipmaps=e.generateMipmaps),e.internalFormat!==void 0&&(t.internalFormat=e.internalFormat);for(let e=0;e<this.textures.length;e++)this.textures[e].setValues(t)}get texture(){return this.textures[0]}set texture(e){this.textures[0]=e}set depthTexture(e){this._depthTexture!==null&&(this._depthTexture.renderTarget=null),e!==null&&(e.renderTarget=this),this._depthTexture=e}get depthTexture(){return this._depthTexture}setSize(e,t,n=1){if(this.width!==e||this.height!==t||this.depth!==n){this.width=e,this.height=t,this.depth=n;for(let r=0,i=this.textures.length;r<i;r++)this.textures[r].image.width=e,this.textures[r].image.height=t,this.textures[r].image.depth=n,this.textures[r].isData3DTexture!==!0&&(this.textures[r].isArrayTexture=this.textures[r].image.depth>1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,n=e.textures.length;t<n;t++){this.textures[t]=e.textures[t].clone(),this.textures[t].isRenderTargetTexture=!0,this.textures[t].renderTarget=this;let n=Object.assign({},e.textures[t].image);this.textures[t].source=new bt(n)}return this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,this.resolveDepthBuffer=e.resolveDepthBuffer,this.resolveStencilBuffer=e.resolveStencilBuffer,e.depthTexture!==null&&(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this}dispose(){this.dispatchEvent({type:`dispose`})}},Dt=class extends wt{constructor(e=null,t=1,n=1,r=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:n,depth:r},this.magFilter=b,this.minFilter=b,this.wrapR=v,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}},Ot=class e{constructor(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g){e.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return this.determinant()===0?(e.set(1,0,0),t.set(0,1,0),n.set(0,0,1),this):(e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){if(e.determinant()===0)return this.identity();let t=this.elements,n=e.elements,r=1/kt.setFromMatrixColumn(e,0).length(),i=1/kt.setFromMatrixColumn(e,1).length(),a=1/kt.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(jt,e,Mt)}lookAt(e,t,n){let r=this.elements;return Ft.subVectors(e,t),Ft.lengthSq()===0&&(Ft.z=1),Ft.normalize(),Nt.crossVectors(n,Ft),Nt.lengthSq()===0&&(Math.abs(n.z)===1?Ft.x+=1e-4:Ft.z+=1e-4,Ft.normalize(),Nt.crossVectors(n,Ft)),Nt.normalize(),Pt.crossVectors(Ft,Nt),r[0]=Nt.x,r[4]=Pt.x,r[8]=Ft.x,r[1]=Nt.y,r[5]=Pt.y,r[9]=Ft.y,r[2]=Nt.z,r[6]=Pt.z,r[10]=Ft.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],ee=r[12],te=r[1],ne=r[5],w=r[9],re=r[13],ie=r[2],ae=r[6],oe=r[10],se=r[14],ce=r[3],le=r[7],ue=r[11],de=r[15];return i[0]=a*x+o*te+s*ie+c*ce,i[4]=a*S+o*ne+s*ae+c*le,i[8]=a*C+o*w+s*oe+c*ue,i[12]=a*ee+o*re+s*se+c*de,i[1]=l*x+u*te+d*ie+f*ce,i[5]=l*S+u*ne+d*ae+f*le,i[9]=l*C+u*w+d*oe+f*ue,i[13]=l*ee+u*re+d*se+f*de,i[2]=p*x+m*te+h*ie+g*ce,i[6]=p*S+m*ne+h*ae+g*le,i[10]=p*C+m*w+h*oe+g*ue,i[14]=p*ee+m*re+h*se+g*de,i[3]=_*x+v*te+y*ie+b*ce,i[7]=_*S+v*ne+y*ae+b*le,i[11]=_*C+v*w+y*oe+b*ue,i[15]=_*ee+v*re+y*se+b*de,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15],_=s*f-c*d,v=o*f-c*u,y=o*d-s*u,b=a*f-c*l,x=a*d-s*l,S=a*u-o*l;return t*(m*_-h*v+g*y)-n*(p*_-h*b+g*x)+r*(p*v-m*b+g*S)-i*(p*y-m*x+h*S)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=t*o-n*a,v=t*s-r*a,y=t*c-i*a,b=n*s-r*o,x=n*c-i*o,S=r*c-i*s,C=l*m-u*p,ee=l*h-d*p,te=l*g-f*p,ne=u*h-d*m,w=u*g-f*m,re=d*g-f*h,ie=_*re-v*w+y*ne+b*te-x*ee+S*C;if(ie===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let ae=1/ie;return e[0]=(o*re-s*w+c*ne)*ae,e[1]=(r*w-n*re-i*ne)*ae,e[2]=(m*S-h*x+g*b)*ae,e[3]=(d*x-u*S-f*b)*ae,e[4]=(s*te-a*re-c*ee)*ae,e[5]=(t*re-r*te+i*ee)*ae,e[6]=(h*y-p*S-g*v)*ae,e[7]=(l*S-d*y+f*v)*ae,e[8]=(a*w-o*te+c*C)*ae,e[9]=(n*te-t*w-i*C)*ae,e[10]=(p*x-m*y+g*_)*ae,e[11]=(u*y-l*x-f*_)*ae,e[12]=(o*ee-a*ne-s*C)*ae,e[13]=(t*ne-n*ee+r*C)*ae,e[14]=(m*v-p*b-h*_)*ae,e[15]=(l*b-u*v+d*_)*ae,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements;e.x=r[12],e.y=r[13],e.z=r[14];let i=this.determinant();if(i===0)return n.set(1,1,1),t.identity(),this;let a=kt.set(r[0],r[1],r[2]).length(),o=kt.set(r[4],r[5],r[6]).length(),s=kt.set(r[8],r[9],r[10]).length();i<0&&(a=-a),At.copy(this);let c=1/a,l=1/o,u=1/s;return At.elements[0]*=c,At.elements[1]*=c,At.elements[2]*=c,At.elements[4]*=l,At.elements[5]*=l,At.elements[6]*=l,At.elements[8]*=u,At.elements[9]*=u,At.elements[10]*=u,t.setFromRotationMatrix(At),n.x=a,n.y=o,n.z=s,this}makePerspective(e,t,n,r,i,a,o=be,s=!1){let c=this.elements,l=2*i/(t-e),u=2*i/(n-r),d=(t+e)/(t-e),f=(n+r)/(n-r),p,m;if(s)p=i/(a-i),m=a*i/(a-i);else if(o===2e3)p=-(a+i)/(a-i),m=-2*a*i/(a-i);else if(o===2001)p=-a/(a-i),m=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=d,c[12]=0,c[1]=0,c[5]=u,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=be,s=!1){let c=this.elements,l=2/(t-e),u=2/(n-r),d=-(t+e)/(t-e),f=-(n+r)/(n-r),p,m;if(s)p=1/(a-i),m=a/(a-i);else if(o===2e3)p=-2/(a-i),m=-(a+i)/(a-i);else if(o===2001)p=-1/(a-i),m=-i/(a-i);else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=0,c[12]=d,c[1]=0,c[5]=u,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}},kt=new D,At=new Ot,jt=new D(0,0,0),Mt=new D(1,1,1),Nt=new D,Pt=new D,Ft=new D,It=new Ot,Lt=new ot,Rt=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(Le(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-Le(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(Le(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-Le(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(Le(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-Le(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:T(`Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return It.makeRotationFromQuaternion(e),this.setFromRotationMatrix(It,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Lt.setFromEuler(this),this.setFromQuaternion(Lt,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Rt.DEFAULT_ORDER=`XYZ`;var zt=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return(this.mask&(1<<e|0))!=0}},Bt=0,Vt=new D,Ht=new ot,Ut=new Ot,Wt=new D,Gt=new D,Kt=new D,qt=new ot,Jt=new D(1,0,0),Yt=new D(0,1,0),Xt=new D(0,0,1),Zt={type:`added`},Qt={type:`removed`},$t={type:`childadded`,child:null},en={type:`childremoved`,child:null},tn=class e extends je{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Bt++}),this.uuid=Ie(),this.name=``,this.type=`Object3D`,this.parent=null,this.children=[],this.up=e.DEFAULT_UP.clone();let t=new D,n=new Rt,r=new ot,i=new D(1,1,1);function a(){r.setFromEuler(n,!1)}function o(){n.setFromQuaternion(r,void 0,!1)}n._onChange(a),r._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:n},quaternion:{configurable:!0,enumerable:!0,value:r},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Ot},normalMatrix:{value:new lt}}),this.matrix=new Ot,this.matrixWorld=new Ot,this.matrixAutoUpdate=e.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=e.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new zt,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return Ht.setFromAxisAngle(e,t),this.quaternion.multiply(Ht),this}rotateOnWorldAxis(e,t){return Ht.setFromAxisAngle(e,t),this.quaternion.premultiply(Ht),this}rotateX(e){return this.rotateOnAxis(Jt,e)}rotateY(e){return this.rotateOnAxis(Yt,e)}rotateZ(e){return this.rotateOnAxis(Xt,e)}translateOnAxis(e,t){return Vt.copy(e).applyQuaternion(this.quaternion),this.position.add(Vt.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(Jt,e)}translateY(e){return this.translateOnAxis(Yt,e)}translateZ(e){return this.translateOnAxis(Xt,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(Ut.copy(this.matrixWorld).invert())}lookAt(e,t,n){e.isVector3?Wt.copy(e):Wt.set(e,t,n);let r=this.parent;this.updateWorldMatrix(!0,!1),Gt.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?Ut.lookAt(Gt,Wt,this.up):Ut.lookAt(Wt,Gt,this.up),this.quaternion.setFromRotationMatrix(Ut),r&&(Ut.extractRotation(r.matrixWorld),Ht.setFromRotationMatrix(Ut),this.quaternion.premultiply(Ht.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?(E(`Object3D.add: object can't be added as a child of itself.`,e),this):(e&&e.isObject3D?(e.removeFromParent(),e.parent=this,this.children.push(e),e.dispatchEvent(Zt),$t.child=e,this.dispatchEvent($t),$t.child=null):E(`Object3D.add: object not an instance of THREE.Object3D.`,e),this)}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return t!==-1&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(Qt),en.child=e,this.dispatchEvent(en),en.child=null),this}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}clear(){return this.remove(...this.children)}attach(e){return this.updateWorldMatrix(!0,!1),Ut.copy(this.matrixWorld).invert(),e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),Ut.multiply(e.parent.matrixWorld)),e.applyMatrix4(Ut),e.removeFromParent(),e.parent=this,this.children.push(e),e.updateWorldMatrix(!1,!0),e.dispatchEvent(Zt),$t.child=e,this.dispatchEvent($t),$t.child=null,this}getObjectById(e){return this.getObjectByProperty(`id`,e)}getObjectByName(e){return this.getObjectByProperty(`name`,e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,r=this.children.length;n<r;n++){let r=this.children[n].getObjectByProperty(e,t);if(r!==void 0)return r}}getObjectsByProperty(e,t,n=[]){this[e]===t&&n.push(this);let r=this.children;for(let i=0,a=r.length;i<a;i++)r[i].getObjectsByProperty(e,t,n);return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Gt,e,Kt),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Gt,qt,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;t!==null&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let e=this.pivot;if(e!==null){let t=e.x,n=e.y,r=e.z,i=this.matrix.elements;i[12]+=t-i[0]*t-i[4]*n-i[8]*r,i[13]+=n-i[1]*t-i[5]*n-i[9]*r,i[14]+=r-i[2]*t-i[6]*n-i[10]*r}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].updateMatrixWorld(e)}updateWorldMatrix(e,t){let n=this.parent;if(e===!0&&n!==null&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),t===!0){let e=this.children;for(let t=0,n=e.length;t<n;t++)e[t].updateWorldMatrix(!1,!0)}}toJSON(e){let t=e===void 0||typeof e==`string`,n={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:`Object`,generator:`Object3D.toJSON`});let r={};r.uuid=this.uuid,r.type=this.type,this.name!==``&&(r.name=this.name),this.castShadow===!0&&(r.castShadow=!0),this.receiveShadow===!0&&(r.receiveShadow=!0),this.visible===!1&&(r.visible=!1),this.frustumCulled===!1&&(r.frustumCulled=!1),this.renderOrder!==0&&(r.renderOrder=this.renderOrder),this.static!==!1&&(r.static=this.static),Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>m(m({},e),{},{boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>m({},e)),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t<r;t++){let r=n[t];i(e.shapes,r)}else i(e.shapes,n)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(i(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let t=[];for(let n=0,r=this.material.length;n<r;n++)t.push(i(e.materials,this.material[n]));r.material=t}else r.material=i(e.materials,this.material);if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let n=this.animations[t];r.animations.push(i(e.animations,n))}}if(t){let t=a(e.geometries),r=a(e.materials),i=a(e.textures),o=a(e.images),s=a(e.shapes),c=a(e.skeletons),l=a(e.animations),u=a(e.nodes);t.length>0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),e.pivot!==null&&(this.pivot=e.pivot.clone()),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t<e.children.length;t++){let n=e.children[t];this.add(n.clone())}return this}};tn.DEFAULT_UP=new D(0,1,0),tn.DEFAULT_MATRIX_AUTO_UPDATE=!0,tn.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var nn=class extends tn{constructor(){super(),this.isGroup=!0,this.type=`Group`}},rn={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},an={h:0,s:0,l:0},on={h:0,s:0,l:0};function sn(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var cn=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=pe){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,mt.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=mt.workingColorSpace){return this.r=e,this.g=t,this.b=n,mt.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=mt.workingColorSpace){if(e=Re(e,1),t=Le(t,0,1),n=Le(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=sn(i,r,e+1/3),this.g=sn(i,r,e),this.b=sn(i,r,e-1/3)}return mt.colorSpaceToWorking(this,r),this}setStyle(e,t=pe){function n(t){t!==void 0&&parseFloat(t)<1&&T(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:T(`Color: Unknown color model `+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);T(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=pe){let n=rn[e.toLowerCase()];return n===void 0?T(`Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=ht(e.r),this.g=ht(e.g),this.b=ht(e.b),this}copyLinearToSRGB(e){return this.r=gt(e.r),this.g=gt(e.g),this.b=gt(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=pe){return mt.workingToColorSpace(ln.copy(this),e),Math.round(Le(ln.r*255,0,255))*65536+Math.round(Le(ln.g*255,0,255))*256+Math.round(Le(ln.b*255,0,255))}getHexString(e=pe){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=mt.workingColorSpace){mt.workingToColorSpace(ln.copy(this),t);let n=ln.r,r=ln.g,i=ln.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r<i?6:0);break;case r:s=(i-n)/e+2;break;case i:s=(n-r)/e+4;break}s/=6}return e.h=s,e.s=c,e.l=l,e}getRGB(e,t=mt.workingColorSpace){return mt.workingToColorSpace(ln.copy(this),t),e.r=ln.r,e.g=ln.g,e.b=ln.b,e}getStyle(e=pe){mt.workingToColorSpace(ln.copy(this),e);let t=ln.r,n=ln.g,r=ln.b;return e===`srgb`?`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(r*255)})`:`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${r.toFixed(3)})`}offsetHSL(e,t,n){return this.getHSL(an),this.setHSL(an.h+e,an.s+t,an.l+n)}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(an),e.getHSL(on);let n=Ve(an.h,on.h,t),r=Ve(an.s,on.s,t),i=Ve(an.l,on.l,t);return this.setHSL(n,r,i),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,r=this.b,i=e.elements;return this.r=i[0]*t+i[3]*n+i[6]*r,this.g=i[1]*t+i[4]*n+i[7]*r,this.b=i[2]*t+i[5]*n+i[8]*r,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}},ln=new cn;cn.NAMES=rn;var un=class extends tn{constructor(){super(),this.isScene=!0,this.type=`Scene`,this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new Rt,this.environmentIntensity=1,this.environmentRotation=new Rt,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null&&(this.background=e.background.clone()),e.environment!==null&&(this.environment=e.environment.clone()),e.fog!==null&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),e.overrideMaterial!==null&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}},dn=new D,fn=new D,pn=new D,mn=new D,hn=new D,gn=new D,_n=new D,vn=new D,yn=new D,bn=new D,xn=new Tt,Sn=new Tt,Cn=new Tt,wn=class e{constructor(e=new D,t=new D,n=new D){this.a=e,this.b=t,this.c=n}static getNormal(e,t,n,r){r.subVectors(n,t),dn.subVectors(e,t),r.cross(dn);let i=r.lengthSq();return i>0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(e,t,n,r,i){dn.subVectors(r,t),fn.subVectors(n,t),pn.subVectors(e,t);let a=dn.dot(dn),o=dn.dot(fn),s=dn.dot(pn),c=fn.dot(fn),l=fn.dot(pn),u=a*c-o*o;if(u===0)return i.set(0,0,0),null;let d=1/u,f=(c*s-o*l)*d,p=(a*l-o*s)*d;return i.set(1-f-p,p,f)}static containsPoint(e,t,n,r){return this.getBarycoord(e,t,n,r,mn)===null?!1:mn.x>=0&&mn.y>=0&&mn.x+mn.y<=1}static getInterpolation(e,t,n,r,i,a,o,s){return this.getBarycoord(e,t,n,r,mn)===null?(s.x=0,s.y=0,`z`in s&&(s.z=0),`w`in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(i,mn.x),s.addScaledVector(a,mn.y),s.addScaledVector(o,mn.z),s)}static getInterpolatedAttribute(e,t,n,r,i,a){return xn.setScalar(0),Sn.setScalar(0),Cn.setScalar(0),xn.fromBufferAttribute(e,t),Sn.fromBufferAttribute(e,n),Cn.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(xn,i.x),a.addScaledVector(Sn,i.y),a.addScaledVector(Cn,i.z),a}static isFrontFacing(e,t,n,r){return dn.subVectors(n,t),fn.subVectors(e,t),dn.cross(fn).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return dn.subVectors(this.c,this.b),fn.subVectors(this.a,this.b),dn.cross(fn).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return e.getNormal(this.a,this.b,this.c,t)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,n){return e.getBarycoord(t,this.a,this.b,this.c,n)}getInterpolation(t,n,r,i,a){return e.getInterpolation(t,this.a,this.b,this.c,n,r,i,a)}containsPoint(t){return e.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return e.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,r=this.b,i=this.c,a,o;hn.subVectors(r,n),gn.subVectors(i,n),vn.subVectors(e,n);let s=hn.dot(vn),c=gn.dot(vn);if(s<=0&&c<=0)return t.copy(n);yn.subVectors(e,r);let l=hn.dot(yn),u=gn.dot(yn);if(l>=0&&u<=l)return t.copy(r);let d=s*u-l*c;if(d<=0&&s>=0&&l<=0)return a=s/(s-l),t.copy(n).addScaledVector(hn,a);bn.subVectors(e,i);let f=hn.dot(bn),p=gn.dot(bn);if(p>=0&&f<=p)return t.copy(i);let m=f*c-s*p;if(m<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(n).addScaledVector(gn,o);let h=l*p-f*u;if(h<=0&&u-l>=0&&f-p>=0)return _n.subVectors(i,r),o=(u-l)/(u-l+(f-p)),t.copy(r).addScaledVector(_n,o);let g=1/(h+m+d);return a=m*g,o=d*g,t.copy(n).addScaledVector(hn,a).addScaledVector(gn,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},Tn=class{constructor(e=new D(1/0,1/0,1/0),t=new D(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(Dn.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(Dn.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=Dn.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let n=e.geometry;if(n!==void 0){let r=n.getAttribute(`position`);if(t===!0&&r!==void 0&&e.isInstancedMesh!==!0)for(let t=0,n=r.count;t<n;t++)e.isMesh===!0?e.getVertexPosition(t,Dn):Dn.fromBufferAttribute(r,t),Dn.applyMatrix4(e.matrixWorld),this.expandByPoint(Dn);else e.boundingBox===void 0?(n.boundingBox===null&&n.computeBoundingBox(),On.copy(n.boundingBox)):(e.boundingBox===null&&e.computeBoundingBox(),On.copy(e.boundingBox)),On.applyMatrix4(e.matrixWorld),this.union(On)}let r=e.children;for(let e=0,n=r.length;e<n;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return e.x>=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Dn),Dn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Fn),In.subVectors(this.max,Fn),kn.subVectors(e.a,Fn),An.subVectors(e.b,Fn),jn.subVectors(e.c,Fn),Mn.subVectors(An,kn),Nn.subVectors(jn,An),Pn.subVectors(kn,jn);let t=[0,-Mn.z,Mn.y,0,-Nn.z,Nn.y,0,-Pn.z,Pn.y,Mn.z,0,-Mn.x,Nn.z,0,-Nn.x,Pn.z,0,-Pn.x,-Mn.y,Mn.x,0,-Nn.y,Nn.x,0,-Pn.y,Pn.x,0];return!zn(t,kn,An,jn,In)||(t=[1,0,0,0,1,0,0,0,1],!zn(t,kn,An,jn,In))?!1:(Ln.crossVectors(Mn,Nn),t=[Ln.x,Ln.y,Ln.z],zn(t,kn,An,jn,In))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Dn).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Dn).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(En[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),En[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),En[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),En[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),En[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),En[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),En[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),En[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(En),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}},En=[new D,new D,new D,new D,new D,new D,new D,new D],Dn=new D,On=new Tn,kn=new D,An=new D,jn=new D,Mn=new D,Nn=new D,Pn=new D,Fn=new D,In=new D,Ln=new D,Rn=new D;function zn(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){Rn.fromArray(e,a);let o=i.x*Math.abs(Rn.x)+i.y*Math.abs(Rn.y)+i.z*Math.abs(Rn.z),s=t.dot(Rn),c=n.dot(Rn),l=r.dot(Rn);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}var Bn=new D,Vn=new at,Hn=0,Un=class{constructor(e,t,n=!1){if(Array.isArray(e))throw TypeError(`THREE.BufferAttribute: array should be a Typed Array.`);this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:Hn++}),this.name=``,this.array=e,this.itemSize=t,this.count=e===void 0?0:e.length/t,this.normalized=n,this.usage=ve,this.updateRanges=[],this.gpuType=ne,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let r=0,i=this.itemSize;r<i;r++)this.array[e+r]=t.array[n+r];return this}copyArray(e){return this.array.set(e),this}applyMatrix3(e){if(this.itemSize===2)for(let t=0,n=this.count;t<n;t++)Vn.fromBufferAttribute(this,t),Vn.applyMatrix3(e),this.setXY(t,Vn.x,Vn.y);else if(this.itemSize===3)for(let t=0,n=this.count;t<n;t++)Bn.fromBufferAttribute(this,t),Bn.applyMatrix3(e),this.setXYZ(t,Bn.x,Bn.y,Bn.z);return this}applyMatrix4(e){for(let t=0,n=this.count;t<n;t++)Bn.fromBufferAttribute(this,t),Bn.applyMatrix4(e),this.setXYZ(t,Bn.x,Bn.y,Bn.z);return this}applyNormalMatrix(e){for(let t=0,n=this.count;t<n;t++)Bn.fromBufferAttribute(this,t),Bn.applyNormalMatrix(e),this.setXYZ(t,Bn.x,Bn.y,Bn.z);return this}transformDirection(e){for(let t=0,n=this.count;t<n;t++)Bn.fromBufferAttribute(this,t),Bn.transformDirection(e),this.setXYZ(t,Bn.x,Bn.y,Bn.z);return this}set(e,t=0){return this.array.set(e,t),this}getComponent(e,t){let n=this.array[e*this.itemSize+t];return this.normalized&&(n=nt(n,this.array)),n}setComponent(e,t,n){return this.normalized&&(n=rt(n,this.array)),this.array[e*this.itemSize+t]=n,this}getX(e){let t=this.array[e*this.itemSize];return this.normalized&&(t=nt(t,this.array)),t}setX(e,t){return this.normalized&&(t=rt(t,this.array)),this.array[e*this.itemSize]=t,this}getY(e){let t=this.array[e*this.itemSize+1];return this.normalized&&(t=nt(t,this.array)),t}setY(e,t){return this.normalized&&(t=rt(t,this.array)),this.array[e*this.itemSize+1]=t,this}getZ(e){let t=this.array[e*this.itemSize+2];return this.normalized&&(t=nt(t,this.array)),t}setZ(e,t){return this.normalized&&(t=rt(t,this.array)),this.array[e*this.itemSize+2]=t,this}getW(e){let t=this.array[e*this.itemSize+3];return this.normalized&&(t=nt(t,this.array)),t}setW(e,t){return this.normalized&&(t=rt(t,this.array)),this.array[e*this.itemSize+3]=t,this}setXY(e,t,n){return e*=this.itemSize,this.normalized&&(t=rt(t,this.array),n=rt(n,this.array)),this.array[e+0]=t,this.array[e+1]=n,this}setXYZ(e,t,n,r){return e*=this.itemSize,this.normalized&&(t=rt(t,this.array),n=rt(n,this.array),r=rt(r,this.array)),this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=r,this}setXYZW(e,t,n,r,i){return e*=this.itemSize,this.normalized&&(t=rt(t,this.array),n=rt(n,this.array),r=rt(r,this.array),i=rt(i,this.array)),this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=r,this.array[e+3]=i,this}onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==``&&(e.name=this.name),this.usage!==35044&&(e.usage=this.usage),e}},Wn=class extends Un{constructor(e,t,n){super(new Uint16Array(e),t,n)}},Gn=class extends Un{constructor(e,t,n){super(new Uint32Array(e),t,n)}},Kn=class extends Un{constructor(e,t,n){super(new Float32Array(e),t,n)}},qn=new Tn,Jn=new D,Yn=new D,Xn=class{constructor(e=new D,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;t===void 0?qn.setFromPoints(e).getCenter(n):n.copy(t);let r=0;for(let t=0,i=e.length;t<i;t++)r=Math.max(r,n.distanceToSquared(e[t]));return this.radius=Math.sqrt(r),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){let t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius}clampPoint(e,t){let n=this.center.distanceToSquared(e);return t.copy(e),n>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius*=e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;Jn.subVectors(e,this.center);let t=Jn.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector(Jn,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Yn.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Jn.copy(e.center).add(Yn)),this.expandByPoint(Jn.copy(e.center).sub(Yn))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}},Zn=0,Qn=new Ot,$n=new tn,er=new D,tr=new Tn,nr=new Tn,rr=new D,ir=class e extends je{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Zn++}),this.uuid=Ie(),this.name=``,this.type=`BufferGeometry`,this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(Ce(e)?Gn:Wn)(e,1):this.index=e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,n=0){this.groups.push({start:e,count:t,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let t=new lt().getNormalMatrix(e);n.applyNormalMatrix(t),n.needsUpdate=!0}let r=this.attributes.tangent;return r!==void 0&&(r.transformDirection(e),r.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(e){return Qn.makeRotationFromQuaternion(e),this.applyMatrix4(Qn),this}rotateX(e){return Qn.makeRotationX(e),this.applyMatrix4(Qn),this}rotateY(e){return Qn.makeRotationY(e),this.applyMatrix4(Qn),this}rotateZ(e){return Qn.makeRotationZ(e),this.applyMatrix4(Qn),this}translate(e,t,n){return Qn.makeTranslation(e,t,n),this.applyMatrix4(Qn),this}scale(e,t,n){return Qn.makeScale(e,t,n),this.applyMatrix4(Qn),this}lookAt(e){return $n.lookAt(e),$n.updateMatrix(),this.applyMatrix4($n.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(er).negate(),this.translate(er.x,er.y,er.z),this}setFromPoints(e){let t=this.getAttribute(`position`);if(t===void 0){let t=[];for(let n=0,r=e.length;n<r;n++){let r=e[n];t.push(r.x,r.y,r.z||0)}this.setAttribute(`position`,new Kn(t,3))}else{let n=Math.min(e.length,t.count);for(let r=0;r<n;r++){let n=e[r];t.setXYZ(r,n.x,n.y,n.z||0)}e.length>t.count&&T(`BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry.`),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Tn);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){E(`BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.`,this),this.boundingBox.set(new D(-1/0,-1/0,-1/0),new D(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e<n;e++){let n=t[e];tr.setFromBufferAttribute(n),this.morphTargetsRelative?(rr.addVectors(this.boundingBox.min,tr.min),this.boundingBox.expandByPoint(rr),rr.addVectors(this.boundingBox.max,tr.max),this.boundingBox.expandByPoint(rr)):(this.boundingBox.expandByPoint(tr.min),this.boundingBox.expandByPoint(tr.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&E(`BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.`,this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new Xn);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){E(`BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.`,this),this.boundingSphere.set(new D,1/0);return}if(e){let n=this.boundingSphere.center;if(tr.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e<n;e++){let n=t[e];nr.setFromBufferAttribute(n),this.morphTargetsRelative?(rr.addVectors(tr.min,nr.min),tr.expandByPoint(rr),rr.addVectors(tr.max,nr.max),tr.expandByPoint(rr)):(tr.expandByPoint(nr.min),tr.expandByPoint(nr.max))}tr.getCenter(n);let r=0;for(let t=0,i=e.count;t<i;t++)rr.fromBufferAttribute(e,t),r=Math.max(r,n.distanceToSquared(rr));if(t)for(let i=0,a=t.length;i<a;i++){let a=t[i],o=this.morphTargetsRelative;for(let t=0,i=a.count;t<i;t++)rr.fromBufferAttribute(a,t),o&&(er.fromBufferAttribute(e,t),rr.add(er)),r=Math.max(r,n.distanceToSquared(rr))}this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&E(`BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.`,this)}}computeTangents(){let e=this.index,t=this.attributes;if(e===null||t.position===void 0||t.normal===void 0||t.uv===void 0){E(`BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)`);return}let n=t.position,r=t.normal,i=t.uv;this.hasAttribute(`tangent`)===!1&&this.setAttribute(`tangent`,new Un(new Float32Array(4*n.count),4));let a=this.getAttribute(`tangent`),o=[],s=[];for(let e=0;e<n.count;e++)o[e]=new D,s[e]=new D;let c=new D,l=new D,u=new D,d=new at,f=new at,p=new at,m=new D,h=new D;function g(e,t,r){c.fromBufferAttribute(n,e),l.fromBufferAttribute(n,t),u.fromBufferAttribute(n,r),d.fromBufferAttribute(i,e),f.fromBufferAttribute(i,t),p.fromBufferAttribute(i,r),l.sub(c),u.sub(c),f.sub(d),p.sub(d);let a=1/(f.x*p.y-p.x*f.y);isFinite(a)&&(m.copy(l).multiplyScalar(p.y).addScaledVector(u,-f.y).multiplyScalar(a),h.copy(u).multiplyScalar(f.x).addScaledVector(l,-p.x).multiplyScalar(a),o[e].add(m),o[t].add(m),o[r].add(m),s[e].add(h),s[t].add(h),s[r].add(h))}let _=this.groups;_.length===0&&(_=[{start:0,count:e.count}]);for(let t=0,n=_.length;t<n;++t){let n=_[t],r=n.start,i=n.count;for(let t=r,n=r+i;t<n;t+=3)g(e.getX(t+0),e.getX(t+1),e.getX(t+2))}let v=new D,y=new D,b=new D,x=new D;function S(e){b.fromBufferAttribute(r,e),x.copy(b);let t=o[e];v.copy(t),v.sub(b.multiplyScalar(b.dot(t))).normalize(),y.crossVectors(x,t);let n=y.dot(s[e])<0?-1:1;a.setXYZW(e,v.x,v.y,v.z,n)}for(let t=0,n=_.length;t<n;++t){let n=_[t],r=n.start,i=n.count;for(let t=r,n=r+i;t<n;t+=3)S(e.getX(t+0)),S(e.getX(t+1)),S(e.getX(t+2))}}computeVertexNormals(){let e=this.index,t=this.getAttribute(`position`);if(t!==void 0){let n=this.getAttribute(`normal`);if(n===void 0)n=new Un(new Float32Array(t.count*3),3),this.setAttribute(`normal`,n);else for(let e=0,t=n.count;e<t;e++)n.setXYZ(e,0,0,0);let r=new D,i=new D,a=new D,o=new D,s=new D,c=new D,l=new D,u=new D;if(e)for(let d=0,f=e.count;d<f;d+=3){let f=e.getX(d+0),p=e.getX(d+1),m=e.getX(d+2);r.fromBufferAttribute(t,f),i.fromBufferAttribute(t,p),a.fromBufferAttribute(t,m),l.subVectors(a,i),u.subVectors(r,i),l.cross(u),o.fromBufferAttribute(n,f),s.fromBufferAttribute(n,p),c.fromBufferAttribute(n,m),o.add(l),s.add(l),c.add(l),n.setXYZ(f,o.x,o.y,o.z),n.setXYZ(p,s.x,s.y,s.z),n.setXYZ(m,c.x,c.y,c.z)}else for(let e=0,o=t.count;e<o;e+=3)r.fromBufferAttribute(t,e+0),i.fromBufferAttribute(t,e+1),a.fromBufferAttribute(t,e+2),l.subVectors(a,i),u.subVectors(r,i),l.cross(u),n.setXYZ(e+0,l.x,l.y,l.z),n.setXYZ(e+1,l.x,l.y,l.z),n.setXYZ(e+2,l.x,l.y,l.z);this.normalizeNormals(),n.needsUpdate=!0}}normalizeNormals(){let e=this.attributes.normal;for(let t=0,n=e.count;t<n;t++)rr.fromBufferAttribute(e,t),rr.normalize(),e.setXYZ(t,rr.x,rr.y,rr.z)}toNonIndexed(){function t(e,t){let n=e.array,r=e.itemSize,i=e.normalized,a=new n.constructor(t.length*r),o=0,s=0;for(let i=0,c=t.length;i<c;i++){o=e.isInterleavedBufferAttribute?t[i]*e.data.stride+e.offset:t[i]*r;for(let e=0;e<r;e++)a[s++]=n[o++]}return new Un(a,r,i)}if(this.index===null)return T(`BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.`),this;let n=new e,r=this.index.array,i=this.attributes;for(let e in i){let a=i[e],o=t(a,r);n.setAttribute(e,o)}let a=this.morphAttributes;for(let e in a){let i=[],o=a[e];for(let e=0,n=o.length;e<n;e++){let n=o[e],a=t(n,r);i.push(a)}n.morphAttributes[e]=i}n.morphTargetsRelative=this.morphTargetsRelative;let o=this.groups;for(let e=0,t=o.length;e<t;e++){let t=o[e];n.addGroup(t.start,t.count,t.materialIndex)}return n}toJSON(){let e={metadata:{version:4.7,type:`BufferGeometry`,generator:`BufferGeometry.toJSON`}};if(e.uuid=this.uuid,e.type=this.type,this.name!==``&&(e.name=this.name),Object.keys(this.userData).length>0&&(e.userData=this.userData),this.parameters!==void 0){let t=this.parameters;for(let n in t)t[n]!==void 0&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let r=n[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},i=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,r=n.length;t<r;t++){let r=n[t];a.push(r.toJSON(e.data))}a.length>0&&(r[t]=a,i=!0)}i&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;n!==null&&this.setIndex(n.clone());let r=e.attributes;for(let e in r){let n=r[e];this.setAttribute(e,n.clone(t))}let i=e.morphAttributes;for(let e in i){let n=[],r=i[e];for(let e=0,i=r.length;e<i;e++)n.push(r[e].clone(t));this.morphAttributes[e]=n}this.morphTargetsRelative=e.morphTargetsRelative;let a=e.groups;for(let e=0,t=a.length;e<t;e++){let t=a[e];this.addGroup(t.start,t.count,t.materialIndex)}let o=e.boundingBox;o!==null&&(this.boundingBox=o.clone());let s=e.boundingSphere;return s!==null&&(this.boundingSphere=s.clone()),this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,this}dispose(){this.dispatchEvent({type:`dispose`})}},ar=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e===void 0?0:e.length/t,this.usage=ve,this.updateRanges=[],this.version=0,this.uuid=Ie()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let r=0,i=this.stride;r<i;r++)this.array[e+r]=t.array[n+r];return this}set(e,t=0){return this.array.set(e,t),this}clone(e){e.arrayBuffers===void 0&&(e.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=Ie()),e.arrayBuffers[this.array.buffer._uuid]===void 0&&(e.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);let t=new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(t,this.stride);return n.setUsage(this.usage),n}onUpload(e){return this.onUploadCallback=e,this}toJSON(e){return e.arrayBuffers===void 0&&(e.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=Ie()),e.arrayBuffers[this.array.buffer._uuid]===void 0&&(e.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}},or=new D,sr=class e{constructor(e,t,n,r=!1){this.isInterleavedBufferAttribute=!0,this.name=``,this.data=e,this.itemSize=t,this.offset=n,this.normalized=r}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(e){this.data.needsUpdate=e}applyMatrix4(e){for(let t=0,n=this.data.count;t<n;t++)or.fromBufferAttribute(this,t),or.applyMatrix4(e),this.setXYZ(t,or.x,or.y,or.z);return this}applyNormalMatrix(e){for(let t=0,n=this.count;t<n;t++)or.fromBufferAttribute(this,t),or.applyNormalMatrix(e),this.setXYZ(t,or.x,or.y,or.z);return this}transformDirection(e){for(let t=0,n=this.count;t<n;t++)or.fromBufferAttribute(this,t),or.transformDirection(e),this.setXYZ(t,or.x,or.y,or.z);return this}getComponent(e,t){let n=this.array[e*this.data.stride+this.offset+t];return this.normalized&&(n=nt(n,this.array)),n}setComponent(e,t,n){return this.normalized&&(n=rt(n,this.array)),this.data.array[e*this.data.stride+this.offset+t]=n,this}setX(e,t){return this.normalized&&(t=rt(t,this.array)),this.data.array[e*this.data.stride+this.offset]=t,this}setY(e,t){return this.normalized&&(t=rt(t,this.array)),this.data.array[e*this.data.stride+this.offset+1]=t,this}setZ(e,t){return this.normalized&&(t=rt(t,this.array)),this.data.array[e*this.data.stride+this.offset+2]=t,this}setW(e,t){return this.normalized&&(t=rt(t,this.array)),this.data.array[e*this.data.stride+this.offset+3]=t,this}getX(e){let t=this.data.array[e*this.data.stride+this.offset];return this.normalized&&(t=nt(t,this.array)),t}getY(e){let t=this.data.array[e*this.data.stride+this.offset+1];return this.normalized&&(t=nt(t,this.array)),t}getZ(e){let t=this.data.array[e*this.data.stride+this.offset+2];return this.normalized&&(t=nt(t,this.array)),t}getW(e){let t=this.data.array[e*this.data.stride+this.offset+3];return this.normalized&&(t=nt(t,this.array)),t}setXY(e,t,n){return e=e*this.data.stride+this.offset,this.normalized&&(t=rt(t,this.array),n=rt(n,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=n,this}setXYZ(e,t,n,r){return e=e*this.data.stride+this.offset,this.normalized&&(t=rt(t,this.array),n=rt(n,this.array),r=rt(r,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=n,this.data.array[e+2]=r,this}setXYZW(e,t,n,r,i){return e=e*this.data.stride+this.offset,this.normalized&&(t=rt(t,this.array),n=rt(n,this.array),r=rt(r,this.array),i=rt(i,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=n,this.data.array[e+2]=r,this.data.array[e+3]=i,this}clone(t){if(t===void 0){Oe(`InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.`);let e=[];for(let t=0;t<this.count;t++){let n=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[n+t])}return new Un(new this.array.constructor(e),this.itemSize,this.normalized)}else return t.interleavedBuffers===void 0&&(t.interleavedBuffers={}),t.interleavedBuffers[this.data.uuid]===void 0&&(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new e(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(e){if(e===void 0){Oe(`InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.`);let e=[];for(let t=0;t<this.count;t++){let n=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[n+t])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:e,normalized:this.normalized}}else return e.interleavedBuffers===void 0&&(e.interleavedBuffers={}),e.interleavedBuffers[this.data.uuid]===void 0&&(e.interleavedBuffers[this.data.uuid]=this.data.toJSON(e)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}},cr=0,lr=class extends je{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:cr++}),this.uuid=Ie(),this.name=``,this.type=`Material`,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new cn(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=_e,this.stencilZFail=_e,this.stencilZPass=_e,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let n=e[t];if(n===void 0){T(`Material: parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){T(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}r&&r.isColor?r.set(n):r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;t&&(e={textures:{},images:{}});let n={metadata:{version:4.7,type:`Material`,generator:`Material.toJSON`}};n.uuid=this.uuid,n.type=this.type,this.name!==``&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(n.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(n.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.shadowSide!==null&&(n.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==1&&(n.blending=this.blending),this.side!==0&&(n.side=this.side),this.vertexColors===!0&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.transparent===!0&&(n.transparent=!0),this.blendSrc!==204&&(n.blendSrc=this.blendSrc),this.blendDst!==205&&(n.blendDst=this.blendDst),this.blendEquation!==100&&(n.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(n.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(n.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(n.blendAlpha=this.blendAlpha),this.depthFunc!==3&&(n.depthFunc=this.depthFunc),this.depthTest===!1&&(n.depthTest=this.depthTest),this.depthWrite===!1&&(n.depthWrite=this.depthWrite),this.colorWrite===!1&&(n.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(n.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==519&&(n.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(n.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==7680&&(n.stencilFail=this.stencilFail),this.stencilZFail!==7680&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==7680&&(n.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(n.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(n.rotation=this.rotation),this.polygonOffset===!0&&(n.polygonOffset=!0),this.polygonOffsetFactor!==0&&(n.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(n.linewidth=this.linewidth),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.dithering===!0&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),this.alphaHash===!0&&(n.alphaHash=!0),this.alphaToCoverage===!0&&(n.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(n.premultipliedAlpha=!0),this.forceSinglePass===!0&&(n.forceSinglePass=!0),this.allowOverride===!1&&(n.allowOverride=!1),this.wireframe===!0&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==`round`&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==`round`&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(n.flatShading=!0),this.visible===!1&&(n.visible=!1),this.toneMapped===!1&&(n.toneMapped=!1),this.fog===!1&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData);function r(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(t){let t=r(e.textures),i=r(e.images);t.length>0&&(n.textures=t),i.length>0&&(n.images=i)}return n}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(t!==null){let e=t.length;n=Array(e);for(let r=0;r!==e;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:`dispose`})}set needsUpdate(e){e===!0&&this.version++}},ur=new D,dr=new D,fr=new D,pr=new D,mr=new D,hr=new D,gr=new D,_r=class{constructor(e=new D,t=new D(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,ur)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=ur.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(ur.copy(this.origin).addScaledVector(this.direction,t),ur.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){dr.copy(e).add(t).multiplyScalar(.5),fr.copy(t).sub(e).normalize(),pr.copy(this.origin).sub(dr);let i=e.distanceTo(t)*.5,a=-this.direction.dot(fr),o=pr.dot(this.direction),s=-pr.dot(fr),c=pr.lengthSq(),l=Math.abs(1-a*a),u,d,f,p;if(l>0)if(u=a*s-o,d=a*o-s,p=i*l,u>=0)if(d>=-p)if(d<=p){let e=1/l;u*=e,d*=e,f=u*(u+a*d+2*o)+d*(a*u+d+2*s)+c}else d=i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d=-i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d<=-p?(u=Math.max(0,-(-a*i+o)),d=u>0?-i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c):d<=p?(u=0,d=Math.min(Math.max(-i,-s),i),f=d*(d+2*s)+c):(u=Math.max(0,-(a*i+o)),d=u>0?i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c);else d=a>0?-i:i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),r&&r.copy(dr).addScaledVector(fr,d),f}intersectSphere(e,t){ur.subVectors(e.center,this.origin);let n=ur.dot(this.direction),r=ur.dot(ur)-n*n,i=e.radius*e.radius;if(r>i)return null;let a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(n=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),l>=0?(i=(e.min.y-d.y)*l,a=(e.max.y-d.y)*l):(i=(e.max.y-d.y)*l,a=(e.min.y-d.y)*l),n>a||i>r||((i>n||isNaN(n))&&(n=i),(a<r||isNaN(r))&&(r=a),u>=0?(o=(e.min.z-d.z)*u,s=(e.max.z-d.z)*u):(o=(e.max.z-d.z)*u,s=(e.min.z-d.z)*u),n>s||o>r)||((o>n||n!==n)&&(n=o),(s<r||r!==r)&&(r=s),r<0)?null:this.at(n>=0?n:r,t)}intersectsBox(e){return this.intersectBox(e,ur)!==null}intersectTriangle(e,t,n,r,i){mr.subVectors(t,e),hr.subVectors(n,e),gr.crossVectors(mr,hr);let a=this.direction.dot(gr),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;pr.subVectors(this.origin,e);let s=o*this.direction.dot(hr.crossVectors(pr,hr));if(s<0)return null;let c=o*this.direction.dot(mr.cross(pr));if(c<0||s+c>a)return null;let l=-o*pr.dot(gr);return l<0?null:this.at(l/a,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},vr=class extends lr{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type=`MeshBasicMaterial`,this.color=new cn(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Rt,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},yr=new Ot,br=new _r,xr=new Xn,Sr=new D,Cr=new D,wr=new D,Tr=new D,Er=new D,Dr=new D,Or=new D,kr=new D,Ar=class extends tn{constructor(e=new ir,t=new vr){super(),this.isMesh=!0,this.type=`Mesh`,this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e<t;e++){let t=n[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}getVertexPosition(e,t){let n=this.geometry,r=n.attributes.position,i=n.morphAttributes.position,a=n.morphTargetsRelative;t.fromBufferAttribute(r,e);let o=this.morphTargetInfluences;if(i&&o){Dr.set(0,0,0);for(let n=0,r=i.length;n<r;n++){let r=o[n],s=i[n];r!==0&&(Er.fromBufferAttribute(s,e),a?Dr.addScaledVector(Er,r):Dr.addScaledVector(Er.sub(t),r))}t.add(Dr)}return t}raycast(e,t){let n=this.geometry,r=this.material,i=this.matrixWorld;r!==void 0&&(n.boundingSphere===null&&n.computeBoundingSphere(),xr.copy(n.boundingSphere),xr.applyMatrix4(i),br.copy(e.ray).recast(e.near),!(xr.containsPoint(br.origin)===!1&&(br.intersectSphere(xr,Sr)===null||br.origin.distanceToSquared(Sr)>Math.pow(e.far-e.near,2)))&&(yr.copy(i).invert(),br.copy(e.ray).applyMatrix4(yr),!(n.boundingBox!==null&&br.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(e,t,br)))}_computeIntersections(e,t,n){let r,i=this.geometry,a=this.material,o=i.index,s=i.attributes.position,c=i.attributes.uv,l=i.attributes.uv1,u=i.attributes.normal,d=i.groups,f=i.drawRange;if(o!==null)if(Array.isArray(a))for(let i=0,s=d.length;i<s;i++){let s=d[i],p=a[s.materialIndex],m=Math.max(s.start,f.start),h=Math.min(o.count,Math.min(s.start+s.count,f.start+f.count));for(let i=m,a=h;i<a;i+=3){let a=o.getX(i),d=o.getX(i+1),f=o.getX(i+2);r=Mr(this,p,e,n,c,l,u,a,d,f),r&&(r.faceIndex=Math.floor(i/3),r.face.materialIndex=s.materialIndex,t.push(r))}}else{let i=Math.max(0,f.start),s=Math.min(o.count,f.start+f.count);for(let d=i,f=s;d<f;d+=3){let i=o.getX(d),s=o.getX(d+1),f=o.getX(d+2);r=Mr(this,a,e,n,c,l,u,i,s,f),r&&(r.faceIndex=Math.floor(d/3),t.push(r))}}else if(s!==void 0)if(Array.isArray(a))for(let i=0,o=d.length;i<o;i++){let o=d[i],p=a[o.materialIndex],m=Math.max(o.start,f.start),h=Math.min(s.count,Math.min(o.start+o.count,f.start+f.count));for(let i=m,a=h;i<a;i+=3){let a=i,s=i+1,d=i+2;r=Mr(this,p,e,n,c,l,u,a,s,d),r&&(r.faceIndex=Math.floor(i/3),r.face.materialIndex=o.materialIndex,t.push(r))}}else{let i=Math.max(0,f.start),o=Math.min(s.count,f.start+f.count);for(let s=i,d=o;s<d;s+=3){let i=s,o=s+1,d=s+2;r=Mr(this,a,e,n,c,l,u,i,o,d),r&&(r.faceIndex=Math.floor(s/3),t.push(r))}}}};function jr(e,t,n,r,i,a,o,s){let c;if(c=t.side===1?r.intersectTriangle(o,a,i,!0,s):r.intersectTriangle(i,a,o,t.side===0,s),c===null)return null;kr.copy(s),kr.applyMatrix4(e.matrixWorld);let l=n.ray.origin.distanceTo(kr);return l<n.near||l>n.far?null:{distance:l,point:kr.clone(),object:e}}function Mr(e,t,n,r,i,a,o,s,c,l){e.getVertexPosition(s,Cr),e.getVertexPosition(c,wr),e.getVertexPosition(l,Tr);let u=jr(e,t,n,r,Cr,wr,Tr,Or);if(u){let e=new D;wn.getBarycoord(Or,Cr,wr,Tr,e),i&&(u.uv=wn.getInterpolatedAttribute(i,s,c,l,e,new at)),a&&(u.uv1=wn.getInterpolatedAttribute(a,s,c,l,e,new at)),o&&(u.normal=wn.getInterpolatedAttribute(o,s,c,l,e,new D),u.normal.dot(r.direction)>0&&u.normal.multiplyScalar(-1));let t={a:s,b:c,c:l,normal:new D,materialIndex:0};wn.getNormal(Cr,wr,Tr,t.normal),u.face=t,u.barycoord=e}return u}var Nr=class extends wt{constructor(e=null,t=1,n=1,r,i,a,o,s,c=b,l=b,u,d){super(null,a,o,s,c,l,r,i,u,d),this.isDataTexture=!0,this.image={data:e,width:t,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},Pr=class extends Un{constructor(e,t,n,r=1){super(e,t,n),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=r}copy(e){return super.copy(e),this.meshPerAttribute=e.meshPerAttribute,this}toJSON(){let e=super.toJSON();return e.meshPerAttribute=this.meshPerAttribute,e.isInstancedBufferAttribute=!0,e}},Fr=new D,Ir=new D,Lr=new lt,Rr=class{constructor(e=new D(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,n,r){return this.normal.set(e,t,n),this.constant=r,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,n){let r=Fr.subVectors(n,t).cross(Ir.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(r,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t){let n=e.delta(Fr),r=this.normal.dot(n);if(r===0)return this.distanceToPoint(e.start)===0?t.copy(e.start):null;let i=-(e.start.dot(this.normal)+this.constant)/r;return i<0||i>1?null:t.copy(e.start).addScaledVector(n,i)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||Lr.getNormalMatrix(e),r=this.coplanarPoint(Fr).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},zr=class extends lr{constructor(e){super(),this.isLineBasicMaterial=!0,this.type=`LineBasicMaterial`,this.color=new cn(16777215),this.map=null,this.linewidth=1,this.linecap=`round`,this.linejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},Br=new D,Vr=new D,Hr=new Ot,Ur=new _r,Wr=new Xn,Gr=new D,Kr=new D,qr=class extends tn{constructor(e=new ir,t=new zr){super(),this.isLine=!0,this.type=`Line`,this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[0];for(let e=1,r=t.count;e<r;e++)Br.fromBufferAttribute(t,e-1),Vr.fromBufferAttribute(t,e),n[e]=n[e-1],n[e]+=Br.distanceTo(Vr);e.setAttribute(`lineDistance`,new Kn(n,1))}else T(`Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.`);return this}raycast(e,t){let n=this.geometry,r=this.matrixWorld,i=e.params.Line.threshold,a=n.drawRange;if(n.boundingSphere===null&&n.computeBoundingSphere(),Wr.copy(n.boundingSphere),Wr.applyMatrix4(r),Wr.radius+=i,e.ray.intersectsSphere(Wr)===!1)return;Hr.copy(r).invert(),Ur.copy(e.ray).applyMatrix4(Hr);let o=i/((this.scale.x+this.scale.y+this.scale.z)/3),s=o*o,c=this.isLineSegments?2:1,l=n.index,u=n.attributes.position;if(l!==null){let n=Math.max(0,a.start),r=Math.min(l.count,a.start+a.count);for(let i=n,a=r-1;i<a;i+=c){let n=l.getX(i),r=l.getX(i+1),a=Jr(this,e,Ur,s,n,r,i);a&&t.push(a)}if(this.isLineLoop){let i=l.getX(r-1),a=l.getX(n),o=Jr(this,e,Ur,s,i,a,r-1);o&&t.push(o)}}else{let n=Math.max(0,a.start),r=Math.min(u.count,a.start+a.count);for(let i=n,a=r-1;i<a;i+=c){let n=Jr(this,e,Ur,s,i,i+1,i);n&&t.push(n)}if(this.isLineLoop){let i=Jr(this,e,Ur,s,r-1,n,r-1);i&&t.push(i)}}}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e<t;e++){let t=n[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}};function Jr(e,t,n,r,i,a,o){let s=e.geometry.attributes.position;if(Br.fromBufferAttribute(s,i),Vr.fromBufferAttribute(s,a),n.distanceSqToSegment(Br,Vr,Gr,Kr)>r)return;Gr.applyMatrix4(e.matrixWorld);let c=t.ray.origin.distanceTo(Gr);if(!(c<t.near||c>t.far))return{distance:c,point:Kr.clone().applyMatrix4(e.matrixWorld),index:o,face:null,faceIndex:null,barycoord:null,object:e}}var Yr=new D,Xr=new D,Zr=class extends qr{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type=`LineSegments`}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[];for(let e=0,r=t.count;e<r;e+=2)Yr.fromBufferAttribute(t,e),Xr.fromBufferAttribute(t,e+1),n[e]=e===0?0:n[e-1],n[e+1]=n[e]+Yr.distanceTo(Xr);e.setAttribute(`lineDistance`,new Kn(n,1))}else T(`LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.`);return this}},Qr=class extends wt{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=b,this.minFilter=b,this.generateMipmaps=!1,this.needsUpdate=!0}},$r=class extends wt{constructor(e=[],t=301,n,r,i,a,o,s,c,l){super(e,t,n,r,i,a,o,s,c,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},ei=class extends wt{constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isCanvasTexture=!0,this.needsUpdate=!0}},ti=class extends wt{constructor(e,t,n=te,r,i,a,o=b,s=b,c,l=ie,u=1){if(l!==1026&&l!==1027)throw Error(`DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat`);super({width:e,height:t,depth:u},r,i,a,o,s,l,n,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new bt(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}},ni=class extends ti{constructor(e,t=te,n=301,r,i,a=b,o=b,s,c=ie){let l={width:e,height:e,depth:1},u=[l,l,l,l,l,l];super(e,e,t,n,r,i,a,o,s,c),this.image=u,this.isCubeDepthTexture=!0,this.isCubeTexture=!0}get images(){return this.image}set images(e){this.image=e}},ri=class e extends ir{constructor(e=1,t=1,n=1,r=1,i=1,a=1){super(),this.type=`BoxGeometry`,this.parameters={width:e,height:t,depth:n,widthSegments:r,heightSegments:i,depthSegments:a};let o=this;r=Math.floor(r),i=Math.floor(i),a=Math.floor(a);let s=[],c=[],l=[],u=[],d=0,f=0;p(`z`,`y`,`x`,-1,-1,n,t,e,a,i,0),p(`z`,`y`,`x`,1,-1,n,t,-e,a,i,1),p(`x`,`z`,`y`,1,1,e,n,t,r,a,2),p(`x`,`z`,`y`,1,-1,e,n,-t,r,a,3),p(`x`,`y`,`z`,1,-1,e,t,n,r,i,4),p(`x`,`y`,`z`,-1,-1,e,t,-n,r,i,5),this.setIndex(s),this.setAttribute(`position`,new Kn(c,3)),this.setAttribute(`normal`,new Kn(l,3)),this.setAttribute(`uv`,new Kn(u,2));function p(e,t,n,r,i,a,p,m,h,g,_){let v=a/h,y=p/g,b=a/2,x=p/2,S=m/2,C=h+1,ee=g+1,te=0,ne=0,w=new D;for(let a=0;a<ee;a++){let o=a*y-x;for(let s=0;s<C;s++)w[e]=(s*v-b)*r,w[t]=o*i,w[n]=S,c.push(w.x,w.y,w.z),w[e]=0,w[t]=0,w[n]=m>0?1:-1,l.push(w.x,w.y,w.z),u.push(s/h),u.push(1-a/g),te+=1}for(let e=0;e<g;e++)for(let t=0;t<h;t++){let n=d+t+C*e,r=d+t+C*(e+1),i=d+(t+1)+C*(e+1),a=d+(t+1)+C*e;s.push(n,r,a),s.push(r,i,a),ne+=6}o.addGroup(f,ne,_),f+=ne,d+=te}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}},ii=class e extends ir{constructor(e=1,t=32,n=0,r=Math.PI*2){super(),this.type=`CircleGeometry`,this.parameters={radius:e,segments:t,thetaStart:n,thetaLength:r},t=Math.max(3,t);let i=[],a=[],o=[],s=[],c=new D,l=new at;a.push(0,0,0),o.push(0,0,1),s.push(.5,.5);for(let i=0,u=3;i<=t;i++,u+=3){let d=n+i/t*r;c.x=e*Math.cos(d),c.y=e*Math.sin(d),a.push(c.x,c.y,c.z),o.push(0,0,1),l.x=(a[u]/e+1)/2,l.y=(a[u+1]/e+1)/2,s.push(l.x,l.y)}for(let e=1;e<=t;e++)i.push(e,e+1,0);this.setIndex(i),this.setAttribute(`position`,new Kn(a,3)),this.setAttribute(`normal`,new Kn(o,3)),this.setAttribute(`uv`,new Kn(s,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.radius,t.segments,t.thetaStart,t.thetaLength)}},ai=class e extends ir{constructor(e=1,t=1,n=1,r=32,i=1,a=!1,o=0,s=Math.PI*2){super(),this.type=`CylinderGeometry`,this.parameters={radiusTop:e,radiusBottom:t,height:n,radialSegments:r,heightSegments:i,openEnded:a,thetaStart:o,thetaLength:s};let c=this;r=Math.floor(r),i=Math.floor(i);let l=[],u=[],d=[],f=[],p=0,m=[],h=n/2,g=0;_(),a===!1&&(e>0&&v(!0),t>0&&v(!1)),this.setIndex(l),this.setAttribute(`position`,new Kn(u,3)),this.setAttribute(`normal`,new Kn(d,3)),this.setAttribute(`uv`,new Kn(f,2));function _(){let a=new D,_=new D,v=0,y=(t-e)/n;for(let c=0;c<=i;c++){let l=[],g=c/i,v=g*(t-e)+e;for(let e=0;e<=r;e++){let t=e/r,i=t*s+o,c=Math.sin(i),m=Math.cos(i);_.x=v*c,_.y=-g*n+h,_.z=v*m,u.push(_.x,_.y,_.z),a.set(c,y,m).normalize(),d.push(a.x,a.y,a.z),f.push(t,1-g),l.push(p++)}m.push(l)}for(let n=0;n<r;n++)for(let r=0;r<i;r++){let a=m[r][n],o=m[r+1][n],s=m[r+1][n+1],c=m[r][n+1];(e>0||r!==0)&&(l.push(a,o,c),v+=3),(t>0||r!==i-1)&&(l.push(o,s,c),v+=3)}c.addGroup(g,v,0),g+=v}function v(n){let i=p,a=new at,m=new D,_=0,v=n===!0?e:t,y=n===!0?1:-1;for(let e=1;e<=r;e++)u.push(0,h*y,0),d.push(0,y,0),f.push(.5,.5),p++;let b=p;for(let e=0;e<=r;e++){let t=e/r*s+o,n=Math.cos(t),i=Math.sin(t);m.x=v*i,m.y=h*y,m.z=v*n,u.push(m.x,m.y,m.z),d.push(0,y,0),a.x=n*.5+.5,a.y=i*.5*y+.5,f.push(a.x,a.y),p++}for(let e=0;e<r;e++){let t=i+e,r=b+e;n===!0?l.push(r,r+1,t):l.push(r+1,r,t),_+=3}c.addGroup(g,_,n===!0?1:2),g+=_}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}},oi=class e extends ai{constructor(e=1,t=1,n=32,r=1,i=!1,a=0,o=Math.PI*2){super(0,e,t,n,r,i,a,o),this.type=`ConeGeometry`,this.parameters={radius:e,height:t,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:a,thetaLength:o}}static fromJSON(t){return new e(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}},si=class{constructor(){this.type=`Curve`,this.arcLengthDivisions=200,this.needsUpdate=!1,this.cacheArcLengths=null}getPoint(){T(`Curve: .getPoint() not implemented.`)}getPointAt(e,t){let n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],n,r=this.getPoint(0),i=0;t.push(0);for(let a=1;a<=e;a++)n=this.getPoint(a/e),i+=n.distanceTo(r),t.push(i),r=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t=null){let n=this.getLengths(),r=0,i=n.length,a;a=t||e*n[i-1];let o=0,s=i-1,c;for(;o<=s;)if(r=Math.floor(o+(s-o)/2),c=n[r]-a,c<0)o=r+1;else if(c>0)s=r-1;else{s=r;break}if(r=s,n[r]===a)return r/(i-1);let l=n[r],u=n[r+1]-l,d=(a-l)/u;return(r+d)/(i-1)}getTangent(e,t){let n=1e-4,r=e-n,i=e+n;r<0&&(r=0),i>1&&(i=1);let a=this.getPoint(r),o=this.getPoint(i),s=t||(a.isVector2?new at:new D);return s.copy(o).sub(a).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t=!1){let n=new D,r=[],i=[],a=[],o=new D,s=new Ot;for(let t=0;t<=e;t++){let n=t/e;r[t]=this.getTangentAt(n,new D)}i[0]=new D,a[0]=new D;let c=Number.MAX_VALUE,l=Math.abs(r[0].x),u=Math.abs(r[0].y),d=Math.abs(r[0].z);l<=c&&(c=l,n.set(1,0,0)),u<=c&&(c=u,n.set(0,1,0)),d<=c&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(let t=1;t<=e;t++){if(i[t]=i[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>Number.EPSILON){o.normalize();let e=Math.acos(Le(r[t-1].dot(r[t]),-1,1));i[t].applyMatrix4(s.makeRotationAxis(o,e))}a[t].crossVectors(r[t],i[t])}if(t===!0){let t=Math.acos(Le(i[0].dot(i[e]),-1,1));t/=e,r[0].dot(o.crossVectors(i[0],i[e]))>0&&(t=-t);for(let n=1;n<=e;n++)i[n].applyMatrix4(s.makeRotationAxis(r[n],t*n)),a[n].crossVectors(r[n],i[n])}return{tangents:r,normals:i,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.7,type:`Curve`,generator:`Curve.toJSON`}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}};function ci(){let e=0,t=0,n=0,r=0;function i(i,a,o,s){e=i,t=o,n=-3*i+3*a-2*o-s,r=2*i-2*a+o+s}return{initCatmullRom:function(e,t,n,r,a){i(t,n,a*(n-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,n,r,a,o,s){let c=(t-e)/a-(n-e)/(a+o)+(n-t)/o,l=(n-t)/o-(r-t)/(o+s)+(r-n)/s;c*=o,l*=o,i(t,n,c,l)},calc:function(i){let a=i*i,o=a*i;return e+t*i+n*a+r*o}}}var li=new D,ui=new ci,di=new ci,fi=new ci,pi=class extends si{constructor(e=[],t=!1,n=`centripetal`,r=.5){super(),this.isCatmullRomCurve3=!0,this.type=`CatmullRomCurve3`,this.points=e,this.closed=t,this.curveType=n,this.tension=r}getPoint(e,t=new D){let n=t,r=this.points,i=r.length,a=(i-+!this.closed)*e,o=Math.floor(a),s=a-o;this.closed?o+=o>0?0:(Math.floor(Math.abs(o)/i)+1)*i:s===0&&o===i-1&&(o=i-2,s=1);let c,l;this.closed||o>0?c=r[(o-1)%i]:(li.subVectors(r[0],r[1]).add(r[0]),c=li);let u=r[o%i],d=r[(o+1)%i];if(this.closed||o+2<i?l=r[(o+2)%i]:(li.subVectors(r[i-1],r[i-2]).add(r[i-1]),l=li),this.curveType===`centripetal`||this.curveType===`chordal`){let e=this.curveType===`chordal`?.5:.25,t=Math.pow(c.distanceToSquared(u),e),n=Math.pow(u.distanceToSquared(d),e),r=Math.pow(d.distanceToSquared(l),e);n<1e-4&&(n=1),t<1e-4&&(t=n),r<1e-4&&(r=n),ui.initNonuniformCatmullRom(c.x,u.x,d.x,l.x,t,n,r),di.initNonuniformCatmullRom(c.y,u.y,d.y,l.y,t,n,r),fi.initNonuniformCatmullRom(c.z,u.z,d.z,l.z,t,n,r)}else this.curveType===`catmullrom`&&(ui.initCatmullRom(c.x,u.x,d.x,l.x,this.tension),di.initCatmullRom(c.y,u.y,d.y,l.y,this.tension),fi.initCatmullRom(c.z,u.z,d.z,l.z,this.tension));return n.set(ui.calc(s),di.calc(s),fi.calc(s)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(n.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,n=this.points.length;t<n;t++){let n=this.points[t];e.points.push(n.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(new D().fromArray(n))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}},mi=class e extends ir{constructor(e=.5,t=1,n=32,r=1,i=0,a=Math.PI*2){super(),this.type=`RingGeometry`,this.parameters={innerRadius:e,outerRadius:t,thetaSegments:n,phiSegments:r,thetaStart:i,thetaLength:a},n=Math.max(3,n),r=Math.max(1,r);let o=[],s=[],c=[],l=[],u=e,d=(t-e)/r,f=new D,p=new at;for(let e=0;e<=r;e++){for(let e=0;e<=n;e++){let r=i+e/n*a;f.x=u*Math.cos(r),f.y=u*Math.sin(r),s.push(f.x,f.y,f.z),c.push(0,0,1),p.x=(f.x/t+1)/2,p.y=(f.y/t+1)/2,l.push(p.x,p.y)}u+=d}for(let e=0;e<r;e++){let t=e*(n+1);for(let e=0;e<n;e++){let r=e+t,i=r,a=r+n+1,s=r+n+2,c=r+1;o.push(i,a,c),o.push(a,s,c)}}this.setIndex(o),this.setAttribute(`position`,new Kn(s,3)),this.setAttribute(`normal`,new Kn(c,3)),this.setAttribute(`uv`,new Kn(l,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.innerRadius,t.outerRadius,t.thetaSegments,t.phiSegments,t.thetaStart,t.thetaLength)}};function hi(e,t){return!e||e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}var gi=class{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r===void 0?new t.constructor(n):r,this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,r=t[n],i=t[n-1];validate_interval:{seek:{let a;linear_scan:{forward_scan:if(!(e<r)){for(let a=n+2;;){if(r===void 0){if(e<i)break forward_scan;return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===a)break;if(i=r,r=t[++n],e<r)break seek}a=t.length;break linear_scan}if(!(e>=i)){let o=t[1];e<o&&(n=2,i=o);for(let a=n-2;;){if(i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(r=i,i=t[--n-1],e>=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n<a;){let r=n+a>>>1;e<t[r]?a=r:n=r+1}if(r=t[n],i=t[n-1],i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(r===void 0)return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,i,r)}return this.interpolate_(n,i,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,i=e*r;for(let e=0;e!==r;++e)t[e]=n[i+e];return t}interpolate_(){throw Error(`call to abstract method`)}intervalChanged_(){}},_i=class extends gi{constructor(e,t,n,r){super(e,t,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:ue,endingEnd:ue}}intervalChanged_(e,t,n){let r=this.parameterPositions,i=e-2,a=e+1,o=r[i],s=r[a];if(o===void 0)switch(this.getSettings_().endingStart){case de:i=e,o=2*t-n;break;case fe:i=r.length-2,o=t+r[i]-r[i+1];break;default:i=e,o=n}if(s===void 0)switch(this.getSettings_().endingEnd){case de:a=e,s=2*n-t;break;case fe:a=1,s=n+r[1]-r[0];break;default:a=e-1,s=t}let c=(n-t)*.5,l=this.valueSize;this._weightPrev=c/(t-o),this._weightNext=c/(s-n),this._offsetPrev=i*l,this._offsetNext=a*l}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this._offsetPrev,u=this._offsetNext,d=this._weightPrev,f=this._weightNext,p=(n-t)/(r-t),m=p*p,h=m*p,g=-d*h+2*d*m-d*p,_=(1+d)*h+(-1.5-2*d)*m+(-.5+d)*p+1,v=(-1-f)*h+(1.5+f)*m+.5*p,y=f*h-f*m;for(let e=0;e!==o;++e)i[e]=g*a[l+e]+_*a[c+e]+v*a[s+e]+y*a[u+e];return i}},vi=class extends gi{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=(n-t)/(r-t),u=1-l;for(let e=0;e!==o;++e)i[e]=a[c+e]*u+a[s+e]*l;return i}},yi=class extends gi{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e){return this.copySampleValue_(e-1)}},bi=class extends gi{interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this.settings||this.DefaultSettings_,u=l.inTangents,d=l.outTangents;if(!u||!d){let e=(n-t)/(r-t),l=1-e;for(let t=0;t!==o;++t)i[t]=a[c+t]*l+a[s+t]*e;return i}let f=o*2,p=e-1;for(let l=0;l!==o;++l){let o=a[c+l],m=a[s+l],h=p*f+l*2,g=d[h],_=d[h+1],v=e*f+l*2,y=u[v],b=u[v+1],x=(n-t)/(r-t),S,C,ee,te,ne;for(let e=0;e<8;e++){S=x*x,C=S*x,ee=1-x,te=ee*ee,ne=te*ee;let e=ne*t+3*te*x*g+3*ee*S*y+C*r-n;if(Math.abs(e)<1e-10)break;let i=3*te*(g-t)+6*ee*x*(y-g)+3*S*(r-y);if(Math.abs(i)<1e-10)break;x-=e/i,x=Math.max(0,Math.min(1,x))}i[l]=ne*o+3*te*x*_+3*ee*S*b+C*m}return i}},xi=class{constructor(e,t,n,r){if(e===void 0)throw Error(`THREE.KeyframeTrack: track name is undefined`);if(t===void 0||t.length===0)throw Error(`THREE.KeyframeTrack: no keyframes in track named `+e);this.name=e,this.times=hi(t,this.TimeBufferType),this.values=hi(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,n;if(t.toJSON!==this.toJSON)n=t.toJSON(e);else{n={name:e.name,times:hi(e.times,Array),values:hi(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(n.interpolation=t)}return n.type=e.ValueTypeName,n}InterpolantFactoryMethodDiscrete(e){return new yi(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new vi(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new _i(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodBezier(e){let t=new bi(this.times,this.values,this.getValueSize(),e);return this.settings&&(t.settings=this.settings),t}setInterpolation(e){let t;switch(e){case oe:t=this.InterpolantFactoryMethodDiscrete;break;case se:t=this.InterpolantFactoryMethodLinear;break;case ce:t=this.InterpolantFactoryMethodSmooth;break;case le:t=this.InterpolantFactoryMethodBezier;break}if(t===void 0){let t=`unsupported interpolation for `+this.ValueTypeName+` keyframe track named `+this.name;if(this.createInterpolant===void 0)if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t);return T(`KeyframeTrack:`,t),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return oe;case this.InterpolantFactoryMethodLinear:return se;case this.InterpolantFactoryMethodSmooth:return ce;case this.InterpolantFactoryMethodBezier:return le}}getValueSize(){return this.values.length/this.times.length}shift(e){if(e!==0){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]+=e}return this}scale(e){if(e!==1){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]*=e}return this}trim(e,t){let n=this.times,r=n.length,i=0,a=r-1;for(;i!==r&&n[i]<e;)++i;for(;a!==-1&&n[a]>t;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(E(`KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(E(`KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){E(`KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){E(`KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&we(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){E(`KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===ce,i=e.length-1,a=1;for(let o=1;o<i;++o){let i=!1,s=e[o];if(s!==e[o+1]&&(o!==1||s!==e[0]))if(r)i=!0;else{let e=o*n,r=e-n,a=e+n;for(let o=0;o!==n;++o){let n=t[e+o];if(n!==t[r+o]||n!==t[a+o]){i=!0;break}}}if(i){if(o!==a){e[a]=e[o];let r=o*n,i=a*n;for(let e=0;e!==n;++e)t[i+e]=t[r+e]}++a}}if(i>0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};xi.prototype.ValueTypeName=``,xi.prototype.TimeBufferType=Float32Array,xi.prototype.ValueBufferType=Float32Array,xi.prototype.DefaultInterpolation=se;var Si=class extends xi{constructor(e,t,n){super(e,t,n)}};Si.prototype.ValueTypeName=`bool`,Si.prototype.ValueBufferType=Array,Si.prototype.DefaultInterpolation=oe,Si.prototype.InterpolantFactoryMethodLinear=void 0,Si.prototype.InterpolantFactoryMethodSmooth=void 0;var Ci=class extends xi{constructor(e,t,n,r){super(e,t,n,r)}};Ci.prototype.ValueTypeName=`color`;var wi=class extends xi{constructor(e,t,n,r){super(e,t,n,r)}};wi.prototype.ValueTypeName=`number`;var Ti=class extends gi{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)ot.slerpFlat(i,0,a,c-o,a,c,s);return i}},Ei=class extends xi{constructor(e,t,n,r){super(e,t,n,r)}InterpolantFactoryMethodLinear(e){return new Ti(this.times,this.values,this.getValueSize(),e)}};Ei.prototype.ValueTypeName=`quaternion`,Ei.prototype.InterpolantFactoryMethodSmooth=void 0;var Di=class extends xi{constructor(e,t,n){super(e,t,n)}};Di.prototype.ValueTypeName=`string`,Di.prototype.ValueBufferType=Array,Di.prototype.DefaultInterpolation=oe,Di.prototype.InterpolantFactoryMethodLinear=void 0,Di.prototype.InterpolantFactoryMethodSmooth=void 0;var Oi=class extends xi{constructor(e,t,n,r){super(e,t,n,r)}};Oi.prototype.ValueTypeName=`vector`;var ki=new class{constructor(e,t,n){let r=this,i=!1,a=0,o=0,s,c=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=n,this._abortController=null,this.itemStart=function(e){o++,i===!1&&r.onStart!==void 0&&r.onStart(e,a,o),i=!0},this.itemEnd=function(e){a++,r.onProgress!==void 0&&r.onProgress(e,a,o),a===o&&(i=!1,r.onLoad!==void 0&&r.onLoad())},this.itemError=function(e){r.onError!==void 0&&r.onError(e)},this.resolveURL=function(e){return s?s(e):e},this.setURLModifier=function(e){return s=e,this},this.addHandler=function(e,t){return c.push(e,t),this},this.removeHandler=function(e){let t=c.indexOf(e);return t!==-1&&c.splice(t,2),this},this.getHandler=function(e){for(let t=0,n=c.length;t<n;t+=2){let n=c[t],r=c[t+1];if(n.global&&(n.lastIndex=0),n.test(e))return r}return null},this.abort=function(){return this.abortController.abort(),this._abortController=null,this}}get abortController(){return this._abortController||(this._abortController=new AbortController),this._abortController}},Ai=class{constructor(e){this.manager=e===void 0?ki:e,this.crossOrigin=`anonymous`,this.withCredentials=!1,this.path=``,this.resourcePath=``,this.requestHeader={},typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}load(){}loadAsync(e,t){let n=this;return new Promise(function(r,i){n.load(e,r,t,i)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}abort(){return this}};Ai.DEFAULT_MATERIAL_NAME=`__DEFAULT`;var ji=new D,Mi=new ot,Ni=new D,Pi=class extends tn{constructor(){super(),this.isCamera=!0,this.type=`Camera`,this.matrixWorldInverse=new Ot,this.projectionMatrix=new Ot,this.projectionMatrixInverse=new Ot,this.coordinateSystem=be,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorld.decompose(ji,Mi,Ni),Ni.x===1&&Ni.y===1&&Ni.z===1?this.matrixWorldInverse.copy(this.matrixWorld).invert():this.matrixWorldInverse.compose(ji,Mi,Ni.set(1,1,1)).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorld.decompose(ji,Mi,Ni),Ni.x===1&&Ni.y===1&&Ni.z===1?this.matrixWorldInverse.copy(this.matrixWorld).invert():this.matrixWorldInverse.compose(ji,Mi,Ni.set(1,1,1)).invert()}clone(){return new this.constructor().copy(this)}},Fi=new D,Ii=new at,Li=new at,Ri=class extends Pi{constructor(e=50,t=1,n=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type=`PerspectiveCamera`,this.fov=e,this.zoom=1,this.near=n,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=Fe*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(Pe*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return Fe*2*Math.atan(Math.tan(Pe*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,n){Fi.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(Fi.x,Fi.y).multiplyScalar(-e/Fi.z),Fi.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(Fi.x,Fi.y).multiplyScalar(-e/Fi.z)}getViewSize(e,t){return this.getViewBounds(e,Ii,Li),t.subVectors(Li,Ii)}setViewOffset(e,t,n,r,i,a){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(Pe*.5*this.fov)/this.zoom,n=2*t,r=this.aspect*n,i=-.5*r,a=this.view;if(this.view!==null&&this.view.enabled){let e=a.fullWidth,o=a.fullHeight;i+=a.offsetX*r/e,t-=a.offsetY*n/o,r*=a.width/e,n*=a.height/o}let o=this.filmOffset;o!==0&&(i+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(i,i+r,t,t-n,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}},zi=class extends Pi{constructor(e=-1,t=1,n=1,r=-1,i=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type=`OrthographicCamera`,this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=n,this.bottom=r,this.near=i,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=e.view===null?null:Object.assign({},e.view),this}setViewOffset(e,t,n,r,i,a){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,r=(this.top+this.bottom)/2,i=n-e,a=n+e,o=r+t,s=r-t;if(this.view!==null&&this.view.enabled){let e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;i+=e*this.view.offsetX,a=i+e*this.view.width,o-=t*this.view.offsetY,s=o-t*this.view.height}this.projectionMatrix.makeOrthographic(i,a,o,s,this.near,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null&&(t.object.view=Object.assign({},this.view)),t}},Bi=`\\[\\]\\.:\\/`,Vi=RegExp(`[\\[\\]\\.:\\/]`,`g`),Hi=`[^\\[\\]\\.:\\/]`,Ui=`[^`+Bi.replace(`\\.`,``)+`]`,Wi=`((?:WC+[\\/:])*)`.replace(`WC`,Hi),Gi=`(WCOD+)?`.replace(`WCOD`,Ui),Ki=`(?:\\.(WC+)(?:\\[(.+)\\])?)?`.replace(`WC`,Hi),qi=`\\.(WC+)(?:\\[(.+)\\])?`.replace(`WC`,Hi),Ji=RegExp(`^`+Wi+Gi+Ki+qi+`$`),Yi=[`material`,`materials`,`bones`,`map`],Xi=class{constructor(e,t,n){let r=n||Zi.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},Zi=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\s/g,`_`).replace(Vi,``)}static parseTrackName(e){let t=Ji.exec(e);if(t===null)throw Error(`PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);Yi.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e){for(let r=0;r<e.length;r++){let i=e[r];if(i.name===t||i.uuid===t)return i;let a=n(i.children);if(a)return a}return null},r=n(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)e[t++]=n[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let t=this.node,n=this.parsedPath,r=n.objectName,i=n.propertyName,a=n.propertyIndex;if(t||(t=e.findNode(this.rootNode,n.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){T(`PropertyBinding: No target node found for track: `+this.path+`.`);return}if(r){let e=n.objectIndex;switch(r){case`materials`:if(!t.material){E(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.materials){E(`PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.`,this);return}t=t.material.materials;break;case`bones`:if(!t.skeleton){E(`PropertyBinding: Can not bind to bones as node does not have a skeleton.`,this);return}t=t.skeleton.bones;for(let n=0;n<t.length;n++)if(t[n].name===e){e=n;break}break;case`map`:if(`map`in t){t=t.map;break}if(!t.material){E(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.map){E(`PropertyBinding: Can not bind to material.map as node.material does not have a map.`,this);return}t=t.material.map;break;default:if(t[r]===void 0){E(`PropertyBinding: Can not bind to objectName of node undefined.`,this);return}t=t[r]}if(e!==void 0){if(t[e]===void 0){E(`PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.`,this,t);return}t=t[e]}}let o=t[i];if(o===void 0){let e=n.nodeName;E(`PropertyBinding: Trying to update property for track: `+e+`.`+i+` but it wasn't found.`,t);return}let s=this.Versioning.None;this.targetObject=t,t.isMaterial===!0?s=this.Versioning.NeedsUpdate:t.isObject3D===!0&&(s=this.Versioning.MatrixWorldNeedsUpdate);let c=this.BindingType.Direct;if(a!==void 0){if(i===`morphTargetInfluences`){if(!t.geometry){E(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.`,this);return}if(!t.geometry.morphAttributes){E(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.`,this);return}t.morphTargetDictionary[a]!==void 0&&(a=t.morphTargetDictionary[a])}c=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=a}else o.fromArray!==void 0&&o.toArray!==void 0?(c=this.BindingType.HasFromToArray,this.resolvedProperty=o):Array.isArray(o)?(c=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=i;this.getValue=this.GetterByBindingType[c],this.setValue=this.SetterByBindingTypeAndVersioning[c][s]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};Zi.Composite=Xi,Zi.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Zi.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},Zi.prototype.GetterByBindingType=[Zi.prototype._getValue_direct,Zi.prototype._getValue_array,Zi.prototype._getValue_arrayElement,Zi.prototype._getValue_toArray],Zi.prototype.SetterByBindingTypeAndVersioning=[[Zi.prototype._setValue_direct,Zi.prototype._setValue_direct_setNeedsUpdate,Zi.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[Zi.prototype._setValue_array,Zi.prototype._setValue_array_setNeedsUpdate,Zi.prototype._setValue_array_setMatrixWorldNeedsUpdate],[Zi.prototype._setValue_arrayElement,Zi.prototype._setValue_arrayElement_setNeedsUpdate,Zi.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[Zi.prototype._setValue_fromArray,Zi.prototype._setValue_fromArray_setNeedsUpdate,Zi.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var Qi=class extends ar{constructor(e,t,n=1){super(e,t),this.isInstancedInterleavedBuffer=!0,this.meshPerAttribute=n}copy(e){return super.copy(e),this.meshPerAttribute=e.meshPerAttribute,this}clone(e){let t=super.clone(e);return t.meshPerAttribute=this.meshPerAttribute,t}toJSON(e){let t=super.toJSON(e);return t.isInstancedInterleavedBuffer=!0,t.meshPerAttribute=this.meshPerAttribute,t}},$i=new Ot,ea=class{constructor(e,t,n=0,r=1/0){this.ray=new _r(e,t),this.near=n,this.far=r,this.camera=null,this.layers=new zt,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(e,t){this.ray.set(e,t)}setFromCamera(e,t){t.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(t.matrixWorld),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t):t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t):E(`Raycaster: Unsupported camera type: `+t.type)}setFromXRController(e){return $i.identity().extractRotation(e.matrixWorld),this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(0,0,-1).applyMatrix4($i),this}intersectObject(e,t=!0,n=[]){return na(e,this,n,t),n.sort(ta),n}intersectObjects(e,t=!0,n=[]){for(let r=0,i=e.length;r<i;r++)na(e[r],this,n,t);return n.sort(ta),n}};function ta(e,t){return e.distance-t.distance}function na(e,t,n,r){let i=!0;if(e.layers.test(t.layers)&&e.raycast(t,n)===!1&&(i=!1),i===!0&&r===!0){let r=e.children;for(let e=0,i=r.length;e<i;e++)na(r[e],t,n,!0)}}var ra=class e{constructor(t,n,r,i){e.prototype.isMatrix2=!0,this.elements=[1,0,0,1],t!==void 0&&this.set(t,n,r,i)}identity(){return this.set(1,0,0,1),this}fromArray(e,t=0){for(let n=0;n<4;n++)this.elements[n]=e[n+t];return this}set(e,t,n,r){let i=this.elements;return i[0]=e,i[2]=t,i[1]=n,i[3]=r,this}},ia=new D,aa=new D,oa=new D,sa=new D,ca=new D,la=new D,ua=new D,da=class{constructor(e=new D,t=new D){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){ia.subVectors(e,this.start),aa.subVectors(this.end,this.start);let n=aa.dot(aa),r=aa.dot(ia)/n;return t&&(r=Le(r,0,1)),r}closestPointToPoint(e,t,n){let r=this.closestPointToPointParameter(e,t);return this.delta(n).multiplyScalar(r).add(this.start)}distanceSqToLine3(e,t=la,n=ua){let r=1e-8*1e-8,i,a,o=this.start,s=e.start,c=this.end,l=e.end;oa.subVectors(c,o),sa.subVectors(l,s),ca.subVectors(o,s);let u=oa.dot(oa),d=sa.dot(sa),f=sa.dot(ca);if(u<=r&&d<=r)return t.copy(o),n.copy(s),t.sub(n),t.dot(t);if(u<=r)i=0,a=f/d,a=Le(a,0,1);else{let e=oa.dot(ca);if(d<=r)a=0,i=Le(-e/u,0,1);else{let t=oa.dot(sa),n=u*d-t*t;i=n===0?0:Le((t*f-e*d)/n,0,1),a=(t*i+f)/d,a<0?(a=0,i=Le(-e/u,0,1)):a>1&&(a=1,i=Le((t-e)/u,0,1))}}return t.copy(o).addScaledVector(oa,i),n.copy(s).addScaledVector(sa,a),t.distanceToSquared(n)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}};typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`register`,{detail:{revision:`183`}})),typeof window<`u`&&(window.__THREE__?T(`WARNING: Multiple instances of Three.js being imported.`):window.__THREE__=`183`);var fa=`alphaMap.alphaTest.anisotropy.anisotropyMap.anisotropyRotation.aoMap.aoMapIntensity.attenuationColor.attenuationDistance.bumpMap.clearcoat.clearcoatMap.clearcoatNormalMap.clearcoatNormalScale.clearcoatRoughness.color.dispersion.displacementMap.emissive.emissiveIntensity.emissiveMap.envMap.envMapIntensity.gradientMap.ior.iridescence.iridescenceIOR.iridescenceMap.iridescenceThicknessMap.lightMap.lightMapIntensity.map.matcap.metalness.metalnessMap.normalMap.normalScale.opacity.roughness.roughnessMap.sheen.sheenColor.sheenColorMap.sheenRoughnessMap.shininess.specular.specularColor.specularColorMap.specularIntensity.specularIntensityMap.specularMap.thickness.transmission.transmissionMap`.split(`.`),pa=new WeakMap,ma=class{constructor(e){this.renderObjects=new WeakMap,this.hasNode=this.containsNode(e),this.hasAnimation=e.object.isSkinnedMesh===!0,this.refreshUniforms=fa,this.renderId=0}firstInitialization(e){return this.renderObjects.has(e)===!1?(this.getRenderObjectData(e),!0):!1}needsVelocity(e){let t=e.getMRT();return t!==null&&t.has(`velocity`)}getRenderObjectData(e){let t=this.renderObjects.get(e);if(t===void 0){let{geometry:n,material:r,object:i}=e;if(t={material:this.getMaterialData(r),geometry:{id:n.id,attributes:this.getAttributesData(n.attributes),indexId:n.index?n.index.id:null,indexVersion:n.index?n.index.version:null,drawRange:{start:n.drawRange.start,count:n.drawRange.count}},worldMatrix:i.matrixWorld.clone()},i.center&&(t.center=i.center.clone()),i.morphTargetInfluences&&(t.morphTargetInfluences=i.morphTargetInfluences.slice()),e.bundle!==null&&(t.version=e.bundle.version),t.material.transmission>0){let{width:n,height:r}=e.context;t.bufferWidth=n,t.bufferHeight=r}t.lights=this.getLightsData(e.lightsNode.getLights()),this.renderObjects.set(e,t)}return t}getAttributesData(e){let t={};for(let n in e){let r=e[n];t[n]={id:r.id,version:r.version}}return t}containsNode(e){let t=e.material;for(let e in t)if(t[e]&&t[e].isNode)return!0;return!!(e.context.modelViewMatrix||e.context.modelNormalViewMatrix||e.context.getAO||e.context.getShadow)}getMaterialData(e){let t={};for(let n of this.refreshUniforms){let r=e[n];r!=null&&(typeof r==`object`&&r.clone!==void 0?r.isTexture===!0?t[n]={id:r.id,version:r.version}:t[n]=r.clone():t[n]=r)}return t}equals(e,t){let{object:n,material:r,geometry:i}=e,a=this.getRenderObjectData(e);if(a.worldMatrix.equals(n.matrixWorld)!==!0)return a.worldMatrix.copy(n.matrixWorld),!1;let o=a.material;for(let e in o){let t=o[e],n=r[e];if(t.equals!==void 0){if(t.equals(n)===!1)return t.copy(n),!1}else if(n.isTexture===!0){if(t.id!==n.id||t.version!==n.version)return t.id=n.id,t.version=n.version,!1}else if(t!==n)return o[e]=n,!1}if(o.transmission>0){let{width:t,height:n}=e.context;if(a.bufferWidth!==t||a.bufferHeight!==n)return a.bufferWidth=t,a.bufferHeight=n,!1}let s=a.geometry,c=i.attributes,l=s.attributes,u=Object.keys(l),d=Object.keys(c);if(s.id!==i.id)return s.id=i.id,!1;if(u.length!==d.length)return a.geometry.attributes=this.getAttributesData(c),!1;for(let e of u){let t=l[e],n=c[e];if(n===void 0)return delete l[e],!1;if(t.id!==n.id||t.version!==n.version)return t.id=n.id,t.version=n.version,!1}let f=i.index,p=s.indexId,m=s.indexVersion,h=f?f.id:null,g=f?f.version:null;if(p!==h||m!==g)return s.indexId=h,s.indexVersion=g,!1;if(s.drawRange.start!==i.drawRange.start||s.drawRange.count!==i.drawRange.count)return s.drawRange.start=i.drawRange.start,s.drawRange.count=i.drawRange.count,!1;if(a.morphTargetInfluences){let e=!1;for(let t=0;t<a.morphTargetInfluences.length;t++)a.morphTargetInfluences[t]!==n.morphTargetInfluences[t]&&(a.morphTargetInfluences[t]=n.morphTargetInfluences[t],e=!0);if(e)return!1}if(a.lights){for(let e=0;e<t.length;e++)if(a.lights[e].map!==t[e].map)return!1}return a.center&&a.center.equals(n.center)===!1?(a.center.copy(n.center),!0):(e.bundle!==null&&(a.version=e.bundle.version),!0)}getLightsData(e){let t=[];for(let n of e)n.isSpotLight===!0&&n.map!==null&&t.push({map:n.map.version});return t}getLights(e,t){if(pa.has(e)){let n=pa.get(e);if(n.renderId===t)return n.lightsData}let n=this.getLightsData(e.getLights());return pa.set(e,{renderId:t,lightsData:n}),n}needsRefresh(e,t){if(this.hasNode||this.hasAnimation||this.firstInitialization(e)||this.needsVelocity(t.renderer))return!0;let{renderId:n}=t;if(this.renderId!==n)return this.renderId=n,!0;let r=e.object.static===!0,i=e.bundle!==null&&e.bundle.static===!0&&this.getRenderObjectData(e).version===e.bundle.version;if(r||i)return!1;let a=this.getLights(e.lightsNode,n);return this.equals(e,a)!==!0}},ha=[/^StackTrace\.js$/,/^TSLCore\.js$/,/^.*Node\.js$/,/^three\.webgpu.*\.js$/];function ga(e){let t=/(?:at\s+(.+?)\s+\()?(?:(.+?)@)?([^@\s()]+):(\d+):(\d+)/;return e.split(`
277
+ `).map(e=>{let n=e.match(t);if(!n)return null;let r=n[1]||n[2]||``,i=n[3].split(`?`)[0],a=parseInt(n[4],10),o=parseInt(n[5],10);return{fn:r,file:i.split(`/`).pop(),line:a,column:o}}).filter(e=>e&&!ha.some(t=>t.test(e.file)))}var _a=class{constructor(e=null){this.isStackTrace=!0,this.stack=ga(e||Error().stack)}getLocation(){if(this.stack.length===0)return`[Unknown location]`;let e=this.stack[0],t=e.fn;return`${t?`"${t}()" at `:``}"${e.file}:${e.line}"`}getError(e){return this.stack.length===0?e:`${e}\n${this.stack.map(e=>{let t=`${e.file}:${e.line}:${e.column}`;return e.fn?` at ${e.fn} (${t})`:` at ${t}`}).join(`
278
+ `)}`}};function va(e,t=0){let n=3735928559^t,r=1103547991^t;if(e instanceof Array)for(let t=0,i;t<e.length;t++)i=e[t],n=Math.imul(n^i,2654435761),r=Math.imul(r^i,1597334677);else for(let t=0,i;t<e.length;t++)i=e.charCodeAt(t),n=Math.imul(n^i,2654435761),r=Math.imul(r^i,1597334677);return n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)}var ya=e=>va(e),ba=e=>va(e),xa=(...e)=>va(e),Sa=new Map([[1,`float`],[2,`vec2`],[3,`vec3`],[4,`vec4`],[9,`mat3`],[16,`mat4`]]),Ca=new WeakMap;function wa(e){return Sa.get(e)}function Ta(e){if(/[iu]?vec\d/.test(e))return e.startsWith(`ivec`)?Int32Array:e.startsWith(`uvec`)?Uint32Array:Float32Array;if(/mat\d/.test(e)||/float/.test(e))return Float32Array;if(/uint/.test(e))return Uint32Array;if(/int/.test(e))return Int32Array;throw Error(`THREE.NodeUtils: Unsupported type: ${e}`)}function Ea(e){if(/float|int|uint/.test(e))return 1;if(/vec2/.test(e))return 2;if(/vec3/.test(e))return 3;if(/vec4/.test(e)||/mat2/.test(e))return 4;if(/mat3/.test(e))return 9;if(/mat4/.test(e))return 16;E(`TSL: Unsupported type: ${e}`,new _a)}function Da(e){if(/float|int|uint/.test(e))return 1;if(/vec2/.test(e))return 2;if(/vec3/.test(e))return 3;if(/vec4/.test(e)||/mat2/.test(e))return 4;if(/mat3/.test(e))return 12;if(/mat4/.test(e))return 16;E(`TSL: Unsupported type: ${e}`,new _a)}function Oa(e){if(/float|int|uint/.test(e))return 4;if(/vec2/.test(e))return 8;if(/vec3/.test(e)||/vec4/.test(e))return 16;if(/mat2/.test(e))return 8;if(/mat3/.test(e)||/mat4/.test(e))return 16;E(`TSL: Unsupported type: ${e}`,new _a)}function ka(e){if(e==null)return null;let t=typeof e;return e.isNode===!0?`node`:t===`number`?`float`:t===`boolean`?`bool`:t===`string`?`string`:t===`function`?`shader`:e.isVector2===!0?`vec2`:e.isVector3===!0?`vec3`:e.isVector4===!0?`vec4`:e.isMatrix2===!0?`mat2`:e.isMatrix3===!0?`mat3`:e.isMatrix4===!0?`mat4`:e.isColor===!0?`color`:e instanceof ArrayBuffer?`ArrayBuffer`:null}function Aa(e,...t){let n=e?e.slice(-4):void 0;return t.length===1&&(n===`vec2`?t=[t[0],t[0]]:n===`vec3`?t=[t[0],t[0],t[0]]:n===`vec4`&&(t=[t[0],t[0],t[0],t[0]])),e===`color`?new cn(...t):n===`vec2`?new at(...t):n===`vec3`?new D(...t):n===`vec4`?new Tt(...t):n===`mat2`?new ra(...t):n===`mat3`?new lt(...t):n===`mat4`?new Ot(...t):e===`bool`?t[0]||!1:e===`float`||e===`int`||e===`uint`?t[0]||0:e===`string`?t[0]||``:e===`ArrayBuffer`?Na(t[0]):null}function ja(e){let t=Ca.get(e);return t===void 0&&(t={},Ca.set(e,t)),t}function Ma(e){let t=``,n=new Uint8Array(e);for(let e=0;e<n.length;e++)t+=String.fromCharCode(n[e]);return btoa(t)}function Na(e){return Uint8Array.from(atob(e),e=>e.charCodeAt(0)).buffer}var Pa={VERTEX:`vertex`,FRAGMENT:`fragment`},Fa={NONE:`none`,FRAME:`frame`,RENDER:`render`,OBJECT:`object`},Ia={BOOLEAN:`bool`,INTEGER:`int`,FLOAT:`float`,VECTOR2:`vec2`,VECTOR3:`vec3`,VECTOR4:`vec4`,MATRIX2:`mat2`,MATRIX3:`mat3`,MATRIX4:`mat4`},La={READ_ONLY:`readOnly`,WRITE_ONLY:`writeOnly`,READ_WRITE:`readWrite`},Ra=[`fragment`,`vertex`],za=[`setup`,`analyze`,`generate`],Ba=[...Ra,`compute`],Va=[`x`,`y`,`z`,`w`],Ha={analyze:`setup`,generate:`analyze`},Ua=0,O=class e extends je{static get type(){return`Node`}constructor(t=null){super(),this.nodeType=t,this.updateType=Fa.NONE,this.updateBeforeType=Fa.NONE,this.updateAfterType=Fa.NONE,this.uuid=it.generateUUID(),this.version=0,this.name=``,this.global=!1,this.parents=!1,this.isNode=!0,this._beforeNodes=null,this._cacheKey=null,this._cacheKeyVersion=0,Object.defineProperty(this,"id",{value:Ua++}),this.stackTrace=null,e.captureStackTrace===!0&&(this.stackTrace=new _a)}set needsUpdate(e){e===!0&&this.version++}get type(){return this.constructor.type}onUpdate(e,t){return this.updateType=t,this.update=e.bind(this),this}onFrameUpdate(e){return this.onUpdate(e,Fa.FRAME)}onRenderUpdate(e){return this.onUpdate(e,Fa.RENDER)}onObjectUpdate(e){return this.onUpdate(e,Fa.OBJECT)}onReference(e){return this.updateReference=e.bind(this),this}updateReference(){return this}isGlobal(){return this.global}*getChildren(){for(let{childNode:e}of this._getChildren())yield e}dispose(){this.dispatchEvent({type:`dispose`})}traverse(e){e(this);for(let t of this.getChildren())t.traverse(e)}_getChildren(e=new Set){let t=[];e.add(this);for(let n of Object.getOwnPropertyNames(this)){let r=this[n];if(!(n.startsWith(`_`)===!0||e.has(r))){if(Array.isArray(r)===!0)for(let e=0;e<r.length;e++){let i=r[e];i&&i.isNode===!0&&t.push({property:n,index:e,childNode:i})}else if(r&&r.isNode===!0)t.push({property:n,childNode:r});else if(r&&Object.getPrototypeOf(r)===Object.prototype)for(let e in r){if(e.startsWith(`_`)===!0)continue;let i=r[e];i&&i.isNode===!0&&t.push({property:n,index:e,childNode:i})}}}return t}getCacheKey(e=!1,t=null){if(e=e||this.version!==this._cacheKeyVersion,e===!0||this._cacheKey===null){t===null&&(t=new Set);let n=[];for(let{property:r,childNode:i}of this._getChildren(t))n.push(ya(r.slice(0,-4)),i.getCacheKey(e,t));this._cacheKey=xa(ba(n),this.customCacheKey()),this._cacheKeyVersion=this.version}return this._cacheKey}customCacheKey(){return this.id}getScope(){return this}getHash(){return this.uuid}getUpdateType(){return this.updateType}getUpdateBeforeType(){return this.updateBeforeType}getUpdateAfterType(){return this.updateAfterType}getElementType(e){let t=this.getNodeType(e);return e.getElementType(t)}getMemberType(){return`void`}getNodeType(e){let t=e.getNodeProperties(this);return t.outputNode?t.outputNode.getNodeType(e):this.nodeType}getShared(e){let t=this.getHash(e);return e.getNodeFromHash(t)||this}getArrayCount(){return null}setup(e){let t=e.getNodeProperties(this),n=0;for(let e of this.getChildren())t[`node`+n++]=e;return t.outputNode||null}analyze(e,t=null){let n=e.increaseUsage(this);if(this.parents===!0){let n=e.getDataFromNode(this,`any`);n.stages=n.stages||{},n.stages[e.shaderStage]=n.stages[e.shaderStage]||[],n.stages[e.shaderStage].push(t)}if(n===1){let t=e.getNodeProperties(this);for(let n of Object.values(t))n&&n.isNode===!0&&n.build(e,this)}}generate(e,t){let{outputNode:n}=e.getNodeProperties(this);if(n&&n.isNode===!0)return n.build(e,t)}updateBefore(){T(`Abstract function.`)}updateAfter(){T(`Abstract function.`)}update(){T(`Abstract function.`)}before(e){return this._beforeNodes===null&&(this._beforeNodes=[]),this._beforeNodes.push(e),this}build(e,t=null){let n=this.getShared(e);if(this!==n)return n.build(e,t);if(this._beforeNodes!==null){let n=this._beforeNodes;this._beforeNodes=null;for(let r of n)r.build(e,t);this._beforeNodes=n}let r=e.getDataFromNode(this);r.buildStages=r.buildStages||{},r.buildStages[e.buildStage]=!0;let i=Ha[e.buildStage];if(i&&r.buildStages[i]!==!0){let t=e.getBuildStage();e.setBuildStage(i),this.build(e),e.setBuildStage(t)}e.addChain(this);let a=null,o=e.getBuildStage();if(o===`setup`){e.addNode(this),this.updateReference(e);let t=e.getNodeProperties(this);if(t.initialized!==!0){t.initialized=!0,t.outputNode=this.setup(e)||t.outputNode||null;for(let n of Object.values(t))if(n&&n.isNode===!0){if(n.parents===!0){let t=e.getNodeProperties(n);t.parents=t.parents||[],t.parents.push(this)}n.build(e)}e.addSequentialNode(this)}a=t.outputNode}else if(o===`analyze`)this.analyze(e,t);else if(o===`generate`){if(this.generate.length<2){let n=this.getNodeType(e),r=e.getDataFromNode(this);a=r.snippet,a===void 0?r.generated===void 0?(r.generated=!0,a=this.generate(e)||``,r.snippet=a):(T(`Node: Recursion detected.`,this),a=`/* Recursion detected. */`):r.flowCodes!==void 0&&e.context.nodeBlock!==void 0&&e.addFlowCodeHierarchy(this,e.context.nodeBlock),a=e.format(a,n,t)}else a=this.generate(e,t)||``;a===``&&t!==null&&t!==`void`&&t!==`OutputType`&&(E(`TSL: Invalid generated code, expected a "${t}".`),a=e.generateConst(t))}return e.removeChain(this),a}getSerializeChildren(){return this._getChildren()}serialize(e){let t=this.getSerializeChildren(),n={};for(let{property:r,index:i,childNode:a}of t)i===void 0?n[r]=a.toJSON(e.meta).uuid:(n[r]===void 0&&(n[r]=Number.isInteger(i)?[]:{}),n[r][i]=a.toJSON(e.meta).uuid);Object.keys(n).length>0&&(e.inputNodes=n)}deserialize(e){if(e.inputNodes!==void 0){let t=e.meta.nodes;for(let n in e.inputNodes)if(Array.isArray(e.inputNodes[n])){let r=[];for(let i of e.inputNodes[n])r.push(t[i]);this[n]=r}else if(typeof e.inputNodes[n]==`object`){let r={};for(let i in e.inputNodes[n])r[i]=t[e.inputNodes[n][i]];this[n]=r}else{let r=e.inputNodes[n];this[n]=t[r]}}}toJSON(e){let{uuid:t,type:n}=this,r=e===void 0||typeof e==`string`;r&&(e={textures:{},images:{},nodes:{}});let i=e.nodes[t];i===void 0&&(i={uuid:t,type:n,meta:e,metadata:{version:4.7,type:`Node`,generator:`Node.toJSON`}},r!==!0&&(e.nodes[i.uuid]=i),this.serialize(i),delete i.meta);function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(r){let t=a(e.textures),n=a(e.images),r=a(e.nodes);t.length>0&&(i.textures=t),n.length>0&&(i.images=n),r.length>0&&(i.nodes=r)}return i}};O.captureStackTrace=!1;var Wa=class extends O{static get type(){return`ArrayElementNode`}constructor(e,t){super(),this.node=e,this.indexNode=t,this.isArrayElementNode=!0}getNodeType(e){return this.node.getElementType(e)}getMemberType(e,t){return this.node.getMemberType(e,t)}generate(e){let t=this.indexNode.getNodeType(e);return`${this.node.build(e)}[ ${this.indexNode.build(e,!e.isVector(t)&&e.isInteger(t)?t:`uint`)} ]`}},Ga=class extends O{static get type(){return`ConvertNode`}constructor(e,t){super(),this.node=e,this.convertTo=t}getNodeType(e){let t=this.node.getNodeType(e),n=null;for(let r of this.convertTo.split(`|`))(n===null||e.getTypeLength(t)===e.getTypeLength(r))&&(n=r);return n}serialize(e){super.serialize(e),e.convertTo=this.convertTo}deserialize(e){super.deserialize(e),this.convertTo=e.convertTo}generate(e,t){let n=this.node,r=this.getNodeType(e),i=n.build(e,r);return e.format(i,r,t)}},Ka=class extends O{static get type(){return`TempNode`}constructor(e=null){super(e),this.isTempNode=!0}hasDependencies(e){return e.getDataFromNode(this).usageCount>1}build(e,t){if(e.getBuildStage()===`generate`){let n=e.getVectorType(this.getNodeType(e,t)),r=e.getDataFromNode(this);if(r.propertyName!==void 0)return e.format(r.propertyName,n,t);if(n!==`void`&&t!==`void`&&this.hasDependencies(e)){let i=super.build(e,n),a=e.getVarFromNode(this,null,n),o=e.getPropertyName(a);return e.addLineFlowCode(`${o} = ${i}`,this),r.snippet=i,r.propertyName=o,e.format(r.propertyName,n,t)}}return super.build(e,t)}},qa=class extends Ka{static get type(){return`JoinNode`}constructor(e=[],t=null){super(t),this.nodes=e}getNodeType(e){return this.nodeType===null?e.getTypeFromLength(this.nodes.reduce((t,n)=>t+e.getTypeLength(n.getNodeType(e)),0)):e.getVectorType(this.nodeType)}generate(e,t){let n=this.getNodeType(e),r=e.getTypeLength(n),i=this.nodes,a=e.getComponentType(n),o=[],s=0;for(let t of i){if(s>=r){E(`TSL: Length of parameters exceeds maximum length of function '${n}()' type.`,this.stackTrace);break}let i=t.getNodeType(e),c=e.getTypeLength(i),l;if(s+c>r&&(E(`TSL: Length of '${n}()' data exceeds maximum length of output type.`,this.stackTrace),c=r-s,i=e.getTypeFromLength(c)),s+=c,l=t.build(e,i),e.getComponentType(i)!==a){let t=e.getTypeFromLength(c,a);l=e.format(l,i,t)}o.push(l)}let c=`${e.getType(n)}( ${o.join(`, `)} )`;return e.format(c,n,t)}},Ja=Va.join(``),Ya=class extends O{static get type(){return`SplitNode`}constructor(e,t=`x`){super(),this.node=e,this.components=t,this.isSplitNode=!0}getVectorLength(){let e=this.components.length;for(let t of this.components)e=Math.max(Va.indexOf(t)+1,e);return e}getComponentType(e){return e.getComponentType(this.node.getNodeType(e))}getNodeType(e){return e.getTypeFromLength(this.components.length,this.getComponentType(e))}getScope(){return this.node.getScope()}generate(e,t){let n=this.node,r=e.getTypeLength(n.getNodeType(e)),i=null;if(r>1){let a=null;this.getVectorLength()>=r&&(a=e.getTypeFromLength(this.getVectorLength(),this.getComponentType(e)));let o=n.build(e,a);i=this.components.length===r&&this.components===Ja.slice(0,this.components.length)?e.format(o,a,t):e.format(`${o}.${this.components}`,this.getNodeType(e),t)}else i=n.build(e,t);return i}serialize(e){super.serialize(e),e.components=this.components}deserialize(e){super.deserialize(e),this.components=e.components}},Xa=class extends Ka{static get type(){return`SetNode`}constructor(e,t,n){super(),this.sourceNode=e,this.components=t,this.targetNode=n}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){let{sourceNode:t,components:n,targetNode:r}=this,i=this.getNodeType(e),a=e.getComponentType(r.getNodeType(e)),o=e.getTypeFromLength(n.length,a),s=r.build(e,o),c=t.build(e,i),l=e.getTypeLength(i),u=[];for(let e=0;e<l;e++){let t=Va[e];t===n[0]?(u.push(s),e+=n.length-1):u.push(c+`.`+t)}return`${e.getType(i)}( ${u.join(`, `)} )`}},Za=class extends Ka{static get type(){return`FlipNode`}constructor(e,t){super(),this.sourceNode=e,this.components=t}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){let{components:t,sourceNode:n}=this,r=this.getNodeType(e),i=n.build(e),a=e.getVarFromNode(this),o=e.getPropertyName(a);e.addLineFlowCode(o+` = `+i,this);let s=e.getTypeLength(r),c=[],l=0;for(let e=0;e<s;e++){let n=Va[e];n===t[l]?(c.push(`1.0 - `+(o+`.`+n)),l++):c.push(o+`.`+n)}return`${e.getType(r)}( ${c.join(`, `)} )`}},Qa=class extends O{static get type(){return`InputNode`}constructor(e,t=null){super(t),this.isInputNode=!0,this.value=e,this.precision=null}getNodeType(){return this.nodeType===null?ka(this.value):this.nodeType}getInputType(e){return this.getNodeType(e)}setPrecision(e){return this.precision=e,this}serialize(e){super.serialize(e),e.value=this.value,this.value&&this.value.toArray&&(e.value=this.value.toArray()),e.valueType=ka(this.value),e.nodeType=this.nodeType,e.valueType===`ArrayBuffer`&&(e.value=Ma(e.value)),e.precision=this.precision}deserialize(e){super.deserialize(e),this.nodeType=e.nodeType,this.value=Array.isArray(e.value)?Aa(e.valueType,...e.value):e.value,this.precision=e.precision||null,this.value&&this.value.fromArray&&(this.value=this.value.fromArray(e.value))}generate(){T(`Abstract function.`)}},$a=/float|u?int/,eo=class extends Qa{static get type(){return`ConstNode`}constructor(e,t=null){super(e,t),this.isConstNode=!0}generateConst(e){return e.generateConst(this.getNodeType(e),this.value)}generate(e,t){let n=this.getNodeType(e);return $a.test(n)&&$a.test(t)?e.generateConst(t,this.value):e.format(this.generateConst(e),n,t)}},to=class extends O{static get type(){return`MemberNode`}constructor(e,t){super(),this.structNode=e,this.property=t,this.isMemberNode=!0}hasMember(e){return this.structNode.isMemberNode&&this.structNode.hasMember(e)===!1?!1:this.structNode.getMemberType(e,this.property)!==`void`}getNodeType(e){return this.hasMember(e)===!1?`float`:this.structNode.getMemberType(e,this.property)}getMemberType(e,t){if(this.hasMember(e)===!1)return`float`;let n=this.getNodeType(e);return e.getStructTypeNode(n).getMemberType(e,t)}generate(e){if(this.hasMember(e)===!1){T(`TSL: Member "${this.property}" does not exist in struct.`,this.stackTrace);let t=this.getNodeType(e);return e.generateConst(t)}return this.structNode.build(e)+`.`+this.property}},no=null,ro=new Map;function k(e,t){if(ro.has(e)){T(`TSL: Redefinition of method chaining '${e}'.`);return}if(typeof t!=`function`)throw Error(`THREE.TSL: Node element ${e} is not a function`);ro.set(e,t),e!==`assign`&&(O.prototype[e]=function(...e){return this.isStackNode?this.addToStack(t(...e)):t(this,...e)},O.prototype[e+`Assign`]=function(...e){return this.isStackNode?this.assign(e[0],t(...e)):this.assign(t(this,...e))})}var io=e=>e.replace(/r|s/g,`x`).replace(/g|t/g,`y`).replace(/b|p/g,`z`).replace(/a|q/g,`w`),ao=e=>io(e).split(``).sort().join(``);O.prototype.assign=function(...e){if(this.isStackNode!==!0)return no===null?E(`TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().`,new _a):no.assign(this,...e),this;{let t=ro.get(`assign`);return this.addToStack(t(...e))}},O.prototype.toVarIntent=function(){return this},O.prototype.get=function(e){return new to(this,e)};var oo={};function so(e,t,n){oo[e]=oo[t]=oo[n]={get(){this._cache=this._cache||{};let t=this._cache[e];return t===void 0&&(t=new Ya(this,e),this._cache[e]=t),t},set(t){this[e].assign(A(t))}};let r=e.toUpperCase(),i=t.toUpperCase(),a=n.toUpperCase();O.prototype[`set`+r]=O.prototype[`set`+i]=O.prototype[`set`+a]=function(t){let n=ao(e);return new Xa(this,n,A(t))},O.prototype[`flip`+r]=O.prototype[`flip`+i]=O.prototype[`flip`+a]=function(){let t=ao(e);return new Za(this,t)}}var co=[`x`,`y`,`z`,`w`],lo=[`r`,`g`,`b`,`a`],uo=[`s`,`t`,`p`,`q`];for(let e=0;e<4;e++){let t=co[e],n=lo[e],r=uo[e];so(t,n,r);for(let i=0;i<4;i++){t=co[e]+co[i],n=lo[e]+lo[i],r=uo[e]+uo[i],so(t,n,r);for(let a=0;a<4;a++){t=co[e]+co[i]+co[a],n=lo[e]+lo[i]+lo[a],r=uo[e]+uo[i]+uo[a],so(t,n,r);for(let o=0;o<4;o++)t=co[e]+co[i]+co[a]+co[o],n=lo[e]+lo[i]+lo[a]+lo[o],r=uo[e]+uo[i]+uo[a]+uo[o],so(t,n,r)}}}for(let e=0;e<32;e++)oo[e]={get(){this._cache=this._cache||{};let t=this._cache[e];return t===void 0&&(t=new Wa(this,new eo(e,`uint`)),this._cache[e]=t),t},set(t){this[e].assign(A(t))}};Object.defineProperties(O.prototype,oo);var fo=new WeakMap,po=function(e,t=null){let n=ka(e);return n===`node`?e:t===null&&(n===`float`||n===`boolean`)||n&&n!==`shader`&&n!==`string`?A(Mo(e,t)):n===`shader`?e.isFn?e:P(e):e},mo=function(e,t=null){for(let n in e)e[n]=A(e[n],t);return e},ho=function(e,t=null){let n=e.length;for(let r=0;r<n;r++)e[r]=A(e[r],t);return e},go=function(e,t=null,n=null,r=null){function i(e){return r===null?e=A(e):(e=A(Object.assign(e,r)),r.intent===!0&&(e=e.toVarIntent())),e}let a,o=t,s,c;function l(t){let n;return n=o?/[a-z]/i.test(o)?o+`()`:o:e.type,s!==void 0&&t.length<s?(E(`TSL: "${n}" parameter length is less than minimum required.`,new _a),t.concat(Array(s-t.length).fill(0))):c!==void 0&&t.length>c?(E(`TSL: "${n}" parameter length exceeds limit.`,new _a),t.slice(0,c)):t}return t===null?a=(...t)=>i(new e(...zo(l(t)))):n===null?a=(...n)=>i(new e(t,...zo(l(n)))):(n=A(n),a=(...r)=>i(new e(t,...zo(l(r)),n))),a.setParameterLength=(...e)=>(e.length===1?s=c=e[0]:e.length===2&&([s,c]=e),a),a.setName=e=>(o=e,a),a},_o=function(e,...t){return new e(...zo(t))},vo=class extends O{constructor(e,t){super(),this.shaderNode=e,this.rawInputs=t,this.isShaderCallNodeInternal=!0}getNodeType(e){return this.shaderNode.nodeType||this.getOutputNode(e).getNodeType(e)}getElementType(e){return this.getOutputNode(e).getElementType(e)}getMemberType(e,t){return this.getOutputNode(e).getMemberType(e,t)}call(e){let{shaderNode:t,rawInputs:n}=this,r=e.getNodeProperties(t),i=e.getClosestSubBuild(t.subBuilds)||``,a=i||`default`;if(r[a])return r[a];let o=e.subBuildFn,s=e.fnCall;e.subBuildFn=i,e.fnCall=this;let c=null;if(t.layout){let r=fo.get(e.constructor);r===void 0&&(r=new WeakMap,fo.set(e.constructor,r));let i=r.get(t);i===void 0&&(i=A(e.buildFunctionNode(t)),r.set(t,i)),e.addInclude(i);let a=n?yo(n):null;c=A(i.call(a))}else{let r=new Proxy(e,{get:(e,t,n)=>{let r;return r=Symbol.iterator===t?function*(){yield void 0}:Reflect.get(e,t,n),r}}),i=n?bo(n):null,a=Array.isArray(n)?n.length>0:n!==null,o=t.jsFunc;c=A(a||o.length>1?o(i,r):o(r))}return e.subBuildFn=o,e.fnCall=s,t.once&&(r[a]=c),c}setupOutput(e){return e.addStack(),e.stack.outputNode=this.call(e),e.removeStack()}getOutputNode(e){let t=e.getNodeProperties(this),n=e.getSubBuildOutput(this);return t[n]=t[n]||this.setupOutput(e),t[n].subBuild=e.getClosestSubBuild(this),t[n]}build(e,t=null){let n=null,r=e.getBuildStage(),i=e.getNodeProperties(this),a=e.getSubBuildOutput(this),o=this.getOutputNode(e),s=e.fnCall;if(e.fnCall=this,r===`setup`){let t=e.getSubBuildProperty(`initialized`,this);if(i[t]!==!0&&(i[t]=!0,i[a]=this.getOutputNode(e),i[a].build(e),this.shaderNode.subBuilds))for(let t of e.chaining){let n=e.getDataFromNode(t,`any`);n.subBuilds=n.subBuilds||new Set;for(let e of this.shaderNode.subBuilds)n.subBuilds.add(e)}n=i[a]}else r===`analyze`?o.build(e,t):r===`generate`&&(n=o.build(e,t)||``);return e.fnCall=s,n}};function yo(e){let t;return Ro(e),t=e[0]&&(e[0].isNode||Object.getPrototypeOf(e[0])!==Object.prototype)?[...e]:e[0],t}function bo(e){let t=0;return Ro(e),new Proxy(e,{get:(n,r,i)=>{let a;if(r===`length`)return a=e.length,a;if(Symbol.iterator===r)a=function*(){for(let t of e)yield A(t)};else{if(e.length>0)if(Object.getPrototypeOf(e[0])===Object.prototype){let n=e[0];a=n[r]===void 0?n[t++]:Reflect.get(n,r,i)}else e[0]instanceof O&&(a=e[r]===void 0?e[t++]:Reflect.get(e,r,i));else a=Reflect.get(n,r,i);a=A(a)}return a}})}var xo=class extends O{constructor(e,t){super(t),this.jsFunc=e,this.layout=null,this.global=!0,this.once=!1}setLayout(e){return this.layout=e,this}getLayout(){return this.layout}call(e=null){return new vo(this,e)}setup(){return this.call()}},So=[!1,!0],Co=[0,1,2,3],wo=[-1,-2],To=[.5,1.5,1/3,1e-6,1e6,Math.PI,Math.PI*2,1/Math.PI,2/Math.PI,1/(Math.PI*2),Math.PI/2],Eo=new Map;for(let e of So)Eo.set(e,new eo(e));var Do=new Map;for(let e of Co)Do.set(e,new eo(e,`uint`));var Oo=new Map([...Do].map(e=>new eo(e.value,`int`)));for(let e of wo)Oo.set(e,new eo(e,`int`));var ko=new Map([...Oo].map(e=>new eo(e.value)));for(let e of To)ko.set(e,new eo(e));for(let e of To)ko.set(-e,new eo(-e));var Ao={bool:Eo,uint:Do,ints:Oo,float:ko},jo=new Map([...Eo,...ko]),Mo=(e,t)=>jo.has(e)?jo.get(e):e.isNode===!0?e:new eo(e,t),No=function(e,t=null){return(...n)=>{for(let t of n)if(t===void 0)return E(`TSL: Invalid parameter for the type "${e}".`,new _a),new eo(0,e);if((n.length===0||![`bool`,`float`,`int`,`uint`].includes(e)&&n.every(e=>{let t=typeof e;return t!==`object`&&t!==`function`}))&&(n=[Aa(e,...n)]),n.length===1&&t!==null&&t.has(n[0]))return Lo(t.get(n[0]));if(n.length===1){let t=Mo(n[0],e);return t.nodeType===e?Lo(t):Lo(new Ga(t,e))}return Lo(new qa(n.map(e=>Mo(e)),e))}},Po=e=>typeof e==`object`&&e?e.value:e,Fo=e=>e==null?null:e.nodeType||e.convertTo||(typeof e==`string`?e:null);function Io(e,t){return new xo(e,t)}var A=(e,t=null)=>po(e,t),Lo=(e,t=null)=>A(e,t).toVarIntent(),Ro=(e,t=null)=>new mo(e,t),zo=(e,t=null)=>new ho(e,t),j=(e,t=null,n=null,r=null)=>new go(e,t,n,r),M=(e,...t)=>new _o(e,...t),N=(e,t=null,n=null,r={})=>new go(e,t,n,m(m({},r),{},{intent:!0})),Bo=0,Vo=class extends O{constructor(e,t=null){super();let n=null;t!==null&&(typeof t==`object`?n=t.return:(typeof t==`string`?n=t:E(`TSL: Invalid layout type.`,new _a),t=null)),this.shaderNode=new Io(e,n),t!==null&&this.setLayout(t),this.isFn=!0}setLayout(e){let t=this.shaderNode.nodeType;if(typeof e.inputs!=`object`){let n={name:`fn`+Bo++,type:t,inputs:[]};for(let t in e)t!==`return`&&n.inputs.push({name:t,type:e[t]});e=n}return this.shaderNode.setLayout(e),this}getNodeType(e){return this.shaderNode.getNodeType(e)||`float`}call(...e){let t=this.shaderNode.call(e);return this.shaderNode.nodeType===`void`&&t.toStack(),t.toVarIntent()}once(e=null){return this.shaderNode.once=!0,this.shaderNode.subBuilds=e,this}generate(e){let t=this.getNodeType(e);return E(`TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".`,this.stackTrace),e.generateConst(t)}};function P(e,t=null){let n=new Vo(e,t);return new Proxy(()=>{},{apply(e,t,r){return n.call(...r)},get(e,t,r){return Reflect.get(n,t,r)},set(e,t,r,i){return Reflect.set(n,t,r,i)}})}var Ho=e=>{no=e},Uo=()=>no,F=(...e)=>no.If(...e),Wo=(...e)=>no.Switch(...e);function Go(e){return no&&no.addToStack(e),e}k(`toStack`,Go);var Ko=new No(`color`),I=new No(`float`,Ao.float),L=new No(`int`,Ao.ints),R=new No(`uint`,Ao.uint),qo=new No(`bool`,Ao.bool),z=new No(`vec2`),Jo=new No(`ivec2`),Yo=new No(`uvec2`),Xo=new No(`bvec2`),B=new No(`vec3`),Zo=new No(`ivec3`),Qo=new No(`uvec3`),$o=new No(`bvec3`),V=new No(`vec4`),es=new No(`ivec4`),ts=new No(`uvec4`),ns=new No(`bvec4`),rs=new No(`mat2`),is=new No(`mat3`),as=new No(`mat4`),os=(e=``)=>new eo(e,`string`),ss=e=>new eo(e,`ArrayBuffer`);k(`toColor`,Ko),k(`toFloat`,I),k(`toInt`,L),k(`toUint`,R),k(`toBool`,qo),k(`toVec2`,z),k(`toIVec2`,Jo),k(`toUVec2`,Yo),k(`toBVec2`,Xo),k(`toVec3`,B),k(`toIVec3`,Zo),k(`toUVec3`,Qo),k(`toBVec3`,$o),k(`toVec4`,V),k(`toIVec4`,es),k(`toUVec4`,ts),k(`toBVec4`,ns),k(`toMat2`,rs),k(`toMat3`,is),k(`toMat4`,as);var cs=j(Wa).setParameterLength(2),ls=(e,t)=>new Ga(A(e),t),us=(e,t)=>new Ya(A(e),t);k(`element`,cs),k(`convert`,ls);var ds=e=>(T(`TSL: append() has been renamed to Stack().`,new _a),Go(e));k(`append`,e=>(T(`TSL: .append() has been renamed to .toStack().`,new _a),Go(e)));var fs=class extends O{static get type(){return`PropertyNode`}constructor(e,t=null,n=!1){super(e),this.name=t,this.varying=n,this.isPropertyNode=!0,this.global=!0}customCacheKey(){return ya(this.type+`:`+(this.name||``)+`:`+(this.varying?`1`:`0`))}getHash(e){return this.name||super.getHash(e)}generate(e){let t;return this.varying===!0?(t=e.getVaryingFromNode(this,this.name),t.needsInterpolation=!0):t=e.getVarFromNode(this,this.name),e.getPropertyName(t)}},ps=(e,t)=>new fs(e,t),ms=(e,t)=>new fs(e,t,!0),hs=M(fs,`vec4`,`DiffuseColor`),gs=M(fs,`vec3`,`DiffuseContribution`),_s=M(fs,`vec3`,`EmissiveColor`),vs=M(fs,`float`,`Roughness`),ys=M(fs,`float`,`Metalness`),bs=M(fs,`float`,`Clearcoat`),xs=M(fs,`float`,`ClearcoatRoughness`),Ss=M(fs,`vec3`,`Sheen`),Cs=M(fs,`float`,`SheenRoughness`),ws=M(fs,`float`,`Iridescence`),Ts=M(fs,`float`,`IridescenceIOR`),Es=M(fs,`float`,`IridescenceThickness`),Ds=M(fs,`float`,`AlphaT`),Os=M(fs,`float`,`Anisotropy`),ks=M(fs,`vec3`,`AnisotropyT`),As=M(fs,`vec3`,`AnisotropyB`),js=M(fs,`color`,`SpecularColor`),Ms=M(fs,`color`,`SpecularColorBlended`),Ns=M(fs,`float`,`SpecularF90`),Ps=M(fs,`float`,`Shininess`),Fs=M(fs,`vec4`,`Output`),Is=M(fs,`float`,`dashSize`),Ls=M(fs,`float`,`gapSize`),Rs=M(fs,`float`,`pointWidth`),zs=M(fs,`float`,`IOR`),Bs=M(fs,`float`,`Transmission`),Vs=M(fs,`float`,`Thickness`),Hs=M(fs,`float`,`AttenuationDistance`),Us=M(fs,`color`,`AttenuationColor`),Ws=M(fs,`float`,`Dispersion`),Gs=class extends O{static get type(){return`UniformGroupNode`}constructor(e,t=!1,n=1){super(`string`),this.name=e,this.shared=t,this.order=n,this.isUniformGroup=!0}serialize(e){super.serialize(e),e.name=this.name,e.version=this.version,e.shared=this.shared}deserialize(e){super.deserialize(e),this.name=e.name,this.version=e.version,this.shared=e.shared}},Ks=e=>new Gs(e),qs=(e,t=0)=>new Gs(e,!0,t),Js=qs(`frame`),H=qs(`render`),Ys=Ks(`object`),Xs=class extends Qa{static get type(){return`UniformNode`}constructor(e,t=null){super(e,t),this.isUniformNode=!0,this.name=``,this.groupNode=Ys}setName(e){return this.name=e,this}label(e){return T(`TSL: "label()" has been deprecated. Use "setName()" instead.`,new _a),this.setName(e)}setGroup(e){return this.groupNode=e,this}getGroup(){return this.groupNode}getUniformHash(e){return this.getHash(e)}onUpdate(e,t){return e=e.bind(this),super.onUpdate(t=>{let n=e(t,this);n!==void 0&&(this.value=n)},t)}getInputType(e){let t=super.getInputType(e);return t===`bool`&&(t=`uint`),t}generate(e,t){let n=this.getNodeType(e),r=this.getUniformHash(e),i=e.getNodeFromHash(r);i===void 0&&(e.setHashNode(this,r),i=this);let a=i.getInputType(e),o=e.getUniformFromNode(i,a,e.shaderStage,this.name||e.context.nodeName),s=e.getPropertyName(o);e.context.nodeName!==void 0&&delete e.context.nodeName;let c=s;if(n===`bool`){let t=e.getDataFromNode(this),r=t.propertyName;if(r===void 0){let i=e.getVarFromNode(this,null,`bool`);r=e.getPropertyName(i),t.propertyName=r,c=e.format(s,a,n),e.addLineFlowCode(`${r} = ${c}`,this)}c=r}return e.format(c,n,t)}},U=(e,t)=>{let n=Fo(t||e);if(n===e&&(e=Aa(n)),e&&e.isNode===!0){let t=e.value;e.traverse(e=>{e.isConstNode===!0&&(t=e.value)}),e=t}return new Xs(e,n)},Zs=class extends Ka{static get type(){return`ArrayNode`}constructor(e,t,n=null){super(e),this.count=t,this.values=n,this.isArrayNode=!0}getArrayCount(){return this.count}getNodeType(e){return this.nodeType===null?this.values[0].getNodeType(e):this.nodeType}getElementType(e){return this.getNodeType(e)}getMemberType(e,t){return this.nodeType===null?this.values[0].getMemberType(e,t):super.getMemberType(e,t)}generate(e){let t=this.getNodeType(e);return e.generateArray(t,this.count,this.values)}},Qs=(...e)=>{let t;if(e.length===1){let n=e[0];t=new Zs(null,n.length,n)}else{let n=e[0],r=e[1];t=new Zs(n,r)}return A(t)};k(`toArray`,(e,t)=>Qs(Array(t).fill(e)));var $s=j(class extends Ka{static get type(){return`AssignNode`}constructor(e,t){super(),this.targetNode=e,this.sourceNode=t,this.isAssignNode=!0}hasDependencies(){return!1}getNodeType(e,t){return t===`void`?`void`:this.targetNode.getNodeType(e)}needsSplitAssign(e){let{targetNode:t}=this;if(e.isAvailable(`swizzleAssign`)===!1&&t.isSplitNode&&t.components.length>1){let n=e.getTypeLength(t.node.getNodeType(e));return Va.join(``).slice(0,n)!==t.components}return!1}setup(e){let{targetNode:t,sourceNode:n}=this,r=t.getScope(),i=e.getDataFromNode(r);i.assign=!0;let a=e.getNodeProperties(this);a.sourceNode=n,a.targetNode=t.context({assign:!0})}generate(e,t){let{targetNode:n,sourceNode:r}=e.getNodeProperties(this),i=this.needsSplitAssign(e),a=n.build(e),o=n.getNodeType(e),s=r.build(e,o),c=r.getNodeType(e),l=e.getDataFromNode(this),u;if(l.initialized===!0)t!==`void`&&(u=a);else if(i){let r=e.getVarFromNode(this,null,o),i=e.getPropertyName(r);e.addLineFlowCode(`${i} = ${s}`,this);let c=n.node,l=c.node.context({assign:!0}).build(e);for(let t=0;t<c.components.length;t++){let n=c.components[t];e.addLineFlowCode(`${l}.${n} = ${i}[ ${t} ]`,this)}t!==`void`&&(u=a)}else u=`${a} = ${s}`,(t===`void`||c===`void`)&&(e.addLineFlowCode(u,this),t!==`void`&&(u=a));return l.initialized=!0,e.format(u,o,t)}}).setParameterLength(2);k(`assign`,$s);var ec=class extends Ka{static get type(){return`FunctionCallNode`}constructor(e=null,t={}){super(),this.functionNode=e,this.parameters=t}setParameters(e){return this.parameters=e,this}getParameters(){return this.parameters}getNodeType(e){return this.functionNode.getNodeType(e)}getMemberType(e,t){return this.functionNode.getMemberType(e,t)}generate(e){let t=[],n=this.functionNode,r=n.getInputs(e),i=this.parameters,a=(t,n)=>{let r=n.type,i=r===`pointer`,a;return a=i?`&`+t.build(e):t.build(e,r),a};if(Array.isArray(i)){if(i.length>r.length)E(`TSL: The number of provided parameters exceeds the expected number of inputs in 'Fn()'.`),i.length=r.length;else if(i.length<r.length)for(E(`TSL: The number of provided parameters is less than the expected number of inputs in 'Fn()'.`);i.length<r.length;)i.push(I(0));for(let e=0;e<i.length;e++)t.push(a(i[e],r[e]))}else for(let e of r){let n=i[e.name];n===void 0?(E(`TSL: Input '${e.name}' not found in \'Fn()\'.`),t.push(a(I(0),e))):t.push(a(n,e))}return`${n.build(e,`property`)}( ${t.join(`, `)} )`}},tc=(e,...t)=>(t=t.length>1||t[0]&&t[0].isNode===!0?zo(t):Ro(t[0]),new ec(A(e),t));k(`call`,tc);var nc={"==":`equal`,"!=":`notEqual`,"<":`lessThan`,">":`greaterThan`,"<=":`lessThanEqual`,">=":`greaterThanEqual`,"%":`mod`},rc=class e extends Ka{static get type(){return`OperatorNode`}constructor(t,n,r,...i){if(super(),i.length>0){let a=new e(t,n,r);for(let n=0;n<i.length-1;n++)a=new e(t,a,i[n]);n=a,r=i[i.length-1]}this.op=t,this.aNode=n,this.bNode=r,this.isOperatorNode=!0}getOperatorMethod(e,t){return e.getMethod(nc[this.op],t)}getNodeType(e,t=null){let n=this.op,r=this.aNode,i=this.bNode,a=r.getNodeType(e),o=i?i.getNodeType(e):null;if(a===`void`||o===`void`)return t||`void`;if(n===`%`)return a;if(n===`~`||n===`&`||n===`|`||n===`^`||n===`>>`||n===`<<`)return e.getIntegerType(a);if(n===`!`||n===`&&`||n===`||`||n===`^^`)return`bool`;if(n===`==`||n===`!=`||n===`<`||n===`>`||n===`<=`||n===`>=`){let t=Math.max(e.getTypeLength(a),e.getTypeLength(o));return t>1?`bvec${t}`:`bool`}else{if(e.isMatrix(a)){if(o===`float`)return a;if(e.isVector(o))return e.getVectorFromMatrix(a);if(e.isMatrix(o))return a}else if(e.isMatrix(o)){if(a===`float`)return o;if(e.isVector(a))return e.getVectorFromMatrix(o)}return e.getTypeLength(o)>e.getTypeLength(a)?o:a}}generate(e,t){let n=this.op,{aNode:r,bNode:i}=this,a=this.getNodeType(e,t),o=null,s=null;a===`void`?o=s=a:(o=r.getNodeType(e),s=i?i.getNodeType(e):null,n===`<`||n===`>`||n===`<=`||n===`>=`||n===`==`||n===`!=`?e.isVector(o)?s=o:e.isVector(s)?o=s:o!==s&&(o=s=`float`):n===`>>`||n===`<<`?(o=a,s=e.changeComponentType(s,`uint`)):n===`%`?(o=a,s=e.isInteger(o)&&e.isInteger(s)?s:o):e.isMatrix(o)?s===`float`?s=`float`:e.isVector(s)?s=e.getVectorFromMatrix(o):e.isMatrix(s)||(o=s=a):o=e.isMatrix(s)?o===`float`?`float`:e.isVector(o)?e.getVectorFromMatrix(s):s=a:s=a);let c=r.build(e,o),l=i?i.build(e,s):null,u=e.getFunctionOperator(n);if(t!==`void`){let r=e.renderer.coordinateSystem===be;if(n===`==`||n===`!=`||n===`<`||n===`>`||n===`<=`||n===`>=`)return r&&e.isVector(o)?e.format(`${this.getOperatorMethod(e,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} ${n} ${l} )`,a,t);if(n===`%`)return e.isInteger(s)?e.format(`( ${c} % ${l} )`,a,t):e.format(`${this.getOperatorMethod(e,a)}( ${c}, ${l} )`,a,t);if(n===`!`||n===`~`)return e.format(`(${n}${c})`,o,t);if(u)return e.format(`${u}( ${c}, ${l} )`,a,t);if(e.isMatrix(o)&&s===`float`)return e.format(`( ${l} ${n} ${c} )`,a,t);if(o===`float`&&e.isMatrix(s))return e.format(`${c} ${n} ${l}`,a,t);{let i=`( ${c} ${n} ${l} )`;return!r&&a===`bool`&&e.isVector(o)&&e.isVector(s)&&(i=`all${i}`),e.format(i,a,t)}}else if(o!==`void`)return u?e.format(`${u}( ${c}, ${l} )`,a,t):e.isMatrix(o)&&s===`float`?e.format(`${l} ${n} ${c}`,a,t):e.format(`${c} ${n} ${l}`,a,t)}serialize(e){super.serialize(e),e.op=this.op}deserialize(e){super.deserialize(e),this.op=e.op}},ic=N(rc,`+`).setParameterLength(2,1/0).setName(`add`),ac=N(rc,`-`).setParameterLength(2,1/0).setName(`sub`),W=N(rc,`*`).setParameterLength(2,1/0).setName(`mul`),oc=N(rc,`/`).setParameterLength(2,1/0).setName(`div`),sc=N(rc,`%`).setParameterLength(2).setName(`mod`),cc=N(rc,`==`).setParameterLength(2).setName(`equal`),lc=N(rc,`!=`).setParameterLength(2).setName(`notEqual`),uc=N(rc,`<`).setParameterLength(2).setName(`lessThan`),dc=N(rc,`>`).setParameterLength(2).setName(`greaterThan`),fc=N(rc,`<=`).setParameterLength(2).setName(`lessThanEqual`),pc=N(rc,`>=`).setParameterLength(2).setName(`greaterThanEqual`),mc=N(rc,`&&`).setParameterLength(2,1/0).setName(`and`),hc=N(rc,`||`).setParameterLength(2,1/0).setName(`or`),gc=N(rc,`!`).setParameterLength(1).setName(`not`),_c=N(rc,`^^`).setParameterLength(2).setName(`xor`),vc=N(rc,`&`).setParameterLength(2).setName(`bitAnd`),yc=N(rc,`~`).setParameterLength(1).setName(`bitNot`),bc=N(rc,`|`).setParameterLength(2).setName(`bitOr`),xc=N(rc,`^`).setParameterLength(2).setName(`bitXor`),Sc=N(rc,`<<`).setParameterLength(2).setName(`shiftLeft`),Cc=N(rc,`>>`).setParameterLength(2).setName(`shiftRight`),wc=P(([e])=>(e.addAssign(1),e)),Tc=P(([e])=>(e.subAssign(1),e)),Ec=P(([e])=>{let t=L(e).toConst();return e.addAssign(1),t}),Dc=P(([e])=>{let t=L(e).toConst();return e.subAssign(1),t});k(`add`,ic),k(`sub`,ac),k(`mul`,W),k(`div`,oc),k(`mod`,sc),k(`equal`,cc),k(`notEqual`,lc),k(`lessThan`,uc),k(`greaterThan`,dc),k(`lessThanEqual`,fc),k(`greaterThanEqual`,pc),k(`and`,mc),k(`or`,hc),k(`not`,gc),k(`xor`,_c),k(`bitAnd`,vc),k(`bitNot`,yc),k(`bitOr`,bc),k(`bitXor`,xc),k(`shiftLeft`,Sc),k(`shiftRight`,Cc),k(`incrementBefore`,wc),k(`decrementBefore`,Tc),k(`increment`,Ec),k(`decrement`,Dc);var Oc=(e,t)=>(T(`TSL: "modInt()" is deprecated. Use "mod( int( ... ) )" instead.`,new _a),sc(L(e),L(t)));k(`modInt`,Oc);var G=class e extends Ka{static get type(){return`MathNode`}constructor(t,n,r=null,i=null){if(super(),(t===e.MAX||t===e.MIN)&&arguments.length>3){let a=new e(t,n,r);for(let n=2;n<arguments.length-1;n++)a=new e(t,a,arguments[n]);n=a,r=arguments[arguments.length-1],i=null}this.method=t,this.aNode=n,this.bNode=r,this.cNode=i,this.isMathNode=!0}getInputType(e){let t=this.aNode.getNodeType(e),n=this.bNode?this.bNode.getNodeType(e):null,r=this.cNode?this.cNode.getNodeType(e):null,i=e.isMatrix(t)?0:e.getTypeLength(t),a=e.isMatrix(n)?0:e.getTypeLength(n),o=e.isMatrix(r)?0:e.getTypeLength(r);return i>a&&i>o?t:a>o?n:o>i?r:t}getNodeType(t){let n=this.method;return n===e.LENGTH||n===e.DISTANCE||n===e.DOT?`float`:n===e.CROSS?`vec3`:n===e.ALL||n===e.ANY?`bool`:n===e.EQUALS?t.changeComponentType(this.aNode.getNodeType(t),`bool`):this.getInputType(t)}setup(t){let{aNode:n,bNode:r,method:i}=this,a=null;if(i===e.ONE_MINUS)a=ac(1,n);else if(i===e.RECIPROCAL)a=oc(1,n);else if(i===e.DIFFERENCE)a=tl(ac(n,r));else if(i===e.TRANSFORM_DIRECTION){let e=n,i=r;t.isMatrix(e.getNodeType(t))?i=V(B(i),0):e=V(B(e),0);let o=W(e,i).xyz;a=qc(o)}return a===null?super.setup(t):a}generate(t,n){if(t.getNodeProperties(this).outputNode)return super.generate(t,n);let r=this.method,i=this.getNodeType(t),a=this.getInputType(t),o=this.aNode,s=this.bNode,c=this.cNode,l=t.renderer.coordinateSystem;if(r===e.NEGATE)return t.format(`( - `+o.build(t,a)+` )`,i,n);{let u=[];return r===e.CROSS?u.push(o.build(t,i),s.build(t,i)):l===2e3&&r===e.STEP?u.push(o.build(t,t.getTypeLength(o.getNodeType(t))===1?`float`:a),s.build(t,a)):l===2e3&&(r===e.MIN||r===e.MAX)?u.push(o.build(t,a),s.build(t,t.getTypeLength(s.getNodeType(t))===1?`float`:a)):r===e.REFRACT?u.push(o.build(t,a),s.build(t,a),c.build(t,`float`)):r===e.MIX?u.push(o.build(t,a),s.build(t,a),c.build(t,t.getTypeLength(c.getNodeType(t))===1?`float`:a)):(l===2001&&r===e.ATAN&&s!==null&&(r=`atan2`),t.shaderStage!==`fragment`&&(r===e.DFDX||r===e.DFDY)&&(T(`TSL: '${r}' is not supported in the ${t.shaderStage} stage.`,this.stackTrace),r=`/*`+r+`*/`),u.push(o.build(t,a)),s!==null&&u.push(s.build(t,a)),c!==null&&u.push(c.build(t,a))),t.format(`${t.getMethod(r,i)}( ${u.join(`, `)} )`,i,n)}}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}};G.ALL=`all`,G.ANY=`any`,G.RADIANS=`radians`,G.DEGREES=`degrees`,G.EXP=`exp`,G.EXP2=`exp2`,G.LOG=`log`,G.LOG2=`log2`,G.SQRT=`sqrt`,G.INVERSE_SQRT=`inversesqrt`,G.FLOOR=`floor`,G.CEIL=`ceil`,G.NORMALIZE=`normalize`,G.FRACT=`fract`,G.SIN=`sin`,G.COS=`cos`,G.TAN=`tan`,G.ASIN=`asin`,G.ACOS=`acos`,G.ATAN=`atan`,G.ABS=`abs`,G.SIGN=`sign`,G.LENGTH=`length`,G.NEGATE=`negate`,G.ONE_MINUS=`oneMinus`,G.DFDX=`dFdx`,G.DFDY=`dFdy`,G.ROUND=`round`,G.RECIPROCAL=`reciprocal`,G.TRUNC=`trunc`,G.FWIDTH=`fwidth`,G.TRANSPOSE=`transpose`,G.DETERMINANT=`determinant`,G.INVERSE=`inverse`,G.EQUALS=`equals`,G.MIN=`min`,G.MAX=`max`,G.STEP=`step`,G.REFLECT=`reflect`,G.DISTANCE=`distance`,G.DIFFERENCE=`difference`,G.DOT=`dot`,G.CROSS=`cross`,G.POW=`pow`,G.TRANSFORM_DIRECTION=`transformDirection`,G.MIX=`mix`,G.CLAMP=`clamp`,G.REFRACT=`refract`,G.SMOOTHSTEP=`smoothstep`,G.FACEFORWARD=`faceforward`;var kc=I(1e-6),Ac=I(1e6),jc=I(Math.PI),Mc=I(Math.PI*2),Nc=I(Math.PI*2),Pc=I(Math.PI*.5),Fc=N(G,G.ALL).setParameterLength(1),Ic=N(G,G.ANY).setParameterLength(1),Lc=N(G,G.RADIANS).setParameterLength(1),Rc=N(G,G.DEGREES).setParameterLength(1),zc=N(G,G.EXP).setParameterLength(1),Bc=N(G,G.EXP2).setParameterLength(1),Vc=N(G,G.LOG).setParameterLength(1),Hc=N(G,G.LOG2).setParameterLength(1),Uc=N(G,G.SQRT).setParameterLength(1),Wc=N(G,G.INVERSE_SQRT).setParameterLength(1),Gc=N(G,G.FLOOR).setParameterLength(1),Kc=N(G,G.CEIL).setParameterLength(1),qc=N(G,G.NORMALIZE).setParameterLength(1),Jc=N(G,G.FRACT).setParameterLength(1),Yc=N(G,G.SIN).setParameterLength(1),Xc=N(G,G.COS).setParameterLength(1),Zc=N(G,G.TAN).setParameterLength(1),Qc=N(G,G.ASIN).setParameterLength(1),$c=N(G,G.ACOS).setParameterLength(1),el=N(G,G.ATAN).setParameterLength(1,2),tl=N(G,G.ABS).setParameterLength(1),nl=N(G,G.SIGN).setParameterLength(1),rl=N(G,G.LENGTH).setParameterLength(1),il=N(G,G.NEGATE).setParameterLength(1),al=N(G,G.ONE_MINUS).setParameterLength(1),ol=N(G,G.DFDX).setParameterLength(1),sl=N(G,G.DFDY).setParameterLength(1),cl=N(G,G.ROUND).setParameterLength(1),ll=N(G,G.RECIPROCAL).setParameterLength(1),ul=N(G,G.TRUNC).setParameterLength(1),dl=N(G,G.FWIDTH).setParameterLength(1),fl=N(G,G.TRANSPOSE).setParameterLength(1),pl=N(G,G.DETERMINANT).setParameterLength(1),ml=N(G,G.INVERSE).setParameterLength(1),hl=N(G,G.MIN).setParameterLength(2,1/0),gl=N(G,G.MAX).setParameterLength(2,1/0),_l=N(G,G.STEP).setParameterLength(2),vl=N(G,G.REFLECT).setParameterLength(2),yl=N(G,G.DISTANCE).setParameterLength(2),bl=N(G,G.DIFFERENCE).setParameterLength(2),xl=N(G,G.DOT).setParameterLength(2),Sl=N(G,G.CROSS).setParameterLength(2),Cl=N(G,G.POW).setParameterLength(2),wl=e=>W(e,e),Tl=e=>W(e,e,e),El=e=>W(e,e,e,e),Dl=N(G,G.TRANSFORM_DIRECTION).setParameterLength(2),Ol=e=>W(nl(e),Cl(tl(e),1/3)),kl=e=>xl(e,e),Al=N(G,G.MIX).setParameterLength(3),jl=(e,t=0,n=1)=>new G(G.CLAMP,A(e),A(t),A(n)),Ml=e=>jl(e),Nl=N(G,G.REFRACT).setParameterLength(3),Pl=N(G,G.SMOOTHSTEP).setParameterLength(3),Fl=N(G,G.FACEFORWARD).setParameterLength(3),Il=P(([e])=>Jc(Yc(sc(xl(e.xy,z(12.9898,78.233)),jc)).mul(43758.5453))),Ll=(e,t,n)=>Al(t,n,e),Rl=(e,t,n)=>Pl(t,n,e),zl=(e,t)=>_l(t,e),Bl=Fl,Vl=Wc;k(`all`,Fc),k(`any`,Ic),k(`radians`,Lc),k(`degrees`,Rc),k(`exp`,zc),k(`exp2`,Bc),k(`log`,Vc),k(`log2`,Hc),k(`sqrt`,Uc),k(`inverseSqrt`,Wc),k(`floor`,Gc),k(`ceil`,Kc),k(`normalize`,qc),k(`fract`,Jc),k(`sin`,Yc),k(`cos`,Xc),k(`tan`,Zc),k(`asin`,Qc),k(`acos`,$c),k(`atan`,el),k(`abs`,tl),k(`sign`,nl),k(`length`,rl),k(`lengthSq`,kl),k(`negate`,il),k(`oneMinus`,al),k(`dFdx`,ol),k(`dFdy`,sl),k(`round`,cl),k(`reciprocal`,ll),k(`trunc`,ul),k(`fwidth`,dl),k(`min`,hl),k(`max`,gl),k(`step`,zl),k(`reflect`,vl),k(`distance`,yl),k(`dot`,xl),k(`cross`,Sl),k(`pow`,Cl),k(`pow2`,wl),k(`pow3`,Tl),k(`pow4`,El),k(`transformDirection`,Dl),k(`mix`,Ll),k(`clamp`,jl),k(`refract`,Nl),k(`smoothstep`,Rl),k(`faceForward`,Fl),k(`difference`,bl),k(`saturate`,Ml),k(`cbrt`,Ol),k(`transpose`,fl),k(`determinant`,pl),k(`inverse`,ml),k(`rand`,Il);var Hl=j(class extends O{static get type(){return`ConditionalNode`}constructor(e,t,n=null){super(),this.condNode=e,this.ifNode=t,this.elseNode=n}getNodeType(e){let{ifNode:t,elseNode:n}=e.getNodeProperties(this);if(t===void 0)return e.flowBuildStage(this,`setup`),this.getNodeType(e);let r=t.getNodeType(e);if(n!==null){let t=n.getNodeType(e);if(e.getTypeLength(t)>e.getTypeLength(r))return t}return r}setup(e){let t=this.condNode,n=this.ifNode.isolate(),r=this.elseNode?this.elseNode.isolate():null,i=e.context.nodeBlock;e.getDataFromNode(n).parentNodeBlock=i,r!==null&&(e.getDataFromNode(r).parentNodeBlock=i);let a=e.context.uniformFlow,o=e.getNodeProperties(this);o.condNode=t,o.ifNode=a?n:n.context({nodeBlock:n}),o.elseNode=r?a?r:r.context({nodeBlock:r}):null}generate(e,t){let n=this.getNodeType(e),r=e.getDataFromNode(this);if(r.nodeProperty!==void 0)return r.nodeProperty;let{condNode:i,ifNode:a,elseNode:o}=e.getNodeProperties(this),s=e.currentFunctionNode,c=t!==`void`,l=c?ps(n).build(e):``;r.nodeProperty=l;let u=i.build(e,`bool`);if(e.context.uniformFlow&&o!==null){let r=a.build(e,n),i=o.build(e,n),s=e.getTernary(u,r,i);return e.format(s,n,t)}e.addFlowCode(`\n${e.tab}if ( ${u} ) {\n\n`).addFlowTab();let d=a.build(e,n);if(d&&(c?d=l+` = `+d+`;`:(d=`return `+d+`;`,s===null&&(T(`TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.`,this.stackTrace),d=`// `+d))),e.removeFlowTab().addFlowCode(e.tab+` `+d+`
279
+
280
+ `+e.tab+`}`),o!==null){e.addFlowCode(` else {
281
+
282
+ `).addFlowTab();let t=o.build(e,n);t&&(c?t=l+` = `+t+`;`:(t=`return `+t+`;`,s===null&&(T(`TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.`,this.stackTrace),t=`// `+t))),e.removeFlowTab().addFlowCode(e.tab+` `+t+`
283
+
284
+ `+e.tab+`}
285
+
286
+ `)}else e.addFlowCode(`
287
+
288
+ `);return e.format(l,n,t)}}).setParameterLength(2,3);k(`select`,Hl);var Ul=class extends O{static get type(){return`ContextNode`}constructor(e=null,t={}){super(),this.isContextNode=!0,this.node=e,this.value=t}getScope(){return this.node.getScope()}getNodeType(e){return this.node.getNodeType(e)}getFlowContextData(){let e=[];return this.traverse(t=>{t.isContextNode===!0&&e.push(t.value)}),Object.assign({},...e)}getMemberType(e,t){return this.node.getMemberType(e,t)}analyze(e){let t=e.addContext(this.value);this.node.build(e),e.setContext(t)}setup(e){let t=e.addContext(this.value);this.node.build(e),e.setContext(t)}generate(e,t){let n=e.addContext(this.value),r=this.node.build(e,t);return e.setContext(n),r}},Wl=(e=null,t={})=>{let n=e;return(n===null||n.isNode!==!0)&&(t=n||t,n=null),new Ul(n,t)},Gl=e=>Wl(e,{uniformFlow:!0}),Kl=(e,t)=>Wl(e,{nodeName:t});function ql(e,t,n=null){return Wl(n,{getShadow:({light:n,shadowColorNode:r})=>t===n?r.mul(e):r})}function Jl(e,t=null){return Wl(t,{getAO:(t,{material:n})=>n.transparent===!0?t:t===null?e:t.mul(e)})}function Yl(e,t){return T(`TSL: "label()" has been deprecated. Use "setName()" instead.`),Kl(e,t)}k(`context`,Wl),k(`label`,Yl),k(`uniformFlow`,Gl),k(`setName`,Kl),k(`builtinShadowContext`,(e,t,n)=>ql(t,n,e)),k(`builtinAOContext`,(e,t)=>Jl(t,e));var Xl=j(class extends O{static get type(){return`VarNode`}constructor(e,t=null,n=!1){super(),this.node=e,this.name=t,this.global=!0,this.isVarNode=!0,this.readOnly=n,this.parents=!0,this.intent=!1}setIntent(e){return this.intent=e,this}isIntent(e){return e.getDataFromNode(this).forceDeclaration===!0?!1:this.intent}getIntent(){return this.intent}getMemberType(e,t){return this.node.getMemberType(e,t)}getElementType(e){return this.node.getElementType(e)}getNodeType(e){return this.node.getNodeType(e)}getArrayCount(e){return this.node.getArrayCount(e)}isAssign(e){return e.getDataFromNode(this).assign}build(...e){let t=e[0];if(this._hasStack(t)===!1&&t.buildStage===`setup`&&(t.context.nodeLoop||t.context.nodeBlock)){let e=!1;if(this.node.isShaderCallNodeInternal&&this.node.shaderNode.getLayout()===null&&t.fnCall&&t.fnCall.shaderNode&&t.getDataFromNode(this.node.shaderNode).hasLoop){let n=t.getDataFromNode(this);n.forceDeclaration=!0,e=!0}let n=t.getBaseStack();e?n.addToStackBefore(this):n.addToStack(this)}return this.isIntent(t)&&this.isAssign(t)!==!0?this.node.build(...e):super.build(...e)}generate(e){let{node:t,name:n,readOnly:r}=this,{renderer:i}=e,a=i.backend.isWebGPUBackend===!0,o=!1,s=!1;r&&(o=e.isDeterministic(t),s=a?r:o);let c=this.getNodeType(e);if(c==`void`)return this.isIntent(e)!==!0&&E(`TSL: ".toVar()" can not be used with void type.`,this.stackTrace),t.build(e);let l=e.getVectorType(c),u=t.build(e,l),d=e.getVarFromNode(this,n,l,void 0,s),f=e.getPropertyName(d),p=f;if(s)if(a)p=o?`const ${f}`:`let ${f}`;else{let n=t.getArrayCount(e);p=`const ${e.getVar(d.type,f,n)}`}return e.addLineFlowCode(`${p} = ${u}`,this),f}_hasStack(e){return e.getDataFromNode(this).stack!==void 0}}),Zl=(e,t=null)=>Xl(e,t).toStack(),Ql=(e,t=null)=>Xl(e,t,!0).toStack(),$l=e=>Xl(e).setIntent(!0).toStack();k(`toVar`,Zl),k(`toConst`,Ql),k(`toVarIntent`,$l);var eu=class extends O{static get type(){return`SubBuild`}constructor(e,t,n=null){super(n),this.node=e,this.name=t,this.isSubBuildNode=!0}getNodeType(e){if(this.nodeType!==null)return this.nodeType;e.addSubBuild(this.name);let t=this.node.getNodeType(e);return e.removeSubBuild(),t}build(e,...t){e.addSubBuild(this.name);let n=this.node.build(e,...t);return e.removeSubBuild(),n}},tu=(e,t,n=null)=>new eu(A(e),t,n),nu=j(class extends O{static get type(){return`VaryingNode`}constructor(e,t=null){super(),this.node=tu(e,`VERTEX`),this.name=t,this.isVaryingNode=!0,this.interpolationType=null,this.interpolationSampling=null,this.global=!0}setInterpolation(e,t=null){return this.interpolationType=e,this.interpolationSampling=t,this}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}setupVarying(e){let t=e.getNodeProperties(this),n=t.varying;if(n===void 0){let r=this.name,i=this.getNodeType(e),a=this.interpolationType,o=this.interpolationSampling;t.varying=n=e.getVaryingFromNode(this,r,i,a,o),t.node=tu(this.node,`VERTEX`)}return n.needsInterpolation||(n.needsInterpolation=e.shaderStage===`fragment`),n}setup(e){this.setupVarying(e),e.flowNodeFromShaderStage(Pa.VERTEX,this.node)}analyze(e){this.setupVarying(e),e.flowNodeFromShaderStage(Pa.VERTEX,this.node)}generate(e){let t=e.getSubBuildProperty(`property`,e.currentStack),n=e.getNodeProperties(this),r=this.setupVarying(e);if(n[t]===void 0){let i=this.getNodeType(e),a=e.getPropertyName(r,Pa.VERTEX);e.flowNodeFromShaderStage(Pa.VERTEX,n.node,i,a),n[t]=a}return e.getPropertyName(r)}}).setParameterLength(1,2),ru=e=>nu(e);k(`toVarying`,nu),k(`toVertexStage`,ru);var iu=P(([e])=>Al(e.mul(.9478672986).add(.0521327014).pow(2.4),e.mul(.0773993808),e.lessThanEqual(.04045))).setLayout({name:`sRGBTransferEOTF`,type:`vec3`,inputs:[{name:`color`,type:`vec3`}]}),au=P(([e])=>Al(e.pow(.41666).mul(1.055).sub(.055),e.mul(12.92),e.lessThanEqual(.0031308))).setLayout({name:`sRGBTransferOETF`,type:`vec3`,inputs:[{name:`color`,type:`vec3`}]}),ou=`WorkingColorSpace`,su=`OutputColorSpace`,cu=class extends Ka{static get type(){return`ColorSpaceNode`}constructor(e,t,n){super(`vec4`),this.colorNode=e,this.source=t,this.target=n}resolveColorSpace(e,t){return t===ou?mt.workingColorSpace:t===su?e.context.outputColorSpace||e.renderer.outputColorSpace:t}setup(e){let{colorNode:t}=this,n=this.resolveColorSpace(e,this.source),r=this.resolveColorSpace(e,this.target),i=t;return mt.enabled===!1||n===r||!n||!r?i:(mt.getTransfer(n)===`srgb`&&(i=V(iu(i.rgb),i.a)),mt.getPrimaries(n)!==mt.getPrimaries(r)&&(i=V(is(mt._getMatrix(new lt,n,r)).mul(i.rgb),i.a)),mt.getTransfer(r)===`srgb`&&(i=V(au(i.rgb),i.a)),i)}},lu=(e,t)=>new cu(A(e),ou,t),uu=(e,t)=>new cu(A(e),t,ou),du=(e,t,n)=>new cu(A(e),t,n);k(`workingToColorSpace`,lu),k(`colorSpaceToWorking`,uu);var fu=class extends Wa{static get type(){return`ReferenceElementNode`}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){let t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}},pu=class extends O{static get type(){return`ReferenceBaseNode`}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split(`.`),this.reference=n,this.node=null,this.group=null,this.updateType=Fa.OBJECT}setGroup(e){return this.group=e,this}element(e){return new fu(this,A(e))}setNodeType(e){let t=U(null,e);this.group!==null&&t.setGroup(this.group),this.node=t}getNodeType(e){return this.node===null&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){let{properties:t}=this,n=e[t[0]];for(let e=1;e<t.length;e++)n=n[t[e]];return n}updateReference(e){return this.reference=this.object===null?e.object:this.object,this.reference}setup(){return this.updateValue(),this.node}update(){this.updateValue()}updateValue(){this.node===null&&this.setNodeType(this.uniformType);let e=this.getValueFromReference();Array.isArray(e)?this.node.array=e:this.node.value=e}},mu=class extends pu{static get type(){return`RendererReferenceNode`}constructor(e,t,n=null){super(e,t,n),this.renderer=n,this.setGroup(H)}updateReference(e){return this.reference=this.renderer===null?e.renderer:this.renderer,this.reference}},hu=(e,t,n=null)=>new mu(e,t,n),gu=class extends Ka{static get type(){return`ToneMappingNode`}constructor(e,t=vu,n=null){super(`vec3`),this._toneMapping=e,this.exposureNode=t,this.colorNode=n}customCacheKey(){return xa(this._toneMapping)}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup(e){let t=this.colorNode||e.context.color,n=this._toneMapping;if(n===0)return t;let r=null,i=e.renderer.library.getToneMappingFunction(n);return i===null?(E(`ToneMappingNode: Unsupported Tone Mapping configuration.`,n),r=t):r=V(i(t.rgb,this.exposureNode),t.a),r}},_u=(e,t,n)=>new gu(e,A(t),A(n)),vu=hu(`toneMappingExposure`,`float`);k(`toneMapping`,(e,t,n)=>_u(t,n,e));var yu=new WeakMap;function bu(e,t){let n=yu.get(e);return n===void 0&&(n=new ar(e,t),yu.set(e,n)),n}var xu=class extends Qa{static get type(){return`BufferAttributeNode`}constructor(e,t=null,n=0,r=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferStride=n,this.bufferOffset=r,this.usage=ve,this.instanced=!1,this.attribute=null,this.global=!0,e&&e.isBufferAttribute===!0&&e.itemSize<=4&&(this.attribute=e,this.usage=e.usage,this.instanced=e.isInstancedBufferAttribute)}getHash(e){if(this.bufferStride===0&&this.bufferOffset===0){let t=e.globalCache.getData(this.value);return t===void 0&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getNodeType(e){return this.bufferType===null&&(this.bufferType=e.getTypeFromAttribute(this.attribute)),this.bufferType}setup(e){if(this.attribute!==null)return;let t=this.getNodeType(e),n=e.getTypeLength(t),r=this.value,i=this.bufferStride||n,a=this.bufferOffset,o;o=r.isInterleavedBuffer===!0?r:r.isBufferAttribute===!0?bu(r.array,i):bu(r,i);let s=new sr(o,n,a);o.setUsage(this.usage),this.attribute=s,this.attribute.isInstancedBufferAttribute=this.instanced}generate(e){let t=this.getNodeType(e),n=e.getBufferAttributeFromNode(this,t),r=e.getPropertyName(n),i=null;return e.shaderStage===`vertex`||e.shaderStage===`compute`?(this.name=r,i=r):i=nu(this).build(e,t),i}getInputType(){return`bufferAttribute`}setUsage(e){return this.usage=e,this.attribute&&this.attribute.isBufferAttribute===!0&&(this.attribute.usage=e),this}setInstanced(e){return this.instanced=e,this}};function Su(e,t=null,n=0,r=0,i=ve,a=!1){return t===`mat3`||t===null&&e.itemSize===9?is(new xu(e,`vec3`,9,0).setUsage(i).setInstanced(a),new xu(e,`vec3`,9,3).setUsage(i).setInstanced(a),new xu(e,`vec3`,9,6).setUsage(i).setInstanced(a)):t===`mat4`||t===null&&e.itemSize===16?as(new xu(e,`vec4`,16,0).setUsage(i).setInstanced(a),new xu(e,`vec4`,16,4).setUsage(i).setInstanced(a),new xu(e,`vec4`,16,8).setUsage(i).setInstanced(a),new xu(e,`vec4`,16,12).setUsage(i).setInstanced(a)):new xu(e,t,n,r).setUsage(i)}var Cu=(e,t=null,n=0,r=0)=>Su(e,t,n,r),wu=(e,t=null,n=0,r=0)=>Su(e,t,n,r,ye),Tu=(e,t=null,n=0,r=0)=>Su(e,t,n,r,ve,!0),Eu=(e,t=null,n=0,r=0)=>Su(e,t,n,r,ye,!0);k(`toAttribute`,e=>Cu(e.value));var Du=class extends O{static get type(){return`ComputeNode`}constructor(e,t){super(`void`),this.isComputeNode=!0,this.computeNode=e,this.workgroupSize=t,this.count=null,this.version=1,this.name=``,this.updateBeforeType=Fa.OBJECT,this.onInitFunction=null}setCount(e){return this.count=e,this}getCount(){return this.count}dispose(){this.dispatchEvent({type:`dispose`})}setName(e){return this.name=e,this}label(e){return T(`TSL: "label()" has been deprecated. Use "setName()" instead.`,new _a),this.setName(e)}onInit(e){return this.onInitFunction=e,this}updateBefore({renderer:e}){e.compute(this)}setup(e){let t=this.computeNode.build(e);if(t){let n=e.getNodeProperties(this);n.outputComputeNode=t.outputNode,t.outputNode=null}return t}generate(e,t){let{shaderStage:n}=e;if(n===`compute`){let t=this.computeNode.build(e,`void`);t!==``&&e.addLineFlowCode(t,this)}else{let n=e.getNodeProperties(this).outputComputeNode;if(n)return n.build(e,t)}}},Ou=(e,t=[64])=>{(t.length===0||t.length>3)&&E(`TSL: compute() workgroupSize must have 1, 2, or 3 elements`,new _a);for(let e=0;e<t.length;e++){let n=t[e];(typeof n!=`number`||n<=0||!Number.isInteger(n))&&E(`TSL: compute() workgroupSize element at index [ ${e} ] must be a positive integer`,new _a)}for(;t.length<3;)t.push(1);return new Du(A(e),t)},ku=(e,t,n)=>Ou(e,n).setCount(t);k(`compute`,ku),k(`computeKernel`,Ou);var Au=class extends O{static get type(){return`IsolateNode`}constructor(e,t=!0){super(),this.node=e,this.parent=t,this.isIsolateNode=!0}getNodeType(e){let t=e.getCache(),n=e.getCacheFromNode(this,this.parent);e.setCache(n);let r=this.node.getNodeType(e);return e.setCache(t),r}build(e,...t){let n=e.getCache(),r=e.getCacheFromNode(this,this.parent);e.setCache(r);let i=this.node.build(e,...t);return e.setCache(n),i}setParent(e){return this.parent=e,this}getParent(){return this.parent}},ju=e=>new Au(A(e));function Mu(e,t=!0){return T(`TSL: "cache()" has been deprecated. Use "isolate()" instead.`),ju(e).setParent(t)}k(`cache`,Mu),k(`isolate`,ju);var Nu=j(class extends O{static get type(){return`BypassNode`}constructor(e,t){super(),this.isBypassNode=!0,this.outputNode=e,this.callNode=t}getNodeType(e){return this.outputNode.getNodeType(e)}generate(e){let t=this.callNode.build(e,`void`);return t!==``&&e.addLineFlowCode(t,this),this.outputNode.build(e)}}).setParameterLength(2);k(`bypass`,Nu);var Pu=class extends O{static get type(){return`RemapNode`}constructor(e,t,n,r=I(0),i=I(1)){super(),this.node=e,this.inLowNode=t,this.inHighNode=n,this.outLowNode=r,this.outHighNode=i,this.doClamp=!0}setup(){let{node:e,inLowNode:t,inHighNode:n,outLowNode:r,outHighNode:i,doClamp:a}=this,o=e.sub(t).div(n.sub(t));return a===!0&&(o=o.clamp()),o.mul(i.sub(r)).add(r)}},Fu=j(Pu,null,null,{doClamp:!1}).setParameterLength(3,5),Iu=j(Pu).setParameterLength(3,5);k(`remap`,Fu),k(`remapClamp`,Iu);var Lu=j(class extends O{static get type(){return`ExpressionNode`}constructor(e=``,t=`void`){super(t),this.snippet=e}generate(e,t){let n=this.getNodeType(e),r=this.snippet;if(n===`void`)e.addLineFlowCode(r,this);else return e.format(r,n,t)}}).setParameterLength(1,2),Ru=e=>(e?Hl(e,Lu(`discard`)):Lu(`discard`)).toStack(),zu=()=>Lu(`return`).toStack();k(`discard`,Ru);var Bu=class extends Ka{static get type(){return`RenderOutputNode`}constructor(e,t,n){super(`vec4`),this.colorNode=e,this._toneMapping=t,this.outputColorSpace=n,this.isRenderOutputNode=!0}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup({context:e}){let t=this.colorNode||e.color,n=(this._toneMapping===null?e.toneMapping:this._toneMapping)||0,r=(this.outputColorSpace===null?e.outputColorSpace:this.outputColorSpace)||``;return n!==0&&(t=t.toneMapping(n)),r!==``&&r!==mt.workingColorSpace&&(t=t.workingToColorSpace(r)),t}},Vu=(e,t=null,n=null)=>new Bu(A(e),t,n);k(`renderOutput`,Vu);var Hu=class extends Ka{static get type(){return`DebugNode`}constructor(e,t=null){super(),this.node=e,this.callback=t}getNodeType(e){return this.node.getNodeType(e)}setup(e){return this.node.build(e)}analyze(e){return this.node.build(e)}generate(e){let t=this.callback,n=this.node.build(e);if(t!==null)t(e,n);else{let t=`--- TSL debug - `+e.shaderStage+` shader ---`,r=`-`.repeat(t.length),i=``;i+=`// #`+t+`#
289
+ `,i+=e.flow.code.replace(/^\t/gm,``)+`
290
+ `,i+=`/* ... */ `+n+` /* ... */
291
+ `,i+=`// #`+r+`#
292
+ `,Oe(i)}return n}},Uu=(e,t=null)=>new Hu(A(e),t).toStack();k(`debug`,Uu);var Wu=class{constructor(){this._renderer=null,this.currentFrame=null}get nodeFrame(){return this._renderer._nodes.nodeFrame}setRenderer(e){return this._renderer=e,this}getRenderer(){return this._renderer}init(){}begin(){}finish(){}inspect(){}computeAsync(){}beginCompute(){}finishCompute(){}beginRender(){}finishRender(){}copyTextureToTexture(){}copyFramebufferToTexture(){}},Gu=class extends O{static get type(){return`InspectorNode`}constructor(e,t=``,n=null){super(),this.node=e,this.name=t,this.callback=n,this.updateType=Fa.FRAME,this.isInspectorNode=!0}getName(){return this.name||this.node.name}update(e){e.renderer.inspector.inspect(this)}getNodeType(e){return this.node.getNodeType(e)}setup(e){let t=this.node;return e.context.inspector===!0&&this.callback!==null&&(t=this.callback(t)),e.renderer.backend.isWebGPUBackend!==!0&&e.renderer.inspector.constructor!==Wu&&Ae(`TSL: ".toInspector()" is only available with WebGPU.`),t}};function Ku(e,t=``,n=null){return e=A(e),e.before(new Gu(e,t,n))}k(`toInspector`,Ku);function qu(e){T(`TSL: AddNodeElement has been removed in favor of tree-shaking. Trying add`,e)}var Ju=class extends O{static get type(){return`AttributeNode`}constructor(e,t=null){super(t),this.global=!0,this._attributeName=e}getHash(e){return this.getAttributeName(e)}getNodeType(e){let t=this.nodeType;if(t===null){let n=this.getAttributeName(e);if(e.hasGeometryAttribute(n)){let r=e.geometry.getAttribute(n);t=e.getTypeFromAttribute(r)}else t=`float`}return t}setAttributeName(e){return this._attributeName=e,this}getAttributeName(){return this._attributeName}generate(e){let t=this.getAttributeName(e),n=this.getNodeType(e);if(e.hasGeometryAttribute(t)===!0){let r=e.geometry.getAttribute(t),i=e.getTypeFromAttribute(r),a=e.getAttribute(t,i);return e.shaderStage===`vertex`?e.format(a.name,i,n):nu(this).build(e,n)}else return T(`AttributeNode: Vertex attribute "${t}" not found on geometry.`),e.generateConst(n)}serialize(e){super.serialize(e),e.global=this.global,e._attributeName=this._attributeName}deserialize(e){super.deserialize(e),this.global=e.global,this._attributeName=e._attributeName}},Yu=(e,t=null)=>new Ju(e,t),Xu=(e=0)=>Yu(`uv`+(e>0?e:``),`vec2`),Zu=j(class extends O{static get type(){return`TextureSizeNode`}constructor(e,t=null){super(`uvec2`),this.isTextureSizeNode=!0,this.textureNode=e,this.levelNode=t}generate(e,t){let n=this.textureNode.build(e,`property`),r=this.levelNode===null?`0`:this.levelNode.build(e,`int`);return e.format(`${e.getMethod(`textureDimensions`)}( ${n}, ${r} )`,this.getNodeType(e),t)}}).setParameterLength(1,2),Qu=j(class extends Xs{static get type(){return`MaxMipLevelNode`}constructor(e){super(0),this._textureNode=e,this.updateType=Fa.FRAME}get textureNode(){return this._textureNode}get texture(){return this._textureNode.value}update(){let e=this.texture,t=e.images,n=t&&t.length>0?t[0]&&t[0].image||t[0]:e.image;if(n&&n.width!==void 0){let{width:e,height:t}=n;this.value=Math.log2(Math.max(e,t))}}}).setParameterLength(1),$u=class extends Error{constructor(e,t=null){super(e),this.name=`NodeError`,this.stackTrace=t}},ed=new wt,td=class extends Xs{static get type(){return`TextureNode`}constructor(e=ed,t=null,n=null,r=null){super(e),this.isTextureNode=!0,this.uvNode=t,this.levelNode=n,this.biasNode=r,this.compareNode=null,this.depthNode=null,this.gradNode=null,this.offsetNode=null,this.sampler=!0,this.updateMatrix=!1,this.updateType=Fa.NONE,this.referenceNode=null,this._value=e,this._matrixUniform=null,this._flipYUniform=null,this.setUpdateMatrix(t===null)}set value(e){this.referenceNode?this.referenceNode.value=e:this._value=e}get value(){return this.referenceNode?this.referenceNode.value:this._value}getUniformHash(){return this.value.uuid}getNodeType(){return this.value.isDepthTexture===!0?`float`:this.value.type===1014?`uvec4`:this.value.type===1013?`ivec4`:`vec4`}getInputType(){return`texture`}getDefaultUV(){return Xu(this.value.channel)}updateReference(){return this.value}getTransformedUV(e){return this._matrixUniform===null&&(this._matrixUniform=U(this.value.matrix)),this._matrixUniform.mul(B(e,1)).xy}setUpdateMatrix(e){return this.updateMatrix=e,this}setupUV(e,t){return e.isFlipY()&&(this._flipYUniform===null&&(this._flipYUniform=U(!1)),t=t.toVar(),t=this.sampler?this._flipYUniform.select(t.flipY(),t):this._flipYUniform.select(t.setY(L(Zu(this,this.levelNode).y).sub(t.y).sub(1)),t)),t}setup(e){let t=e.getNodeProperties(this);t.referenceNode=this.referenceNode;let n=this.value;if(!n||n.isTexture!==!0)throw new $u("THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().",this.stackTrace);let r=P(()=>{let t=this.uvNode;return(t===null||e.context.forceUVContext===!0)&&e.context.getUV&&(t=e.context.getUV(this,e)),t||(t=this.getDefaultUV()),this.updateMatrix===!0&&(t=this.getTransformedUV(t)),t=this.setupUV(e,t),this.updateType=this._matrixUniform!==null||this._flipYUniform!==null?Fa.OBJECT:Fa.NONE,t})(),i=this.levelNode;i===null&&e.context.getTextureLevel&&(i=e.context.getTextureLevel(this));let a=null,o=null;if(this.compareNode!==null)if(e.renderer.hasCompatibility(Se.TEXTURE_COMPARE))a=this.compareNode;else{let e=n.compareFunction;e===null||e===513||e===515||e===516||e===518?o=this.compareNode:(a=this.compareNode,Ae(`TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.`))}t.uvNode=r,t.levelNode=i,t.biasNode=this.biasNode,t.compareNode=a,t.compareStepNode=o,t.gradNode=this.gradNode,t.depthNode=this.depthNode,t.offsetNode=this.offsetNode}generateUV(e,t){return t.build(e,this.sampler===!0?`vec2`:`ivec2`)}generateOffset(e,t){return t.build(e,`ivec2`)}generateSnippet(e,t,n,r,i,a,o,s,c){let l=this.value,u;return u=i?e.generateTextureBias(l,t,n,i,a,c):s?e.generateTextureGrad(l,t,n,s,a,c):o?e.generateTextureCompare(l,t,n,o,a,c):this.sampler===!1?e.generateTextureLoad(l,t,n,r,a,c):r?e.generateTextureLevel(l,t,n,r,a,c):e.generateTexture(l,t,n,a,c),u}generate(e,t){let n=this.value,r=e.getNodeProperties(this),i=super.generate(e,`property`);if(/^sampler/.test(t))return i+`_sampler`;if(e.isReference(t))return i;{let a=e.getDataFromNode(this),o=this.getNodeType(e),s=a.propertyName;if(s===void 0){let{uvNode:t,levelNode:c,biasNode:l,compareNode:u,compareStepNode:d,depthNode:f,gradNode:p,offsetNode:m}=r,h=this.generateUV(e,t),g=c?c.build(e,`float`):null,_=l?l.build(e,`float`):null,v=f?f.build(e,`int`):null,y=u?u.build(e,`float`):null,b=d?d.build(e,`float`):null,x=p?[p[0].build(e,`vec2`),p[1].build(e,`vec2`)]:null,S=m?this.generateOffset(e,m):null,C=e.getVarFromNode(this);s=e.getPropertyName(C);let ee=this.generateSnippet(e,i,h,g,_,v,y,x,S);if(b!==null){let t=n.compareFunction;ee=t===516||t===518?_l(Lu(ee,o),Lu(b,`float`)).build(e,o):_l(Lu(b,`float`),Lu(ee,o)).build(e,o)}e.addLineFlowCode(`${s} = ${ee}`,this),a.snippet=ee,a.propertyName=s}let c=s;return e.needsToWorkingColorSpace(n)&&(c=uu(Lu(c,o),n.colorSpace).setup(e).build(e,o)),e.format(c,o,t)}}setSampler(e){return this.sampler=e,this}getSampler(){return this.sampler}sample(e){let t=this.clone();return t.uvNode=A(e),t.referenceNode=this.getBase(),A(t)}load(e){return this.sample(e).setSampler(!1)}blur(e){let t=this.clone();t.biasNode=A(e).mul(Qu(t)),t.referenceNode=this.getBase();let n=t.value;return t.generateMipmaps===!1&&(n&&n.generateMipmaps===!1||n.minFilter===1003||n.magFilter===1003)&&(T(`TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture.`),t.biasNode=null),A(t)}level(e){let t=this.clone();return t.levelNode=A(e),t.referenceNode=this.getBase(),A(t)}size(e){return Zu(this,e)}bias(e){let t=this.clone();return t.biasNode=A(e),t.referenceNode=this.getBase(),A(t)}getBase(){return this.referenceNode?this.referenceNode.getBase():this}compare(e){let t=this.clone();return t.compareNode=A(e),t.referenceNode=this.getBase(),A(t)}grad(e,t){let n=this.clone();return n.gradNode=[A(e),A(t)],n.referenceNode=this.getBase(),A(n)}depth(e){let t=this.clone();return t.depthNode=A(e),t.referenceNode=this.getBase(),A(t)}offset(e){let t=this.clone();return t.offsetNode=A(e),t.referenceNode=this.getBase(),A(t)}serialize(e){super.serialize(e),e.value=this.value.toJSON(e.meta).uuid,e.sampler=this.sampler,e.updateMatrix=this.updateMatrix,e.updateType=this.updateType}deserialize(e){super.deserialize(e),this.value=e.meta.textures[e.value],this.sampler=e.sampler,this.updateMatrix=e.updateMatrix,this.updateType=e.updateType}update(){let e=this.value,t=this._matrixUniform;t!==null&&(t.value=e.matrix),e.matrixAutoUpdate===!0&&e.updateMatrix();let n=this._flipYUniform;n!==null&&(n.value=e.image instanceof ImageBitmap&&e.flipY===!0||e.isRenderTargetTexture===!0||e.isFramebufferTexture===!0||e.isDepthTexture===!0)}clone(){let e=new this.constructor(this.value,this.uvNode,this.levelNode,this.biasNode);return e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}},nd=j(td).setParameterLength(1,4).setName(`texture`),rd=(e=ed,t=null,n=null,r=null)=>{let i;return e&&e.isTextureNode===!0?(i=A(e.clone()),i.referenceNode=e.getBase(),t!==null&&(i.uvNode=A(t)),n!==null&&(i.levelNode=A(n)),r!==null&&(i.biasNode=A(r))):i=nd(e,t,n,r),i},id=(e=ed)=>rd(e),ad=(...e)=>rd(...e).setSampler(!1),od=(e,t,n)=>rd(e,t).level(n),sd=e=>(e.isNode===!0?e:rd(e)).convert(`sampler`),cd=e=>(e.isNode===!0?e:rd(e)).convert(`samplerComparison`),ld=class extends Xs{static get type(){return`BufferNode`}constructor(e,t,n=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferCount=n,this.updateRanges=[]}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}getElementType(e){return this.getNodeType(e)}getInputType(){return`buffer`}},ud=(e,t,n)=>new ld(e,t,n),dd=class extends Wa{static get type(){return`UniformArrayElementNode`}constructor(e,t){super(e,t),this.isArrayBufferElementNode=!0}generate(e){let t=super.generate(e),n=this.getNodeType(),r=this.node.getPaddedType();return e.format(t,r,n)}},fd=class extends ld{static get type(){return`UniformArrayNode`}constructor(e,t=null){super(null),this.array=e,this.elementType=t===null?ka(e[0]):t,this.paddedType=this.getPaddedType(),this.updateType=Fa.RENDER,this.isArrayBufferNode=!0}getNodeType(){return this.paddedType}getElementType(){return this.elementType}getPaddedType(){let e=this.elementType,t=`vec4`;return e===`mat2`?t=`mat2`:/mat/.test(e)===!0?t=`mat4`:e.charAt(0)===`i`?t=`ivec4`:e.charAt(0)===`u`&&(t=`uvec4`),t}update(){let{array:e,value:t}=this,n=this.elementType;if(n===`float`||n===`int`||n===`uint`)for(let n=0;n<e.length;n++){let r=n*4;t[r]=e[n]}else if(n===`color`)for(let n=0;n<e.length;n++){let r=n*4,i=e[n];t[r]=i.r,t[r+1]=i.g,t[r+2]=i.b||0}else if(n===`mat2`)for(let n=0;n<e.length;n++){let r=n*4,i=e[n];t[r]=i.elements[0],t[r+1]=i.elements[1],t[r+2]=i.elements[2],t[r+3]=i.elements[3]}else if(n===`mat3`)for(let n=0;n<e.length;n++){let r=n*16,i=e[n];t[r]=i.elements[0],t[r+1]=i.elements[1],t[r+2]=i.elements[2],t[r+4]=i.elements[3],t[r+5]=i.elements[4],t[r+6]=i.elements[5],t[r+8]=i.elements[6],t[r+9]=i.elements[7],t[r+10]=i.elements[8],t[r+15]=1}else if(n===`mat4`)for(let n=0;n<e.length;n++){let r=n*16,i=e[n];for(let e=0;e<i.elements.length;e++)t[r+e]=i.elements[e]}else for(let n=0;n<e.length;n++){let r=n*4,i=e[n];t[r]=i.x,t[r+1]=i.y,t[r+2]=i.z||0,t[r+3]=i.w||0}}setup(e){let t=this.array.length,n=this.elementType,r=Float32Array,i=this.paddedType,a=e.getTypeLength(i);return n.charAt(0)===`i`&&(r=Int32Array),n.charAt(0)===`u`&&(r=Uint32Array),this.value=new r(t*a),this.bufferCount=t,this.bufferType=i,this.update(),super.setup(e)}element(e){return new dd(this,A(e))}},pd=(e,t)=>new fd(e,t),md=j(class extends O{constructor(e){super(`float`),this.name=e,this.isBuiltinNode=!0}generate(){return this.name}}).setParameterLength(1),hd,gd,_d=class e extends O{static get type(){return`ScreenNode`}constructor(e){super(),this.scope=e,this._output=null,this.isViewportNode=!0}getNodeType(){return this.scope===e.DPR?`float`:this.scope===e.VIEWPORT?`vec4`:`vec2`}getUpdateType(){let t=Fa.NONE;return(this.scope===e.SIZE||this.scope===e.VIEWPORT||this.scope===e.DPR)&&(t=Fa.RENDER),this.updateType=t,t}update({renderer:t}){let n=t.getRenderTarget();this.scope===e.VIEWPORT?n===null?(t.getViewport(gd),gd.multiplyScalar(t.getPixelRatio())):gd.copy(n.viewport):this.scope===e.DPR?this._output.value=t.getPixelRatio():n===null?t.getDrawingBufferSize(hd):(hd.width=n.width,hd.height=n.height)}setup(){let t=this.scope,n=null;return n=t===e.SIZE?U(hd||(hd=new at)):t===e.VIEWPORT?U(gd||(gd=new Tt)):t===e.DPR?U(1):z(xd.div(bd)),this._output=n,n}generate(t){if(this.scope===e.COORDINATE){let e=t.getFragCoord();if(t.isFlipY()){let n=t.getNodeProperties(bd).outputNode.build(t);e=`${t.getType(`vec2`)}( ${e}.x, ${n}.y - ${e}.y )`}return e}return super.generate(t)}};_d.COORDINATE=`coordinate`,_d.VIEWPORT=`viewport`,_d.SIZE=`size`,_d.UV=`uv`,_d.DPR=`dpr`;var vd=M(_d,_d.DPR),yd=M(_d,_d.UV),bd=M(_d,_d.SIZE),xd=M(_d,_d.COORDINATE),Sd=M(_d,_d.VIEWPORT),Cd=Sd.zw,wd=xd.sub(Sd.xy),Td=wd.div(Cd),Ed=P(()=>(T(`TSL: "viewportResolution" is deprecated. Use "screenSize" instead.`,new _a),bd),`vec2`).once()(),Dd=null,Od=null,kd=null,Ad=null,jd=null,Md=null,Nd=null,Pd=null,Fd=null,Id=null,Ld=null,Rd=null,zd=null,Bd=null,Vd=U(0,`uint`).setName(`u_cameraIndex`).setGroup(qs(`cameraIndex`)).toVarying(`v_cameraIndex`),Hd=U(`float`).setName(`cameraNear`).setGroup(H).onRenderUpdate(({camera:e})=>e.near),Ud=U(`float`).setName(`cameraFar`).setGroup(H).onRenderUpdate(({camera:e})=>e.far),Wd=P(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){let n=[];for(let t of e.cameras)n.push(t.projectionMatrix);Od===null?Od=pd(n).setGroup(H).setName(`cameraProjectionMatrices`):Od.array=n,t=Od.element(e.isMultiViewCamera?md(`gl_ViewID_OVR`):Vd).toConst(`cameraProjectionMatrix`)}else Dd===null&&(Dd=U(e.projectionMatrix).setName(`cameraProjectionMatrix`).setGroup(H).onRenderUpdate(({camera:e})=>e.projectionMatrix)),t=Dd;return t}).once()(),Gd=P(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){let n=[];for(let t of e.cameras)n.push(t.projectionMatrixInverse);Ad===null?Ad=pd(n).setGroup(H).setName(`cameraProjectionMatricesInverse`):Ad.array=n,t=Ad.element(e.isMultiViewCamera?md(`gl_ViewID_OVR`):Vd).toConst(`cameraProjectionMatrixInverse`)}else kd===null&&(kd=U(e.projectionMatrixInverse).setName(`cameraProjectionMatrixInverse`).setGroup(H).onRenderUpdate(({camera:e})=>e.projectionMatrixInverse)),t=kd;return t}).once()(),Kd=P(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){let n=[];for(let t of e.cameras)n.push(t.matrixWorldInverse);Md===null?Md=pd(n).setGroup(H).setName(`cameraViewMatrices`):Md.array=n,t=Md.element(e.isMultiViewCamera?md(`gl_ViewID_OVR`):Vd).toConst(`cameraViewMatrix`)}else jd===null&&(jd=U(e.matrixWorldInverse).setName(`cameraViewMatrix`).setGroup(H).onRenderUpdate(({camera:e})=>e.matrixWorldInverse)),t=jd;return t}).once()(),qd=P(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){let n=[];for(let t of e.cameras)n.push(t.matrixWorld);Pd===null?Pd=pd(n).setGroup(H).setName(`cameraWorldMatrices`):Pd.array=n,t=Pd.element(e.isMultiViewCamera?md(`gl_ViewID_OVR`):Vd).toConst(`cameraWorldMatrix`)}else Nd===null&&(Nd=U(e.matrixWorld).setName(`cameraWorldMatrix`).setGroup(H).onRenderUpdate(({camera:e})=>e.matrixWorld)),t=Nd;return t}).once()(),Jd=P(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){let n=[];for(let t of e.cameras)n.push(t.normalMatrix);Id===null?Id=pd(n).setGroup(H).setName(`cameraNormalMatrices`):Id.array=n,t=Id.element(e.isMultiViewCamera?md(`gl_ViewID_OVR`):Vd).toConst(`cameraNormalMatrix`)}else Fd===null&&(Fd=U(e.normalMatrix).setName(`cameraNormalMatrix`).setGroup(H).onRenderUpdate(({camera:e})=>e.normalMatrix)),t=Fd;return t}).once()(),Yd=P(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){let n=[];for(let t=0,r=e.cameras.length;t<r;t++)n.push(new D);Rd===null?Rd=pd(n).setGroup(H).setName(`cameraPositions`).onRenderUpdate(({camera:e},t)=>{let n=e.cameras,r=t.array;for(let e=0,t=n.length;e<t;e++)r[e].setFromMatrixPosition(n[e].matrixWorld)}):Rd.array=n,t=Rd.element(e.isMultiViewCamera?md(`gl_ViewID_OVR`):Vd).toConst(`cameraPosition`)}else Ld===null&&(Ld=U(new D).setName(`cameraPosition`).setGroup(H).onRenderUpdate(({camera:e},t)=>t.value.setFromMatrixPosition(e.matrixWorld))),t=Ld;return t}).once()(),Xd=P(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){let n=[];for(let t of e.cameras)n.push(t.viewport);Bd===null?Bd=pd(n,`vec4`).setGroup(H).setName(`cameraViewports`):Bd.array=n,t=Bd.element(Vd).toConst(`cameraViewport`)}else zd===null&&(zd=V(0,0,bd.x,bd.y).toConst(`cameraViewport`)),t=zd;return t}).once()(),Zd=new Xn,Qd=class e extends O{static get type(){return`Object3DNode`}constructor(e,t=null){super(),this.scope=e,this.object3d=t,this.updateType=Fa.OBJECT,this.uniformNode=new Xs(null)}getNodeType(){let t=this.scope;if(t===e.WORLD_MATRIX)return`mat4`;if(t===e.POSITION||t===e.VIEW_POSITION||t===e.DIRECTION||t===e.SCALE)return`vec3`;if(t===e.RADIUS)return`float`}update(t){let n=this.object3d,r=this.uniformNode,i=this.scope;if(i===e.WORLD_MATRIX)r.value=n.matrixWorld;else if(i===e.POSITION)r.value=r.value||new D,r.value.setFromMatrixPosition(n.matrixWorld);else if(i===e.SCALE)r.value=r.value||new D,r.value.setFromMatrixScale(n.matrixWorld);else if(i===e.DIRECTION)r.value=r.value||new D,n.getWorldDirection(r.value);else if(i===e.VIEW_POSITION){let e=t.camera;r.value=r.value||new D,r.value.setFromMatrixPosition(n.matrixWorld),r.value.applyMatrix4(e.matrixWorldInverse)}else if(i===e.RADIUS){let e=t.object.geometry;e.boundingSphere===null&&e.computeBoundingSphere(),Zd.copy(e.boundingSphere).applyMatrix4(n.matrixWorld),r.value=Zd.radius}}generate(t){let n=this.scope;return n===e.WORLD_MATRIX?this.uniformNode.nodeType=`mat4`:n===e.POSITION||n===e.VIEW_POSITION||n===e.DIRECTION||n===e.SCALE?this.uniformNode.nodeType=`vec3`:n===e.RADIUS&&(this.uniformNode.nodeType=`float`),this.uniformNode.build(t)}serialize(e){super.serialize(e),e.scope=this.scope}deserialize(e){super.deserialize(e),this.scope=e.scope}};Qd.WORLD_MATRIX=`worldMatrix`,Qd.POSITION=`position`,Qd.SCALE=`scale`,Qd.VIEW_POSITION=`viewPosition`,Qd.DIRECTION=`direction`,Qd.RADIUS=`radius`;var $d=j(Qd,Qd.DIRECTION).setParameterLength(1),ef=j(Qd,Qd.WORLD_MATRIX).setParameterLength(1),tf=j(Qd,Qd.POSITION).setParameterLength(1),nf=j(Qd,Qd.SCALE).setParameterLength(1),rf=j(Qd,Qd.VIEW_POSITION).setParameterLength(1),af=j(Qd,Qd.RADIUS).setParameterLength(1),of=class extends Qd{static get type(){return`ModelNode`}constructor(e){super(e)}update(e){this.object3d=e.object,super.update(e)}},sf=M(of,of.DIRECTION),cf=M(of,of.WORLD_MATRIX),lf=M(of,of.POSITION),uf=M(of,of.SCALE),df=M(of,of.VIEW_POSITION),ff=M(of,of.RADIUS),pf=U(new lt).onObjectUpdate(({object:e},t)=>t.value.getNormalMatrix(e.matrixWorld)),mf=U(new Ot).onObjectUpdate(({object:e},t)=>t.value.copy(e.matrixWorld).invert()),hf=P(e=>e.context.modelViewMatrix||gf).once()().toVar(`modelViewMatrix`),gf=Kd.mul(cf),_f=P(e=>(e.context.isHighPrecisionModelViewMatrix=!0,U(`mat4`).onObjectUpdate(({object:e,camera:t})=>e.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse,e.matrixWorld)))).once()().toVar(`highpModelViewMatrix`),vf=P(e=>{let t=e.context.isHighPrecisionModelViewMatrix;return U(`mat3`).onObjectUpdate(({object:e,camera:n})=>(t!==!0&&e.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,e.matrixWorld),e.normalMatrix.getNormalMatrix(e.modelViewMatrix)))}).once()().toVar(`highpModelNormalViewMatrix`),yf=P(e=>e.shaderStage===`fragment`?e.context.clipSpace.toVarying(`v_clipSpace`):(Ae("TSL: `clipSpace` is only available in fragment stage."),V())).once()(),bf=Yu(`position`,`vec3`),xf=bf.toVarying(`positionLocal`),Sf=bf.toVarying(`positionPrevious`),Cf=P(e=>cf.mul(xf).xyz.toVarying(e.getSubBuildProperty(`v_positionWorld`)),`vec3`).once([`POSITION`])(),wf=P(()=>xf.transformDirection(cf).toVarying(`v_positionWorldDirection`).normalize().toVar(`positionWorldDirection`),`vec3`).once([`POSITION`])(),Tf=P(e=>{if(e.shaderStage===`fragment`&&e.material.vertexNode){let e=Gd.mul(yf);return e.xyz.div(e.w).toVar(`positionView`)}return e.context.setupPositionView().toVarying(`v_positionView`)},`vec3`).once([`POSITION`,`VERTEX`])(),Ef=P(e=>{let t;return t=e.camera.isOrthographicCamera?B(0,0,1):Tf.negate().toVarying(`v_positionViewDirection`).normalize(),t.toVar(`positionViewDirection`)},`vec3`).once([`POSITION`])(),Df=M(class extends O{static get type(){return`FrontFacingNode`}constructor(){super(`bool`),this.isFrontFacingNode=!0}generate(e){if(e.shaderStage!==`fragment`)return`true`;let{material:t}=e;return t.side===1?`false`:e.getFrontFacing()}}),Of=I(Df).mul(2).sub(1),kf=P(([e],{material:t})=>{let n=t.side;return n===1?e=e.mul(-1):n===2&&(e=e.mul(Of)),e}),Af=Yu(`normal`,`vec3`),jf=P(e=>e.geometry.hasAttribute(`normal`)===!1?(T(`TSL: Vertex attribute "normal" not found on geometry.`),B(0,1,0)):Af,`vec3`).once()().toVar(`normalLocal`),Mf=Tf.dFdx().cross(Tf.dFdy()).normalize().toVar(`normalFlat`),Nf=P(e=>{let t;return t=e.isFlatShading()?Mf:zf(jf).toVarying(`v_normalViewGeometry`).normalize(),t},`vec3`).once()().toVar(`normalViewGeometry`),Pf=P(e=>{let t=Nf.transformDirection(Kd);return e.isFlatShading()!==!0&&(t=t.toVarying(`v_normalWorldGeometry`)),t.normalize().toVar(`normalWorldGeometry`)},`vec3`).once()(),Ff=P(e=>{let t;return e.subBuildFn===`NORMAL`||e.subBuildFn===`VERTEX`?(t=Nf,e.isFlatShading()!==!0&&(t=kf(t))):t=e.context.setupNormal().context({getUV:null,getTextureLevel:null}),t},`vec3`).once([`NORMAL`,`VERTEX`])().toVar(`normalView`),If=Ff.transformDirection(Kd).toVar(`normalWorld`),Lf=P(({subBuildFn:e,context:t})=>{let n;return n=e===`NORMAL`||e===`VERTEX`?Ff:t.setupClearcoatNormal().context({getUV:null,getTextureLevel:null}),n},`vec3`).once([`NORMAL`,`VERTEX`])().toVar(`clearcoatNormalView`),Rf=P(([e,t=cf])=>{let n=is(t),r=e.div(B(n[0].dot(n[0]),n[1].dot(n[1]),n[2].dot(n[2])));return n.mul(r).xyz}),zf=P(([e],t)=>{let n=t.context.modelNormalViewMatrix;if(n)return n.transformDirection(e);let r=pf.mul(e);return Kd.transformDirection(r)}),Bf=P(()=>(T(`TSL: "transformedNormalView" is deprecated. Use "normalView" instead.`),Ff)).once([`NORMAL`,`VERTEX`])(),Vf=P(()=>(T(`TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.`),If)).once([`NORMAL`,`VERTEX`])(),Hf=P(()=>(T(`TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.`),Lf)).once([`NORMAL`,`VERTEX`])(),Uf=new Rt,Wf=new Ot,Gf=U(0).onReference(({material:e})=>e).onObjectUpdate(({material:e})=>e.refractionRatio),Kf=U(1).onReference(({material:e})=>e).onObjectUpdate(function({material:e,scene:t}){return e.envMap?e.envMapIntensity:t.environmentIntensity}),qf=U(new Ot).onReference(function(e){return e.material}).onObjectUpdate(function({material:e,scene:t}){let n=t.environment!==null&&e.envMap===null?t.environmentRotation:e.envMapRotation;return n?(Uf.copy(n),Wf.makeRotationFromEuler(Uf)):Wf.identity(),Wf}),Jf=Ef.negate().reflect(Ff),Yf=Ef.negate().refract(Ff,Gf),Xf=Jf.transformDirection(Kd).toVar(`reflectVector`),Zf=Yf.transformDirection(Kd).toVar(`reflectVector`),Qf=new $r,$f=j(class extends td{static get type(){return`CubeTextureNode`}constructor(e,t=null,n=null,r=null){super(e,t,n,r),this.isCubeTextureNode=!0}getInputType(){return this.value.isDepthTexture===!0?`cubeDepthTexture`:`cubeTexture`}getDefaultUV(){let e=this.value;return e.mapping===301?Xf:e.mapping===302?Zf:(E(`CubeTextureNode: Mapping "%s" not supported.`,e.mapping),B(0,0,0))}setUpdateMatrix(){}setupUV(e,t){let n=this.value;return n.isDepthTexture===!0?e.renderer.coordinateSystem===2001?B(t.x,t.y.negate(),t.z):t:((e.renderer.coordinateSystem===2001||!n.isRenderTargetTexture)&&(t=B(t.x.negate(),t.yz)),qf.mul(t))}generateUV(e,t){return t.build(e,this.sampler===!0?`vec3`:`ivec3`)}}).setParameterLength(1,4).setName(`cubeTexture`),ep=(e=Qf,t=null,n=null,r=null)=>{let i;return e&&e.isCubeTextureNode===!0?(i=A(e.clone()),i.referenceNode=e,t!==null&&(i.uvNode=A(t)),n!==null&&(i.levelNode=A(n)),r!==null&&(i.biasNode=A(r))):i=$f(e,t,n,r),i},tp=(e=Qf)=>$f(e),np=class extends Wa{static get type(){return`ReferenceElementNode`}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){let t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}},rp=class extends O{static get type(){return`ReferenceNode`}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split(`.`),this.reference=n,this.node=null,this.group=null,this.name=null,this.updateType=Fa.OBJECT}element(e){return new np(this,A(e))}setGroup(e){return this.group=e,this}setName(e){return this.name=e,this}label(e){return T(`TSL: "label()" has been deprecated. Use "setName()" instead.`),this.setName(e)}setNodeType(e){let t=null;t=this.count===null?Array.isArray(this.getValueFromReference())?pd(null,e):e===`texture`?rd(null):e===`cubeTexture`?ep(null):U(null,e):ud(null,e,this.count),this.group!==null&&t.setGroup(this.group),this.name!==null&&t.setName(this.name),this.node=t}getNodeType(e){return this.node===null&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){let{properties:t}=this,n=e[t[0]];for(let e=1;e<t.length;e++)n=n[t[e]];return n}updateReference(e){return this.reference=this.object===null?e.object:this.object,this.reference}setup(){return this.updateValue(),this.node}update(){this.updateValue()}updateValue(){this.node===null&&this.setNodeType(this.uniformType);let e=this.getValueFromReference();Array.isArray(e)?this.node.array=e:this.node.value=e}},ip=(e,t,n)=>new rp(e,t,n),ap=(e,t,n,r)=>new rp(e,t,r,n),op=class extends rp{static get type(){return`MaterialReferenceNode`}constructor(e,t,n=null){super(e,t,n),this.material=n,this.isMaterialReferenceNode=!0}updateReference(e){return this.reference=this.material===null?e.material:this.material,this.reference}},sp=(e,t,n=null)=>new op(e,t,n),cp=Xu(),lp=Tf.dFdx(),up=Tf.dFdy(),dp=cp.dFdx(),fp=cp.dFdy(),pp=Ff,mp=up.cross(pp),hp=pp.cross(lp),gp=mp.mul(dp.x).add(hp.mul(fp.x)),_p=mp.mul(dp.y).add(hp.mul(fp.y)),vp=gp.dot(gp).max(_p.dot(_p)),yp=vp.equal(0).select(0,vp.inverseSqrt()),bp=gp.mul(yp).toVar(`tangentViewFrame`),xp=_p.mul(yp).toVar(`bitangentViewFrame`),Sp=Yu(`tangent`,`vec4`),Cp=Sp.xyz.toVar(`tangentLocal`),wp=P(e=>{let t;return t=e.subBuildFn===`VERTEX`||e.geometry.hasAttribute(`tangent`)?hf.mul(V(Cp,0)).xyz.toVarying(`v_tangentView`).normalize():bp,e.isFlatShading()!==!0&&(t=kf(t)),t},`vec3`).once([`NORMAL`,`VERTEX`])().toVar(`tangentView`),Tp=wp.transformDirection(Kd).toVarying(`v_tangentWorld`).normalize().toVar(`tangentWorld`),Ep=P(([e,t],n)=>{let r=e.mul(Sp.w).xyz;return n.subBuildFn===`NORMAL`&&n.isFlatShading()!==!0&&(r=r.toVarying(t)),r}).once([`NORMAL`]),Dp=Ep(Af.cross(Sp),`v_bitangentGeometry`).normalize().toVar(`bitangentGeometry`),Op=Ep(jf.cross(Cp),`v_bitangentLocal`).normalize().toVar(`bitangentLocal`),kp=P(e=>{let t;return t=e.subBuildFn===`VERTEX`||e.geometry.hasAttribute(`tangent`)?Ep(Ff.cross(wp),`v_bitangentView`).normalize():xp,e.isFlatShading()!==!0&&(t=kf(t)),t},`vec3`).once([`NORMAL`,`VERTEX`])().toVar(`bitangentView`),Ap=Ep(If.cross(Tp),`v_bitangentWorld`).normalize().toVar(`bitangentWorld`),jp=is(wp,kp,Ff).toVar(`TBNViewMatrix`),Mp=Ef.mul(jp),Np=(e,t)=>e.sub(Mp.mul(t)),Pp=P(()=>{let e=As.cross(Ef);return e=e.cross(As).normalize(),e=Al(e,Ff,Os.mul(vs.oneMinus()).oneMinus().pow2().pow2()).normalize(),e}).once()(),Fp=e=>A(e).mul(.5).add(.5),Ip=e=>A(e).mul(2).sub(1),Lp=e=>B(e,Uc(Ml(I(1).sub(xl(e,e))))),Rp=j(class extends Ka{static get type(){return`NormalMapNode`}constructor(e,t=null){super(`vec3`),this.node=e,this.scaleNode=t,this.normalMapType=0,this.unpackNormalMode=``}setup(e){let{normalMapType:t,scaleNode:n,unpackNormalMode:r}=this,i=this.node.mul(2).sub(1);if(t===0?r===`rg`?i=Lp(i.xy):r===`ga`?i=Lp(i.yw):r!==``&&console.error(`THREE.NodeMaterial: Unexpected unpack normal mode: ${r}`):r!==``&&console.error(`THREE.NodeMaterial: Normal map type '${t}' is not compatible with unpack normal mode '${r}'`),n!==null){let t=n;e.isFlatShading()===!0&&(t=kf(t)),i=B(i.xy.mul(t),i.z)}let a=null;return t===1?a=zf(i):t===0?a=jp.mul(i).normalize():(E(`NodeMaterial: Unsupported normal map type: ${t}`),a=Ff),a}}).setParameterLength(1,2),zp=P(({textureNode:e,bumpScale:t})=>{let n=t=>e.isolate().context({getUV:e=>t(e.uvNode||Xu()),forceUVContext:!0}),r=I(n(e=>e));return z(I(n(e=>e.add(e.dFdx()))).sub(r),I(n(e=>e.add(e.dFdy()))).sub(r)).mul(t)}),Bp=P(e=>{let{surf_pos:t,surf_norm:n,dHdxy:r}=e,i=t.dFdx().normalize(),a=t.dFdy().normalize(),o=n,s=a.cross(o),c=o.cross(i),l=i.dot(s).mul(Of),u=l.sign().mul(r.x.mul(s).add(r.y.mul(c)));return l.abs().mul(n).sub(u).normalize()}),Vp=j(class extends Ka{static get type(){return`BumpMapNode`}constructor(e,t=null){super(`vec3`),this.textureNode=e,this.scaleNode=t}setup(){let e=this.scaleNode===null?1:this.scaleNode;return Bp({surf_pos:Tf,surf_norm:Ff,dHdxy:zp({textureNode:this.textureNode,bumpScale:e})})}}).setParameterLength(1,2),Hp=new Map,K=class e extends O{static get type(){return`MaterialNode`}constructor(e){super(),this.scope=e}getCache(e,t){let n=Hp.get(e);return n===void 0&&(n=sp(e,t),Hp.set(e,n)),n}getFloat(e){return this.getCache(e,`float`)}getColor(e){return this.getCache(e,`color`)}getTexture(e){return this.getCache(e===`map`?`map`:e+`Map`,`texture`)}setup(t){let n=t.context.material,r=this.scope,i=null;if(r===e.COLOR){let e=n.color===void 0?B():this.getColor(r);i=n.map&&n.map.isTexture===!0?e.mul(this.getTexture(`map`)):e}else if(r===e.OPACITY){let e=this.getFloat(r);i=n.alphaMap&&n.alphaMap.isTexture===!0?e.mul(this.getTexture(`alpha`)):e}else if(r===e.SPECULAR_STRENGTH)i=n.specularMap&&n.specularMap.isTexture===!0?this.getTexture(`specular`).r:I(1);else if(r===e.SPECULAR_INTENSITY){let e=this.getFloat(r);i=n.specularIntensityMap&&n.specularIntensityMap.isTexture===!0?e.mul(this.getTexture(r).a):e}else if(r===e.SPECULAR_COLOR){let e=this.getColor(r);i=n.specularColorMap&&n.specularColorMap.isTexture===!0?e.mul(this.getTexture(r).rgb):e}else if(r===e.ROUGHNESS){let e=this.getFloat(r);i=n.roughnessMap&&n.roughnessMap.isTexture===!0?e.mul(this.getTexture(r).g):e}else if(r===e.METALNESS){let e=this.getFloat(r);i=n.metalnessMap&&n.metalnessMap.isTexture===!0?e.mul(this.getTexture(r).b):e}else if(r===e.EMISSIVE){let e=this.getFloat(`emissiveIntensity`),t=this.getColor(r).mul(e);i=n.emissiveMap&&n.emissiveMap.isTexture===!0?t.mul(this.getTexture(r)):t}else if(r===e.NORMAL)n.normalMap?(i=Rp(this.getTexture(`normal`),this.getCache(`normalScale`,`vec2`)),i.normalMapType=n.normalMapType,(n.normalMap.format==1030||n.normalMap.format==36285||n.normalMap.format==37490)&&(i.unpackNormalMode=`rg`)):i=n.bumpMap?Vp(this.getTexture(`bump`).r,this.getFloat(`bumpScale`)):Ff;else if(r===e.CLEARCOAT){let e=this.getFloat(r);i=n.clearcoatMap&&n.clearcoatMap.isTexture===!0?e.mul(this.getTexture(r).r):e}else if(r===e.CLEARCOAT_ROUGHNESS){let e=this.getFloat(r);i=n.clearcoatRoughnessMap&&n.clearcoatRoughnessMap.isTexture===!0?e.mul(this.getTexture(r).r):e}else if(r===e.CLEARCOAT_NORMAL)i=n.clearcoatNormalMap?Rp(this.getTexture(r),this.getCache(r+`Scale`,`vec2`)):Ff;else if(r===e.SHEEN){let e=this.getColor(`sheenColor`).mul(this.getFloat(`sheen`));i=n.sheenColorMap&&n.sheenColorMap.isTexture===!0?e.mul(this.getTexture(`sheenColor`).rgb):e}else if(r===e.SHEEN_ROUGHNESS){let e=this.getFloat(r);i=n.sheenRoughnessMap&&n.sheenRoughnessMap.isTexture===!0?e.mul(this.getTexture(r).a):e,i=i.clamp(1e-4,1)}else if(r===e.ANISOTROPY)if(n.anisotropyMap&&n.anisotropyMap.isTexture===!0){let e=this.getTexture(r);i=rs(Em.x,Em.y,Em.y.negate(),Em.x).mul(e.rg.mul(2).sub(z(1)).normalize().mul(e.b))}else i=Em;else if(r===e.IRIDESCENCE_THICKNESS){let e=ip(`1`,`float`,n.iridescenceThicknessRange);if(n.iridescenceThicknessMap){let t=ip(`0`,`float`,n.iridescenceThicknessRange);i=e.sub(t).mul(this.getTexture(r).g).add(t)}else i=e}else if(r===e.TRANSMISSION){let e=this.getFloat(r);i=n.transmissionMap?e.mul(this.getTexture(r).r):e}else if(r===e.THICKNESS){let e=this.getFloat(r);i=n.thicknessMap?e.mul(this.getTexture(r).g):e}else if(r===e.IOR)i=this.getFloat(r);else if(r===e.LIGHT_MAP)i=this.getTexture(r).rgb.mul(this.getFloat(`lightMapIntensity`));else if(r===e.AO)i=this.getTexture(r).r.sub(1).mul(this.getFloat(`aoMapIntensity`)).add(1);else if(r===e.LINE_DASH_OFFSET)i=n.dashOffset?this.getFloat(r):I(0);else{let e=this.getNodeType(t);i=this.getCache(r,e)}return i}};K.ALPHA_TEST=`alphaTest`,K.COLOR=`color`,K.OPACITY=`opacity`,K.SHININESS=`shininess`,K.SPECULAR=`specular`,K.SPECULAR_STRENGTH=`specularStrength`,K.SPECULAR_INTENSITY=`specularIntensity`,K.SPECULAR_COLOR=`specularColor`,K.REFLECTIVITY=`reflectivity`,K.ROUGHNESS=`roughness`,K.METALNESS=`metalness`,K.NORMAL=`normal`,K.CLEARCOAT=`clearcoat`,K.CLEARCOAT_ROUGHNESS=`clearcoatRoughness`,K.CLEARCOAT_NORMAL=`clearcoatNormal`,K.EMISSIVE=`emissive`,K.ROTATION=`rotation`,K.SHEEN=`sheen`,K.SHEEN_ROUGHNESS=`sheenRoughness`,K.ANISOTROPY=`anisotropy`,K.IRIDESCENCE=`iridescence`,K.IRIDESCENCE_IOR=`iridescenceIOR`,K.IRIDESCENCE_THICKNESS=`iridescenceThickness`,K.IOR=`ior`,K.TRANSMISSION=`transmission`,K.THICKNESS=`thickness`,K.ATTENUATION_DISTANCE=`attenuationDistance`,K.ATTENUATION_COLOR=`attenuationColor`,K.LINE_SCALE=`scale`,K.LINE_DASH_SIZE=`dashSize`,K.LINE_GAP_SIZE=`gapSize`,K.LINE_WIDTH=`linewidth`,K.LINE_DASH_OFFSET=`dashOffset`,K.POINT_SIZE=`size`,K.DISPERSION=`dispersion`,K.LIGHT_MAP=`light`,K.AO=`ao`;var Up=M(K,K.ALPHA_TEST),Wp=M(K,K.COLOR),Gp=M(K,K.SHININESS),Kp=M(K,K.EMISSIVE),qp=M(K,K.OPACITY),Jp=M(K,K.SPECULAR),Yp=M(K,K.SPECULAR_INTENSITY),Xp=M(K,K.SPECULAR_COLOR),Zp=M(K,K.SPECULAR_STRENGTH),Qp=M(K,K.REFLECTIVITY),$p=M(K,K.ROUGHNESS),em=M(K,K.METALNESS),tm=M(K,K.NORMAL),nm=M(K,K.CLEARCOAT),rm=M(K,K.CLEARCOAT_ROUGHNESS),im=M(K,K.CLEARCOAT_NORMAL),am=M(K,K.ROTATION),om=M(K,K.SHEEN),sm=M(K,K.SHEEN_ROUGHNESS),cm=M(K,K.ANISOTROPY),lm=M(K,K.IRIDESCENCE),um=M(K,K.IRIDESCENCE_IOR),dm=M(K,K.IRIDESCENCE_THICKNESS),fm=M(K,K.TRANSMISSION),pm=M(K,K.THICKNESS),mm=M(K,K.IOR),hm=M(K,K.ATTENUATION_DISTANCE),gm=M(K,K.ATTENUATION_COLOR),_m=M(K,K.LINE_SCALE),vm=M(K,K.LINE_DASH_SIZE),ym=M(K,K.LINE_GAP_SIZE),bm=M(K,K.LINE_WIDTH),xm=M(K,K.LINE_DASH_OFFSET),Sm=M(K,K.POINT_SIZE),Cm=M(K,K.DISPERSION),wm=M(K,K.LIGHT_MAP),Tm=M(K,K.AO),Em=U(new at).onReference(function(e){return e.material}).onRenderUpdate(function({material:e}){this.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation))}),Dm=P(e=>e.context.setupModelViewProjection(),`vec4`).once()().toVarying(`v_modelViewProjection`),Om=j(class extends Wa{static get type(){return`StorageArrayElementNode`}constructor(e,t){super(e,t),this.isStorageArrayElementNode=!0}set storageBufferNode(e){this.node=e}get storageBufferNode(){return this.node}getMemberType(e,t){let n=this.storageBufferNode.structTypeNode;return n?n.getMemberType(e,t):`void`}setup(e){return e.isAvailable(`storageBuffer`)===!1&&this.node.isPBO===!0&&e.setupPBO(this.node),super.setup(e)}generate(e,t){let n,r=e.context.assign;if(n=e.isAvailable(`storageBuffer`)===!1?this.node.isPBO===!0&&r!==!0&&(this.node.value.isInstancedBufferAttribute||e.shaderStage!==`compute`)?e.generatePBO(this):this.node.build(e):super.generate(e),r!==!0){let r=this.getNodeType(e);n=e.format(n,r,t)}return n}}).setParameterLength(2),km=class extends ld{static get type(){return`StorageBufferNode`}constructor(e,t=null,n=0){let r,i=null;t&&t.isStruct?(r=`struct`,i=t.layout,(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)&&(n=e.count)):t===null&&(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)?(r=wa(e.itemSize),n=e.count):r=t,super(e,r,n),this.isStorageBufferNode=!0,this.structTypeNode=i,this.access=La.READ_WRITE,this.isAtomic=!1,this.isPBO=!1,this._attribute=null,this._varying=null,this.global=!0,e.isStorageBufferAttribute!==!0&&e.isStorageInstancedBufferAttribute!==!0&&(e.isInstancedBufferAttribute?e.isStorageInstancedBufferAttribute=!0:e.isStorageBufferAttribute=!0)}getHash(e){if(this.bufferCount===0){let t=e.globalCache.getData(this.value);return t===void 0&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getInputType(){return this.value.isIndirectStorageBufferAttribute?`indirectStorageBuffer`:`storageBuffer`}element(e){return Om(this,e)}setPBO(e){return this.isPBO=e,this}getPBO(){return this.isPBO}setAccess(e){return this.access=e,this}toReadOnly(){return this.setAccess(La.READ_ONLY)}setAtomic(e){return this.isAtomic=e,this}toAtomic(){return this.setAtomic(!0)}getAttributeData(){return this._attribute===null&&(this._attribute=Cu(this.value),this._varying=nu(this._attribute)),{attribute:this._attribute,varying:this._varying}}getNodeType(e){if(this.structTypeNode!==null)return this.structTypeNode.getNodeType(e);if(e.isAvailable(`storageBuffer`)||e.isAvailable(`indirectStorageBuffer`))return super.getNodeType(e);let{attribute:t}=this.getAttributeData();return t.getNodeType(e)}getMemberType(e,t){return this.structTypeNode===null?`void`:this.structTypeNode.getMemberType(e,t)}generate(e){if(this.structTypeNode!==null&&this.structTypeNode.build(e),e.isAvailable(`storageBuffer`)||e.isAvailable(`indirectStorageBuffer`))return super.generate(e);let{attribute:t,varying:n}=this.getAttributeData(),r=n.build(e);return e.registerTransform(r,t),r}},Am=(e,t=null,n=0)=>new km(e,t,n),jm=class e extends O{static get type(){return`IndexNode`}constructor(e){super(`uint`),this.scope=e,this.isIndexNode=!0}generate(t){let n=this.getNodeType(t),r=this.scope,i;if(r===e.VERTEX)i=t.getVertexIndex();else if(r===e.INSTANCE)i=t.getInstanceIndex();else if(r===e.DRAW)i=t.getDrawIndex();else if(r===e.INVOCATION_LOCAL)i=t.getInvocationLocalIndex();else if(r===e.INVOCATION_SUBGROUP)i=t.getInvocationSubgroupIndex();else if(r===e.SUBGROUP)i=t.getSubgroupIndex();else throw Error(`THREE.IndexNode: Unknown scope: `+r);let a;return a=t.shaderStage===`vertex`||t.shaderStage===`compute`?i:nu(this).build(t,n),a}};jm.VERTEX=`vertex`,jm.INSTANCE=`instance`,jm.SUBGROUP=`subgroup`,jm.INVOCATION_LOCAL=`invocationLocal`,jm.INVOCATION_SUBGROUP=`invocationSubgroup`,jm.DRAW=`draw`;var Mm=M(jm,jm.VERTEX),Nm=M(jm,jm.INSTANCE),Pm=M(jm,jm.SUBGROUP),Fm=M(jm,jm.INVOCATION_SUBGROUP),Im=M(jm,jm.INVOCATION_LOCAL),Lm=M(jm,jm.DRAW),Rm=class extends O{static get type(){return`InstanceNode`}constructor(e,t,n=null){super(`void`),this.count=e,this.instanceMatrix=t,this.instanceColor=n,this.instanceMatrixNode=null,this.instanceColorNode=null,this.updateType=Fa.FRAME,this.buffer=null,this.bufferColor=null,this.previousInstanceMatrixNode=null}get isStorageMatrix(){let{instanceMatrix:e}=this;return e&&e.isStorageInstancedBufferAttribute===!0}get isStorageColor(){let{instanceColor:e}=this;return e&&e.isStorageInstancedBufferAttribute===!0}setup(e){let{instanceMatrixNode:t,instanceColorNode:n}=this;t===null&&(t=this._createInstanceMatrixNode(!0,e),this.instanceMatrixNode=t);let{instanceColor:r,isStorageColor:i}=this;if(r&&n===null){if(i)n=Am(r,`vec3`,Math.max(r.count,1)).element(Nm);else{let e=new Pr(r.array,3),t=r.usage===35048?Eu:Tu;this.bufferColor=e,n=B(t(e,`vec3`,3,0))}this.instanceColorNode=n}let a=t.mul(xf).xyz;if(xf.assign(a),e.needsPreviousData()&&Sf.assign(this.getPreviousInstancedPosition(e)),e.hasGeometryAttribute(`normal`)){let e=Rf(jf,t);jf.assign(e)}this.instanceColorNode!==null&&ms(`vec3`,`vInstanceColor`).assign(this.instanceColorNode)}update(e){this.buffer!==null&&this.isStorageMatrix!==!0&&(this.buffer.clearUpdateRanges(),this.buffer.updateRanges.push(...this.instanceMatrix.updateRanges),this.instanceMatrix.version!==this.buffer.version&&(this.buffer.version=this.instanceMatrix.version)),this.instanceColor&&this.bufferColor!==null&&this.isStorageColor!==!0&&(this.bufferColor.clearUpdateRanges(),this.bufferColor.updateRanges.push(...this.instanceColor.updateRanges),this.instanceColor.version!==this.bufferColor.version&&(this.bufferColor.version=this.instanceColor.version)),this.previousInstanceMatrixNode!==null&&e.object.previousInstanceMatrix.array.set(this.instanceMatrix.array)}getPreviousInstancedPosition(e){let t=e.object;return this.previousInstanceMatrixNode===null&&(t.previousInstanceMatrix=this.instanceMatrix.clone(),this.previousInstanceMatrixNode=this._createInstanceMatrixNode(!1,e)),this.previousInstanceMatrixNode.mul(Sf).xyz}_createInstanceMatrixNode(e,t){let n,{instanceMatrix:r}=this,{count:i}=r;if(this.isStorageMatrix)n=Am(r,`mat4`,Math.max(i,1)).element(Nm);else if(i*16*4<=t.getUniformBufferLimit())n=ud(r.array,`mat4`,Math.max(i,1)).element(Nm);else{let t=new Qi(r.array,16,1);e===!0&&(this.buffer=t);let i=r.usage===35048?Eu:Tu;n=as(i(t,`vec4`,16,0),i(t,`vec4`,16,4),i(t,`vec4`,16,8),i(t,`vec4`,16,12))}return n}},zm=j(Rm).setParameterLength(2,3),Bm=j(class extends Rm{static get type(){return`InstancedMeshNode`}constructor(e){let{count:t,instanceMatrix:n,instanceColor:r}=e;super(t,n,r),this.instancedMesh=e}}).setParameterLength(1),Vm=j(class extends O{static get type(){return`BatchNode`}constructor(e){super(`void`),this.batchMesh=e,this.batchingIdNode=null}setup(e){this.batchingIdNode===null&&(e.getDrawIndex()===null?this.batchingIdNode=Nm:this.batchingIdNode=Lm);let t=P(([e])=>{let t=L(Zu(ad(this.batchMesh._indirectTexture),0).x).toConst(),n=L(e).mod(t).toConst(),r=L(e).div(t).toConst();return ad(this.batchMesh._indirectTexture,Jo(n,r)).x}).setLayout({name:`getIndirectIndex`,type:`uint`,inputs:[{name:`id`,type:`int`}]})(L(this.batchingIdNode)),n=this.batchMesh._matricesTexture,r=L(Zu(ad(n),0).x).toConst(),i=I(t).mul(4).toInt().toConst(),a=i.mod(r).toConst(),o=i.div(r).toConst(),s=as(ad(n,Jo(a,o)),ad(n,Jo(a.add(1),o)),ad(n,Jo(a.add(2),o)),ad(n,Jo(a.add(3),o))),c=this.batchMesh._colorsTexture;if(c!==null){let e=P(([e])=>{let t=L(Zu(ad(c),0).x).toConst(),n=e;return ad(c,Jo(n.mod(t).toConst(),n.div(t).toConst())).rgb}).setLayout({name:`getBatchingColor`,type:`vec3`,inputs:[{name:`id`,type:`int`}]})(t);ms(`vec3`,`vBatchColor`).assign(e)}let l=is(s);xf.assign(s.mul(xf));let u=jf.div(B(l[0].dot(l[0]),l[1].dot(l[1]),l[2].dot(l[2]))),d=l.mul(u).xyz;jf.assign(d),e.hasGeometryAttribute(`tangent`)&&Cp.mulAssign(l)}}).setParameterLength(1),Hm=new WeakMap,Um=class extends O{static get type(){return`SkinningNode`}constructor(e){super(`void`),this.skinnedMesh=e,this.updateType=Fa.OBJECT,this.skinIndexNode=Yu(`skinIndex`,`uvec4`),this.skinWeightNode=Yu(`skinWeight`,`vec4`),this.bindMatrixNode=ip(`bindMatrix`,`mat4`),this.bindMatrixInverseNode=ip(`bindMatrixInverse`,`mat4`),this.boneMatricesNode=ap(`skeleton.boneMatrices`,`mat4`,e.skeleton.bones.length),this.positionNode=xf,this.toPositionNode=xf,this.previousBoneMatricesNode=null}getSkinnedPosition(e=this.boneMatricesNode,t=this.positionNode){let{skinIndexNode:n,skinWeightNode:r,bindMatrixNode:i,bindMatrixInverseNode:a}=this,o=e.element(n.x),s=e.element(n.y),c=e.element(n.z),l=e.element(n.w),u=i.mul(t),d=ic(o.mul(r.x).mul(u),s.mul(r.y).mul(u),c.mul(r.z).mul(u),l.mul(r.w).mul(u));return a.mul(d).xyz}getSkinnedNormalAndTangent(e=this.boneMatricesNode,t=jf,n=Cp){let{skinIndexNode:r,skinWeightNode:i,bindMatrixNode:a,bindMatrixInverseNode:o}=this,s=e.element(r.x),c=e.element(r.y),l=e.element(r.z),u=e.element(r.w),d=ic(i.x.mul(s),i.y.mul(c),i.z.mul(l),i.w.mul(u));return d=o.mul(d).mul(a),{skinNormal:d.transformDirection(t).xyz,skinTangent:d.transformDirection(n).xyz}}getPreviousSkinnedPosition(e){let t=e.object;return this.previousBoneMatricesNode===null&&(t.skeleton.previousBoneMatrices=new Float32Array(t.skeleton.boneMatrices),this.previousBoneMatricesNode=ap(`skeleton.previousBoneMatrices`,`mat4`,t.skeleton.bones.length)),this.getSkinnedPosition(this.previousBoneMatricesNode,Sf)}setup(e){e.needsPreviousData()&&Sf.assign(this.getPreviousSkinnedPosition(e));let t=this.getSkinnedPosition();if(this.toPositionNode&&this.toPositionNode.assign(t),e.hasGeometryAttribute(`normal`)){let{skinNormal:t,skinTangent:n}=this.getSkinnedNormalAndTangent();jf.assign(t),e.hasGeometryAttribute(`tangent`)&&Cp.assign(n)}return t}generate(e,t){if(t!==`void`)return super.generate(e,t)}update(e){let t=e.object&&e.object.skeleton?e.object.skeleton:this.skinnedMesh.skeleton;Hm.get(t)!==e.frameId&&(Hm.set(t,e.frameId),this.previousBoneMatricesNode!==null&&(t.previousBoneMatrices===null&&(t.previousBoneMatrices=new Float32Array(t.boneMatrices)),t.previousBoneMatrices.set(t.boneMatrices)),t.update())}},Wm=e=>new Um(e),Gm=(e,t=null)=>{let n=new Um(e);return n.positionNode=Am(new Pr(e.geometry.getAttribute(`position`).array,3),`vec3`).setPBO(!0).toReadOnly().element(Nm).toVar(),n.skinIndexNode=Am(new Pr(new Uint32Array(e.geometry.getAttribute(`skinIndex`).array),4),`uvec4`).setPBO(!0).toReadOnly().element(Nm).toVar(),n.skinWeightNode=Am(new Pr(e.geometry.getAttribute(`skinWeight`).array,4),`vec4`).setPBO(!0).toReadOnly().element(Nm).toVar(),n.bindMatrixNode=U(e.bindMatrix,`mat4`),n.bindMatrixInverseNode=U(e.bindMatrixInverse,`mat4`),n.boneMatricesNode=ud(e.skeleton.boneMatrices,`mat4`,e.skeleton.bones.length),n.toPositionNode=t,A(n)},Km=class extends O{static get type(){return`LoopNode`}constructor(e=[]){super(`void`),this.params=e}getVarName(e){return String.fromCharCode(105+e)}getProperties(e){let t=e.getNodeProperties(this);if(t.stackNode!==void 0)return t;let n={};for(let e=0,t=this.params.length-1;e<t;e++){let t=this.params[e],r=t.isNode!==!0&&t.name||this.getVarName(e);n[r]=Lu(r,t.isNode!==!0&&t.type||`int`)}let r=e.addStack(),i=this.params[this.params.length-1](n);t.returnsNode=i.context({nodeLoop:i}),t.stackNode=r;let a=this.params[0];if(a.isNode!==!0&&typeof a.update==`function`){let e=P(this.params[0].update)(n);t.updateNode=e.context({nodeLoop:e})}return e.removeStack(),t}setup(e){if(this.getProperties(e),e.fnCall){let t=e.getDataFromNode(e.fnCall.shaderNode);t.hasLoop=!0}}generate(e){let t=this.getProperties(e),n=this.params,r=t.stackNode;for(let r=0,i=n.length-1;r<i;r++){let i=n[r],a=!1,o=null,s=null,c=null,l=null,u=null,d=null;i.isNode?i.getNodeType(e)===`bool`?(a=!0,l=`bool`,s=i.build(e,l)):(l=`int`,c=this.getVarName(r),o=`0`,s=i.build(e,l),u=`<`):(l=i.type||`int`,c=i.name||this.getVarName(r),o=i.start,s=i.end,u=i.condition,d=i.update,typeof o==`number`?o=e.generateConst(l,o):o&&o.isNode&&(o=o.build(e,l)),typeof s==`number`?s=e.generateConst(l,s):s&&s.isNode&&(s=s.build(e,l)),o!==void 0&&s===void 0?(o+=` - 1`,s=`0`,u=`>=`):s!==void 0&&o===void 0&&(o=`0`,u=`<`),u===void 0&&(u=Number(o)>Number(s)?`>=`:`<`));let f;if(a)f=`while ( ${s} )`;else{let n={start:o,end:s},r=n.start,i=n.end,a,p=()=>u.includes(`<`)?`+=`:`-=`;if(d!=null)switch(typeof d){case`function`:a=e.flowStagesNode(t.updateNode,`void`).code.replace(/\t|;/g,``);break;case`number`:a=c+` `+p()+` `+e.generateConst(l,d);break;case`string`:a=c+` `+d;break;default:d.isNode?a=c+` `+p()+` `+d.build(e):(E(`TSL: 'Loop( { update: ... } )' is not a function, string or number.`,this.stackTrace),a=`break /* invalid update */`)}else d=l===`int`||l===`uint`?u.includes(`<`)?`++`:`--`:p()+` 1.`,a=c+` `+d;f=`for ( ${e.getVar(l,c)+` = `+r}; ${c+` `+u+` `+i}; ${a} )`}e.addFlowCode((r===0?`
293
+ `:``)+e.tab+f+` {
294
+
295
+ `).addFlowTab()}let i=r.build(e,`void`);t.returnsNode.build(e,`void`),e.removeFlowTab().addFlowCode(`
296
+ `+e.tab+i);for(let t=0,n=this.params.length-1;t<n;t++)e.addFlowCode((t===0?``:e.tab)+`}
297
+
298
+ `).removeFlowTab();e.addFlowTab()}},qm=(...e)=>new Km(zo(e,`int`)).toStack(),Jm=()=>Lu(`continue`).toStack(),Ym=()=>Lu(`break`).toStack(),Xm=new WeakMap,Zm=new Tt,Qm=P(({bufferMap:e,influence:t,stride:n,width:r,depth:i,offset:a})=>{let o=L(Mm).mul(n).add(a),s=o.div(r);return ad(e,Jo(o.sub(s.mul(r)),s)).depth(i).xyz.mul(t)});function $m(e){let t=e.morphAttributes.position!==void 0,n=e.morphAttributes.normal!==void 0,r=e.morphAttributes.color!==void 0,i=e.morphAttributes.position||e.morphAttributes.normal||e.morphAttributes.color,a=i===void 0?0:i.length,o=Xm.get(e);if(o===void 0||o.count!==a){o!==void 0&&o.texture.dispose();let i=e.morphAttributes.position||[],c=e.morphAttributes.normal||[],l=e.morphAttributes.color||[],u=0;t===!0&&(u=1),n===!0&&(u=2),r===!0&&(u=3);let d=e.attributes.position.count*u,f=1,p=4096;d>p&&(f=Math.ceil(d/p),d=p);let m=new Float32Array(d*f*4*a),h=new Dt(m,d,f,a);h.type=ne,h.needsUpdate=!0;let g=u*4;for(let e=0;e<a;e++){let a=i[e],o=c[e],s=l[e],u=d*f*4*e;for(let e=0;e<a.count;e++){let i=e*g;t===!0&&(Zm.fromBufferAttribute(a,e),m[u+i+0]=Zm.x,m[u+i+1]=Zm.y,m[u+i+2]=Zm.z,m[u+i+3]=0),n===!0&&(Zm.fromBufferAttribute(o,e),m[u+i+4]=Zm.x,m[u+i+5]=Zm.y,m[u+i+6]=Zm.z,m[u+i+7]=0),r===!0&&(Zm.fromBufferAttribute(s,e),m[u+i+8]=Zm.x,m[u+i+9]=Zm.y,m[u+i+10]=Zm.z,m[u+i+11]=s.itemSize===4?Zm.w:1)}}o={count:a,texture:h,stride:u,size:new at(d,f)},Xm.set(e,o);function s(){h.dispose(),Xm.delete(e),e.removeEventListener(`dispose`,s)}e.addEventListener(`dispose`,s)}return o}var eh=j(class extends O{static get type(){return`MorphNode`}constructor(e){super(`void`),this.mesh=e,this.morphBaseInfluence=U(1),this.updateType=Fa.OBJECT}setup(e){let{geometry:t}=e,n=t.morphAttributes.position!==void 0,r=t.hasAttribute(`normal`)&&t.morphAttributes.normal!==void 0,i=t.morphAttributes.position||t.morphAttributes.normal||t.morphAttributes.color,a=i===void 0?0:i.length,{texture:o,stride:s,size:c}=$m(t);n===!0&&xf.mulAssign(this.morphBaseInfluence),r===!0&&jf.mulAssign(this.morphBaseInfluence);let l=L(c.width);qm(a,({i:e})=>{let t=I(0).toVar();this.mesh.count>1&&this.mesh.morphTexture!==null&&this.mesh.morphTexture!==void 0?t.assign(ad(this.mesh.morphTexture,Jo(L(e).add(1),L(Nm))).r):t.assign(ip(`morphTargetInfluences`,`float`).element(e).toVar()),F(t.notEqual(0),()=>{n===!0&&xf.addAssign(Qm({bufferMap:o,influence:t,stride:s,width:l,depth:e,offset:L(0)})),r===!0&&jf.addAssign(Qm({bufferMap:o,influence:t,stride:s,width:l,depth:e,offset:L(1)}))})})}update(){let e=this.morphBaseInfluence;this.mesh.geometry.morphTargetsRelative?e.value=1:e.value=1-this.mesh.morphTargetInfluences.reduce((e,t)=>e+t,0)}}).setParameterLength(1),th=class extends O{static get type(){return`LightingNode`}constructor(){super(`vec3`),this.isLightingNode=!0}},nh=class extends th{static get type(){return`AONode`}constructor(e=null){super(),this.aoNode=e}setup(e){e.context.ambientOcclusion.mulAssign(this.aoNode)}},rh=j(class extends Ul{static get type(){return`LightingContextNode`}constructor(e,t=null,n=null,r=null){super(e),this.lightingModel=t,this.backdropNode=n,this.backdropAlphaNode=r,this._value=null}getContext(){let{backdropNode:e,backdropAlphaNode:t}=this,n={directDiffuse:B().toVar(`directDiffuse`),directSpecular:B().toVar(`directSpecular`),indirectDiffuse:B().toVar(`indirectDiffuse`),indirectSpecular:B().toVar(`indirectSpecular`)};return{radiance:B().toVar(`radiance`),irradiance:B().toVar(`irradiance`),iblIrradiance:B().toVar(`iblIrradiance`),ambientOcclusion:I(1).toVar(`ambientOcclusion`),reflectedLight:n,backdrop:e,backdropAlpha:t}}setup(e){return this.value=this._value||(this._value=this.getContext()),this.value.lightingModel=this.lightingModel||e.context.lightingModel,super.setup(e)}}),ih=class extends th{static get type(){return`IrradianceNode`}constructor(e){super(),this.node=e}setup(e){e.context.irradiance.addAssign(this.node)}},ah=new at,oh=class extends td{static get type(){return`ViewportTextureNode`}constructor(e=yd,t=null,n=null){let r=null;n===null?(r=new Qr,r.minFilter=S,n=r):r=n,super(n,e,t),this.generateMipmaps=!1,this.defaultFramebuffer=r,this.isOutputTextureNode=!0,this.updateBeforeType=Fa.RENDER,this._cacheTextures=new WeakMap}getTextureForReference(e=null){let t,n;if(this.referenceNode?(t=this.referenceNode.defaultFramebuffer,n=this.referenceNode._cacheTextures):(t=this.defaultFramebuffer,n=this._cacheTextures),e===null)return t;if(n.has(e)===!1){let r=t.clone();n.set(e,r)}return n.get(e)}updateReference(e){let t=e.renderer.getRenderTarget();return this.value=this.getTextureForReference(t),this.value}updateBefore(e){let t=e.renderer,n=t.getRenderTarget();n===null?t.getDrawingBufferSize(ah):ah.set(n.width,n.height);let r=this.getTextureForReference(n);(r.image.width!==ah.width||r.image.height!==ah.height)&&(r.image.width=ah.width,r.image.height=ah.height,r.needsUpdate=!0);let i=r.generateMipmaps;r.generateMipmaps=this.generateMipmaps,t.copyFramebufferToTexture(r),r.generateMipmaps=i}clone(){let e=new this.constructor(this.uvNode,this.levelNode,this.value);return e.generateMipmaps=this.generateMipmaps,e}},sh=j(oh).setParameterLength(0,3),ch=j(oh,null,null,{generateMipmaps:!0}).setParameterLength(0,3),lh=ch(),uh=(e=yd,t=null)=>lh.sample(e,t),dh=null,fh=j(class extends oh{static get type(){return`ViewportDepthTextureNode`}constructor(e=yd,t=null){dh===null&&(dh=new ti),super(e,t,dh)}getTextureForReference(){return dh}}).setParameterLength(0,2),ph=class e extends O{static get type(){return`ViewportDepthNode`}constructor(e,t=null){super(`float`),this.scope=e,this.valueNode=t,this.isViewportDepthNode=!0}generate(t){let{scope:n}=this;return n===e.DEPTH_BASE?t.getFragDepth():super.generate(t)}setup({camera:t}){let{scope:n}=this,r=this.valueNode,i=null;return n===e.DEPTH_BASE?r!==null&&(i=Sh().assign(r)):n===e.DEPTH?i=t.isPerspectiveCamera?_h(Tf.z,Hd,Ud):mh(Tf.z,Hd,Ud):n===e.LINEAR_DEPTH&&(i=r===null?mh(Tf.z,Hd,Ud):t.isPerspectiveCamera?mh(yh(r,Hd,Ud),Hd,Ud):r),i}};ph.DEPTH_BASE=`depthBase`,ph.DEPTH=`depth`,ph.LINEAR_DEPTH=`linearDepth`;var mh=(e,t,n)=>e.add(t).div(t.sub(n)),hh=(e,t,n)=>e.add(n).div(n.sub(t)),gh=P(([e,t,n],r)=>r.renderer.reversedDepthBuffer===!0?n.sub(t).mul(e).sub(n):t.sub(n).mul(e).sub(t)),_h=(e,t,n)=>t.add(e).mul(n).div(n.sub(t).mul(e)),vh=(e,t,n)=>t.mul(e.add(n)).div(e.mul(t.sub(n))),yh=P(([e,t,n],r)=>r.renderer.reversedDepthBuffer===!0?t.mul(n).div(t.sub(n).mul(e).sub(t)):t.mul(n).div(n.sub(t).mul(e).sub(n))),bh=(e,t,n)=>{t=t.max(1e-6).toVar();let r=Hc(e.negate().div(t)),i=Hc(n.div(t));return r.div(i)},xh=(e,t,n)=>{let r=e.mul(Vc(n.div(t)));return I(Math.E).pow(r).mul(t).negate()},Sh=j(ph,ph.DEPTH_BASE),Ch=M(ph,ph.DEPTH),wh=j(ph,ph.LINEAR_DEPTH).setParameterLength(0,1),Th=wh(fh());Ch.assign=e=>Sh(e);var Eh=class e extends O{static get type(){return`ClippingNode`}constructor(t=e.DEFAULT){super(),this.scope=t}setup(t){super.setup(t);let{intersectionPlanes:n,unionPlanes:r}=t.clippingContext;return this.hardwareClipping=t.material.hardwareClipping,this.scope===e.ALPHA_TO_COVERAGE?this.setupAlphaToCoverage(n,r):this.scope===e.HARDWARE?this.setupHardwareClipping(r,t):this.setupDefault(n,r)}setupAlphaToCoverage(e,t){return P(()=>{let n=I().toVar(`distanceToPlane`),r=I().toVar(`distanceToGradient`),i=I(1).toVar(`clipOpacity`),a=t.length;if(this.hardwareClipping===!1&&a>0){let e=pd(t).setGroup(H);qm(a,({i:t})=>{let a=e.element(t);n.assign(Tf.dot(a.xyz).negate().add(a.w)),r.assign(n.fwidth().div(2)),i.mulAssign(Pl(r.negate(),r,n))})}let o=e.length;if(o>0){let t=pd(e).setGroup(H),a=I(1).toVar(`intersectionClipOpacity`);qm(o,({i:e})=>{let i=t.element(e);n.assign(Tf.dot(i.xyz).negate().add(i.w)),r.assign(n.fwidth().div(2)),a.mulAssign(Pl(r.negate(),r,n).oneMinus())}),i.mulAssign(a.oneMinus())}hs.a.mulAssign(i),hs.a.equal(0).discard()})()}setupDefault(e,t){return P(()=>{let n=t.length;if(this.hardwareClipping===!1&&n>0){let e=pd(t).setGroup(H);qm(n,({i:t})=>{let n=e.element(t);Tf.dot(n.xyz).greaterThan(n.w).discard()})}let r=e.length;if(r>0){let t=pd(e).setGroup(H),n=qo(!0).toVar(`clipped`);qm(r,({i:e})=>{let r=t.element(e);n.assign(Tf.dot(r.xyz).greaterThan(r.w).and(n))}),n.discard()}})()}setupHardwareClipping(e,t){let n=e.length;return t.enableHardwareClipping(n),P(()=>{let r=pd(e).setGroup(H),i=md(t.getClipDistance());qm(n,({i:e})=>{let t=r.element(e),n=Tf.dot(t.xyz).sub(t.w).negate();i.element(e).assign(n)})})()}};Eh.ALPHA_TO_COVERAGE=`alphaToCoverage`,Eh.DEFAULT=`default`,Eh.HARDWARE=`hardware`;var Dh=()=>new Eh,Oh=()=>new Eh(Eh.ALPHA_TO_COVERAGE),kh=()=>new Eh(Eh.HARDWARE),Ah=.05,jh=P(([e])=>Jc(W(1e4,Yc(W(17,e.x).add(W(.1,e.y)))).mul(ic(.1,tl(Yc(W(13,e.y).add(e.x))))))),Mh=P(([e])=>jh(z(jh(e.xy),e.z))),Nh=P(([e])=>{let t=gl(rl(ol(e.xyz)),rl(sl(e.xyz))),n=I(1).div(I(Ah).mul(t)).toVar(`pixScale`),r=z(Bc(Gc(Hc(n))),Bc(Kc(Hc(n)))),i=z(Mh(Gc(r.x.mul(e.xyz))),Mh(Gc(r.y.mul(e.xyz)))),a=Jc(Hc(n)),o=ic(W(a.oneMinus(),i.x),W(a,i.y)),s=hl(a,a.oneMinus()),c=B(o.mul(o).div(W(2,s).mul(ac(1,s))),o.sub(W(.5,s)).div(ac(1,s)),ac(1,ac(1,o).mul(ac(1,o)).div(W(2,s).mul(ac(1,s)))));return jl(o.lessThan(s.oneMinus()).select(o.lessThan(s).select(c.x,c.y),c.z),1e-6,1)}).setLayout({name:`getAlphaHashThreshold`,type:`float`,inputs:[{name:`position`,type:`vec3`}]}),Ph=class extends Ju{static get type(){return`VertexColorNode`}constructor(e){super(null,`vec4`),this.isVertexColorNode=!0,this.index=e}getAttributeName(){let e=this.index;return`color`+(e>0?e:``)}generate(e){let t=this.getAttributeName(e),n=e.hasGeometryAttribute(t),r;return r=n===!0?super.generate(e):e.generateConst(this.nodeType,new Tt(1,1,1,1)),r}serialize(e){super.serialize(e),e.index=this.index}deserialize(e){super.deserialize(e),this.index=e.index}},Fh=(e=0)=>new Ph(e),Ih=P(([e,t])=>hl(1,e.oneMinus().div(t)).oneMinus()).setLayout({name:`blendBurn`,type:`vec3`,inputs:[{name:`base`,type:`vec3`},{name:`blend`,type:`vec3`}]}),Lh=P(([e,t])=>hl(e.div(t.oneMinus()),1)).setLayout({name:`blendDodge`,type:`vec3`,inputs:[{name:`base`,type:`vec3`},{name:`blend`,type:`vec3`}]}),Rh=P(([e,t])=>e.oneMinus().mul(t.oneMinus()).oneMinus()).setLayout({name:`blendScreen`,type:`vec3`,inputs:[{name:`base`,type:`vec3`},{name:`blend`,type:`vec3`}]}),zh=P(([e,t])=>Al(e.mul(2).mul(t),e.oneMinus().mul(2).mul(t.oneMinus()).oneMinus(),_l(.5,e))).setLayout({name:`blendOverlay`,type:`vec3`,inputs:[{name:`base`,type:`vec3`},{name:`blend`,type:`vec3`}]}),Bh=P(([e,t])=>{let n=t.a.add(e.a.mul(t.a.oneMinus()));return V(t.rgb.mul(t.a).add(e.rgb.mul(e.a).mul(t.a.oneMinus())).div(n),n)}).setLayout({name:`blendColor`,type:`vec4`,inputs:[{name:`base`,type:`vec4`},{name:`blend`,type:`vec4`}]}),Vh=P(([e])=>V(e.rgb.mul(e.a),e.a),{color:`vec4`,return:`vec4`}),Hh=P(([e])=>(F(e.a.equal(0),()=>V(0)),V(e.rgb.div(e.a),e.a)),{color:`vec4`,return:`vec4`}),Uh=class extends lr{static get type(){return`NodeMaterial`}get type(){return this.constructor.type}set type(e){}constructor(){super(),this.isNodeMaterial=!0,this.fog=!0,this.lights=!1,this.hardwareClipping=!1,this.lightsNode=null,this.envNode=null,this.aoNode=null,this.colorNode=null,this.normalNode=null,this.opacityNode=null,this.backdropNode=null,this.backdropAlphaNode=null,this.alphaTestNode=null,this.maskNode=null,this.maskShadowNode=null,this.positionNode=null,this.geometryNode=null,this.depthNode=null,this.receivedShadowPositionNode=null,this.castShadowPositionNode=null,this.receivedShadowNode=null,this.castShadowNode=null,this.outputNode=null,this.mrtNode=null,this.fragmentNode=null,this.vertexNode=null,this.contextNode=null}_getNodeChildren(){let e=[];for(let t of Object.getOwnPropertyNames(this)){if(t.startsWith(`_`)===!0)continue;let n=this[t];n&&n.isNode===!0&&e.push({property:t,childNode:n})}return e}customProgramCacheKey(){let e=[];for(let{property:t,childNode:n}of this._getNodeChildren())e.push(ya(t.slice(0,-4)),n.getCacheKey());return this.type+ba(e)}build(e){this.setup(e)}setupObserver(e){return new ma(e)}setup(e){e.context.setupNormal=()=>tu(this.setupNormal(e),`NORMAL`,`vec3`),e.context.setupPositionView=()=>this.setupPositionView(e),e.context.setupModelViewProjection=()=>this.setupModelViewProjection(e);let t=e.renderer,n=t.getRenderTarget();t.contextNode.isContextNode===!0?e.context=m(m({},e.context),t.contextNode.getFlowContextData()):E('NodeMaterial: "renderer.contextNode" must be an instance of `context()`.'),this.contextNode!==null&&(this.contextNode.isContextNode===!0?e.context=m(m({},e.context),this.contextNode.getFlowContextData()):E('NodeMaterial: "material.contextNode" must be an instance of `context()`.')),e.addStack();let r=this.setupVertex(e),i=tu(this.vertexNode||r,`VERTEX`);e.context.clipSpace=i,e.stack.outputNode=i,this.setupHardwareClipping(e),this.geometryNode!==null&&(e.stack.outputNode=e.stack.outputNode.bypass(this.geometryNode)),e.addFlow(`vertex`,e.removeStack()),e.addStack();let a,o=this.setupClipping(e);if((this.depthWrite===!0||this.depthTest===!0)&&(n===null?t.depth===!0&&this.setupDepth(e):n.depthBuffer===!0&&this.setupDepth(e)),this.fragmentNode===null){this.setupDiffuseColor(e),this.setupVariants(e);let r=this.setupLighting(e);o!==null&&e.stack.addToStack(o);let i=V(r,hs.a).max(0);a=this.setupOutput(e,i),Fs.assign(a);let s=this.outputNode!==null;if(s&&(a=this.outputNode),e.context.getOutput&&(a=e.context.getOutput(a,e)),n!==null){let e=t.getMRT(),n=this.mrtNode;e===null?n!==null&&(a=n):(s&&Fs.assign(a),a=e,n!==null&&(a=e.merge(n)))}}else{let t=this.fragmentNode;t.isOutputStructNode!==!0&&(t=V(t)),a=this.setupOutput(e,t)}e.stack.outputNode=a,e.addFlow(`fragment`,e.removeStack()),e.observer=this.setupObserver(e)}setupClipping(e){if(e.clippingContext===null)return null;let{unionPlanes:t,intersectionPlanes:n}=e.clippingContext,r=null;if(t.length>0||n.length>0){let t=e.renderer.currentSamples;this.alphaToCoverage&&t>1?r=Oh():e.stack.addToStack(Dh())}return r}setupHardwareClipping(e){if(this.hardwareClipping=!1,e.clippingContext===null)return;let t=e.clippingContext.unionPlanes.length;t>0&&t<=8&&e.isAvailable(`clipDistance`)&&(e.stack.addToStack(kh()),this.hardwareClipping=!0)}setupDepth(e){let{renderer:t,camera:n}=e,r=this.depthNode;if(r===null){let e=t.getMRT();e&&e.has(`depth`)?r=e.get(`depth`):t.logarithmicDepthBuffer===!0&&(r=n.isPerspectiveCamera?bh(Tf.z,Hd,Ud):mh(Tf.z,Hd,Ud))}r!==null&&Ch.assign(r).toStack()}setupPositionView(){return hf.mul(xf).xyz}setupModelViewProjection(){return Wd.mul(Tf)}setupVertex(e){return e.addStack(),this.setupPosition(e),e.context.position=e.removeStack(),Dm}setupPosition(e){let{object:t,geometry:n}=e;if((n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color)&&eh(t).toStack(),t.isSkinnedMesh===!0&&Wm(t).toStack(),this.displacementMap){let e=sp(`displacementMap`,`texture`),t=sp(`displacementScale`,`float`),n=sp(`displacementBias`,`float`);xf.addAssign(jf.normalize().mul(e.x.mul(t).add(n)))}return t.isBatchedMesh&&Vm(t).toStack(),t.isInstancedMesh&&t.instanceMatrix&&t.instanceMatrix.isInstancedBufferAttribute===!0&&Bm(t).toStack(),this.positionNode!==null&&xf.assign(tu(this.positionNode,`POSITION`,`vec3`)),xf}setupDiffuseColor(e){let{object:t,geometry:n}=e;this.maskNode!==null&&qo(this.maskNode).not().discard();let r=this.colorNode?V(this.colorNode):Wp;this.vertexColors===!0&&n.hasAttribute(`color`)&&(r=r.mul(Fh())),t.instanceColor&&(r=ms(`vec3`,`vInstanceColor`).mul(r)),t.isBatchedMesh&&t._colorsTexture&&(r=ms(`vec3`,`vBatchColor`).mul(r)),hs.assign(r);let i=this.opacityNode?I(this.opacityNode):qp;hs.a.assign(hs.a.mul(i));let a=null;(this.alphaTestNode!==null||this.alphaTest>0)&&(a=this.alphaTestNode===null?Up:I(this.alphaTestNode),this.alphaToCoverage===!0?(hs.a=Pl(a,a.add(dl(hs.a)),hs.a),hs.a.lessThanEqual(0).discard()):hs.a.lessThanEqual(a).discard()),this.alphaHash===!0&&hs.a.lessThan(Nh(xf)).discard(),e.isOpaque()&&hs.a.assign(1)}setupVariants(){}setupOutgoingLight(){return this.lights===!0?B(0):hs.rgb}setupNormal(){return this.normalNode?B(this.normalNode):tm}setupEnvironment(){let e=null;return this.envNode?e=this.envNode:this.envMap&&(e=this.envMap.isCubeTexture?sp(`envMap`,`cubeTexture`):sp(`envMap`,`texture`)),e}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new ih(wm)),t}setupLights(e){let t=[],n=this.setupEnvironment(e);n&&n.isLightingNode&&t.push(n);let r=this.setupLightMap(e);r&&r.isLightingNode&&t.push(r);let i=this.aoNode;i===null&&e.material.aoMap&&(i=Tm),e.context.getAO&&(i=e.context.getAO(i,e)),i&&t.push(new nh(i));let a=this.lightsNode||e.lightsNode;return t.length>0&&(a=e.renderer.lighting.createNode([...a.getLights(),...t])),a}setupLightingModel(){}setupLighting(e){let{material:t}=e,{backdropNode:n,backdropAlphaNode:r,emissiveNode:i}=this,a=this.lights===!0||this.lightsNode!==null?this.setupLights(e):null,o=this.setupOutgoingLight(e);return a&&a.getScope().hasLights?o=rh(a,this.setupLightingModel(e)||null,n,r):n!==null&&(o=B(r===null?n:Al(o,n,r))),(i&&i.isNode===!0||t.emissive&&t.emissive.isColor===!0)&&(_s.assign(B(i||Kp)),o=o.add(_s)),o}setupFog(e,t){let n=e.fogNode;return n&&(Fs.assign(t),t=V(n.toVar())),t}setupPremultipliedAlpha(e,t){return Vh(t)}setupOutput(e,t){return this.fog===!0&&(t=this.setupFog(e,t)),this.premultipliedAlpha===!0&&(t=this.setupPremultipliedAlpha(e,t)),t}setDefaultValues(e){for(let t in e){let n=e[t];this[t]===void 0&&(this[t]=n,n&&n.clone&&(this[t]=n.clone()))}let t=Object.getOwnPropertyDescriptors(e.constructor.prototype);for(let e in t)Object.getOwnPropertyDescriptor(this.constructor.prototype,e)===void 0&&t[e].get!==void 0&&Object.defineProperty(this.constructor.prototype,e,t[e])}toJSON(e){let t=e===void 0||typeof e==`string`;t&&(e={textures:{},images:{},nodes:{}});let n=lr.prototype.toJSON.call(this,e);n.inputNodes={};for(let{property:t,childNode:r}of this._getNodeChildren())n.inputNodes[t]=r.toJSON(e).uuid;function r(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(t){let t=r(e.textures),i=r(e.images),a=r(e.nodes);t.length>0&&(n.textures=t),i.length>0&&(n.images=i),a.length>0&&(n.nodes=a)}return n}copy(e){return this.lightsNode=e.lightsNode,this.envNode=e.envNode,this.aoNode=e.aoNode,this.colorNode=e.colorNode,this.normalNode=e.normalNode,this.opacityNode=e.opacityNode,this.backdropNode=e.backdropNode,this.backdropAlphaNode=e.backdropAlphaNode,this.alphaTestNode=e.alphaTestNode,this.maskNode=e.maskNode,this.maskShadowNode=e.maskShadowNode,this.positionNode=e.positionNode,this.geometryNode=e.geometryNode,this.depthNode=e.depthNode,this.receivedShadowPositionNode=e.receivedShadowPositionNode,this.castShadowPositionNode=e.castShadowPositionNode,this.receivedShadowNode=e.receivedShadowNode,this.castShadowNode=e.castShadowNode,this.outputNode=e.outputNode,this.mrtNode=e.mrtNode,this.fragmentNode=e.fragmentNode,this.vertexNode=e.vertexNode,this.contextNode=e.contextNode,super.copy(e)}},Wh=P(([e=wf])=>z(e.z.atan(e.x).mul(1/(Math.PI*2)).add(.5),e.y.clamp(-1,1).asin().mul(1/Math.PI).add(.5))),Gh=P(({f0:e,f90:t,dotVH:n})=>{let r=n.mul(-5.55473).sub(6.98316).mul(n).exp2();return e.mul(r.oneMinus()).add(t.mul(r))}),Kh=P(e=>e.diffuseColor.mul(1/Math.PI)),qh=P(e=>{if(e.geometry.hasAttribute(`normal`)===!1)return I(0);let t=Nf.dFdx().abs().max(Nf.dFdy().abs());return t.x.max(t.y).max(t.z)}),Jh=P(e=>{let{roughness:t}=e,n=qh(),r=t.max(.0525);return r=r.add(n),r=r.min(1),r}),Yh=P(({alpha:e,dotNL:t,dotNV:n})=>{let r=e.pow2(),i=t.mul(r.add(r.oneMinus().mul(n.pow2())).sqrt()),a=n.mul(r.add(r.oneMinus().mul(t.pow2())).sqrt());return oc(.5,i.add(a).max(kc))}).setLayout({name:`V_GGX_SmithCorrelated`,type:`float`,inputs:[{name:`alpha`,type:`float`},{name:`dotNL`,type:`float`},{name:`dotNV`,type:`float`}]}),Xh=P(({alphaT:e,alphaB:t,dotTV:n,dotBV:r,dotTL:i,dotBL:a,dotNV:o,dotNL:s})=>{let c=s.mul(B(e.mul(n),t.mul(r),o).length()),l=o.mul(B(e.mul(i),t.mul(a),s).length());return oc(.5,c.add(l))}).setLayout({name:`V_GGX_SmithCorrelated_Anisotropic`,type:`float`,inputs:[{name:`alphaT`,type:`float`,qualifier:`in`},{name:`alphaB`,type:`float`,qualifier:`in`},{name:`dotTV`,type:`float`,qualifier:`in`},{name:`dotBV`,type:`float`,qualifier:`in`},{name:`dotTL`,type:`float`,qualifier:`in`},{name:`dotBL`,type:`float`,qualifier:`in`},{name:`dotNV`,type:`float`,qualifier:`in`},{name:`dotNL`,type:`float`,qualifier:`in`}]}),Zh=P(({alpha:e,dotNH:t})=>{let n=e.pow2(),r=t.pow2().mul(n.oneMinus()).oneMinus();return n.div(r.pow2()).mul(1/Math.PI)}).setLayout({name:`D_GGX`,type:`float`,inputs:[{name:`alpha`,type:`float`},{name:`dotNH`,type:`float`}]}),Qh=I(1/Math.PI),$h=P(({alphaT:e,alphaB:t,dotNH:n,dotTH:r,dotBH:i})=>{let a=e.mul(t),o=B(t.mul(r),e.mul(i),a.mul(n)),s=o.dot(o),c=a.div(s);return Qh.mul(a.mul(c.pow2()))}).setLayout({name:`D_GGX_Anisotropic`,type:`float`,inputs:[{name:`alphaT`,type:`float`,qualifier:`in`},{name:`alphaB`,type:`float`,qualifier:`in`},{name:`dotNH`,type:`float`,qualifier:`in`},{name:`dotTH`,type:`float`,qualifier:`in`},{name:`dotBH`,type:`float`,qualifier:`in`}]}),eg=P(({lightDirection:e,f0:t,f90:n,roughness:r,f:i,normalView:a=Ff,USE_IRIDESCENCE:o,USE_ANISOTROPY:s})=>{let c=r.pow2(),l=e.add(Ef).normalize(),u=a.dot(e).clamp(),d=a.dot(Ef).clamp(),f=a.dot(l).clamp(),p=Gh({f0:t,f90:n,dotVH:Ef.dot(l).clamp()}),m,h;if(Po(o)&&(p=ws.mix(p,i)),Po(s)){let t=ks.dot(e),n=ks.dot(Ef),r=ks.dot(l),i=As.dot(e),a=As.dot(Ef),o=As.dot(l);m=Xh({alphaT:Ds,alphaB:c,dotTV:n,dotBV:a,dotTL:t,dotBL:i,dotNV:d,dotNL:u}),h=$h({alphaT:Ds,alphaB:c,dotNH:f,dotTH:r,dotBH:o})}else m=Yh({alpha:c,dotNL:u,dotNV:d}),h=Zh({alpha:c,dotNH:f});return p.mul(m).mul(h)}),tg=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]),ng=null,rg=P(({roughness:e,dotNV:t})=>{ng===null&&(ng=new Nr(tg,16,16,ae,w),ng.name=`DFG_LUT`,ng.minFilter=x,ng.magFilter=x,ng.wrapS=v,ng.wrapT=v,ng.generateMipmaps=!1,ng.needsUpdate=!0);let n=z(e,t);return rd(ng,n).rg}),ig=P(({f:e,f90:t,dotVH:n})=>{let r=n.oneMinus().saturate(),i=r.mul(r),a=r.mul(i,i).clamp(0,.9999);return e.sub(B(t).mul(a)).div(a.oneMinus())}).setLayout({name:`Schlick_to_F0`,type:`vec3`,inputs:[{name:`f`,type:`vec3`},{name:`f90`,type:`float`},{name:`dotVH`,type:`float`}]}),ag=1/6,og=e=>W(ag,W(e,W(e,e.negate().add(3)).sub(3)).add(1)),sg=e=>W(ag,W(e,W(e,W(3,e).sub(6))).add(4)),cg=e=>W(ag,W(e,W(e,W(-3,e).add(3)).add(3)).add(1)),lg=e=>W(ag,Cl(e,3)),ug=e=>og(e).add(sg(e)),dg=e=>cg(e).add(lg(e)),fg=e=>ic(-1,sg(e).div(og(e).add(sg(e)))),pg=e=>ic(1,lg(e).div(cg(e).add(lg(e)))),mg=(e,t,n)=>{let r=e.uvNode,i=W(r,t.zw).add(.5),a=Gc(i),o=Jc(i),s=ug(o.x),c=dg(o.x),l=fg(o.x),u=pg(o.x),d=fg(o.y),f=pg(o.y),p=z(a.x.add(l),a.y.add(d)).sub(.5).mul(t.xy),m=z(a.x.add(u),a.y.add(d)).sub(.5).mul(t.xy),h=z(a.x.add(l),a.y.add(f)).sub(.5).mul(t.xy),g=z(a.x.add(u),a.y.add(f)).sub(.5).mul(t.xy),_=ug(o.y).mul(ic(s.mul(e.sample(p).level(n)),c.mul(e.sample(m).level(n)))),v=dg(o.y).mul(ic(s.mul(e.sample(h).level(n)),c.mul(e.sample(g).level(n))));return _.add(v)},hg=P(([e,t])=>{let n=z(e.size(L(t))),r=z(e.size(L(t.add(1)))),i=oc(1,n),a=oc(1,r),o=mg(e,V(i,n),Gc(t)),s=mg(e,V(a,r),Kc(t));return Jc(t).mix(o,s)}),gg=P(([e,t])=>hg(e,t.mul(Qu(e))));B(.04),I(1);var _g=I(1),vg=I(-2),yg=I(.8),bg=I(-1),xg=I(.4),Sg=I(2),Cg=I(.305),wg=I(3),Tg=I(.21),Eg=I(4),Dg=I(4),Og=I(16),kg=P(([e])=>{let t=B(tl(e)).toVar(),n=I(-1).toVar();return F(t.x.greaterThan(t.z),()=>{F(t.x.greaterThan(t.y),()=>{n.assign(Hl(e.x.greaterThan(0),0,3))}).Else(()=>{n.assign(Hl(e.y.greaterThan(0),1,4))})}).Else(()=>{F(t.z.greaterThan(t.y),()=>{n.assign(Hl(e.z.greaterThan(0),2,5))}).Else(()=>{n.assign(Hl(e.y.greaterThan(0),1,4))})}),n}).setLayout({name:`getFace`,type:`float`,inputs:[{name:`direction`,type:`vec3`}]}),Ag=P(([e,t])=>{let n=z().toVar();return F(t.equal(0),()=>{n.assign(z(e.z,e.y).div(tl(e.x)))}).ElseIf(t.equal(1),()=>{n.assign(z(e.x.negate(),e.z.negate()).div(tl(e.y)))}).ElseIf(t.equal(2),()=>{n.assign(z(e.x.negate(),e.y).div(tl(e.z)))}).ElseIf(t.equal(3),()=>{n.assign(z(e.z.negate(),e.y).div(tl(e.x)))}).ElseIf(t.equal(4),()=>{n.assign(z(e.x.negate(),e.z).div(tl(e.y)))}).Else(()=>{n.assign(z(e.x,e.y).div(tl(e.z)))}),W(.5,n.add(1))}).setLayout({name:`getUV`,type:`vec2`,inputs:[{name:`direction`,type:`vec3`},{name:`face`,type:`float`}]}),jg=P(([e])=>{let t=I(0).toVar();return F(e.greaterThanEqual(yg),()=>{t.assign(_g.sub(e).mul(bg.sub(vg)).div(_g.sub(yg)).add(vg))}).ElseIf(e.greaterThanEqual(xg),()=>{t.assign(yg.sub(e).mul(Sg.sub(bg)).div(yg.sub(xg)).add(bg))}).ElseIf(e.greaterThanEqual(Cg),()=>{t.assign(xg.sub(e).mul(wg.sub(Sg)).div(xg.sub(Cg)).add(Sg))}).ElseIf(e.greaterThanEqual(Tg),()=>{t.assign(Cg.sub(e).mul(Eg.sub(wg)).div(Cg.sub(Tg)).add(wg))}).Else(()=>{t.assign(I(-2).mul(Hc(W(1.16,e))))}),t}).setLayout({name:`roughnessToMip`,type:`float`,inputs:[{name:`roughness`,type:`float`}]}),Mg=P(([e,t])=>{let n=e.toVar();n.assign(W(2,n).sub(1));let r=B(n,1).toVar();return F(t.equal(0),()=>{r.assign(r.zyx)}).ElseIf(t.equal(1),()=>{r.assign(r.xzy),r.xz.mulAssign(-1)}).ElseIf(t.equal(2),()=>{r.x.mulAssign(-1)}).ElseIf(t.equal(3),()=>{r.assign(r.zyx),r.xz.mulAssign(-1)}).ElseIf(t.equal(4),()=>{r.assign(r.xzy),r.xy.mulAssign(-1)}).ElseIf(t.equal(5),()=>{r.z.mulAssign(-1)}),r}).setLayout({name:`getDirection`,type:`vec3`,inputs:[{name:`uv`,type:`vec2`},{name:`face`,type:`float`}]}),Ng=P(([e,t,n,r,i,a])=>{let o=I(n),s=B(t),c=jl(jg(o),vg,a),l=Jc(c),u=Gc(c),d=B(Pg(e,s,u,r,i,a)).toVar();return F(l.notEqual(0),()=>{let t=B(Pg(e,s,u.add(1),r,i,a)).toVar();d.assign(Al(d,t,l))}),d}),Pg=P(([e,t,n,r,i,a])=>{let o=I(n).toVar(),s=B(t),c=I(kg(s)).toVar(),l=I(gl(Dg.sub(o),0)).toVar();o.assign(gl(o,Dg));let u=I(Bc(o)).toVar(),d=z(Ag(s,c).mul(u.sub(2)).add(1)).toVar();return F(c.greaterThan(2),()=>{d.y.addAssign(u),c.subAssign(3)}),d.x.addAssign(c.mul(u)),d.x.addAssign(l.mul(W(3,Og))),d.y.addAssign(W(4,Bc(a).sub(u))),d.x.mulAssign(r),d.y.mulAssign(i),e.sample(d).grad(z(),z())}),Fg=P(({envMap:e,mipInt:t,outputDirection:n,theta:r,axis:i,CUBEUV_TEXEL_WIDTH:a,CUBEUV_TEXEL_HEIGHT:o,CUBEUV_MAX_MIP:s})=>{let c=Xc(r);return Pg(e,n.mul(c).add(i.cross(n).mul(Yc(r))).add(i.mul(i.dot(n).mul(c.oneMinus()))),t,a,o,s)}),Ig=P(({n:e,latitudinal:t,poleAxis:n,outputDirection:r,weights:i,samples:a,dTheta:o,mipInt:s,envMap:c,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:u,CUBEUV_MAX_MIP:d})=>{let f=B(Hl(t,n,Sl(n,r))).toVar();F(f.equal(B(0)),()=>{f.assign(B(r.z,0,r.x.negate()))}),f.assign(qc(f));let p=B().toVar();return p.addAssign(i.element(0).mul(Fg({theta:0,axis:f,outputDirection:r,mipInt:s,envMap:c,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:u,CUBEUV_MAX_MIP:d}))),qm({start:L(1),end:e},({i:e})=>{F(e.greaterThanEqual(a),()=>{Ym()});let t=I(o.mul(I(e))).toVar();p.addAssign(i.element(e).mul(Fg({theta:t.mul(-1),axis:f,outputDirection:r,mipInt:s,envMap:c,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:u,CUBEUV_MAX_MIP:d}))),p.addAssign(i.element(e).mul(Fg({theta:t,axis:f,outputDirection:r,mipInt:s,envMap:c,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:u,CUBEUV_MAX_MIP:d})))}),V(p,1)}),Lg=P(([e])=>{let t=R(e).toVar();return t.assign(t.shiftLeft(R(16)).bitOr(t.shiftRight(R(16)))),t.assign(t.bitAnd(R(1431655765)).shiftLeft(R(1)).bitOr(t.bitAnd(R(2863311530)).shiftRight(R(1)))),t.assign(t.bitAnd(R(858993459)).shiftLeft(R(2)).bitOr(t.bitAnd(R(3435973836)).shiftRight(R(2)))),t.assign(t.bitAnd(R(252645135)).shiftLeft(R(4)).bitOr(t.bitAnd(R(4042322160)).shiftRight(R(4)))),t.assign(t.bitAnd(R(16711935)).shiftLeft(R(8)).bitOr(t.bitAnd(R(4278255360)).shiftRight(R(8)))),I(t).mul(23283064365386963e-26)}),Rg=P(([e,t])=>z(I(e).div(I(t)),Lg(e))),zg=P(([e,t,n])=>{let r=n.mul(n).toConst(),i=B(1,0,0).toConst(),a=Sl(t,i).toConst(),o=Uc(e.x).toConst(),s=W(2,3.14159265359).mul(e.y).toConst(),c=o.mul(Xc(s)).toConst(),l=o.mul(Yc(s)).toVar(),u=W(.5,t.z.add(1)).toConst();l.assign(u.oneMinus().mul(Uc(c.mul(c).oneMinus())).add(u.mul(l)));let d=i.mul(c).add(a.mul(l)).add(t.mul(Uc(gl(0,c.mul(c).add(l.mul(l)).oneMinus()))));return qc(B(r.mul(d.x),r.mul(d.y),gl(0,d.z)))}),Bg=P(({roughness:e,mipInt:t,envMap:n,N_immutable:r,GGX_SAMPLES:i,CUBEUV_TEXEL_WIDTH:a,CUBEUV_TEXEL_HEIGHT:o,CUBEUV_MAX_MIP:s})=>{let c=B(r).toVar(),l=B(0).toVar(),u=I(0).toVar();return F(e.lessThan(.001),()=>{l.assign(Pg(n,c,t,a,o,s))}).Else(()=>{let r=qc(Sl(Hl(tl(c.z).lessThan(.999),B(0,0,1),B(1,0,0)),c)).toVar(),d=Sl(c,r).toVar();qm({start:R(0),end:i},({i:f})=>{let p=zg(Rg(f,i),B(0,0,1),e),m=qc(r.mul(p.x).add(d.mul(p.y)).add(c.mul(p.z))),h=qc(m.mul(xl(c,m).mul(2)).sub(c)),g=gl(xl(c,h),0);F(g.greaterThan(0),()=>{let e=Pg(n,h,t,a,o,s);l.addAssign(e.mul(g)),u.addAssign(g)})}),F(u.greaterThan(0),()=>{l.assign(l.div(u))})}),V(l,1)}),Vg=4,Hg=[.125,.215,.35,.446,.526,.582],Ug=20,Wg=512,Gg=new zi(-1,1,1,-1,0,1),Kg=new Ri(90,1),qg=new cn,Jg=null,Yg=0,Xg=0,Zg=new D,Qg=new WeakMap,$g=[3,1,5,0,4,2],e_=Mg(Xu(),Yu(`faceIndex`)).normalize(),t_=B(e_.x,e_.y,e_.z),n_=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._blurMaterial=null,this._ggxMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._backgroundBox=null}get _hasInitialized(){return this._renderer.hasInitialized()}fromScene(e,t=0,n=.1,r=100,i={}){let{size:a=256,position:o=Zg,renderTarget:s=null}=i;if(this._setSize(a),this._hasInitialized===!1){T(`PMREMGenerator: ".fromScene()" called before the backend is initialized. Try using "await renderer.init()" instead.`);let a=s||this._allocateTarget();return i.renderTarget=a,this.fromSceneAsync(e,t,n,r,i),a}Jg=this._renderer.getRenderTarget(),Yg=this._renderer.getActiveCubeFace(),Xg=this._renderer.getActiveMipmapLevel();let c=s||this._allocateTarget();return c.depthBuffer=!0,this._init(c),this._sceneToCubeUV(e,n,r,c,o),t>0&&this._blur(c,0,0,t),this._applyPMREM(c),this._cleanup(c),c}fromSceneAsync(e){var t=this;return g(function*(e,n=0,r=.1,i=100,a={}){return Ae(`PMREMGenerator: ".fromSceneAsync()" is deprecated. Use "await renderer.init()" instead.`),yield t._renderer.init(),t.fromScene(e,n,r,i,a)}).apply(this,arguments)}fromEquirectangular(e,t=null){if(this._hasInitialized===!1){T(`PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using "await renderer.init()" instead.`),this._setSizeFromTexture(e);let n=t||this._allocateTarget();return this.fromEquirectangularAsync(e,n),n}return this._fromTexture(e,t)}fromEquirectangularAsync(e,t=null){var n=this;return g(function*(){return Ae(`PMREMGenerator: ".fromEquirectangularAsync()" is deprecated. Use "await renderer.init()" instead.`),yield n._renderer.init(),n._fromTexture(e,t)})()}fromCubemap(e,t=null){if(this._hasInitialized===!1){T(`PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead.`),this._setSizeFromTexture(e);let n=t||this._allocateTarget();return this.fromCubemapAsync(e,t),n}return this._fromTexture(e,t)}fromCubemapAsync(e,t=null){var n=this;return g(function*(){return Ae(`PMREMGenerator: ".fromCubemapAsync()" is deprecated. Use "await renderer.init()" instead.`),yield n._renderer.init(),n._fromTexture(e,t)})()}compileCubemapShader(){var e=this;return g(function*(){e._cubemapMaterial===null&&(e._cubemapMaterial=l_(),yield e._compileMaterial(e._cubemapMaterial))})()}compileEquirectangularShader(){var e=this;return g(function*(){e._equirectMaterial===null&&(e._equirectMaterial=u_(),yield e._compileMaterial(e._equirectMaterial))})()}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose(),this._backgroundBox!==null&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSizeFromTexture(e){e.mapping===301||e.mapping===302?this._setSize(e.image.length===0?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4)}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._ggxMaterial!==null&&this._ggxMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e<this._lodMeshes.length;e++)this._lodMeshes[e].geometry.dispose()}_cleanup(e){this._renderer.setRenderTarget(Jg,Yg,Xg),e.scissorTest=!1,a_(e,0,0,e.width,e.height)}_fromTexture(e,t){this._setSizeFromTexture(e),Jg=this._renderer.getRenderTarget(),Yg=this._renderer.getActiveCubeFace(),Xg=this._renderer.getActiveMipmapLevel();let n=t||this._allocateTarget();return this._init(n),this._textureToCubeUV(e,n),this._applyPMREM(n),this._cleanup(n),n}_allocateTarget(){return i_(3*Math.max(this._cubeSize,112),4*this._cubeSize)}_init(e){if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==e.width||this._pingPongRenderTarget.height!==e.height){this._pingPongRenderTarget!==null&&this._dispose(),this._pingPongRenderTarget=i_(e.width,e.height);let{_lodMax:t}=this;({lodMeshes:this._lodMeshes,sizeLods:this._sizeLods,sigmas:this._sigmas}=r_(t)),this._blurMaterial=s_(t,e.width,e.height),this._ggxMaterial=c_(t,e.width,e.height)}}_compileMaterial(e){var t=this;return g(function*(){let n=new Ar(new ir,e);yield t._renderer.compile(n,Gg)})()}_sceneToCubeUV(e,t,n,r,i){let a=Kg;a.near=t,a.far=n;let o=[1,1,1,1,-1,1],s=[1,-1,1,-1,1,-1],c=this._renderer,l=c.autoClear;c.getClearColor(qg),c.autoClear=!1,this._backgroundBox===null&&(this._backgroundBox=new Ar(new ri,new vr({name:`PMREM.Background`,side:1,depthWrite:!1,depthTest:!1})));let u=this._backgroundBox,d=u.material,f=!1,p=e.background;p?p.isColor&&(d.color.copy(p),e.background=null,f=!0):(d.color.copy(qg),f=!0),c.setRenderTarget(r),c.clear(),f&&c.render(u,a);for(let t=0;t<6;t++){let n=t%3;n===0?(a.up.set(0,o[t],0),a.position.set(i.x,i.y,i.z),a.lookAt(i.x+s[t],i.y,i.z)):n===1?(a.up.set(0,0,o[t]),a.position.set(i.x,i.y,i.z),a.lookAt(i.x,i.y+s[t],i.z)):(a.up.set(0,o[t],0),a.position.set(i.x,i.y,i.z),a.lookAt(i.x,i.y,i.z+s[t]));let l=this._cubeSize;a_(r,n*l,t>2?l:0,l,l),c.render(e,a)}c.autoClear=l,e.background=p}_textureToCubeUV(e,t){let n=this._renderer,r=e.mapping===301||e.mapping===302;r?this._cubemapMaterial===null&&(this._cubemapMaterial=l_(e)):this._equirectMaterial===null&&(this._equirectMaterial=u_(e));let i=r?this._cubemapMaterial:this._equirectMaterial;i.fragmentNode.value=e;let a=this._lodMeshes[0];a.material=i;let o=this._cubeSize;a_(t,0,0,3*o,2*o),n.setRenderTarget(t),n.render(a,Gg)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;let r=this._lodMeshes.length;for(let t=1;t<r;t++)this._applyGGXFilter(e,t-1,t);t.autoClear=n}_applyGGXFilter(e,t,n){let r=this._renderer,i=this._pingPongRenderTarget,a=this._ggxMaterial,o=this._lodMeshes[n];o.material=a;let s=Qg.get(a),c=n/(this._lodMeshes.length-1),l=t/(this._lodMeshes.length-1),u=Math.sqrt(c*c-l*l)*(0+c*1.25),{_lodMax:d}=this,f=this._sizeLods[n],p=3*f*(n>d-Vg?n-d+Vg:0),m=4*(this._cubeSize-f);e.texture.frame=(e.texture.frame||0)+1,s.envMap.value=e.texture,s.roughness.value=u,s.mipInt.value=d-t,a_(i,p,m,3*f,2*f),r.setRenderTarget(i),r.render(o,Gg),i.texture.frame=(i.texture.frame||0)+1,s.envMap.value=i.texture,s.roughness.value=0,s.mipInt.value=d-n,a_(e,p,m,3*f,2*f),r.setRenderTarget(e),r.render(o,Gg)}_blur(e,t,n,r,i){let a=this._pingPongRenderTarget;this._halfBlur(e,a,t,n,r,`latitudinal`,i),this._halfBlur(a,e,n,n,r,`longitudinal`,i)}_halfBlur(e,t,n,r,i,a,o){let s=this._renderer,c=this._blurMaterial;a!==`latitudinal`&&a!==`longitudinal`&&E(`blur direction must be either latitudinal or longitudinal!`);let l=this._lodMeshes[r];l.material=c;let u=Qg.get(c),d=this._sizeLods[n]-1,f=isFinite(i)?Math.PI/(2*d):2*Math.PI/(2*Ug-1),p=i/f,m=isFinite(i)?1+Math.floor(3*p):Ug;m>Ug&&T(`sigmaRadians, ${i}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${Ug}`);let h=[],g=0;for(let e=0;e<Ug;++e){let t=e/p,n=Math.exp(-t*t/2);h.push(n),e===0?g+=n:e<m&&(g+=2*n)}for(let e=0;e<h.length;e++)h[e]=h[e]/g;e.texture.frame=(e.texture.frame||0)+1,u.envMap.value=e.texture,u.samples.value=m,u.weights.array=h,u.latitudinal.value=+(a===`latitudinal`),o&&(u.poleAxis.value=o);let{_lodMax:_}=this;u.dTheta.value=f,u.mipInt.value=_-n;let v=this._sizeLods[r];a_(t,3*v*(r>_-Vg?r-_+Vg:0),4*(this._cubeSize-v),3*v,2*v),s.setRenderTarget(t),s.render(l,Gg)}};function r_(e){let t=[],n=[],r=[],i=e,a=e-Vg+1+Hg.length;for(let o=0;o<a;o++){let a=Math.pow(2,i);t.push(a);let s=1/a;o>e-Vg?s=Hg[o-e+Vg-1]:o===0&&(s=0),n.push(s);let c=1/(a-2),l=-c,u=1+c,d=[l,l,u,l,u,u,l,l,u,u,l,u],f=new Float32Array(108),p=new Float32Array(72),m=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,n=e>2?0:-1,r=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0],i=$g[e];f.set(r,18*i),p.set(d,12*i);let a=[i,i,i,i,i,i];m.set(a,6*i)}let h=new ir;h.setAttribute(`position`,new Un(f,3)),h.setAttribute(`uv`,new Un(p,2)),h.setAttribute(`faceIndex`,new Un(m,1)),r.push(new Ar(h,null)),i>Vg&&i--}return{lodMeshes:r,sizeLods:t,sigmas:n}}function i_(e,t){let n=new Et(e,t,{magFilter:x,minFilter:x,generateMipmaps:!1,type:w,format:re,colorSpace:me});return n.texture.mapping=306,n.texture.name=`PMREM.cubeUv`,n.texture.isPMREMTexture=!0,n.scissorTest=!0,n}function a_(e,t,n,r,i){e.viewport.set(t,n,r,i),e.scissor.set(t,n,r,i)}function o_(e){let t=new Uh;return t.depthTest=!1,t.depthWrite=!1,t.blending=0,t.name=`PMREM_${e}`,t}function s_(e,t,n){let r=pd(Array(Ug).fill(0)),i=U(new D(0,1,0)),a=U(0),o=I(Ug),s=U(0),c={n:o,latitudinal:s,weights:r,poleAxis:i,outputDirection:t_,dTheta:a,samples:U(1),envMap:rd(),mipInt:U(0),CUBEUV_TEXEL_WIDTH:I(1/t),CUBEUV_TEXEL_HEIGHT:I(1/n),CUBEUV_MAX_MIP:I(e)},l=o_(`blur`);return l.fragmentNode=Ig(m(m({},c),{},{latitudinal:s.equal(1)})),Qg.set(l,c),l}function c_(e,t,n){let r={envMap:rd(),roughness:U(0),mipInt:U(0),CUBEUV_TEXEL_WIDTH:I(1/t),CUBEUV_TEXEL_HEIGHT:I(1/n),CUBEUV_MAX_MIP:I(e)},i=o_(`ggx`);return i.fragmentNode=Bg(m(m({},r),{},{N_immutable:t_,GGX_SAMPLES:R(Wg)})),Qg.set(i,r),i}function l_(e){let t=o_(`cubemap`);return t.fragmentNode=ep(e,t_),t}function u_(e){let t=o_(`equirect`);return t.fragmentNode=rd(e,Wh(t_),0),t}var d_=new WeakMap;function f_(e){let t=Math.log2(e)-2,n=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),112)),texelHeight:n,maxMip:t}}function p_(e,t,n){let r=m_(t),i=r.get(e);if((i===void 0?-1:i.pmremVersion)!==e.pmremVersion){let t=e.image;if(e.isCubeTexture)if(g_(t))i=n.fromCubemap(e,i);else return null;else if(__(t))i=n.fromEquirectangular(e,i);else return null;i.pmremVersion=e.pmremVersion,r.set(e,i)}return i.texture}function m_(e){let t=d_.get(e);return t===void 0&&(t=new WeakMap,d_.set(e,t)),t}var h_=class extends Ka{static get type(){return`PMREMNode`}constructor(e,t=null,n=null){super(`vec3`),this._value=e,this._pmrem=null,this.uvNode=t,this.levelNode=n,this._generator=null;let r=new wt;r.isRenderTargetTexture=!0,this._texture=rd(r),this._width=U(0),this._height=U(0),this._maxMip=U(0),this.updateBeforeType=Fa.RENDER}set value(e){this._value=e,this._pmrem=null}get value(){return this._value}updateFromTexture(e){let t=f_(e.image.height);this._texture.value=e,this._width.value=t.texelWidth,this._height.value=t.texelHeight,this._maxMip.value=t.maxMip}updateBefore(e){let t=this._pmrem,n=t?t.pmremVersion:-1,r=this._value;n!==r.pmremVersion&&(t=r.isPMREMTexture===!0?r:p_(r,e.renderer,this._generator),t!==null&&(this._pmrem=t,this.updateFromTexture(t)))}setup(e){this._generator===null&&(this._generator=new n_(e.renderer)),this.updateBefore(e);let t=this.uvNode;t===null&&e.context.getUV&&(t=e.context.getUV(this,e)),t=qf.mul(B(t.x,t.y.negate(),t.z));let n=this.levelNode;return n===null&&e.context.getTextureLevel&&(n=e.context.getTextureLevel(this)),Ng(this._texture,t,n,this._width,this._height,this._maxMip)}dispose(){super.dispose(),this._generator!==null&&this._generator.dispose()}};function g_(e){if(e==null)return!1;let t=0;for(let n=0;n<6;n++)e[n]!==void 0&&t++;return t===6}function __(e){return e==null?!1:e.height>0}var v_=j(h_).setParameterLength(1,3),y_=P(()=>{let e=B(Ef.z,0,Ef.x.negate()).normalize(),t=Ef.cross(e);return z(e.dot(Ff),t.dot(Ff)).mul(.495).add(.5)}).once([`NORMAL`,`VERTEX`])().toVar(`matcapUV`),b_=j(class extends Ka{static get type(){return`RotateNode`}constructor(e,t){super(),this.positionNode=e,this.rotationNode=t}getNodeType(e){return this.positionNode.getNodeType(e)}setup(e){let{rotationNode:t,positionNode:n}=this;if(this.getNodeType(e)===`vec2`){let e=t.cos(),r=t.sin();return rs(e,r,r.negate(),e).mul(n)}else{let e=t,r=as(V(1,0,0,0),V(0,Xc(e.x),Yc(e.x).negate(),0),V(0,Yc(e.x),Xc(e.x),0),V(0,0,0,1)),i=as(V(Xc(e.y),0,Yc(e.y),0),V(0,1,0,0),V(Yc(e.y).negate(),0,Xc(e.y),0),V(0,0,0,1)),a=as(V(Xc(e.z),Yc(e.z).negate(),0,0),V(Yc(e.z),Xc(e.z),0,0),V(0,0,1,0),V(0,0,0,1));return r.mul(i).mul(a).mul(V(n,1)).xyz}}}).setParameterLength(2);ps(`vec3`),ps(`vec3`),ps(`vec3`);var x_=class{constructor(){this.weakMaps={}}_getWeakMap(e){let t=e.length,n=this.weakMaps[t];return n===void 0&&(n=new WeakMap,this.weakMaps[t]=n),n}get(e){let t=this._getWeakMap(e);for(let n=0;n<e.length-1;n++)if(t=t.get(e[n]),t===void 0)return;return t.get(e[e.length-1])}set(e,t){let n=this._getWeakMap(e);for(let t=0;t<e.length-1;t++){let r=e[t];n.has(r)===!1&&n.set(r,new WeakMap),n=n.get(r)}return n.set(e[e.length-1],t),this}delete(e){let t=this._getWeakMap(e);for(let n=0;n<e.length-1;n++)if(t=t.get(e[n]),t===void 0)return!1;return t.delete(e[e.length-1])}},S_=class extends fs{static get type(){return`ParameterNode`}constructor(e,t=null){super(e,t),this.isParameterNode=!0}getMemberType(e,t){let n=this.getNodeType(e),r=e.getStructTypeNode(n),i;return r===null?(E(`TSL: Member "${t}" not found in struct "${n}".`,new _a),i=`float`):i=r.getMemberType(e,t),i}getHash(){return this.uuid}generate(){return this.name}},C_=(e,t)=>new S_(e,t),w_=j(class extends O{static get type(){return`StackNode`}constructor(e=null){super(),this.nodes=[],this.outputNode=null,this.parent=e,this._currentCond=null,this._expressionNode=null,this._currentNode=null,this.isStackNode=!0}getElementType(e){return this.hasOutput(e)?this.outputNode.getElementType(e):`void`}getNodeType(e){return this.hasOutput(e)?this.outputNode.getNodeType(e):`void`}getMemberType(e,t){return this.hasOutput(e)?this.outputNode.getMemberType(e,t):`void`}addToStack(e,t=this.nodes.length){return e.isNode===!0?(this.nodes.splice(t,0,e),this):(E(`TSL: Invalid node added to stack.`,new _a),this)}addToStackBefore(e){let t=this._currentNode?this.nodes.indexOf(this._currentNode):0;return this.addToStack(e,t)}If(e,t){let n=new Io(t);return this._currentCond=Hl(e,n),this.addToStack(this._currentCond)}ElseIf(e,t){let n=Hl(e,new Io(t));return this._currentCond.elseNode=n,this._currentCond=n,this}Else(e){return this._currentCond.elseNode=new Io(e),this}Switch(e){return this._expressionNode=A(e),this}Case(...e){let t=[];if(e.length>=2)for(let n=0;n<e.length-1;n++)t.push(this._expressionNode.equal(A(e[n])));else E(`TSL: Invalid parameter length. Case() requires at least two parameters.`,new _a);let n=e[e.length-1],r=new Io(n),i=t[0];for(let e=1;e<t.length;e++)i=i.or(t[e]);let a=Hl(i,r);return this._currentCond===null?(this._currentCond=a,this.addToStack(this._currentCond)):(this._currentCond.elseNode=a,this._currentCond=a,this)}Default(e){return this.Else(e),this}setup(e){let t=e.getNodeProperties(this),n=0;for(let r of this.getChildren())r.isVarNode&&r.isIntent(e)&&r.isAssign(e)!==!0||(t[`node`+n++]=r);return t.outputNode||null}hasOutput(e){return this.outputNode&&this.outputNode.isNode&&this.outputNode.getNodeType(e)!==`void`}build(e,...t){let n=Uo(),r=e.buildStage;Ho(this),e.setActiveStack(this);let i=t=>{if(this._currentNode=t,!(t.isVarNode&&t.isIntent(e)&&t.isAssign(e)!==!0)){if(r===`setup`)t.build(e);else if(r===`analyze`)t.build(e,this);else if(r===`generate`){let n=e.getDataFromNode(t,`any`).stages,r=n&&n[e.shaderStage];if(t.isVarNode&&r&&r.length===1&&r[0]&&r[0].isStackNode)return;t.build(e,`void`)}}},a=[...this.nodes];for(let e of a)i(e);this._currentNode=null;let o=this.nodes.filter(e=>a.indexOf(e)===-1);for(let e of o)i(e);let s;return s=this.hasOutput(e)?this.outputNode.build(e,...t):super.build(e,...t),Ho(n),e.removeActiveStack(this),s}}).setParameterLength(0,1);function T_(e){return Object.entries(e).map(([e,t])=>typeof t==`string`?{name:e,type:t,atomic:!1}:{name:e,type:t.type,atomic:t.atomic||!1})}var E_=class extends O{static get type(){return`StructTypeNode`}constructor(e,t=null){super(`struct`),this.membersLayout=T_(e),this.name=t,this.isStructLayoutNode=!0}getLength(){let e=Float32Array.BYTES_PER_ELEMENT,t=1,n=0;for(let r of this.membersLayout){let i=r.type,a=Da(i),o=Oa(i)/e;t=Math.max(t,o);let s=n%t%o;s!==0&&(n+=o-s),n+=a}return Math.ceil(n/t)*t}getMemberType(e,t){let n=this.membersLayout.find(e=>e.name===t);return n?n.type:`void`}getNodeType(e){return e.getStructTypeFromNode(this,this.membersLayout,this.name).name}setup(e){e.getStructTypeFromNode(this,this.membersLayout,this.name),e.addInclude(this)}generate(e){return this.getNodeType(e)}},D_=class extends O{static get type(){return`StructNode`}constructor(e,t){super(`vec3`),this.structTypeNode=e,this.values=t,this.isStructNode=!0}getNodeType(e){return this.structTypeNode.getNodeType(e)}getMemberType(e,t){return this.structTypeNode.getMemberType(e,t)}_getChildren(){let e=super._getChildren(),t=e.find(e=>e.childNode===this.structTypeNode);return e.splice(e.indexOf(t),1),e.push(t),e}generate(e){let t=e.getVarFromNode(this),n=t.type,r=e.getPropertyName(t);return e.addLineFlowCode(`${r} = ${e.generateStruct(n,this.structTypeNode.membersLayout,this.values)}`,this),t.name}},O_=(e,t=null)=>{let n=new E_(e,t),r=(...t)=>{let r=null;if(t.length>0)if(t[0].isNode){r={};let n=Object.keys(e);for(let e=0;e<t.length;e++)r[n[e]]=t[e]}else r=t[0];return new D_(n,r)};return r.layout=n,r.isStruct=!0,r},k_=class extends O{static get type(){return`OutputStructNode`}constructor(...e){super(),this.members=e,this.isOutputStructNode=!0}getNodeType(){return`OutputType`}generate(e){let t=e.getDataFromNode(this);if(t.membersLayout===void 0){let n=this.members,r=[];for(let t=0;t<n.length;t++){let i=`m`+t,a=n[t].getNodeType(e);r.push({name:i,type:a,index:t})}t.membersLayout=r,t.structType=e.getOutputStructTypeFromNode(this,t.membersLayout)}let n=e.getOutputStructName(),r=this.members,i=n===``?``:n+`.`;for(let t=0;t<r.length;t++){let n=r[t].build(e);e.addLineFlowCode(`${i}m${t} = ${n}`,this)}return n}},A_=j(k_),j_=class{constructor(e=1){this.blending=e,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.premultiplyAlpha=!1}copy(e){return this.blending=e.blending,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.premultiplyAlpha=e.premultiplyAlpha,this}clone(){return new this.constructor().copy(this)}},M_=new j_(0),N_=new j_(6);function P_(e,t){for(let n=0;n<e.length;n++)if(e[n].name===t)return n;return-1}var F_=j(class extends k_{static get type(){return`MRTNode`}constructor(e){super(),this.outputNodes=e,this.blendModes={output:N_},this.isMRTNode=!0}setBlendMode(e,t){return this.blendModes[e]=t,this}getBlendMode(e){return this.blendModes[e]||M_}has(e){return this.outputNodes[e]!==void 0}get(e){return this.outputNodes[e]}merge(e){let t=m(m({},this.outputNodes),e.outputNodes),n=m(m({},this.blendModes),e.blendModes),r=F_(t);return r.blendings=n,r}setup(e){let t=this.outputNodes,n=e.renderer.getRenderTarget(),r=[],i=n.textures;for(let e in t){let n=P_(i,e);r[n]=V(t[e])}return this.members=r,super.setup(e)}}),I_=class extends Ka{static get type(){return`BitcastNode`}constructor(e,t,n=null){super(),this.valueNode=e,this.conversionType=t,this.inputType=n,this.isBitcastNode=!0}getNodeType(e){if(this.inputType!==null){let t=this.valueNode.getNodeType(e),n=e.getTypeLength(t);return e.getTypeFromLength(n,this.conversionType)}return this.conversionType}generate(e){let t=this.getNodeType(e),n=``;if(this.inputType!==null){let t=this.valueNode.getNodeType(e);n=e.getTypeLength(t)===1?this.inputType:e.changeComponentType(t,this.inputType)}else n=this.valueNode.getNodeType(e);return`${e.getBitcastMethod(t,n)}( ${this.valueNode.build(e,n)} )`}},L_=N(I_).setParameterLength(2),R_=e=>new I_(e,`int`,`float`),z_=e=>new I_(e,`uint`,`float`),B_=e=>new I_(e,`float`,`int`),V_=e=>new I_(e,`float`,`uint`),H_={},U_=class e extends G{static get type(){return`BitcountNode`}constructor(e,t){super(e,t),this.isBitcountNode=!0}_resolveElementType(e,t,n){n===`int`?t.assign(L_(e,`uint`)):t.assign(e)}_returnDataNode(e){switch(e){case`uint`:return R;case`int`:return L;case`uvec2`:return Yo;case`uvec3`:return Qo;case`uvec4`:return ts;case`ivec2`:return Jo;case`ivec3`:return Zo;case`ivec4`:return es}}_createTrailingZerosBaseLayout(e,t){let n=this._returnDataNode(t);return P(([e])=>{let r=R(0);return this._resolveElementType(e,r,t),n(z_(I(r.bitAnd(il(r)))).shiftRight(23).sub(127))}).setLayout({name:e,type:t,inputs:[{name:`value`,type:t}]})}_createLeadingZerosBaseLayout(e,t){let n=this._returnDataNode(t);return P(([e])=>{F(e.equal(R(0)),()=>R(32));let r=R(0),i=R(0);return this._resolveElementType(e,r,t),F(r.shiftRight(16).equal(0),()=>{i.addAssign(16),r.shiftLeftAssign(16)}),F(r.shiftRight(24).equal(0),()=>{i.addAssign(8),r.shiftLeftAssign(8)}),F(r.shiftRight(28).equal(0),()=>{i.addAssign(4),r.shiftLeftAssign(4)}),F(r.shiftRight(30).equal(0),()=>{i.addAssign(2),r.shiftLeftAssign(2)}),F(r.shiftRight(31).equal(0),()=>{i.addAssign(1)}),n(i)}).setLayout({name:e,type:t,inputs:[{name:`value`,type:t}]})}_createOneBitsBaseLayout(e,t){let n=this._returnDataNode(t);return P(([e])=>{let r=R(0);return this._resolveElementType(e,r,t),r.assign(r.sub(r.shiftRight(R(1)).bitAnd(R(1431655765)))),r.assign(r.bitAnd(R(858993459)).add(r.shiftRight(R(2)).bitAnd(R(858993459)))),n(r.add(r.shiftRight(R(4))).bitAnd(R(252645135)).mul(R(16843009)).shiftRight(R(24)))}).setLayout({name:e,type:t,inputs:[{name:`value`,type:t}]})}_createMainLayout(e,t,n,r){let i=this._returnDataNode(t);return P(([e])=>{if(n===1)return i(r(e));{let t=i(0),a=[`x`,`y`,`z`,`w`];for(let i=0;i<n;i++){let n=a[i];t[n].assign(r(e[n]))}return t}}).setLayout({name:e,type:t,inputs:[{name:`value`,type:t}]})}setup(t){let{method:n,aNode:r}=this,{renderer:i}=t;if(i.backend.isWebGPUBackend)return super.setup(t);let a=this.getInputType(t),o=t.getElementType(a),s=t.getTypeLength(a),c=`${n}_base_${o}`,l=`${n}_${a}`,u=H_[c];if(u===void 0){switch(n){case e.COUNT_LEADING_ZEROS:u=this._createLeadingZerosBaseLayout(c,o);break;case e.COUNT_TRAILING_ZEROS:u=this._createTrailingZerosBaseLayout(c,o);break;case e.COUNT_ONE_BITS:u=this._createOneBitsBaseLayout(c,o);break}H_[c]=u}let d=H_[l];return d===void 0&&(d=this._createMainLayout(l,a,s,u),H_[l]=d),P(()=>d(r))()}};U_.COUNT_TRAILING_ZEROS=`countTrailingZeros`,U_.COUNT_LEADING_ZEROS=`countLeadingZeros`,U_.COUNT_ONE_BITS=`countOneBits`;var W_=N(U_,U_.COUNT_TRAILING_ZEROS).setParameterLength(1),G_=N(U_,U_.COUNT_LEADING_ZEROS).setParameterLength(1),K_=N(U_,U_.COUNT_ONE_BITS).setParameterLength(1),q_=P(([e])=>{let t=e.toUint().mul(747796405).add(2891336453),n=t.shiftRight(t.shiftRight(28).add(4)).bitXor(t).mul(277803737);return n.shiftRight(22).bitXor(n).toFloat().mul(1/Math.pow(2,32))}),J_=(e,t)=>Cl(W(4,e.mul(ac(1,e))),t),Y_=(e,t)=>e.lessThan(.5)?J_(e.mul(2),t).div(2):ac(1,J_(W(ac(1,e),2),t).div(2)),X_=(e,t,n)=>Cl(oc(Cl(e,t),ic(Cl(e,t),Cl(ac(1,e),n))),1/t),Z_=(e,t)=>Yc(jc.mul(t.mul(e).sub(1))).div(jc.mul(t.mul(e).sub(1))),Q_=class extends Ka{static get type(){return`PackFloatNode`}constructor(e,t){super(),this.vectorNode=t,this.encoding=e,this.isPackFloatNode=!0}getNodeType(){return`uint`}generate(e){let t=this.vectorNode.getNodeType(e);return`${e.getFloatPackingMethod(this.encoding)}(${this.vectorNode.build(e,t)})`}},$_=N(Q_,`snorm`).setParameterLength(1),ev=N(Q_,`unorm`).setParameterLength(1),tv=N(Q_,`float16`).setParameterLength(1),nv=class extends Ka{static get type(){return`UnpackFloatNode`}constructor(e,t){super(),this.uintNode=t,this.encoding=e,this.isUnpackFloatNode=!0}getNodeType(){return`vec2`}generate(e){let t=this.uintNode.getNodeType(e);return`${e.getFloatUnpackingMethod(this.encoding)}(${this.uintNode.build(e,t)})`}},rv=N(nv,`snorm`).setParameterLength(1),iv=N(nv,`unorm`).setParameterLength(1),av=N(nv,`float16`).setParameterLength(1),ov=P(([e])=>e.fract().sub(.5).abs()).setLayout({name:`tri`,type:`float`,inputs:[{name:`x`,type:`float`}]}),sv=P(([e])=>B(ov(e.z.add(ov(e.y.mul(1)))),ov(e.z.add(ov(e.x.mul(1)))),ov(e.y.add(ov(e.x.mul(1)))))).setLayout({name:`tri3`,type:`vec3`,inputs:[{name:`p`,type:`vec3`}]}),cv=P(([e,t,n])=>{let r=B(e).toVar(),i=I(1.4).toVar(),a=I(0).toVar(),o=B(r).toVar();return qm({start:I(0),end:I(3),type:`float`,condition:`<=`},()=>{let e=B(sv(o.mul(2))).toVar();r.addAssign(e.add(n.mul(I(.1).mul(t)))),o.mulAssign(1.8),i.mulAssign(1.5),r.mulAssign(1.2);let s=I(ov(r.z.add(ov(r.x.add(ov(r.y)))))).toVar();a.addAssign(s.div(i)),o.addAssign(.14)}),a}).setLayout({name:`triNoise3D`,type:`float`,inputs:[{name:`position`,type:`vec3`},{name:`speed`,type:`float`},{name:`time`,type:`float`}]}),lv=j(class extends O{static get type(){return`FunctionOverloadingNode`}constructor(e=[],...t){super(),this.functionNodes=e,this.parametersNodes=t,this._candidateFn=null,this.global=!0}getNodeType(e){return this.getCandidateFn(e).shaderNode.layout.type}getCandidateFn(e){let t=this.parametersNodes,n=this._candidateFn;if(n===null){let r=null,i=-1;for(let n of this.functionNodes){let a=n.shaderNode.layout;if(a===null)throw Error(`FunctionOverloadingNode: FunctionNode must be a layout.`);let o=a.inputs;if(t.length===o.length){let a=0;for(let n=0;n<t.length;n++){let r=t[n],i=o[n];r.getNodeType(e)===i.type&&a++}a>i&&(r=n,i=a)}}this._candidateFn=n=r}return n}setup(e){return this.getCandidateFn(e)(...this.parametersNodes)}}),uv=e=>(...t)=>lv(e,...t),dv=U(0).setGroup(H).onRenderUpdate(e=>e.time),fv=U(0).setGroup(H).onRenderUpdate(e=>e.deltaTime),pv=U(0,`uint`).setGroup(H).onRenderUpdate(e=>e.frameId),mv=(e=dv)=>e.add(.75).mul(Math.PI*2).sin().mul(.5).add(.5),hv=(e=dv)=>e.fract().round(),gv=(e=dv)=>e.add(.5).fract().mul(2).sub(1).abs(),_v=(e=dv)=>e.fract();function vv(e,t=null){return Wl(t,{getUV:typeof e==`function`?e:()=>e})}var yv=P(([e,t,n=z(.5)])=>b_(e.sub(n),t).add(n)),bv=P(([e,t,n=z(.5)])=>{let r=e.sub(n),i=r.dot(r),a=i.mul(i).mul(t);return e.add(r.mul(a))}),xv=P(({position:e=null,horizontal:t=!0,vertical:n=!1})=>{let r;e===null?r=cf:(r=cf.toVar(),r[3][0]=e.x,r[3][1]=e.y,r[3][2]=e.z);let i=Kd.mul(r);return Po(t)&&(i[0][0]=cf[0].length(),i[0][1]=0,i[0][2]=0),Po(n)&&(i[1][0]=0,i[1][1]=cf[1].length(),i[1][2]=0),i[2][0]=0,i[2][1]=0,i[2][2]=1,Wd.mul(i).mul(xf)}),Sv=P(([e=null])=>{let t=wh();return wh(fh(e)).sub(t).lessThan(0).select(yd,e)}),Cv=P(([e,t=Xu(),n=I(0)])=>{let r=e.x,i=e.y,a=n.mod(r.mul(i)).floor(),o=a.mod(r),s=i.sub(a.add(1).div(r).ceil()),c=e.reciprocal(),l=z(o,s);return t.add(l).mul(c)}),wv=P(([e,t=null,n=null,r=I(1),i=xf,a=jf])=>{let o=a.abs().normalize();o=o.div(o.dot(B(1)));let s=i.yz.mul(r),c=i.zx.mul(r),l=i.xy.mul(r),u=e.value,d=t===null?u:t.value,f=n===null?u:n.value;return ic(rd(u,s).mul(o.x),rd(d,c).mul(o.y),rd(f,l).mul(o.z))}),Tv=(...e)=>wv(...e),Ev=new Rr,Dv=new D,Ov=new D,kv=new D,Av=new Ot,jv=new D(0,0,-1),Mv=new Tt,Nv=new D,Pv=new D,Fv=new Tt,Iv=new at,Lv=new Et,Rv=yd.flipX();Lv.depthTexture=new ti(1,1);var zv=!1,Bv=class e extends td{static get type(){return`ReflectorNode`}constructor(e={}){super(e.defaultTexture||Lv.texture,Rv),this._reflectorBaseNode=e.reflector||new Vv(this,e),this._depthNode=null,this.setUpdateMatrix(!1)}get reflector(){return this._reflectorBaseNode}get target(){return this._reflectorBaseNode.target}getDepthNode(){if(this._depthNode===null){if(this._reflectorBaseNode.depth!==!0)throw Error(`THREE.ReflectorNode: Depth node can only be requested when the reflector is created with { depth: true }. `);this._depthNode=new e({defaultTexture:Lv.depthTexture,reflector:this._reflectorBaseNode})}return this._depthNode}setup(e){return e.object.isQuadMesh||this._reflectorBaseNode.build(e),super.setup(e)}clone(){let e=new this.constructor(this.reflectorNode);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e._reflectorBaseNode=this._reflectorBaseNode,e}dispose(){super.dispose(),this._reflectorBaseNode.dispose()}},Vv=class extends O{static get type(){return`ReflectorBaseNode`}constructor(e,t={}){super();let{target:n=new tn,resolutionScale:r=1,generateMipmaps:i=!1,bounces:a=!0,depth:o=!1,samples:s=0}=t;this.textureNode=e,this.target=n,this.resolutionScale=r,t.resolution!==void 0&&(Ae(`ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".`),this.resolutionScale=t.resolution),this.generateMipmaps=i,this.bounces=a,this.depth=o,this.samples=s,this.updateBeforeType=a?Fa.RENDER:Fa.FRAME,this.virtualCameras=new WeakMap,this.renderTargets=new Map,this.forceUpdate=!1,this.hasOutput=!1}_updateResolution(e,t){let n=this.resolutionScale;t.getDrawingBufferSize(Iv),e.setSize(Math.round(Iv.width*n),Math.round(Iv.height*n))}setup(e){return this._updateResolution(Lv,e.renderer),super.setup(e)}dispose(){super.dispose();for(let e of this.renderTargets.values())e.dispose()}getVirtualCamera(e){let t=this.virtualCameras.get(e);return t===void 0&&(t=e.clone(),this.virtualCameras.set(e,t)),t}getRenderTarget(e){let t=this.renderTargets.get(e);return t===void 0&&(t=new Et(0,0,{type:w,samples:this.samples}),this.generateMipmaps===!0&&(t.texture.minFilter=C,t.texture.generateMipmaps=!0),this.depth===!0&&(t.depthTexture=new ti),this.renderTargets.set(e,t)),t}updateBefore(e){if(this.bounces===!1&&zv)return!1;zv=!0;let{scene:t,camera:n,renderer:r,material:i}=e,{target:a}=this,o=this.getVirtualCamera(n),s=this.getRenderTarget(o);r.getDrawingBufferSize(Iv),this._updateResolution(s,r),Ov.setFromMatrixPosition(a.matrixWorld),kv.setFromMatrixPosition(n.matrixWorld),Av.extractRotation(a.matrixWorld),Dv.set(0,0,1),Dv.applyMatrix4(Av),Nv.subVectors(Ov,kv);let c=Nv.dot(Dv)>0,l=!1;if(c===!0&&this.forceUpdate===!1){if(this.hasOutput===!1){zv=!1;return}l=!0}Nv.reflect(Dv).negate(),Nv.add(Ov),Av.extractRotation(n.matrixWorld),jv.set(0,0,-1),jv.applyMatrix4(Av),jv.add(kv),Pv.subVectors(Ov,jv),Pv.reflect(Dv).negate(),Pv.add(Ov),o.coordinateSystem=n.coordinateSystem,o.position.copy(Nv),o.up.set(0,1,0),o.up.applyMatrix4(Av),o.up.reflect(Dv),o.lookAt(Pv),o.near=n.near,o.far=n.far,o.updateMatrixWorld(),o.projectionMatrix.copy(n.projectionMatrix),Ev.setFromNormalAndCoplanarPoint(Dv,Ov),Ev.applyMatrix4(o.matrixWorldInverse),Mv.set(Ev.normal.x,Ev.normal.y,Ev.normal.z,Ev.constant);let u=o.projectionMatrix;Fv.x=(Math.sign(Mv.x)+u.elements[8])/u.elements[0],Fv.y=(Math.sign(Mv.y)+u.elements[9])/u.elements[5],Fv.z=-1,Fv.w=(1+u.elements[10])/u.elements[14],Mv.multiplyScalar(1/Mv.dot(Fv)),u.elements[2]=Mv.x,u.elements[6]=Mv.y,u.elements[10]=r.coordinateSystem===2001?Mv.z-0:Mv.z+1-0,u.elements[14]=Mv.w,this.textureNode.value=s.texture,this.depth===!0&&(this.textureNode.getDepthNode().value=s.depthTexture),i.visible=!1;let d=r.getRenderTarget(),f=r.getMRT(),p=r.autoClear;r.setMRT(null),r.setRenderTarget(s),r.autoClear=!0;let m=t.name;t.name=(t.name||`Scene`)+` [ Reflector ]`,l?(r.clear(),this.hasOutput=!1):(r.render(t,o),this.hasOutput=!0),t.name=m,r.setMRT(f),r.setRenderTarget(d),r.autoClear=p,i.visible=!0,zv=!1,this.forceUpdate=!1}get resolution(){return Ae(`ReflectorNode: The "resolution" property has been renamed to "resolutionScale".`),this.resolutionScale}set resolution(e){Ae(`ReflectorNode: The "resolution" property has been renamed to "resolutionScale".`),this.resolutionScale=e}},Hv=e=>new Bv(e),Uv=new zi(-1,1,1,-1,0,1),Wv=new class extends ir{constructor(e=!1){super();let t=e===!1?[0,-1,0,1,2,1]:[0,2,0,0,2,0];this.setAttribute(`position`,new Kn([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute(`uv`,new Kn(t,2))}},Gv=class extends Ar{constructor(e=null){super(Wv,e),this.camera=Uv,this.isQuadMesh=!0}renderAsync(e){var t=this;return g(function*(){Ae(`QuadMesh: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.`),yield e.init(),e.render(t,Uv)})()}render(e){e.render(this,Uv)}},Kv=new at,qv=class extends td{static get type(){return`RTTNode`}constructor(e,t=null,n=null,r={type:w}){let i=new Et(t,n,r);super(i.texture,Xu()),this.isRTTNode=!0,this.node=e,this.width=t,this.height=n,this.pixelRatio=1,this.renderTarget=i,this.textureNeedsUpdate=!0,this.autoUpdate=!0,this._rttNode=null,this._quadMesh=new Gv(new Uh),this.updateBeforeType=Fa.RENDER}get autoResize(){return this.width===null}setup(e){return this._rttNode=this.node.context(e.getSharedContext()),this._quadMesh.material.name=`RTT`,this._quadMesh.material.needsUpdate=!0,super.setup(e)}setSize(e,t){this.width=e,this.height=t;let n=e*this.pixelRatio,r=t*this.pixelRatio;this.renderTarget.setSize(n,r),this.textureNeedsUpdate=!0}setPixelRatio(e){this.pixelRatio=e,this.setSize(this.width,this.height)}updateBefore({renderer:e}){if(this.textureNeedsUpdate===!1&&this.autoUpdate===!1)return;if(this.textureNeedsUpdate=!1,this.autoResize===!0){let t=e.getPixelRatio(),n=e.getSize(Kv),r=Math.floor(n.width*t),i=Math.floor(n.height*t);(r!==this.renderTarget.width||i!==this.renderTarget.height)&&(this.renderTarget.setSize(r,i),this.textureNeedsUpdate=!0)}let t=`RTT`;this.node.name&&(t=this.node.name+` [ `+t+` ]`),this._quadMesh.material.fragmentNode=this._rttNode,this._quadMesh.name=t;let n=e.getRenderTarget();e.setRenderTarget(this.renderTarget),this._quadMesh.render(e),e.setRenderTarget(n)}clone(){let e=new td(this.value,this.uvNode,this.levelNode);return e.sampler=this.sampler,e.referenceNode=this,e}},Jv=(e,...t)=>new qv(A(e),...t),Yv=(e,...t)=>e.isSampleNode||e.isTextureNode?e:e.isPassNode?e.getTextureNode():Jv(e,...t),Xv=P(([e,t,n],r)=>{let i;r.renderer.coordinateSystem===2001?(e=z(e.x,e.y.oneMinus()).mul(2).sub(1),i=V(B(e,t),1)):i=V(B(e.x,e.y.oneMinus(),t).mul(2).sub(1),1);let a=V(n.mul(i));return a.xyz.div(a.w)}),Zv=P(([e,t])=>{let n=t.mul(V(e,1)),r=n.xy.div(n.w).mul(.5).add(.5).toVar();return z(r.x,r.y.oneMinus())}),Qv=P(([e,t,n])=>{let r=Zu(ad(t)),i=Jo(e.mul(r)).toVar(),a=ad(t,i).toVar(),o=ad(t,i.sub(Jo(2,0))).toVar(),s=ad(t,i.sub(Jo(1,0))).toVar(),c=ad(t,i.add(Jo(1,0))).toVar(),l=ad(t,i.add(Jo(2,0))).toVar(),u=ad(t,i.add(Jo(0,2))).toVar(),d=ad(t,i.add(Jo(0,1))).toVar(),f=ad(t,i.sub(Jo(0,1))).toVar(),p=ad(t,i.sub(Jo(0,2))).toVar(),m=tl(ac(I(2).mul(s).sub(o),a)).toVar(),h=tl(ac(I(2).mul(c).sub(l),a)).toVar(),g=tl(ac(I(2).mul(d).sub(u),a)).toVar(),_=tl(ac(I(2).mul(f).sub(p),a)).toVar(),v=Xv(e,a,n).toVar();return qc(Sl(m.lessThan(h).select(v.sub(Xv(e.sub(z(I(1).div(r.x),0)),s,n)),v.negate().add(Xv(e.add(z(I(1).div(r.x),0)),c,n))),g.lessThan(_).select(v.sub(Xv(e.add(z(0,I(1).div(r.y))),d,n)),v.negate().add(Xv(e.sub(z(0,I(1).div(r.y))),f,n)))))}),$v=P(([e])=>Jc(I(52.9829189).mul(Jc(xl(e,z(.06711056,.00583715)))))).setLayout({name:`interleavedGradientNoise`,type:`float`,inputs:[{name:`position`,type:`vec2`}]}),ey=P(([e,t,n])=>{let r=I(2.399963229728653),i=Uc(I(e).add(.5).div(I(t))),a=I(e).mul(r).add(n);return z(Xc(a),Yc(a)).mul(i)}).setLayout({name:`vogelDiskSample`,type:`vec2`,inputs:[{name:`sampleIndex`,type:`int`},{name:`samplesCount`,type:`int`},{name:`phi`,type:`float`}]}),ty=class extends O{static get type(){return`SampleNode`}constructor(e,t=null){super(),this.callback=e,this.uvNode=t,this.isSampleNode=!0}setup(){return this.sample(Xu())}sample(e){return this.callback(e)}},ny=(e,t=null)=>new ty(e,A(t)),ry=class e extends O{static get type(){return`EventNode`}constructor(t,n){super(`void`),this.eventType=t,this.callback=n,t===e.OBJECT?this.updateType=Fa.OBJECT:t===e.MATERIAL?this.updateType=Fa.RENDER:t===e.BEFORE_OBJECT?this.updateBeforeType=Fa.OBJECT:t===e.BEFORE_MATERIAL&&(this.updateBeforeType=Fa.RENDER)}update(e){this.callback(e)}updateBefore(e){this.callback(e)}};ry.OBJECT=`object`,ry.MATERIAL=`material`,ry.BEFORE_OBJECT=`beforeObject`,ry.BEFORE_MATERIAL=`beforeMaterial`;var iy=(e,t)=>new ry(e,t).toStack(),ay=e=>iy(ry.OBJECT,e),oy=e=>iy(ry.MATERIAL,e),sy=e=>iy(ry.BEFORE_OBJECT,e),cy=e=>iy(ry.BEFORE_MATERIAL,e),ly=class extends Pr{constructor(e,t,n=Float32Array){let r=ArrayBuffer.isView(e)?e:new n(e*t);super(r,t),this.isStorageInstancedBufferAttribute=!0}},uy=class extends Un{constructor(e,t,n=Float32Array){let r=ArrayBuffer.isView(e)?e:new n(e*t);super(r,t),this.isStorageBufferAttribute=!0}},dy=(e,t=`float`)=>{let n,r;return t.isStruct===!0?(n=t.layout.getLength(),r=Ta(`float`)):(n=Ea(t),r=Ta(t)),Am(new uy(e,n,r),t,e)},fy=(e,t=`float`)=>{let n,r;t.isStruct===!0?(n=t.layout.getLength(),r=Ta(`float`)):(n=Ea(t),r=Ta(t));let i=new ly(e,n,r);return Am(i,t,i.count)},py=M(class extends O{static get type(){return`PointUVNode`}constructor(){super(`vec2`),this.isPointUVNode=!0}generate(){return`vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )`}}),my=new Rt,hy=new Ot,gy=U(0).setGroup(H).onRenderUpdate(({scene:e})=>e.backgroundBlurriness),_y=U(1).setGroup(H).onRenderUpdate(({scene:e})=>e.backgroundIntensity),vy=U(new Ot).setGroup(H).onRenderUpdate(({scene:e})=>{let t=e.background;return t!==null&&t.isTexture&&t.mapping!==300?(my.copy(e.backgroundRotation),my.x*=-1,my.y*=-1,my.z*=-1,hy.makeRotationFromEuler(my)):hy.identity(),hy}),yy=j(class extends td{static get type(){return`StorageTextureNode`}constructor(e,t,n=null){super(e,t),this.storeNode=n,this.mipLevel=0,this.isStorageTextureNode=!0,this.access=La.WRITE_ONLY}getInputType(){return`storageTexture`}setup(e){super.setup(e);let t=e.getNodeProperties(this);return t.storeNode=this.storeNode,t}setAccess(e){return this.access=e,this}setMipLevel(e){return this.mipLevel=e,this}generate(e,t){let n;return n=this.storeNode===null?super.generate(e,t):this.generateStore(e),n}generateSnippet(e,t,n,r,i,a,o,s,c){let l=this.value;return e.generateStorageTextureLoad(l,t,n,r,a,c)}toReadWrite(){return this.setAccess(La.READ_WRITE)}toReadOnly(){return this.setAccess(La.READ_ONLY)}toWriteOnly(){return this.setAccess(La.WRITE_ONLY)}generateStore(e){let{uvNode:t,storeNode:n,depthNode:r}=e.getNodeProperties(this),i=super.generate(e,`property`),a=t.build(e,this.value.is3DTexture===!0?`uvec3`:`uvec2`),o=n.build(e,`vec4`),s=r?r.build(e,`int`):null,c=e.generateTextureStore(e,i,a,s,o);e.addLineFlowCode(c,this)}clone(){let e=super.clone();return e.storeNode=this.storeNode,e.mipLevel=this.mipLevel,e.access=this.access,e}}).setParameterLength(1,3),by=(e,t,n)=>{let r;return e.isStorageTextureNode===!0?(r=e.clone(),r.uvNode=t,r.storeNode=n):r=yy(e,t,n),n!==null&&r.toStack(),r},xy=P(({texture:e,uv:t})=>{let n=1e-4,r=B().toVar();return F(t.x.lessThan(n),()=>{r.assign(B(1,0,0))}).ElseIf(t.y.lessThan(n),()=>{r.assign(B(0,1,0))}).ElseIf(t.z.lessThan(n),()=>{r.assign(B(0,0,1))}).ElseIf(t.x.greaterThan(1-n),()=>{r.assign(B(-1,0,0))}).ElseIf(t.y.greaterThan(1-n),()=>{r.assign(B(0,-1,0))}).ElseIf(t.z.greaterThan(1-n),()=>{r.assign(B(0,0,-1))}).Else(()=>{let n=.01,i=e.sample(t.add(B(-.01,0,0))).r.sub(e.sample(t.add(B(n,0,0))).r),a=e.sample(t.add(B(0,-.01,0))).r.sub(e.sample(t.add(B(0,n,0))).r),o=e.sample(t.add(B(0,0,-.01))).r.sub(e.sample(t.add(B(0,0,n))).r);r.assign(B(i,a,o))}),r.normalize()}),Sy=j(class extends td{static get type(){return`Texture3DNode`}constructor(e,t=null,n=null){super(e,t,n),this.isTexture3DNode=!0}getInputType(){return`texture3D`}getDefaultUV(){return B(.5,.5,.5)}setUpdateMatrix(){}generateUV(e,t){return t.build(e,this.sampler===!0?`vec3`:`ivec3`)}generateOffset(e,t){return t.build(e,`ivec3`)}normal(e){return xy({texture:this,uv:e})}}).setParameterLength(1,3),Cy=(...e)=>Sy(...e).setSampler(!1),wy=(e,t,n)=>Sy(e,t).level(n),Ty=class extends rp{static get type(){return`UserDataNode`}constructor(e,t,n=null){super(e,t,n),this.userData=n}updateReference(e){return this.reference=this.userData===null?e.object.userData:this.userData,this.reference}},Ey=(e,t,n)=>new Ty(e,t,n),Dy=new WeakMap,Oy=class extends Ka{static get type(){return`VelocityNode`}constructor(){super(`vec2`),this.projectionMatrix=null,this.updateType=Fa.OBJECT,this.updateAfterType=Fa.OBJECT,this.previousModelWorldMatrix=U(new Ot),this.previousProjectionMatrix=U(new Ot).setGroup(H),this.previousCameraViewMatrix=U(new Ot)}setProjectionMatrix(e){this.projectionMatrix=e}update({frameId:e,camera:t,object:n}){let r=Ay(n);this.previousModelWorldMatrix.value.copy(r);let i=ky(t);i.frameId!==e&&(i.frameId=e,i.previousProjectionMatrix===void 0?(i.previousProjectionMatrix=new Ot,i.previousCameraViewMatrix=new Ot,i.currentProjectionMatrix=new Ot,i.currentCameraViewMatrix=new Ot,i.previousProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.previousCameraViewMatrix.copy(t.matrixWorldInverse)):(i.previousProjectionMatrix.copy(i.currentProjectionMatrix),i.previousCameraViewMatrix.copy(i.currentCameraViewMatrix)),i.currentProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.currentCameraViewMatrix.copy(t.matrixWorldInverse),this.previousProjectionMatrix.value.copy(i.previousProjectionMatrix),this.previousCameraViewMatrix.value.copy(i.previousCameraViewMatrix))}updateAfter({object:e}){Ay(e).copy(e.matrixWorld)}setup(){let e=this.projectionMatrix===null?Wd:U(this.projectionMatrix),t=this.previousCameraViewMatrix.mul(this.previousModelWorldMatrix),n=e.mul(hf).mul(xf),r=this.previousProjectionMatrix.mul(t).mul(Sf);return ac(n.xy.div(n.w),r.xy.div(r.w))}};function ky(e){let t=Dy.get(e);return t===void 0&&(t={},Dy.set(e,t)),t}function Ay(e,t=0){let n=ky(e),r=n[t];return r===void 0&&(n[t]=r=new Ot,n[t].copy(e.matrixWorld)),r}var jy=M(Oy),My=P(([e])=>Iy(e.rgb)),Ny=P(([e,t=I(1)])=>t.mix(Iy(e.rgb),e.rgb)),Py=P(([e,t=I(1)])=>{let n=ic(e.r,e.g,e.b).div(3),r=e.r.max(e.g.max(e.b)),i=r.sub(n).mul(t).mul(-3);return Al(e.rgb,r,i)}),Fy=P(([e,t=I(1)])=>{let n=B(.57735,.57735,.57735),r=t.cos();return B(e.rgb.mul(r).add(n.cross(e.rgb).mul(t.sin()).add(n.mul(xl(n,e.rgb).mul(r.oneMinus())))))}),Iy=(e,t=B(mt.getLuminanceCoefficients(new D)))=>xl(e,t),Ly=P(([e,t=B(1),n=B(0),r=B(1),i=I(1),a=B(mt.getLuminanceCoefficients(new D,me))])=>{let o=e.rgb.dot(B(a)),s=gl(e.rgb.mul(t).add(n),0).toVar(),c=s.pow(r).toVar();return F(s.r.greaterThan(0),()=>{s.r.assign(c.r)}),F(s.g.greaterThan(0),()=>{s.g.assign(c.g)}),F(s.b.greaterThan(0),()=>{s.b.assign(c.b)}),s.assign(o.add(s.sub(o).mul(i))),V(s.rgb,e.a)}),Ry=P(([e,t])=>e.mul(t).floor().div(t)),zy=null,By=j(class extends oh{static get type(){return`ViewportSharedTextureNode`}constructor(e=yd,t=null){zy===null&&(zy=new Qr),super(e,t,zy)}getTextureForReference(){return zy}updateReference(){return this}}).setParameterLength(0,2),Vy=new at,Hy=class extends td{static get type(){return`PassTextureNode`}constructor(e,t){super(t),this.passNode=e,this.isPassTextureNode=!0,this.setUpdateMatrix(!1)}setup(e){let t=e.getNodeProperties(this);return t.passNode=this.passNode,super.setup(e)}clone(){return new this.constructor(this.passNode,this.value)}},Uy=class extends Hy{static get type(){return`PassMultipleTextureNode`}constructor(e,t,n=!1){super(e,null),this.textureName=t,this.previousTexture=n,this.isPassMultipleTextureNode=!0}updateTexture(){this.value=this.previousTexture?this.passNode.getPreviousTexture(this.textureName):this.passNode.getTexture(this.textureName)}setup(e){return this.updateTexture(),super.setup(e)}clone(){let e=new this.constructor(this.passNode,this.textureName,this.previousTexture);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}},Wy=class e extends Ka{static get type(){return`PassNode`}constructor(e,t,n,r={}){super(`vec4`),this.scope=e,this.scene=t,this.camera=n,this.options=r,this._pixelRatio=1,this._width=1,this._height=1;let i=new ti;i.isRenderTargetTexture=!0,i.name=`depth`;let a=new Et(this._width*this._pixelRatio,this._height*this._pixelRatio,m({type:w},r));a.texture.name=`output`,a.depthTexture=i,this.renderTarget=a,this.overrideMaterial=null,this.transparent=!0,this.opaque=!0,this.contextNode=null,this._contextNodeCache=null,this._textures={output:a.texture,depth:i},this._textureNodes={},this._linearDepthNodes={},this._viewZNodes={},this._previousTextures={},this._previousTextureNodes={},this._cameraNear=U(0),this._cameraFar=U(0),this._mrt=null,this._layers=null,this._resolutionScale=1,this._viewport=null,this._scissor=null,this.isPassNode=!0,this.updateBeforeType=Fa.FRAME,this.global=!0}setResolutionScale(e){return this._resolutionScale=e,this}getResolutionScale(){return this._resolutionScale}setResolution(e){return T(`PassNode: .setResolution() is deprecated. Use .setResolutionScale() instead.`),this.setResolutionScale(e)}getResolution(){return T(`PassNode: .getResolution() is deprecated. Use .getResolutionScale() instead.`),this.getResolutionScale()}setLayers(e){return this._layers=e,this}getLayers(){return this._layers}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getTexture(e){let t=this._textures[e];return t===void 0&&(t=this.renderTarget.texture.clone(),t.name=e,this._textures[e]=t,this.renderTarget.textures.push(t)),t}getPreviousTexture(e){let t=this._previousTextures[e];return t===void 0&&(t=this.getTexture(e).clone(),this._previousTextures[e]=t),t}toggleTexture(e){let t=this._previousTextures[e];if(t!==void 0){let n=this._textures[e],r=this.renderTarget.textures.indexOf(n);this.renderTarget.textures[r]=t,this._textures[e]=t,this._previousTextures[e]=n,this._textureNodes[e].updateTexture(),this._previousTextureNodes[e].updateTexture()}}getTextureNode(e=`output`){let t=this._textureNodes[e];return t===void 0&&(t=new Uy(this,e),t.updateTexture(),this._textureNodes[e]=t),t}getPreviousTextureNode(e=`output`){let t=this._previousTextureNodes[e];return t===void 0&&(this._textureNodes[e]===void 0&&this.getTextureNode(e),t=new Uy(this,e,!0),t.updateTexture(),this._previousTextureNodes[e]=t),t}getViewZNode(e=`depth`){let t=this._viewZNodes[e];if(t===void 0){let n=this._cameraNear,r=this._cameraFar;this._viewZNodes[e]=t=yh(this.getTextureNode(e),n,r)}return t}getLinearDepthNode(e=`depth`){let t=this._linearDepthNodes[e];if(t===void 0){let n=this._cameraNear,r=this._cameraFar,i=this.getViewZNode(e);this._linearDepthNodes[e]=t=mh(i,n,r)}return t}compileAsync(e){var t=this;return g(function*(){let n=e.getRenderTarget(),r=e.getMRT();e.setRenderTarget(t.renderTarget),e.setMRT(t._mrt),yield e.compileAsync(t.scene,t.camera),e.setRenderTarget(n),e.setMRT(r)})()}setup({renderer:t}){return this.renderTarget.samples=this.options.samples===void 0?t.samples:this.options.samples,this.renderTarget.texture.type=t.getOutputBufferType(),this.scope===e.COLOR?this.getTextureNode():this.getLinearDepthNode()}updateBefore(e){let{renderer:t}=e,{scene:n}=this,r,i,a=t.getOutputRenderTarget();a&&a.isXRRenderTarget===!0?(i=1,r=t.xr.getCamera(),t.xr.updateCamera(r),Vy.set(a.width,a.height)):(r=this.camera,i=t.getPixelRatio(),t.getSize(Vy)),this._pixelRatio=i,this.setSize(Vy.width,Vy.height);let o=t.getRenderTarget(),s=t.getMRT(),c=t.autoClear,l=t.transparent,u=t.opaque,d=r.layers.mask,f=t.contextNode,p=n.overrideMaterial;this._cameraNear.value=r.near,this._cameraFar.value=r.far,this._layers!==null&&(r.layers.mask=this._layers.mask);for(let e in this._previousTextures)this.toggleTexture(e);this.overrideMaterial!==null&&(n.overrideMaterial=this.overrideMaterial),t.setRenderTarget(this.renderTarget),t.setMRT(this._mrt),t.autoClear=!0,t.transparent=this.transparent,t.opaque=this.opaque,this.contextNode!==null&&((this._contextNodeCache===null||this._contextNodeCache.version!==this.version)&&(this._contextNodeCache={version:this.version,context:Wl(m(m({},t.contextNode.getFlowContextData()),this.contextNode.getFlowContextData()))}),t.contextNode=this._contextNodeCache.context);let h=n.name;n.name=this.name?this.name:n.name,t.render(n,r),n.name=h,n.overrideMaterial=p,t.setRenderTarget(o),t.setMRT(s),t.autoClear=c,t.transparent=l,t.opaque=u,t.contextNode=f,r.layers.mask=d}setSize(e,t){this._width=e,this._height=t;let n=Math.floor(this._width*this._pixelRatio*this._resolutionScale),r=Math.floor(this._height*this._pixelRatio*this._resolutionScale);this.renderTarget.setSize(n,r),this._scissor!==null&&this.renderTarget.scissor.copy(this._scissor),this._viewport!==null&&this.renderTarget.viewport.copy(this._viewport)}setScissor(e,t,n,r){e===null?this._scissor=null:(this._scissor===null&&(this._scissor=new Tt),e.isVector4?this._scissor.copy(e):this._scissor.set(e,t,n,r),this._scissor.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setViewport(e,t,n,r){e===null?this._viewport=null:(this._viewport===null&&(this._viewport=new Tt),e.isVector4?this._viewport.copy(e):this._viewport.set(e,t,n,r),this._viewport.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setPixelRatio(e){this._pixelRatio=e,this.setSize(this._width,this._height)}dispose(){this.renderTarget.dispose()}};Wy.COLOR=`color`,Wy.DEPTH=`depth`;var Gy=(e,t,n)=>new Wy(Wy.COLOR,e,t,n),Ky=(e,t)=>new Hy(e,t),qy=(e,t,n)=>new Wy(Wy.DEPTH,e,t,n),Jy=class extends Wy{static get type(){return`ToonOutlinePassNode`}constructor(e,t,n,r,i){super(Wy.COLOR,e,t),this.colorNode=n,this.thicknessNode=r,this.alphaNode=i,this._materialCache=new WeakMap,this.name=`Outline Pass`}updateBefore(e){let{renderer:t}=e,n=t.getRenderObjectFunction();t.setRenderObjectFunction((e,n,r,i,a,o,s,c)=>{if((a.isMeshToonMaterial||a.isMeshToonNodeMaterial)&&a.wireframe===!1){let l=this._getOutlineMaterial(a);t.renderObject(e,n,r,i,l,o,s,c)}t.renderObject(e,n,r,i,a,o,s,c)}),super.updateBefore(e),t.setRenderObjectFunction(n)}_createMaterial(){let e=new Uh;e.isMeshToonOutlineMaterial=!0,e.name=`Toon_Outline`,e.side=1;let t=jf.negate(),n=Wd.mul(hf),r=I(1),i=n.mul(V(xf,1)),a=n.mul(V(xf.add(t),1)),o=qc(i.sub(a));return e.vertexNode=i.add(o.mul(this.thicknessNode).mul(i.w).mul(r)),e.colorNode=V(this.colorNode,this.alphaNode),e}_getOutlineMaterial(e){let t=this._materialCache.get(e);return t===void 0&&(t=this._createMaterial(),this._materialCache.set(e,t)),t}},Yy=(e,t,n=new cn(0,0,0),r=.003,i=1)=>new Jy(e,t,A(n),A(r),A(i)),Xy=P(([e,t])=>e.mul(t).clamp()).setLayout({name:`linearToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),Zy=P(([e,t])=>(e=e.mul(t),e.div(e.add(1)).clamp())).setLayout({name:`reinhardToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),Qy=P(([e,t])=>{e=e.mul(t),e=e.sub(.004).max(0);let n=e.mul(e.mul(6.2).add(.5)),r=e.mul(e.mul(6.2).add(1.7)).add(.06);return n.div(r).pow(2.2)}).setLayout({name:`cineonToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),$y=P(([e])=>{let t=e.mul(e.add(.0245786)).sub(90537e-9),n=e.mul(e.add(.432951).mul(.983729)).add(.238081);return t.div(n)}),eb=P(([e,t])=>{let n=is(.59719,.35458,.04823,.076,.90834,.01566,.0284,.13383,.83777),r=is(1.60475,-.53108,-.07367,-.10208,1.10813,-.00605,-.00327,-.07276,1.07602);return e=e.mul(t).div(.6),e=n.mul(e),e=$y(e),e=r.mul(e),e.clamp()}).setLayout({name:`acesFilmicToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),tb=is(B(1.6605,-.1246,-.0182),B(-.5876,1.1329,-.1006),B(-.0728,-.0083,1.1187)),nb=is(B(.6274,.0691,.0164),B(.3293,.9195,.088),B(.0433,.0113,.8956)),rb=P(([e])=>{let t=B(e).toVar(),n=B(t.mul(t)).toVar(),r=B(n.mul(n)).toVar();return I(15.5).mul(r.mul(n)).sub(W(40.14,r.mul(t))).add(W(31.96,r).sub(W(6.868,n.mul(t))).add(W(.4298,n).add(W(.1191,t).sub(.00232))))}),ib=P(([e,t])=>{let n=B(e).toVar(),r=is(B(.856627153315983,.137318972929847,.11189821299995),B(.0951212405381588,.761241990602591,.0767994186031903),B(.0482516061458583,.101439036467562,.811302368396859)),i=is(B(1.1271005818144368,-.1413297634984383,-.14132976349843826),B(-.11060664309660323,1.157823702216272,-.11060664309660294),B(-.016493938717834573,-.016493938717834257,1.2519364065950405)),a=I(-12.47393),o=I(4.026069);return n.mulAssign(t),n.assign(nb.mul(n)),n.assign(r.mul(n)),n.assign(gl(n,1e-10)),n.assign(Hc(n)),n.assign(n.sub(a).div(o.sub(a))),n.assign(jl(n,0,1)),n.assign(rb(n)),n.assign(i.mul(n)),n.assign(Cl(gl(B(0),n),B(2.2))),n.assign(tb.mul(n)),n.assign(jl(n,0,1)),n}).setLayout({name:`agxToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),ab=P(([e,t])=>{let n=I(.76),r=I(.15);e=e.mul(t);let i=hl(e.r,hl(e.g,e.b)),a=Hl(i.lessThan(.08),i.sub(W(6.25,i.mul(i))),.04);e.subAssign(a);let o=gl(e.r,gl(e.g,e.b));F(o.lessThan(n),()=>e);let s=ac(1,n),c=ac(1,s.mul(s).div(o.add(s.sub(n))));e.mulAssign(c.div(o));let l=ac(1,oc(1,r.mul(o.sub(c)).add(1)));return Al(e,B(c),l)}).setLayout({name:`neutralToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),ob=class extends O{static get type(){return`CodeNode`}constructor(e=``,t=[],n=``){super(`code`),this.isCodeNode=!0,this.global=!0,this.code=e,this.includes=t,this.language=n}setIncludes(e){return this.includes=e,this}getIncludes(){return this.includes}generate(e){let t=this.getIncludes(e);for(let n of t)n.build(e);let n=e.getCodeFromNode(this,this.getNodeType(e));return n.code=this.code,n.code}serialize(e){super.serialize(e),e.code=this.code,e.language=this.language}deserialize(e){super.deserialize(e),this.code=e.code,this.language=e.language}},sb=j(ob).setParameterLength(1,3),cb=(e,t)=>sb(e,t,`js`),lb=(e,t)=>sb(e,t,`wgsl`),ub=(e,t)=>sb(e,t,`glsl`),db=class extends ob{static get type(){return`FunctionNode`}constructor(e=``,t=[],n=``){super(e,t,n)}getNodeType(e){return this.getNodeFunction(e).type}getMemberType(e,t){let n=this.getNodeType(e);return e.getStructTypeNode(n).getMemberType(e,t)}getInputs(e){return this.getNodeFunction(e).inputs}getNodeFunction(e){let t=e.getDataFromNode(this),n=t.nodeFunction;return n===void 0&&(n=e.parser.parseFunction(this.code),t.nodeFunction=n),n}generate(e,t){super.generate(e);let n=this.getNodeFunction(e),r=n.name,i=n.type,a=e.getCodeFromNode(this,i);r!==``&&(a.name=r);let o=e.getPropertyName(a);return a.code=this.getNodeFunction(e).getCode(o)+`
299
+ `,t===`property`?o:e.format(`${o}()`,i,t)}},fb=(e,t=[],n=``)=>{for(let e=0;e<t.length;e++){let n=t[e];typeof n==`function`&&(t[e]=n.functionNode)}let r=new db(e,t,n),i=(...e)=>r.call(...e);return i.functionNode=r,i},pb=(e,t)=>fb(e,t,`glsl`),mb=(e,t)=>fb(e,t,`wgsl`);function hb(e){let t,n=e.context.getViewZ;return n!==void 0&&(t=n(this)),(t||Tf.z).negate()}var gb=P(([e,t],n)=>Pl(e,t,hb(n))),_b=P(([e],t)=>{let n=hb(t);return e.mul(e,n,n).negate().exp().oneMinus()}),vb=P(([e,t],n)=>{let r=hb(n),i=t.sub(Cf.y).max(0).toConst().mul(r).toConst();return e.mul(e,i,i).negate().exp().oneMinus()}),yb=P(([e,t])=>V(t.toFloat().mix(Fs.rgb,e.toVec3()),Fs.a)),bb=null,xb=null,Sb=j(class extends O{static get type(){return`RangeNode`}constructor(e=I(),t=I()){super(),this.minNode=e,this.maxNode=t}getVectorLength(e){let t=this.getConstNode(this.minNode),n=this.getConstNode(this.maxNode),r=e.getTypeLength(ka(t.value)),i=e.getTypeLength(ka(n.value));return r>i?r:i}getNodeType(e){return e.object.count>1?e.getTypeFromLength(this.getVectorLength(e)):`float`}getConstNode(e){let t=null;if(e.traverse(e=>{e.isConstNode===!0&&(t=e)}),t===null)throw new $u(`THREE.TSL: No "ConstNode" found in node graph.`,this.stackTrace);return t}setup(e){let t=e.object,n=null;if(t.count>1){let r=this.getConstNode(this.minNode),i=this.getConstNode(this.maxNode),a=r.value,o=i.value,s=e.getTypeLength(ka(a)),c=e.getTypeLength(ka(o));bb=bb||new Tt,xb=xb||new Tt,bb.setScalar(0),xb.setScalar(0),s===1?bb.setScalar(a):a.isColor?bb.set(a.r,a.g,a.b,1):bb.set(a.x,a.y,a.z||0,a.w||0),c===1?xb.setScalar(o):o.isColor?xb.set(o.r,o.g,o.b,1):xb.set(o.x,o.y,o.z||0,o.w||0);let l=4*t.count,u=new Float32Array(l);for(let e=0;e<l;e++){let t=e%4,n=bb.getComponent(t),r=xb.getComponent(t);u[e]=it.lerp(n,r,Math.random())}let d=this.getNodeType(e);if(t.count*4*4<=e.getUniformBufferLimit())n=ud(u,`vec4`,t.count).element(Nm).convert(d);else{let t=new Pr(u,4);e.geometry.setAttribute(`__range`+this.id,t),n=Tu(t).convert(d)}}else n=I(0);return n}}).setParameterLength(2),Cb=class extends O{static get type(){return`ComputeBuiltinNode`}constructor(e,t){super(t),this._builtinName=e}getHash(e){return this.getBuiltinName(e)}getNodeType(){return this.nodeType}setBuiltinName(e){return this._builtinName=e,this}getBuiltinName(){return this._builtinName}hasBuiltin(e){return e.hasBuiltin(this._builtinName)}generate(e,t){let n=this.getBuiltinName(e),r=this.getNodeType(e);return e.shaderStage===`compute`?e.format(n,r,t):(T(`ComputeBuiltinNode: Compute built-in value ${n} can not be accessed in the ${e.shaderStage} stage`),e.generateConst(r))}serialize(e){super.serialize(e),e.global=this.global,e._builtinName=this._builtinName}deserialize(e){super.deserialize(e),this.global=e.global,this._builtinName=e._builtinName}},wb=(e,t)=>new Cb(e,t),Tb=wb(`numWorkgroups`,`uvec3`),Eb=wb(`workgroupId`,`uvec3`),Db=wb(`globalId`,`uvec3`),Ob=wb(`localId`,`uvec3`),kb=wb(`subgroupSize`,`uint`),Ab=j(class extends O{constructor(e){super(),this.scope=e}generate(e){let{scope:t}=this,{renderer:n}=e;n.backend.isWebGLBackend===!0?e.addFlowCode(`\t// ${t}Barrier \n`):e.addLineFlowCode(`${t}Barrier()`,this)}}),jb=()=>Ab(`workgroup`).toStack(),Mb=()=>Ab(`storage`).toStack(),Nb=()=>Ab(`texture`).toStack(),Pb=class extends Wa{constructor(e,t){super(e,t),this.isWorkgroupInfoElementNode=!0}generate(e,t){let n,r=e.context.assign;if(n=super.generate(e),r!==!0){let r=this.getNodeType(e);n=e.format(n,r,t)}return n}},Fb=class extends O{constructor(e,t,n=0){super(t),this.bufferType=t,this.bufferCount=n,this.isWorkgroupInfoNode=!0,this.elementType=t,this.scope=e,this.name=``}setName(e){return this.name=e,this}label(e){return T(`TSL: "label()" has been deprecated. Use "setName()" instead.`,new _a),this.setName(e)}setScope(e){return this.scope=e,this}getElementType(){return this.elementType}getInputType(){return`${this.scope}Array`}element(e){return new Pb(this,e)}generate(e){let t=this.name===``?`${this.scope}Array_${this.id}`:this.name;return e.getScopedArray(t,this.scope.toLowerCase(),this.bufferType,this.bufferCount)}},Ib=(e,t)=>new Fb(`Workgroup`,e,t),Lb=class extends O{static get type(){return`AtomicFunctionNode`}constructor(e,t,n){super(`uint`),this.method=e,this.pointerNode=t,this.valueNode=n,this.parents=!0}getInputType(e){return this.pointerNode.getNodeType(e)}getNodeType(e){return this.getInputType(e)}generate(e){let t=e.getNodeProperties(this),n=t.parents,r=this.method,i=this.getNodeType(e),a=this.getInputType(e),o=this.pointerNode,s=this.valueNode,c=[];c.push(`&${o.build(e,a)}`),s!==null&&c.push(s.build(e,a));let l=`${e.getMethod(r,i)}( ${c.join(`, `)} )`;if(n&&n.length===1&&n[0].isStackNode===!0)e.addLineFlowCode(l,this);else return t.constNode===void 0&&(t.constNode=Lu(l,i).toConst()),t.constNode.build(e)}};Lb.ATOMIC_LOAD=`atomicLoad`,Lb.ATOMIC_STORE=`atomicStore`,Lb.ATOMIC_ADD=`atomicAdd`,Lb.ATOMIC_SUB=`atomicSub`,Lb.ATOMIC_MAX=`atomicMax`,Lb.ATOMIC_MIN=`atomicMin`,Lb.ATOMIC_AND=`atomicAnd`,Lb.ATOMIC_OR=`atomicOr`,Lb.ATOMIC_XOR=`atomicXor`;var Rb=j(Lb),zb=(e,t,n)=>Rb(e,t,n).toStack(),Bb=e=>zb(Lb.ATOMIC_LOAD,e,null),Vb=(e,t)=>zb(Lb.ATOMIC_STORE,e,t),Hb=(e,t)=>zb(Lb.ATOMIC_ADD,e,t),Ub=(e,t)=>zb(Lb.ATOMIC_SUB,e,t),Wb=(e,t)=>zb(Lb.ATOMIC_MAX,e,t),Gb=(e,t)=>zb(Lb.ATOMIC_MIN,e,t),Kb=(e,t)=>zb(Lb.ATOMIC_AND,e,t),qb=(e,t)=>zb(Lb.ATOMIC_OR,e,t),Jb=(e,t)=>zb(Lb.ATOMIC_XOR,e,t),q=class e extends Ka{static get type(){return`SubgroupFunctionNode`}constructor(e,t=null,n=null){super(),this.method=e,this.aNode=t,this.bNode=n}getInputType(e){let t=this.aNode?this.aNode.getNodeType(e):null,n=this.bNode?this.bNode.getNodeType(e):null;return(e.isMatrix(t)?0:e.getTypeLength(t))>(e.isMatrix(n)?0:e.getTypeLength(n))?t:n}getNodeType(t){let n=this.method;return n===e.SUBGROUP_ELECT?`bool`:n===e.SUBGROUP_BALLOT?`uvec4`:this.getInputType(t)}generate(t,n){let r=this.method,i=this.getNodeType(t),a=this.getInputType(t),o=this.aNode,s=this.bNode,c=[];if(r===e.SUBGROUP_BROADCAST||r===e.SUBGROUP_SHUFFLE||r===e.QUAD_BROADCAST){let e=s.getNodeType(t);c.push(o.build(t,i),s.build(t,e===`float`?`int`:i))}else r===e.SUBGROUP_SHUFFLE_XOR||r===e.SUBGROUP_SHUFFLE_DOWN||r===e.SUBGROUP_SHUFFLE_UP?c.push(o.build(t,i),s.build(t,`uint`)):(o!==null&&c.push(o.build(t,a)),s!==null&&c.push(s.build(t,a)));let l=c.length===0?`()`:`( ${c.join(`, `)} )`;return t.format(`${t.getMethod(r,i)}${l}`,i,n)}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}};q.SUBGROUP_ELECT=`subgroupElect`,q.SUBGROUP_BALLOT=`subgroupBallot`,q.SUBGROUP_ADD=`subgroupAdd`,q.SUBGROUP_INCLUSIVE_ADD=`subgroupInclusiveAdd`,q.SUBGROUP_EXCLUSIVE_AND=`subgroupExclusiveAdd`,q.SUBGROUP_MUL=`subgroupMul`,q.SUBGROUP_INCLUSIVE_MUL=`subgroupInclusiveMul`,q.SUBGROUP_EXCLUSIVE_MUL=`subgroupExclusiveMul`,q.SUBGROUP_AND=`subgroupAnd`,q.SUBGROUP_OR=`subgroupOr`,q.SUBGROUP_XOR=`subgroupXor`,q.SUBGROUP_MIN=`subgroupMin`,q.SUBGROUP_MAX=`subgroupMax`,q.SUBGROUP_ALL=`subgroupAll`,q.SUBGROUP_ANY=`subgroupAny`,q.SUBGROUP_BROADCAST_FIRST=`subgroupBroadcastFirst`,q.QUAD_SWAP_X=`quadSwapX`,q.QUAD_SWAP_Y=`quadSwapY`,q.QUAD_SWAP_DIAGONAL=`quadSwapDiagonal`,q.SUBGROUP_BROADCAST=`subgroupBroadcast`,q.SUBGROUP_SHUFFLE=`subgroupShuffle`,q.SUBGROUP_SHUFFLE_XOR=`subgroupShuffleXor`,q.SUBGROUP_SHUFFLE_UP=`subgroupShuffleUp`,q.SUBGROUP_SHUFFLE_DOWN=`subgroupShuffleDown`,q.QUAD_BROADCAST=`quadBroadcast`;var Yb=N(q,q.SUBGROUP_ELECT).setParameterLength(0),Xb=N(q,q.SUBGROUP_BALLOT).setParameterLength(1),Zb=N(q,q.SUBGROUP_ADD).setParameterLength(1),Qb=N(q,q.SUBGROUP_INCLUSIVE_ADD).setParameterLength(1),$b=N(q,q.SUBGROUP_EXCLUSIVE_AND).setParameterLength(1),ex=N(q,q.SUBGROUP_MUL).setParameterLength(1),tx=N(q,q.SUBGROUP_INCLUSIVE_MUL).setParameterLength(1),nx=N(q,q.SUBGROUP_EXCLUSIVE_MUL).setParameterLength(1),rx=N(q,q.SUBGROUP_AND).setParameterLength(1),ix=N(q,q.SUBGROUP_OR).setParameterLength(1),ax=N(q,q.SUBGROUP_XOR).setParameterLength(1),ox=N(q,q.SUBGROUP_MIN).setParameterLength(1),sx=N(q,q.SUBGROUP_MAX).setParameterLength(1),cx=N(q,q.SUBGROUP_ALL).setParameterLength(0),lx=N(q,q.SUBGROUP_ANY).setParameterLength(0),ux=N(q,q.SUBGROUP_BROADCAST_FIRST).setParameterLength(2),dx=N(q,q.QUAD_SWAP_X).setParameterLength(1),fx=N(q,q.QUAD_SWAP_Y).setParameterLength(1),px=N(q,q.QUAD_SWAP_DIAGONAL).setParameterLength(1),mx=N(q,q.SUBGROUP_BROADCAST).setParameterLength(2),hx=N(q,q.SUBGROUP_SHUFFLE).setParameterLength(2),gx=N(q,q.SUBGROUP_SHUFFLE_XOR).setParameterLength(2),_x=N(q,q.SUBGROUP_SHUFFLE_UP).setParameterLength(2),vx=N(q,q.SUBGROUP_SHUFFLE_DOWN).setParameterLength(2),yx=N(q,q.QUAD_BROADCAST).setParameterLength(1),bx;function xx(e){bx=bx||new WeakMap;let t=bx.get(e);return t===void 0&&bx.set(e,t={}),t}function Sx(e){let t=xx(e);return t.shadowMatrix||(t.shadowMatrix=U(`mat4`).setGroup(H).onRenderUpdate(t=>((e.castShadow!==!0||t.renderer.shadowMap.enabled===!1)&&(e.shadow.camera.coordinateSystem!==t.camera.coordinateSystem&&(e.shadow.camera.coordinateSystem=t.camera.coordinateSystem,e.shadow.camera.updateProjectionMatrix()),e.shadow.updateMatrices(e)),e.shadow.matrix)))}function Cx(e,t=Cf){let n=Sx(e).mul(t);return n.xyz.div(n.w)}function wx(e){let t=xx(e);return t.position||(t.position=U(new D).setGroup(H).onRenderUpdate((t,n)=>n.value.setFromMatrixPosition(e.matrixWorld)))}function Tx(e){let t=xx(e);return t.targetPosition||(t.targetPosition=U(new D).setGroup(H).onRenderUpdate((t,n)=>n.value.setFromMatrixPosition(e.target.matrixWorld)))}function Ex(e){let t=xx(e);return t.viewPosition||(t.viewPosition=U(new D).setGroup(H).onRenderUpdate(({camera:t},n)=>{n.value=n.value||new D,n.value.setFromMatrixPosition(e.matrixWorld),n.value.applyMatrix4(t.matrixWorldInverse)}))}var Dx=e=>Kd.transformDirection(wx(e).sub(Tx(e))),Ox=e=>e.sort((e,t)=>e.id-t.id),kx=(e,t)=>{for(let n of t)if(n.isAnalyticLightNode&&n.light.id===e)return n;return null},Ax=new WeakMap,jx=[],Mx=class extends O{static get type(){return`LightsNode`}constructor(){super(`vec3`),this.totalDiffuseNode=ps(`vec3`,`totalDiffuse`),this.totalSpecularNode=ps(`vec3`,`totalSpecular`),this.outgoingLightNode=ps(`vec3`,`outgoingLight`),this._lights=[],this._lightNodes=null,this._lightNodesHash=null,this.global=!0}customCacheKey(){let e=this._lights;for(let t=0;t<e.length;t++){let n=e[t];if(jx.push(n.id),jx.push(+!!n.castShadow),n.isSpotLight===!0){let e=n.map===null?-1:n.map.id,t=n.colorNode?n.colorNode.getCacheKey():-1;jx.push(e,t)}}let t=ba(jx);return jx.length=0,t}getHash(e){if(this._lightNodesHash===null){this._lightNodes===null&&this.setupLightsNode(e);let t=[];for(let e of this._lightNodes)t.push(e.getHash());this._lightNodesHash=`lights-`+t.join(`,`)}return this._lightNodesHash}analyze(e){let t=e.getNodeProperties(this);for(let n of t.nodes)n.build(e);t.outputNode.build(e)}setupLightsNode(e){let t=[],n=this._lightNodes,r=Ox(this._lights),i=e.renderer.library;for(let e of r)if(e.isNode)t.push(A(e));else{let r=null;if(n!==null&&(r=kx(e.id,n)),r===null){let n=i.getLightNodeClass(e.constructor);if(n===null){T(`LightsNode.setupNodeLights: Light node not found for ${e.constructor.name}`);continue}let r=null;Ax.has(e)?r=Ax.get(e):(r=new n(e),Ax.set(e,r)),t.push(r)}}this._lightNodes=t}setupDirectLight(e,t,n){let{lightingModel:r,reflectedLight:i}=e.context;r.direct(m(m({},n),{},{lightNode:t,reflectedLight:i}),e)}setupDirectRectAreaLight(e,t,n){let{lightingModel:r,reflectedLight:i}=e.context;r.directRectArea(m(m({},n),{},{lightNode:t,reflectedLight:i}),e)}setupLights(e,t){for(let n of t)n.build(e)}getLightNodes(e){return this._lightNodes===null&&this.setupLightsNode(e),this._lightNodes}setup(e){let t=e.lightsNode;e.lightsNode=this;let n=this.outgoingLightNode,r=e.context,i=r.lightingModel,a=e.getNodeProperties(this);if(i){let{totalDiffuseNode:t,totalSpecularNode:o}=this;r.outgoingLight=n,a.nodes=e.addStack().nodes,i.start(e);let{backdrop:s,backdropAlpha:c}=r,{directDiffuse:l,directSpecular:u,indirectDiffuse:d,indirectSpecular:f}=r.reflectedLight,p=l.add(d);s!==null&&(p=B(c===null?s:c.mix(p,s))),t.assign(p),o.assign(u.add(f)),n.assign(t.add(o)),i.finish(e),n=n.bypass(e.removeStack())}else a.nodes=[];return e.lightsNode=t,n}setLights(e){return this._lights=e,this._lightNodes=null,this._lightNodesHash=null,this}getLights(){return this._lights}get hasLights(){return this._lights.length>0}},Nx=(e=[])=>new Mx().setLights(e),Px=class extends O{static get type(){return`ShadowBaseNode`}constructor(e){super(),this.light=e,this.updateBeforeType=Fa.RENDER,this.isShadowBaseNode=!0}setupShadowPosition({context:e,material:t}){Fx.assign(t.receivedShadowPositionNode||e.shadowPositionWorld||Cf)}},Fx=ps(`vec3`,`shadowPositionWorld`);function Ix(e,t={}){return t.toneMapping=e.toneMapping,t.toneMappingExposure=e.toneMappingExposure,t.outputColorSpace=e.outputColorSpace,t.renderTarget=e.getRenderTarget(),t.activeCubeFace=e.getActiveCubeFace(),t.activeMipmapLevel=e.getActiveMipmapLevel(),t.renderObjectFunction=e.getRenderObjectFunction(),t.pixelRatio=e.getPixelRatio(),t.mrt=e.getMRT(),t.clearColor=e.getClearColor(t.clearColor||new cn),t.clearAlpha=e.getClearAlpha(),t.autoClear=e.autoClear,t.scissorTest=e.getScissorTest(),t}function Lx(e,t){return t=Ix(e,t),e.setMRT(null),e.setRenderObjectFunction(null),e.setClearColor(0,1),e.autoClear=!0,t}function Rx(e,t){e.toneMapping=t.toneMapping,e.toneMappingExposure=t.toneMappingExposure,e.outputColorSpace=t.outputColorSpace,e.setRenderTarget(t.renderTarget,t.activeCubeFace,t.activeMipmapLevel),e.setRenderObjectFunction(t.renderObjectFunction),e.setPixelRatio(t.pixelRatio),e.setMRT(t.mrt),e.setClearColor(t.clearColor,t.clearAlpha),e.autoClear=t.autoClear,e.setScissorTest(t.scissorTest)}function zx(e,t={}){return t.background=e.background,t.backgroundNode=e.backgroundNode,t.overrideMaterial=e.overrideMaterial,t}function Bx(e,t){return t=zx(e,t),e.background=null,e.backgroundNode=null,e.overrideMaterial=null,t}function Vx(e,t){e.background=t.background,e.backgroundNode=t.backgroundNode,e.overrideMaterial=t.overrideMaterial}function Hx(e,t,n){return n=Lx(e,n),n=Bx(t,n),n}function Ux(e,t,n){Rx(e,n),Vx(t,n)}var Wx=new WeakMap,Gx=P(({depthTexture:e,shadowCoord:t,depthLayer:n})=>{let r=rd(e,t.xy).setName(`t_basic`);return e.isArrayTexture&&(r=r.depth(n)),r.compare(t.z)}),Kx=P(({depthTexture:e,shadowCoord:t,shadow:n,depthLayer:r})=>{let i=(t,n)=>{let i=rd(e,t);return e.isArrayTexture&&(i=i.depth(r)),i.compare(n)},a=ip(`mapSize`,`vec2`,n).setGroup(H),o=ip(`radius`,`float`,n).setGroup(H),s=z(1).div(a),c=o.mul(s.x),l=$v(xd.xy).mul(6.28318530718);return ic(i(t.xy.add(ey(0,5,l).mul(c)),t.z),i(t.xy.add(ey(1,5,l).mul(c)),t.z),i(t.xy.add(ey(2,5,l).mul(c)),t.z),i(t.xy.add(ey(3,5,l).mul(c)),t.z),i(t.xy.add(ey(4,5,l).mul(c)),t.z)).mul(1/5)}),qx=P(({depthTexture:e,shadowCoord:t,shadow:n,depthLayer:r})=>{let i=(t,n)=>{let i=rd(e,t);return e.isArrayTexture&&(i=i.depth(r)),i.compare(n)},a=ip(`mapSize`,`vec2`,n).setGroup(H),o=z(1).div(a),s=o.x,c=o.y,l=t.xy,u=Jc(l.mul(a).add(.5));return l.subAssign(u.mul(o)),ic(i(l,t.z),i(l.add(z(s,0)),t.z),i(l.add(z(0,c)),t.z),i(l.add(o),t.z),Al(i(l.add(z(s.negate(),0)),t.z),i(l.add(z(s.mul(2),0)),t.z),u.x),Al(i(l.add(z(s.negate(),c)),t.z),i(l.add(z(s.mul(2),c)),t.z),u.x),Al(i(l.add(z(0,c.negate())),t.z),i(l.add(z(0,c.mul(2))),t.z),u.y),Al(i(l.add(z(s,c.negate())),t.z),i(l.add(z(s,c.mul(2))),t.z),u.y),Al(Al(i(l.add(z(s.negate(),c.negate())),t.z),i(l.add(z(s.mul(2),c.negate())),t.z),u.x),Al(i(l.add(z(s.negate(),c.mul(2))),t.z),i(l.add(z(s.mul(2),c.mul(2))),t.z),u.x),u.y)).mul(1/9)}),Jx=P(({depthTexture:e,shadowCoord:t,depthLayer:n},r)=>{let i=rd(e).sample(t.xy);e.isArrayTexture&&(i=i.depth(n)),i=i.rg;let a=i.x,o=gl(1e-7,i.y.mul(i.y)),s=r.renderer.reversedDepthBuffer?_l(a,t.z):_l(t.z,a),c=I(1).toVar();return F(s.notEqual(1),()=>{let e=t.z.sub(a),n=o.div(o.add(e.mul(e)));n=jl(ac(n,.3).div(.65)),c.assign(gl(s,n))}),c}),Yx=e=>{let t=Wx.get(e);return t===void 0&&(t=new Uh,t.colorNode=V(0,0,0,1),t.isShadowPassMaterial=!0,t.name=`ShadowMaterial`,t.blending=0,t.fog=!1,Wx.set(e,t)),t},Xx=e=>{let t=Wx.get(e);t!==void 0&&(t.dispose(),Wx.delete(e))},Zx=new x_,Qx=[],$x=(e,t,n,r)=>{Qx[0]=e,Qx[1]=t;let i=Zx.get(Qx);return(i===void 0||i.shadowType!==n||i.useVelocity!==r)&&(i=(i,a,o,s,c,l,...u)=>{(i.castShadow===!0||i.receiveShadow&&n===3)&&(r&&(ja(i).useVelocity=!0),i.onBeforeShadow(e,i,o,t.camera,s,a.overrideMaterial,l),e.renderObject(i,a,o,s,c,l,...u),i.onAfterShadow(e,i,o,t.camera,s,a.overrideMaterial,l))},i.shadowType=n,i.useVelocity=r,Zx.set(Qx,i)),Qx[0]=null,Qx[1]=null,i},eS=P(({samples:e,radius:t,size:n,shadowPass:r,depthLayer:i})=>{let a=I(0).toVar(`meanVertical`),o=I(0).toVar(`squareMeanVertical`),s=e.lessThanEqual(I(1)).select(I(0),I(2).div(e.sub(1))),c=e.lessThanEqual(I(1)).select(I(0),I(-1));return qm({start:L(0),end:L(e),type:`int`,condition:`<`},({i:e})=>{let l=c.add(I(e).mul(s)),u=r.sample(ic(xd.xy,z(0,l).mul(t)).div(n));r.value.isArrayTexture&&(u=u.depth(i)),u=u.x,a.addAssign(u),o.addAssign(u.mul(u))}),a.divAssign(e),o.divAssign(e),z(a,Uc(o.sub(a.mul(a)).max(0)))}),tS=P(({samples:e,radius:t,size:n,shadowPass:r,depthLayer:i})=>{let a=I(0).toVar(`meanHorizontal`),o=I(0).toVar(`squareMeanHorizontal`),s=e.lessThanEqual(I(1)).select(I(0),I(2).div(e.sub(1))),c=e.lessThanEqual(I(1)).select(I(0),I(-1));return qm({start:L(0),end:L(e),type:`int`,condition:`<`},({i:e})=>{let l=c.add(I(e).mul(s)),u=r.sample(ic(xd.xy,z(l,0).mul(t)).div(n));r.value.isArrayTexture&&(u=u.depth(i)),a.addAssign(u.x),o.addAssign(ic(u.y.mul(u.y),u.x.mul(u.x)))}),a.divAssign(e),o.divAssign(e),z(a,Uc(o.sub(a.mul(a)).max(0)))}),nS=[Gx,Kx,qx,Jx],rS,iS=new Gv,aS=class extends Px{static get type(){return`ShadowNode`}constructor(e,t=null){super(e),this.shadow=t||e.shadow,this.shadowMap=null,this.vsmShadowMapVertical=null,this.vsmShadowMapHorizontal=null,this.vsmMaterialVertical=null,this.vsmMaterialHorizontal=null,this._node=null,this._currentShadowType=null,this._cameraFrameId=new WeakMap,this.isShadowNode=!0,this.depthLayer=0}setupShadowFilter(e,{filterFn:t,depthTexture:n,shadowCoord:r,shadow:i,depthLayer:a}){let o=r.x.greaterThanEqual(0).and(r.x.lessThanEqual(1)).and(r.y.greaterThanEqual(0)).and(r.y.lessThanEqual(1)).and(r.z.lessThanEqual(1)),s=t({depthTexture:n,shadowCoord:r,shadow:i,depthLayer:a});return o.select(s,I(1))}setupShadowCoord(e,t){let{shadow:n}=this,{renderer:r}=e,i=n.biasNode||ip(`bias`,`float`,n).setGroup(H),a=t,o;if(n.camera.isOrthographicCamera||r.logarithmicDepthBuffer!==!0)a=a.xyz.div(a.w),o=a.z;else{let e=a.w;a=a.xy.div(e);let t=ip(`near`,`float`,n.camera).setGroup(H),r=ip(`far`,`float`,n.camera).setGroup(H);o=bh(e.negate(),t,r)}return a=B(a.x,a.y.oneMinus(),r.reversedDepthBuffer?o.sub(i):o.add(i)),a}getShadowFilterFn(e){return nS[e]}setupRenderTarget(e,t){let n=new ti(e.mapSize.width,e.mapSize.height);n.name=`ShadowDepthTexture`,n.compareFunction=t.renderer.reversedDepthBuffer?518:515;let r=t.createRenderTarget(e.mapSize.width,e.mapSize.height);return r.texture.name=`ShadowMap`,r.texture.type=e.mapType,r.depthTexture=n,{shadowMap:r,depthTexture:n}}setupShadow(e){let{renderer:t,camera:n}=e,{light:r,shadow:i}=this,{depthTexture:a,shadowMap:o}=this.setupRenderTarget(i,e),s=t.shadowMap.type,c=t.hasCompatibility(Se.TEXTURE_COMPARE);if((s===1||s===2)&&c?(a.minFilter=x,a.magFilter=x):(a.minFilter=b,a.magFilter=b),i.camera.coordinateSystem=n.coordinateSystem,i.camera.updateProjectionMatrix(),s===3&&i.isPointLightShadow!==!0){a.compareFunction=null,o.depth>1?(o._vsmShadowMapVertical||(o._vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:ae,type:w,depth:o.depth,depthBuffer:!1}),o._vsmShadowMapVertical.texture.name=`VSMVertical`),this.vsmShadowMapVertical=o._vsmShadowMapVertical,o._vsmShadowMapHorizontal||(o._vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:ae,type:w,depth:o.depth,depthBuffer:!1}),o._vsmShadowMapHorizontal.texture.name=`VSMHorizontal`),this.vsmShadowMapHorizontal=o._vsmShadowMapHorizontal):(this.vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:ae,type:w,depthBuffer:!1}),this.vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:ae,type:w,depthBuffer:!1}));let t=rd(a);a.isArrayTexture&&(t=t.depth(this.depthLayer));let n=rd(this.vsmShadowMapVertical.texture);a.isArrayTexture&&(n=n.depth(this.depthLayer));let r=ip(`blurSamples`,`float`,i).setGroup(H),s=ip(`radius`,`float`,i).setGroup(H),c=ip(`mapSize`,`vec2`,i).setGroup(H),l=this.vsmMaterialVertical||(this.vsmMaterialVertical=new Uh);l.fragmentNode=eS({samples:r,radius:s,size:c,shadowPass:t,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name=`VSMVertical`,l=this.vsmMaterialHorizontal||(this.vsmMaterialHorizontal=new Uh),l.fragmentNode=tS({samples:r,radius:s,size:c,shadowPass:n,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name=`VSMHorizontal`}let l=ip(`intensity`,`float`,i).setGroup(H),u=ip(`normalBias`,`float`,i).setGroup(H),d=Sx(r).mul(Fx.add(If.mul(u))),f=this.setupShadowCoord(e,d),p=i.filterNode||this.getShadowFilterFn(t.shadowMap.type)||null;if(p===null)throw Error(`THREE.WebGPURenderer: Shadow map type not supported yet.`);let m=s===3&&i.isPointLightShadow!==!0?this.vsmShadowMapHorizontal.texture:a,h=this.setupShadowFilter(e,{filterFn:p,shadowTexture:o.texture,depthTexture:m,shadowCoord:f,shadow:i,depthLayer:this.depthLayer}),g;t.shadowMap.transmitted===!0&&(o.texture.isCubeTexture?g=ep(o.texture,f.xyz):(g=rd(o.texture,f),a.isArrayTexture&&(g=g.depth(this.depthLayer))));let _;_=g?Al(1,h.rgb.mix(g,1),l.mul(g.a)).toVar():Al(1,h,l).toVar(),this.shadowMap=o,this.shadow.map=o;let v=`${this.light.type} Shadow [ ${this.light.name||`ID: `+this.light.id} ]`;return g&&_.toInspector(`${v} / Color`,()=>this.shadowMap.texture.isCubeTexture?ep(this.shadowMap.texture):rd(this.shadowMap.texture)),_.toInspector(`${v} / Depth`,()=>this.shadowMap.texture.isCubeTexture?ep(this.shadowMap.texture).r.oneMinus():ad(this.shadowMap.depthTexture,Xu().mul(Zu(rd(this.shadowMap.depthTexture)))).r.oneMinus())}setup(e){if(e.renderer.shadowMap.enabled!==!1)return P(()=>{let t=e.renderer.shadowMap.type;this._currentShadowType!==t&&(this._reset(),this._node=null);let n=this._node;return this.setupShadowPosition(e),n===null&&(this._node=n=this.setupShadow(e),this._currentShadowType=t),e.material.receivedShadowNode&&(n=e.material.receivedShadowNode(n)),n})()}renderShadow(e){let{shadow:t,shadowMap:n,light:r}=this,{renderer:i,scene:a}=e;t.updateMatrices(r),n.setSize(t.mapSize.width,t.mapSize.height,n.depth);let o=a.name;a.name=`Shadow Map [ ${r.name||`ID: `+r.id} ]`,i.render(a,t.camera),a.name=o}updateShadow(e){let{shadowMap:t,light:n,shadow:r}=this,{renderer:i,scene:a,camera:o}=e,s=i.shadowMap.type,c=t.depthTexture.version;this._depthVersionCached=c;let l=r.camera.layers.mask;r.camera.layers.mask&4294967294||(r.camera.layers.mask=o.layers.mask);let u=i.getRenderObjectFunction(),d=i.getMRT(),f=d?d.has(`velocity`):!1;rS=Hx(i,a,rS),a.overrideMaterial=Yx(n),i.setRenderObjectFunction($x(i,r,s,f)),i.setClearColor(0,0),i.setRenderTarget(t),this.renderShadow(e),i.setRenderObjectFunction(u),s===3&&r.isPointLightShadow!==!0&&this.vsmPass(i),r.camera.layers.mask=l,Ux(i,a,rS)}vsmPass(e){let{shadow:t}=this,n=this.shadowMap.depth;this.vsmShadowMapVertical.setSize(t.mapSize.width,t.mapSize.height,n),this.vsmShadowMapHorizontal.setSize(t.mapSize.width,t.mapSize.height,n),e.setRenderTarget(this.vsmShadowMapVertical),iS.material=this.vsmMaterialVertical,iS.render(e),e.setRenderTarget(this.vsmShadowMapHorizontal),iS.material=this.vsmMaterialHorizontal,iS.render(e)}dispose(){this._reset(),super.dispose()}_reset(){this._currentShadowType=null,Xx(this.light),this.shadowMap&&(this.shadowMap.dispose(),this.shadowMap=null),this.vsmShadowMapVertical!==null&&(this.vsmShadowMapVertical.dispose(),this.vsmShadowMapVertical=null,this.vsmMaterialVertical.dispose(),this.vsmMaterialVertical=null),this.vsmShadowMapHorizontal!==null&&(this.vsmShadowMapHorizontal.dispose(),this.vsmShadowMapHorizontal=null,this.vsmMaterialHorizontal.dispose(),this.vsmMaterialHorizontal=null)}updateBefore(e){let{shadow:t}=this,n=t.needsUpdate||t.autoUpdate;n&&(this._cameraFrameId[e.camera]===e.frameId&&(n=!1),this._cameraFrameId[e.camera]=e.frameId),n&&(this.updateShadow(e),this.shadowMap.depthTexture.version===this._depthVersionCached&&(t.needsUpdate=!1))}},oS=(e,t)=>new aS(e,t),sS=new cn,cS=new Ot,lS=new D,uS=new D,dS=[new D(1,0,0),new D(-1,0,0),new D(0,-1,0),new D(0,1,0),new D(0,0,1),new D(0,0,-1)],fS=[new D(0,-1,0),new D(0,-1,0),new D(0,0,-1),new D(0,0,1),new D(0,-1,0),new D(0,-1,0)],pS=[new D(1,0,0),new D(-1,0,0),new D(0,1,0),new D(0,-1,0),new D(0,0,1),new D(0,0,-1)],mS=[new D(0,-1,0),new D(0,-1,0),new D(0,0,1),new D(0,0,-1),new D(0,-1,0),new D(0,-1,0)],hS=P(({depthTexture:e,bd3D:t,dp:n})=>ep(e,t).compare(n)),gS=P(({depthTexture:e,bd3D:t,dp:n,shadow:r})=>{let i=ip(`radius`,`float`,r).setGroup(H),a=ip(`mapSize`,`vec2`,r).setGroup(H),o=i.div(a.x),s=tl(t),c=qc(Sl(t,s.x.greaterThan(s.z).select(B(0,1,0),B(1,0,0)))),l=Sl(t,c),u=$v(xd.xy).mul(6.28318530718),d=ey(0,5,u),f=ey(1,5,u),p=ey(2,5,u),m=ey(3,5,u),h=ey(4,5,u);return ep(e,t.add(c.mul(d.x).add(l.mul(d.y)).mul(o))).compare(n).add(ep(e,t.add(c.mul(f.x).add(l.mul(f.y)).mul(o))).compare(n)).add(ep(e,t.add(c.mul(p.x).add(l.mul(p.y)).mul(o))).compare(n)).add(ep(e,t.add(c.mul(m.x).add(l.mul(m.y)).mul(o))).compare(n)).add(ep(e,t.add(c.mul(h.x).add(l.mul(h.y)).mul(o))).compare(n)).mul(1/5)}),_S=P(({filterFn:e,depthTexture:t,shadowCoord:n,shadow:r},i)=>{let a=n.xyz.toConst(),o=a.abs().toConst(),s=o.x.max(o.y).max(o.z),c=U(`float`).setGroup(H).onRenderUpdate(()=>r.camera.near),l=U(`float`).setGroup(H).onRenderUpdate(()=>r.camera.far),u=ip(`bias`,`float`,r).setGroup(H),d=I(1).toVar();return F(s.sub(l).lessThanEqual(0).and(s.sub(c).greaterThanEqual(0)),()=>{let n;i.renderer.reversedDepthBuffer?(n=vh(s.negate(),c,l),n.subAssign(u)):(n=_h(s.negate(),c,l),n.addAssign(u));let o=a.normalize();d.assign(e({depthTexture:t,bd3D:o,dp:n,shadow:r}))}),d}),vS=class extends aS{static get type(){return`PointShadowNode`}constructor(e,t=null){super(e,t)}getShadowFilterFn(e){return e===0?hS:gS}setupShadowCoord(e,t){return t}setupShadowFilter(e,{filterFn:t,depthTexture:n,shadowCoord:r,shadow:i}){return _S({filterFn:t,depthTexture:n,shadowCoord:r,shadow:i})}setupRenderTarget(e,t){let n=new ni(e.mapSize.width);n.name=`PointShadowDepthTexture`,n.compareFunction=t.renderer.reversedDepthBuffer?518:515;let r=t.createCubeRenderTarget(e.mapSize.width);return r.texture.name=`PointShadowMap`,r.depthTexture=n,{shadowMap:r,depthTexture:n}}renderShadow(e){let{shadow:t,shadowMap:n,light:r}=this,{renderer:i,scene:a}=e,o=t.camera,s=t.matrix,c=i.coordinateSystem===xe,l=c?dS:pS,u=c?fS:mS;n.setSize(t.mapSize.width,t.mapSize.width);let d=i.autoClear,f=i.getClearColor(sS),p=i.getClearAlpha();i.autoClear=!1,i.setClearColor(t.clearColor,t.clearAlpha);for(let e=0;e<6;e++){i.setRenderTarget(n,e),i.clear();let c=r.distance||o.far;c!==o.far&&(o.far=c,o.updateProjectionMatrix()),lS.setFromMatrixPosition(r.matrixWorld),o.position.copy(lS),uS.copy(o.position),uS.add(l[e]),o.up.copy(u[e]),o.lookAt(uS),o.updateMatrixWorld(),s.makeTranslation(-lS.x,-lS.y,-lS.z),cS.multiplyMatrices(o.projectionMatrix,o.matrixWorldInverse),t._frustum.setFromProjectionMatrix(cS,o.coordinateSystem,o.reversedDepth);let d=a.name;a.name=`Point Light Shadow [ ${r.name||`ID: `+r.id} ] - Face ${e+1}`,i.render(a,o),a.name=d}i.autoClear=d,i.setClearColor(f,p)}},yS=(e,t)=>new vS(e,t),bS=P(({lightDistance:e,cutoffDistance:t,decayExponent:n})=>{let r=e.pow(n).max(.01).reciprocal();return t.greaterThan(0).select(r.mul(e.div(t).pow4().oneMinus().clamp().pow2()),r)}),xS=({color:e,lightVector:t,cutoffDistance:n,decayExponent:r})=>{let i=t.normalize(),a=bS({lightDistance:t.length(),cutoffDistance:n,decayExponent:r});return{lightDirection:i,lightColor:e.mul(a)}},SS=P(([e=Xu()])=>{let t=e.mul(2),n=t.x.floor(),r=t.y.floor();return n.add(r).mod(2).sign()}),CS=P(([e=Xu()],{renderer:t,material:n})=>{let r=kl(e.mul(2).sub(1)),i;if(n.alphaToCoverage&&t.currentSamples>0){let e=I(r.fwidth()).toVar();i=Pl(e.oneMinus(),e.add(1),r).oneMinus()}else i=Hl(r.greaterThan(1),0,1);return i}),wS=P(([e,t,n])=>{let r=I(n).toVar(),i=I(t).toVar();return Hl(qo(e).toVar(),i,r)}).setLayout({name:`mx_select`,type:`float`,inputs:[{name:`b`,type:`bool`},{name:`t`,type:`float`},{name:`f`,type:`float`}]}),TS=P(([e,t])=>{let n=qo(t).toVar(),r=I(e).toVar();return Hl(n,r.negate(),r)}).setLayout({name:`mx_negate_if`,type:`float`,inputs:[{name:`val`,type:`float`},{name:`b`,type:`bool`}]}),ES=P(([e])=>L(Gc(I(e).toVar()))).setLayout({name:`mx_floor`,type:`int`,inputs:[{name:`x`,type:`float`}]}),DS=P(([e,t])=>{let n=I(e).toVar();return t.assign(ES(n)),n.sub(I(t))}),OS=uv([P(([e,t,n,r,i,a])=>{let o=I(a).toVar(),s=I(i).toVar(),c=I(r).toVar(),l=I(n).toVar(),u=I(t).toVar(),d=I(e).toVar(),f=I(ac(1,s)).toVar();return ac(1,o).mul(d.mul(f).add(u.mul(s))).add(o.mul(l.mul(f).add(c.mul(s))))}).setLayout({name:`mx_bilerp_0`,type:`float`,inputs:[{name:`v0`,type:`float`},{name:`v1`,type:`float`},{name:`v2`,type:`float`},{name:`v3`,type:`float`},{name:`s`,type:`float`},{name:`t`,type:`float`}]}),P(([e,t,n,r,i,a])=>{let o=I(a).toVar(),s=I(i).toVar(),c=B(r).toVar(),l=B(n).toVar(),u=B(t).toVar(),d=B(e).toVar(),f=I(ac(1,s)).toVar();return ac(1,o).mul(d.mul(f).add(u.mul(s))).add(o.mul(l.mul(f).add(c.mul(s))))}).setLayout({name:`mx_bilerp_1`,type:`vec3`,inputs:[{name:`v0`,type:`vec3`},{name:`v1`,type:`vec3`},{name:`v2`,type:`vec3`},{name:`v3`,type:`vec3`},{name:`s`,type:`float`},{name:`t`,type:`float`}]})]),kS=uv([P(([e,t,n,r,i,a,o,s,c,l,u])=>{let d=I(u).toVar(),f=I(l).toVar(),p=I(c).toVar(),m=I(s).toVar(),h=I(o).toVar(),g=I(a).toVar(),_=I(i).toVar(),v=I(r).toVar(),y=I(n).toVar(),b=I(t).toVar(),x=I(e).toVar(),S=I(ac(1,p)).toVar(),C=I(ac(1,f)).toVar();return I(ac(1,d)).toVar().mul(C.mul(x.mul(S).add(b.mul(p))).add(f.mul(y.mul(S).add(v.mul(p))))).add(d.mul(C.mul(_.mul(S).add(g.mul(p))).add(f.mul(h.mul(S).add(m.mul(p))))))}).setLayout({name:`mx_trilerp_0`,type:`float`,inputs:[{name:`v0`,type:`float`},{name:`v1`,type:`float`},{name:`v2`,type:`float`},{name:`v3`,type:`float`},{name:`v4`,type:`float`},{name:`v5`,type:`float`},{name:`v6`,type:`float`},{name:`v7`,type:`float`},{name:`s`,type:`float`},{name:`t`,type:`float`},{name:`r`,type:`float`}]}),P(([e,t,n,r,i,a,o,s,c,l,u])=>{let d=I(u).toVar(),f=I(l).toVar(),p=I(c).toVar(),m=B(s).toVar(),h=B(o).toVar(),g=B(a).toVar(),_=B(i).toVar(),v=B(r).toVar(),y=B(n).toVar(),b=B(t).toVar(),x=B(e).toVar(),S=I(ac(1,p)).toVar(),C=I(ac(1,f)).toVar();return I(ac(1,d)).toVar().mul(C.mul(x.mul(S).add(b.mul(p))).add(f.mul(y.mul(S).add(v.mul(p))))).add(d.mul(C.mul(_.mul(S).add(g.mul(p))).add(f.mul(h.mul(S).add(m.mul(p))))))}).setLayout({name:`mx_trilerp_1`,type:`vec3`,inputs:[{name:`v0`,type:`vec3`},{name:`v1`,type:`vec3`},{name:`v2`,type:`vec3`},{name:`v3`,type:`vec3`},{name:`v4`,type:`vec3`},{name:`v5`,type:`vec3`},{name:`v6`,type:`vec3`},{name:`v7`,type:`vec3`},{name:`s`,type:`float`},{name:`t`,type:`float`},{name:`r`,type:`float`}]})]),AS=uv([P(([e,t,n])=>{let r=I(n).toVar(),i=I(t).toVar(),a=R(R(e).toVar().bitAnd(R(7))).toVar(),o=I(wS(a.lessThan(R(4)),i,r)).toVar(),s=I(W(2,wS(a.lessThan(R(4)),r,i))).toVar();return TS(o,qo(a.bitAnd(R(1)))).add(TS(s,qo(a.bitAnd(R(2)))))}).setLayout({name:`mx_gradient_float_0`,type:`float`,inputs:[{name:`hash`,type:`uint`},{name:`x`,type:`float`},{name:`y`,type:`float`}]}),P(([e,t,n,r])=>{let i=I(r).toVar(),a=I(n).toVar(),o=I(t).toVar(),s=R(R(e).toVar().bitAnd(R(15))).toVar(),c=I(wS(s.lessThan(R(8)),o,a)).toVar(),l=I(wS(s.lessThan(R(4)),a,wS(s.equal(R(12)).or(s.equal(R(14))),o,i))).toVar();return TS(c,qo(s.bitAnd(R(1)))).add(TS(l,qo(s.bitAnd(R(2)))))}).setLayout({name:`mx_gradient_float_1`,type:`float`,inputs:[{name:`hash`,type:`uint`},{name:`x`,type:`float`},{name:`y`,type:`float`},{name:`z`,type:`float`}]})]),jS=uv([P(([e,t,n])=>{let r=I(n).toVar(),i=I(t).toVar(),a=Qo(e).toVar();return B(AS(a.x,i,r),AS(a.y,i,r),AS(a.z,i,r))}).setLayout({name:`mx_gradient_vec3_0`,type:`vec3`,inputs:[{name:`hash`,type:`uvec3`},{name:`x`,type:`float`},{name:`y`,type:`float`}]}),P(([e,t,n,r])=>{let i=I(r).toVar(),a=I(n).toVar(),o=I(t).toVar(),s=Qo(e).toVar();return B(AS(s.x,o,a,i),AS(s.y,o,a,i),AS(s.z,o,a,i))}).setLayout({name:`mx_gradient_vec3_1`,type:`vec3`,inputs:[{name:`hash`,type:`uvec3`},{name:`x`,type:`float`},{name:`y`,type:`float`},{name:`z`,type:`float`}]})]),MS=P(([e])=>W(.6616,I(e).toVar())).setLayout({name:`mx_gradient_scale2d_0`,type:`float`,inputs:[{name:`v`,type:`float`}]}),NS=P(([e])=>W(.982,I(e).toVar())).setLayout({name:`mx_gradient_scale3d_0`,type:`float`,inputs:[{name:`v`,type:`float`}]}),PS=uv([MS,P(([e])=>W(.6616,B(e).toVar())).setLayout({name:`mx_gradient_scale2d_1`,type:`vec3`,inputs:[{name:`v`,type:`vec3`}]})]),FS=uv([NS,P(([e])=>W(.982,B(e).toVar())).setLayout({name:`mx_gradient_scale3d_1`,type:`vec3`,inputs:[{name:`v`,type:`vec3`}]})]),IS=P(([e,t])=>{let n=L(t).toVar(),r=R(e).toVar();return r.shiftLeft(n).bitOr(r.shiftRight(L(32).sub(n)))}).setLayout({name:`mx_rotl32`,type:`uint`,inputs:[{name:`x`,type:`uint`},{name:`k`,type:`int`}]}),LS=P(([e,t,n])=>{e.subAssign(n),e.bitXorAssign(IS(n,L(4))),n.addAssign(t),t.subAssign(e),t.bitXorAssign(IS(e,L(6))),e.addAssign(n),n.subAssign(t),n.bitXorAssign(IS(t,L(8))),t.addAssign(e),e.subAssign(n),e.bitXorAssign(IS(n,L(16))),n.addAssign(t),t.subAssign(e),t.bitXorAssign(IS(e,L(19))),e.addAssign(n),n.subAssign(t),n.bitXorAssign(IS(t,L(4))),t.addAssign(e)}),RS=P(([e,t,n])=>{let r=R(n).toVar(),i=R(t).toVar(),a=R(e).toVar();return r.bitXorAssign(i),r.subAssign(IS(i,L(14))),a.bitXorAssign(r),a.subAssign(IS(r,L(11))),i.bitXorAssign(a),i.subAssign(IS(a,L(25))),r.bitXorAssign(i),r.subAssign(IS(i,L(16))),a.bitXorAssign(r),a.subAssign(IS(r,L(4))),i.bitXorAssign(a),i.subAssign(IS(a,L(14))),r.bitXorAssign(i),r.subAssign(IS(i,L(24))),r}).setLayout({name:`mx_bjfinal`,type:`uint`,inputs:[{name:`a`,type:`uint`},{name:`b`,type:`uint`},{name:`c`,type:`uint`}]}),zS=P(([e])=>I(R(e).toVar()).div(I(R(L(4294967295))))).setLayout({name:`mx_bits_to_01`,type:`float`,inputs:[{name:`bits`,type:`uint`}]}),BS=P(([e])=>{let t=I(e).toVar();return t.mul(t).mul(t).mul(t.mul(t.mul(6).sub(15)).add(10))}).setLayout({name:`mx_fade`,type:`float`,inputs:[{name:`t`,type:`float`}]}),VS=uv([P(([e])=>{let t=L(e).toVar(),n=R(R(1)).toVar(),r=R(R(L(3735928559)).add(n.shiftLeft(R(2))).add(R(13))).toVar();return RS(r.add(R(t)),r,r)}).setLayout({name:`mx_hash_int_0`,type:`uint`,inputs:[{name:`x`,type:`int`}]}),P(([e,t])=>{let n=L(t).toVar(),r=L(e).toVar(),i=R(R(2)).toVar(),a=R().toVar(),o=R().toVar(),s=R().toVar();return a.assign(o.assign(s.assign(R(L(3735928559)).add(i.shiftLeft(R(2))).add(R(13))))),a.addAssign(R(r)),o.addAssign(R(n)),RS(a,o,s)}).setLayout({name:`mx_hash_int_1`,type:`uint`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`}]}),P(([e,t,n])=>{let r=L(n).toVar(),i=L(t).toVar(),a=L(e).toVar(),o=R(R(3)).toVar(),s=R().toVar(),c=R().toVar(),l=R().toVar();return s.assign(c.assign(l.assign(R(L(3735928559)).add(o.shiftLeft(R(2))).add(R(13))))),s.addAssign(R(a)),c.addAssign(R(i)),l.addAssign(R(r)),RS(s,c,l)}).setLayout({name:`mx_hash_int_2`,type:`uint`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`}]}),P(([e,t,n,r])=>{let i=L(r).toVar(),a=L(n).toVar(),o=L(t).toVar(),s=L(e).toVar(),c=R(R(4)).toVar(),l=R().toVar(),u=R().toVar(),d=R().toVar();return l.assign(u.assign(d.assign(R(L(3735928559)).add(c.shiftLeft(R(2))).add(R(13))))),l.addAssign(R(s)),u.addAssign(R(o)),d.addAssign(R(a)),LS(l,u,d),l.addAssign(R(i)),RS(l,u,d)}).setLayout({name:`mx_hash_int_3`,type:`uint`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`},{name:`xx`,type:`int`}]}),P(([e,t,n,r,i])=>{let a=L(i).toVar(),o=L(r).toVar(),s=L(n).toVar(),c=L(t).toVar(),l=L(e).toVar(),u=R(R(5)).toVar(),d=R().toVar(),f=R().toVar(),p=R().toVar();return d.assign(f.assign(p.assign(R(L(3735928559)).add(u.shiftLeft(R(2))).add(R(13))))),d.addAssign(R(l)),f.addAssign(R(c)),p.addAssign(R(s)),LS(d,f,p),d.addAssign(R(o)),f.addAssign(R(a)),RS(d,f,p)}).setLayout({name:`mx_hash_int_4`,type:`uint`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`},{name:`xx`,type:`int`},{name:`yy`,type:`int`}]})]),HS=uv([P(([e,t])=>{let n=L(t).toVar(),r=R(VS(L(e).toVar(),n)).toVar(),i=Qo().toVar();return i.x.assign(r.bitAnd(L(255))),i.y.assign(r.shiftRight(L(8)).bitAnd(L(255))),i.z.assign(r.shiftRight(L(16)).bitAnd(L(255))),i}).setLayout({name:`mx_hash_vec3_0`,type:`uvec3`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`}]}),P(([e,t,n])=>{let r=L(n).toVar(),i=L(t).toVar(),a=R(VS(L(e).toVar(),i,r)).toVar(),o=Qo().toVar();return o.x.assign(a.bitAnd(L(255))),o.y.assign(a.shiftRight(L(8)).bitAnd(L(255))),o.z.assign(a.shiftRight(L(16)).bitAnd(L(255))),o}).setLayout({name:`mx_hash_vec3_1`,type:`uvec3`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`}]})]),US=uv([P(([e])=>{let t=z(e).toVar(),n=L().toVar(),r=L().toVar(),i=I(DS(t.x,n)).toVar(),a=I(DS(t.y,r)).toVar(),o=I(BS(i)).toVar(),s=I(BS(a)).toVar();return PS(I(OS(AS(VS(n,r),i,a),AS(VS(n.add(L(1)),r),i.sub(1),a),AS(VS(n,r.add(L(1))),i,a.sub(1)),AS(VS(n.add(L(1)),r.add(L(1))),i.sub(1),a.sub(1)),o,s)).toVar())}).setLayout({name:`mx_perlin_noise_float_0`,type:`float`,inputs:[{name:`p`,type:`vec2`}]}),P(([e])=>{let t=B(e).toVar(),n=L().toVar(),r=L().toVar(),i=L().toVar(),a=I(DS(t.x,n)).toVar(),o=I(DS(t.y,r)).toVar(),s=I(DS(t.z,i)).toVar(),c=I(BS(a)).toVar(),l=I(BS(o)).toVar(),u=I(BS(s)).toVar();return FS(I(kS(AS(VS(n,r,i),a,o,s),AS(VS(n.add(L(1)),r,i),a.sub(1),o,s),AS(VS(n,r.add(L(1)),i),a,o.sub(1),s),AS(VS(n.add(L(1)),r.add(L(1)),i),a.sub(1),o.sub(1),s),AS(VS(n,r,i.add(L(1))),a,o,s.sub(1)),AS(VS(n.add(L(1)),r,i.add(L(1))),a.sub(1),o,s.sub(1)),AS(VS(n,r.add(L(1)),i.add(L(1))),a,o.sub(1),s.sub(1)),AS(VS(n.add(L(1)),r.add(L(1)),i.add(L(1))),a.sub(1),o.sub(1),s.sub(1)),c,l,u)).toVar())}).setLayout({name:`mx_perlin_noise_float_1`,type:`float`,inputs:[{name:`p`,type:`vec3`}]})]),WS=uv([P(([e])=>{let t=z(e).toVar(),n=L().toVar(),r=L().toVar(),i=I(DS(t.x,n)).toVar(),a=I(DS(t.y,r)).toVar(),o=I(BS(i)).toVar(),s=I(BS(a)).toVar();return PS(B(OS(jS(HS(n,r),i,a),jS(HS(n.add(L(1)),r),i.sub(1),a),jS(HS(n,r.add(L(1))),i,a.sub(1)),jS(HS(n.add(L(1)),r.add(L(1))),i.sub(1),a.sub(1)),o,s)).toVar())}).setLayout({name:`mx_perlin_noise_vec3_0`,type:`vec3`,inputs:[{name:`p`,type:`vec2`}]}),P(([e])=>{let t=B(e).toVar(),n=L().toVar(),r=L().toVar(),i=L().toVar(),a=I(DS(t.x,n)).toVar(),o=I(DS(t.y,r)).toVar(),s=I(DS(t.z,i)).toVar(),c=I(BS(a)).toVar(),l=I(BS(o)).toVar(),u=I(BS(s)).toVar();return FS(B(kS(jS(HS(n,r,i),a,o,s),jS(HS(n.add(L(1)),r,i),a.sub(1),o,s),jS(HS(n,r.add(L(1)),i),a,o.sub(1),s),jS(HS(n.add(L(1)),r.add(L(1)),i),a.sub(1),o.sub(1),s),jS(HS(n,r,i.add(L(1))),a,o,s.sub(1)),jS(HS(n.add(L(1)),r,i.add(L(1))),a.sub(1),o,s.sub(1)),jS(HS(n,r.add(L(1)),i.add(L(1))),a,o.sub(1),s.sub(1)),jS(HS(n.add(L(1)),r.add(L(1)),i.add(L(1))),a.sub(1),o.sub(1),s.sub(1)),c,l,u)).toVar())}).setLayout({name:`mx_perlin_noise_vec3_1`,type:`vec3`,inputs:[{name:`p`,type:`vec3`}]})]),GS=uv([P(([e])=>zS(VS(L(ES(I(e).toVar())).toVar()))).setLayout({name:`mx_cell_noise_float_0`,type:`float`,inputs:[{name:`p`,type:`float`}]}),P(([e])=>{let t=z(e).toVar();return zS(VS(L(ES(t.x)).toVar(),L(ES(t.y)).toVar()))}).setLayout({name:`mx_cell_noise_float_1`,type:`float`,inputs:[{name:`p`,type:`vec2`}]}),P(([e])=>{let t=B(e).toVar();return zS(VS(L(ES(t.x)).toVar(),L(ES(t.y)).toVar(),L(ES(t.z)).toVar()))}).setLayout({name:`mx_cell_noise_float_2`,type:`float`,inputs:[{name:`p`,type:`vec3`}]}),P(([e])=>{let t=V(e).toVar();return zS(VS(L(ES(t.x)).toVar(),L(ES(t.y)).toVar(),L(ES(t.z)).toVar(),L(ES(t.w)).toVar()))}).setLayout({name:`mx_cell_noise_float_3`,type:`float`,inputs:[{name:`p`,type:`vec4`}]})]),KS=uv([P(([e])=>{let t=L(ES(I(e).toVar())).toVar();return B(zS(VS(t,L(0))),zS(VS(t,L(1))),zS(VS(t,L(2))))}).setLayout({name:`mx_cell_noise_vec3_0`,type:`vec3`,inputs:[{name:`p`,type:`float`}]}),P(([e])=>{let t=z(e).toVar(),n=L(ES(t.x)).toVar(),r=L(ES(t.y)).toVar();return B(zS(VS(n,r,L(0))),zS(VS(n,r,L(1))),zS(VS(n,r,L(2))))}).setLayout({name:`mx_cell_noise_vec3_1`,type:`vec3`,inputs:[{name:`p`,type:`vec2`}]}),P(([e])=>{let t=B(e).toVar(),n=L(ES(t.x)).toVar(),r=L(ES(t.y)).toVar(),i=L(ES(t.z)).toVar();return B(zS(VS(n,r,i,L(0))),zS(VS(n,r,i,L(1))),zS(VS(n,r,i,L(2))))}).setLayout({name:`mx_cell_noise_vec3_2`,type:`vec3`,inputs:[{name:`p`,type:`vec3`}]}),P(([e])=>{let t=V(e).toVar(),n=L(ES(t.x)).toVar(),r=L(ES(t.y)).toVar(),i=L(ES(t.z)).toVar(),a=L(ES(t.w)).toVar();return B(zS(VS(n,r,i,a,L(0))),zS(VS(n,r,i,a,L(1))),zS(VS(n,r,i,a,L(2))))}).setLayout({name:`mx_cell_noise_vec3_3`,type:`vec3`,inputs:[{name:`p`,type:`vec4`}]})]),qS=P(([e,t,n,r])=>{let i=I(r).toVar(),a=I(n).toVar(),o=L(t).toVar(),s=B(e).toVar(),c=I(0).toVar(),l=I(1).toVar();return qm(o,()=>{c.addAssign(l.mul(US(s))),l.mulAssign(i),s.mulAssign(a)}),c}).setLayout({name:`mx_fractal_noise_float`,type:`float`,inputs:[{name:`p`,type:`vec3`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),JS=P(([e,t,n,r])=>{let i=I(r).toVar(),a=I(n).toVar(),o=L(t).toVar(),s=B(e).toVar(),c=B(0).toVar(),l=I(1).toVar();return qm(o,()=>{c.addAssign(l.mul(WS(s))),l.mulAssign(i),s.mulAssign(a)}),c}).setLayout({name:`mx_fractal_noise_vec3`,type:`vec3`,inputs:[{name:`p`,type:`vec3`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),YS=P(([e,t,n,r])=>{let i=I(r).toVar(),a=I(n).toVar(),o=L(t).toVar(),s=B(e).toVar();return z(qS(s,o,a,i),qS(s.add(B(L(19),L(193),L(17))),o,a,i))}).setLayout({name:`mx_fractal_noise_vec2`,type:`vec2`,inputs:[{name:`p`,type:`vec3`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),XS=P(([e,t,n,r])=>{let i=I(r).toVar(),a=I(n).toVar(),o=L(t).toVar(),s=B(e).toVar();return V(B(JS(s,o,a,i)).toVar(),I(qS(s.add(B(L(19),L(193),L(17))),o,a,i)).toVar())}).setLayout({name:`mx_fractal_noise_vec4`,type:`vec4`,inputs:[{name:`p`,type:`vec3`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),ZS=uv([P(([e,t,n,r,i,a,o])=>{let s=L(o).toVar(),c=I(a).toVar(),l=L(i).toVar(),u=L(r).toVar(),d=L(n).toVar(),f=L(t).toVar(),p=z(e).toVar(),m=B(KS(z(f.add(u),d.add(l)))).toVar(),h=z(m.x,m.y).toVar();h.subAssign(.5),h.mulAssign(c),h.addAssign(.5);let g=z(z(z(I(f),I(d)).add(h)).toVar().sub(p)).toVar();return F(s.equal(L(2)),()=>tl(g.x).add(tl(g.y))),F(s.equal(L(3)),()=>gl(tl(g.x),tl(g.y))),xl(g,g)}).setLayout({name:`mx_worley_distance_0`,type:`float`,inputs:[{name:`p`,type:`vec2`},{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`xoff`,type:`int`},{name:`yoff`,type:`int`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]}),P(([e,t,n,r,i,a,o,s,c])=>{let l=L(c).toVar(),u=I(s).toVar(),d=L(o).toVar(),f=L(a).toVar(),p=L(i).toVar(),m=L(r).toVar(),h=L(n).toVar(),g=L(t).toVar(),_=B(e).toVar(),v=B(KS(B(g.add(p),h.add(f),m.add(d)))).toVar();v.subAssign(.5),v.mulAssign(u),v.addAssign(.5);let y=B(B(B(I(g),I(h),I(m)).add(v)).toVar().sub(_)).toVar();return F(l.equal(L(2)),()=>tl(y.x).add(tl(y.y)).add(tl(y.z))),F(l.equal(L(3)),()=>gl(tl(y.x),tl(y.y),tl(y.z))),xl(y,y)}).setLayout({name:`mx_worley_distance_1`,type:`float`,inputs:[{name:`p`,type:`vec3`},{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`},{name:`xoff`,type:`int`},{name:`yoff`,type:`int`},{name:`zoff`,type:`int`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]})]),QS=P(([e,t,n])=>{let r=L(n).toVar(),i=I(t).toVar(),a=z(e).toVar(),o=L().toVar(),s=L().toVar(),c=z(DS(a.x,o),DS(a.y,s)).toVar(),l=I(1e6).toVar();return qm({start:-1,end:L(1),name:`x`,condition:`<=`},({x:e})=>{qm({start:-1,end:L(1),name:`y`,condition:`<=`},({y:t})=>{let n=I(ZS(c,e,t,o,s,i,r)).toVar();l.assign(hl(l,n))})}),F(r.equal(L(0)),()=>{l.assign(Uc(l))}),l}).setLayout({name:`mx_worley_noise_float_0`,type:`float`,inputs:[{name:`p`,type:`vec2`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]}),$S=P(([e,t,n])=>{let r=L(n).toVar(),i=I(t).toVar(),a=z(e).toVar(),o=L().toVar(),s=L().toVar(),c=z(DS(a.x,o),DS(a.y,s)).toVar(),l=z(1e6,1e6).toVar();return qm({start:-1,end:L(1),name:`x`,condition:`<=`},({x:e})=>{qm({start:-1,end:L(1),name:`y`,condition:`<=`},({y:t})=>{let n=I(ZS(c,e,t,o,s,i,r)).toVar();F(n.lessThan(l.x),()=>{l.y.assign(l.x),l.x.assign(n)}).ElseIf(n.lessThan(l.y),()=>{l.y.assign(n)})})}),F(r.equal(L(0)),()=>{l.assign(Uc(l))}),l}).setLayout({name:`mx_worley_noise_vec2_0`,type:`vec2`,inputs:[{name:`p`,type:`vec2`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]}),eC=P(([e,t,n])=>{let r=L(n).toVar(),i=I(t).toVar(),a=z(e).toVar(),o=L().toVar(),s=L().toVar(),c=z(DS(a.x,o),DS(a.y,s)).toVar(),l=B(1e6,1e6,1e6).toVar();return qm({start:-1,end:L(1),name:`x`,condition:`<=`},({x:e})=>{qm({start:-1,end:L(1),name:`y`,condition:`<=`},({y:t})=>{let n=I(ZS(c,e,t,o,s,i,r)).toVar();F(n.lessThan(l.x),()=>{l.z.assign(l.y),l.y.assign(l.x),l.x.assign(n)}).ElseIf(n.lessThan(l.y),()=>{l.z.assign(l.y),l.y.assign(n)}).ElseIf(n.lessThan(l.z),()=>{l.z.assign(n)})})}),F(r.equal(L(0)),()=>{l.assign(Uc(l))}),l}).setLayout({name:`mx_worley_noise_vec3_0`,type:`vec3`,inputs:[{name:`p`,type:`vec2`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]}),tC=uv([QS,P(([e,t,n])=>{let r=L(n).toVar(),i=I(t).toVar(),a=B(e).toVar(),o=L().toVar(),s=L().toVar(),c=L().toVar(),l=B(DS(a.x,o),DS(a.y,s),DS(a.z,c)).toVar(),u=I(1e6).toVar();return qm({start:-1,end:L(1),name:`x`,condition:`<=`},({x:e})=>{qm({start:-1,end:L(1),name:`y`,condition:`<=`},({y:t})=>{qm({start:-1,end:L(1),name:`z`,condition:`<=`},({z:n})=>{let a=I(ZS(l,e,t,n,o,s,c,i,r)).toVar();u.assign(hl(u,a))})})}),F(r.equal(L(0)),()=>{u.assign(Uc(u))}),u}).setLayout({name:`mx_worley_noise_float_1`,type:`float`,inputs:[{name:`p`,type:`vec3`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]})]),nC=uv([$S,P(([e,t,n])=>{let r=L(n).toVar(),i=I(t).toVar(),a=B(e).toVar(),o=L().toVar(),s=L().toVar(),c=L().toVar(),l=B(DS(a.x,o),DS(a.y,s),DS(a.z,c)).toVar(),u=z(1e6,1e6).toVar();return qm({start:-1,end:L(1),name:`x`,condition:`<=`},({x:e})=>{qm({start:-1,end:L(1),name:`y`,condition:`<=`},({y:t})=>{qm({start:-1,end:L(1),name:`z`,condition:`<=`},({z:n})=>{let a=I(ZS(l,e,t,n,o,s,c,i,r)).toVar();F(a.lessThan(u.x),()=>{u.y.assign(u.x),u.x.assign(a)}).ElseIf(a.lessThan(u.y),()=>{u.y.assign(a)})})})}),F(r.equal(L(0)),()=>{u.assign(Uc(u))}),u}).setLayout({name:`mx_worley_noise_vec2_1`,type:`vec2`,inputs:[{name:`p`,type:`vec3`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]})]),rC=uv([eC,P(([e,t,n])=>{let r=L(n).toVar(),i=I(t).toVar(),a=B(e).toVar(),o=L().toVar(),s=L().toVar(),c=L().toVar(),l=B(DS(a.x,o),DS(a.y,s),DS(a.z,c)).toVar(),u=B(1e6,1e6,1e6).toVar();return qm({start:-1,end:L(1),name:`x`,condition:`<=`},({x:e})=>{qm({start:-1,end:L(1),name:`y`,condition:`<=`},({y:t})=>{qm({start:-1,end:L(1),name:`z`,condition:`<=`},({z:n})=>{let a=I(ZS(l,e,t,n,o,s,c,i,r)).toVar();F(a.lessThan(u.x),()=>{u.z.assign(u.y),u.y.assign(u.x),u.x.assign(a)}).ElseIf(a.lessThan(u.y),()=>{u.z.assign(u.y),u.y.assign(a)}).ElseIf(a.lessThan(u.z),()=>{u.z.assign(a)})})})}),F(r.equal(L(0)),()=>{u.assign(Uc(u))}),u}).setLayout({name:`mx_worley_noise_vec3_1`,type:`vec3`,inputs:[{name:`p`,type:`vec3`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]})]),iC=P(([e,t,n,r,i,a,o,s,c,l,u])=>{let d=L(e).toVar(),f=z(t).toVar(),p=z(n).toVar(),m=z(r).toVar(),h=I(i).toVar(),g=I(a).toVar(),_=I(o).toVar(),v=qo(s).toVar(),y=L(c).toVar(),b=I(l).toVar(),x=I(u).toVar(),S=f.mul(p).add(m),C=I(0).toVar();return F(d.equal(L(0)),()=>{C.assign(WS(S))}),F(d.equal(L(1)),()=>{C.assign(KS(S))}),F(d.equal(L(2)),()=>{C.assign(rC(S,h,L(0)))}),F(d.equal(L(3)),()=>{C.assign(JS(B(S,0),y,b,x))}),C.assign(C.mul(_.sub(g)).add(g)),F(v,()=>{C.assign(jl(C,g,_))}),C}).setLayout({name:`mx_unifiednoise2d`,type:`float`,inputs:[{name:`noiseType`,type:`int`},{name:`texcoord`,type:`vec2`},{name:`freq`,type:`vec2`},{name:`offset`,type:`vec2`},{name:`jitter`,type:`float`},{name:`outmin`,type:`float`},{name:`outmax`,type:`float`},{name:`clampoutput`,type:`bool`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),aC=P(([e,t,n,r,i,a,o,s,c,l,u])=>{let d=L(e).toVar(),f=B(t).toVar(),p=B(n).toVar(),m=B(r).toVar(),h=I(i).toVar(),g=I(a).toVar(),_=I(o).toVar(),v=qo(s).toVar(),y=L(c).toVar(),b=I(l).toVar(),x=I(u).toVar(),S=f.mul(p).add(m),C=I(0).toVar();return F(d.equal(L(0)),()=>{C.assign(WS(S))}),F(d.equal(L(1)),()=>{C.assign(KS(S))}),F(d.equal(L(2)),()=>{C.assign(rC(S,h,L(0)))}),F(d.equal(L(3)),()=>{C.assign(JS(S,y,b,x))}),C.assign(C.mul(_.sub(g)).add(g)),F(v,()=>{C.assign(jl(C,g,_))}),C}).setLayout({name:`mx_unifiednoise3d`,type:`float`,inputs:[{name:`noiseType`,type:`int`},{name:`position`,type:`vec3`},{name:`freq`,type:`vec3`},{name:`offset`,type:`vec3`},{name:`jitter`,type:`float`},{name:`outmin`,type:`float`},{name:`outmax`,type:`float`},{name:`clampoutput`,type:`bool`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),oC=P(([e])=>{let t=e.y,n=e.z,r=B().toVar();return F(t.lessThan(1e-4),()=>{r.assign(B(n,n,n))}).Else(()=>{let i=e.x;i=i.sub(Gc(i)).mul(6).toVar();let a=L(ul(i)),o=i.sub(I(a)),s=n.mul(t.oneMinus()),c=n.mul(t.mul(o).oneMinus()),l=n.mul(t.mul(o.oneMinus()).oneMinus());F(a.equal(L(0)),()=>{r.assign(B(n,l,s))}).ElseIf(a.equal(L(1)),()=>{r.assign(B(c,n,s))}).ElseIf(a.equal(L(2)),()=>{r.assign(B(s,n,l))}).ElseIf(a.equal(L(3)),()=>{r.assign(B(s,c,n))}).ElseIf(a.equal(L(4)),()=>{r.assign(B(l,s,n))}).Else(()=>{r.assign(B(n,s,c))})}),r}).setLayout({name:`mx_hsvtorgb`,type:`vec3`,inputs:[{name:`hsv`,type:`vec3`}]}),sC=P(([e])=>{let t=B(e).toVar(),n=I(t.x).toVar(),r=I(t.y).toVar(),i=I(t.z).toVar(),a=I(hl(n,hl(r,i))).toVar(),o=I(gl(n,gl(r,i))).toVar(),s=I(o.sub(a)).toVar(),c=I().toVar(),l=I().toVar(),u=I().toVar();return u.assign(o),F(o.greaterThan(0),()=>{l.assign(s.div(o))}).Else(()=>{l.assign(0)}),F(l.lessThanEqual(0),()=>{c.assign(0)}).Else(()=>{F(n.greaterThanEqual(o),()=>{c.assign(r.sub(i).div(s))}).ElseIf(r.greaterThanEqual(o),()=>{c.assign(ic(2,i.sub(n).div(s)))}).Else(()=>{c.assign(ic(4,n.sub(r).div(s)))}),c.mulAssign(1/6),F(c.lessThan(0),()=>{c.addAssign(1)})}),B(c,l,u)}).setLayout({name:`mx_rgbtohsv`,type:`vec3`,inputs:[{name:`c`,type:`vec3`}]}),cC=P(([e])=>{let t=B(e).toVar(),n=$o(dc(t,B(.04045))).toVar();return Al(B(t.div(12.92)).toVar(),B(Cl(gl(t.add(B(.055)),B(0)).div(1.055),B(2.4))).toVar(),n)}).setLayout({name:`mx_srgb_texture_to_lin_rec709`,type:`vec3`,inputs:[{name:`color`,type:`vec3`}]}),lC=(e,t)=>{e=I(e),t=I(t);let n=z(t.dFdx(),t.dFdy()).length().mul(.7071067811865476);return Pl(e.sub(n),e.add(n),t)},uC=(e,t,n,r)=>Al(e,t,n[r].clamp()),dC=(e,t,n=Xu())=>uC(e,t,n,`x`),fC=(e,t,n=Xu())=>uC(e,t,n,`y`),pC=(e,t,n,r,i=Xu())=>{let a=i.x.clamp(),o=i.y.clamp();return Al(Al(e,t,a),Al(n,r,a),o)},mC=(e,t,n,r,i)=>Al(e,t,lC(n,r[i])),J=Object.freeze({__proto__:null,BRDF_GGX:eg,BRDF_Lambert:Kh,BasicPointShadowFilter:hS,BasicShadowFilter:Gx,Break:Ym,Const:Ql,Continue:Jm,DFGLUT:rg,D_GGX:Zh,Discard:Ru,EPSILON:kc,F_Schlick:Gh,Fn:P,HALF_PI:Pc,INFINITY:Ac,If:F,Loop:qm,NodeAccess:La,NodeShaderStage:Pa,NodeType:Ia,NodeUpdateType:Fa,OnBeforeMaterialUpdate:cy,OnBeforeObjectUpdate:sy,OnMaterialUpdate:oy,OnObjectUpdate:ay,PCFShadowFilter:Kx,PCFSoftShadowFilter:qx,PI:jc,PI2:Mc,PointShadowFilter:gS,Return:zu,Schlick_to_F0:ig,ShaderNode:Io,Stack:Go,Switch:Wo,TBNViewMatrix:jp,TWO_PI:Nc,VSMShadowFilter:Jx,V_GGX_SmithCorrelated:Yh,Var:Zl,VarIntent:$l,abs:tl,acesFilmicToneMapping:eb,acos:$c,add:ic,addMethodChaining:k,addNodeElement:qu,agxToneMapping:ib,all:Fc,alphaT:Ds,and:mc,anisotropy:Os,anisotropyB:As,anisotropyT:ks,any:Ic,append:ds,array:Qs,arrayBuffer:ss,asin:Qc,assign:$s,atan:el,atomicAdd:Hb,atomicAnd:Kb,atomicFunc:zb,atomicLoad:Bb,atomicMax:Wb,atomicMin:Gb,atomicOr:qb,atomicStore:Vb,atomicSub:Ub,atomicXor:Jb,attenuationColor:Us,attenuationDistance:Hs,attribute:Yu,attributeArray:dy,backgroundBlurriness:gy,backgroundIntensity:_y,backgroundRotation:vy,batch:Vm,bentNormalView:Pp,billboarding:xv,bitAnd:vc,bitNot:yc,bitOr:bc,bitXor:xc,bitangentGeometry:Dp,bitangentLocal:Op,bitangentView:kp,bitangentWorld:Ap,bitcast:L_,blendBurn:Ih,blendColor:Bh,blendDodge:Lh,blendOverlay:zh,blendScreen:Rh,blur:Ig,bool:qo,buffer:ud,bufferAttribute:Cu,builtin:md,builtinAOContext:Jl,builtinShadowContext:ql,bumpMap:Vp,bvec2:Xo,bvec3:$o,bvec4:ns,bypass:Nu,cache:Mu,call:tc,cameraFar:Ud,cameraIndex:Vd,cameraNear:Hd,cameraNormalMatrix:Jd,cameraPosition:Yd,cameraProjectionMatrix:Wd,cameraProjectionMatrixInverse:Gd,cameraViewMatrix:Kd,cameraViewport:Xd,cameraWorldMatrix:qd,cbrt:Ol,cdl:Ly,ceil:Kc,checker:SS,cineonToneMapping:Qy,clamp:jl,clearcoat:bs,clearcoatNormalView:Lf,clearcoatRoughness:xs,clipSpace:yf,code:sb,color:Ko,colorSpaceToWorking:uu,colorToDirection:Ip,compute:ku,computeKernel:Ou,computeSkinning:Gm,context:Wl,convert:ls,convertColorSpace:du,convertToTexture:Yv,cos:Xc,countLeadingZeros:G_,countOneBits:K_,countTrailingZeros:W_,cross:Sl,cubeTexture:ep,cubeTextureBase:$f,dFdx:ol,dFdy:sl,dashSize:Is,debug:Uu,decrement:Dc,decrementBefore:Tc,defaultBuildStages:za,defaultShaderStages:Ra,defined:Po,degrees:Rc,deltaTime:fv,densityFogFactor:_b,depth:Ch,depthPass:qy,determinant:pl,difference:bl,diffuseColor:hs,diffuseContribution:gs,directPointLight:xS,directionToColor:Fp,directionToFaceDirection:kf,dispersion:Ws,disposeShadowMaterial:Xx,distance:yl,div:oc,dot:xl,drawIndex:Lm,dynamicBufferAttribute:wu,element:cs,emissive:_s,equal:cc,equirectUV:Wh,exp:zc,exp2:Bc,exponentialHeightFogFactor:vb,expression:Lu,faceDirection:Of,faceForward:Fl,faceforward:Bl,float:I,floatBitsToInt:R_,floatBitsToUint:z_,floor:Gc,fog:yb,fract:Jc,frameGroup:Js,frameId:pv,frontFacing:Df,fwidth:dl,gain:Y_,gapSize:Ls,getConstNodeType:Fo,getCurrentStack:Uo,getDirection:Mg,getDistanceAttenuation:bS,getGeometryRoughness:qh,getNormalFromDepth:Qv,getParallaxCorrectNormal:P(([e,t,n])=>{let r=qc(e).toVar(),i=ac(I(.5).mul(t.sub(n)),Cf).div(r).toVar(),a=ac(I(-.5).mul(t.sub(n)),Cf).div(r).toVar(),o=B().toVar();o.x=r.x.greaterThan(I(0)).select(i.x,a.x),o.y=r.y.greaterThan(I(0)).select(i.y,a.y),o.z=r.z.greaterThan(I(0)).select(i.z,a.z);let s=hl(o.x,o.y,o.z).toVar();return Cf.add(r.mul(s)).toVar().sub(n)}),getRoughness:Jh,getScreenPosition:Zv,getShIrradianceAt:P(([e,t])=>{let n=e.x,r=e.y,i=e.z,a=t.element(0).mul(.886227);return a=a.add(t.element(1).mul(2*.511664).mul(r)),a=a.add(t.element(2).mul(2*.511664).mul(i)),a=a.add(t.element(3).mul(2*.511664).mul(n)),a=a.add(t.element(4).mul(2*.429043).mul(n).mul(r)),a=a.add(t.element(5).mul(2*.429043).mul(r).mul(i)),a=a.add(t.element(6).mul(i.mul(i).mul(.743125).sub(.247708))),a=a.add(t.element(7).mul(2*.429043).mul(n).mul(i)),a=a.add(t.element(8).mul(.429043).mul(W(n,n).sub(W(r,r)))),a}),getShadowMaterial:Yx,getShadowRenderObjectFunction:$x,getTextureIndex:P_,getViewPosition:Xv,ggxConvolution:Bg,globalId:Db,glsl:ub,glslFn:pb,grayscale:My,greaterThan:dc,greaterThanEqual:pc,hash:q_,highpModelNormalViewMatrix:vf,highpModelViewMatrix:_f,hue:Fy,increment:Ec,incrementBefore:wc,inspector:Ku,instance:zm,instanceIndex:Nm,instancedArray:fy,instancedBufferAttribute:Tu,instancedDynamicBufferAttribute:Eu,instancedMesh:Bm,int:L,intBitsToFloat:B_,interleavedGradientNoise:$v,inverse:ml,inverseSqrt:Wc,inversesqrt:Vl,invocationLocalIndex:Im,invocationSubgroupIndex:Fm,ior:zs,iridescence:ws,iridescenceIOR:Ts,iridescenceThickness:Es,isolate:ju,ivec2:Jo,ivec3:Zo,ivec4:es,js:cb,label:Yl,length:rl,lengthSq:kl,lessThan:uc,lessThanEqual:fc,lightPosition:wx,lightProjectionUV:Cx,lightShadowMatrix:Sx,lightTargetDirection:Dx,lightTargetPosition:Tx,lightViewPosition:Ex,lightingContext:rh,lights:Nx,linearDepth:wh,linearToneMapping:Xy,localId:Ob,log:Vc,log2:Hc,logarithmicDepthToViewZ:xh,luminance:Iy,mat2:rs,mat3:is,mat4:as,matcapUV:y_,materialAO:Tm,materialAlphaTest:Up,materialAnisotropy:cm,materialAnisotropyVector:Em,materialAttenuationColor:gm,materialAttenuationDistance:hm,materialClearcoat:nm,materialClearcoatNormal:im,materialClearcoatRoughness:rm,materialColor:Wp,materialDispersion:Cm,materialEmissive:Kp,materialEnvIntensity:Kf,materialEnvRotation:qf,materialIOR:mm,materialIridescence:lm,materialIridescenceIOR:um,materialIridescenceThickness:dm,materialLightMap:wm,materialLineDashOffset:xm,materialLineDashSize:vm,materialLineGapSize:ym,materialLineScale:_m,materialLineWidth:bm,materialMetalness:em,materialNormal:tm,materialOpacity:qp,materialPointSize:Sm,materialReference:sp,materialReflectivity:Qp,materialRefractionRatio:Gf,materialRotation:am,materialRoughness:$p,materialSheen:om,materialSheenRoughness:sm,materialShininess:Gp,materialSpecular:Jp,materialSpecularColor:Xp,materialSpecularIntensity:Yp,materialSpecularStrength:Zp,materialThickness:pm,materialTransmission:fm,max:gl,maxMipLevel:Qu,mediumpModelViewMatrix:gf,metalness:ys,min:hl,mix:Al,mixElement:Ll,mod:sc,modInt:Oc,modelDirection:sf,modelNormalMatrix:pf,modelPosition:lf,modelRadius:ff,modelScale:uf,modelViewMatrix:hf,modelViewPosition:df,modelViewProjection:Dm,modelWorldMatrix:cf,modelWorldMatrixInverse:mf,morphReference:eh,mrt:F_,mul:W,mx_aastep:lC,mx_add:(e,t=I(0))=>ic(e,t),mx_atan2:(e=I(0),t=I(1))=>el(e,t),mx_cell_noise_float:(e=Xu())=>GS(e.convert(`vec2|vec3`)),mx_contrast:(e,t=1,n=.5)=>I(e).sub(n).mul(t).add(n),mx_divide:(e,t=I(1))=>oc(e,t),mx_fractal_noise_float:(e=Xu(),t=3,n=2,r=.5,i=1)=>qS(e,L(t),n,r).mul(i),mx_fractal_noise_vec2:(e=Xu(),t=3,n=2,r=.5,i=1)=>YS(e,L(t),n,r).mul(i),mx_fractal_noise_vec3:(e=Xu(),t=3,n=2,r=.5,i=1)=>JS(e,L(t),n,r).mul(i),mx_fractal_noise_vec4:(e=Xu(),t=3,n=2,r=.5,i=1)=>XS(e,L(t),n,r).mul(i),mx_frame:()=>pv,mx_heighttonormal:(e,t)=>(e=B(e),t=I(t),Vp(e,t)),mx_hsvtorgb:oC,mx_ifequal:(e,t,n,r)=>e.equal(t).mix(n,r),mx_ifgreater:(e,t,n,r)=>e.greaterThan(t).mix(n,r),mx_ifgreatereq:(e,t,n,r)=>e.greaterThanEqual(t).mix(n,r),mx_invert:(e,t=I(1))=>ac(t,e),mx_modulo:(e,t=I(1))=>sc(e,t),mx_multiply:(e,t=I(1))=>W(e,t),mx_noise_float:(e=Xu(),t=1,n=0)=>US(e.convert(`vec2|vec3`)).mul(t).add(n),mx_noise_vec3:(e=Xu(),t=1,n=0)=>WS(e.convert(`vec2|vec3`)).mul(t).add(n),mx_noise_vec4:(e=Xu(),t=1,n=0)=>(e=e.convert(`vec2|vec3`),V(WS(e),US(e.add(z(19,73)))).mul(t).add(n)),mx_place2d:(e,t=z(.5,.5),n=z(1,1),r=I(0),i=z(0,0))=>{let a=e;if(t&&(a=a.sub(t)),n&&(a=a.mul(n)),r){let e=r.mul(Math.PI/180),t=e.cos(),n=e.sin();a=z(a.x.mul(t).sub(a.y.mul(n)),a.x.mul(n).add(a.y.mul(t)))}return t&&(a=a.add(t)),i&&(a=a.add(i)),a},mx_power:(e,t=I(1))=>Cl(e,t),mx_ramp4:pC,mx_ramplr:dC,mx_ramptb:fC,mx_rgbtohsv:sC,mx_rotate2d:(e,t)=>{e=z(e),t=I(t);let n=t.mul(Math.PI/180);return b_(e,n)},mx_rotate3d:(e,t,n)=>{e=B(e),t=I(t),n=B(n);let r=t.mul(Math.PI/180),i=n.normalize(),a=r.cos(),o=r.sin(),s=I(1).sub(a);return e.mul(a).add(i.cross(e).mul(o)).add(i.mul(i.dot(e)).mul(s))},mx_safepower:(e,t=1)=>(e=I(e),e.abs().pow(t).mul(e.sign())),mx_separate:(e,t=null)=>{if(typeof t==`string`){let n={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3},r=t.replace(/^out/,``).toLowerCase();if(n[r]!==void 0)return e.element(n[r])}if(typeof t==`number`)return e.element(t);if(typeof t==`string`&&t.length===1){let n={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3};if(n[t]!==void 0)return e.element(n[t])}return e},mx_splitlr:(e,t,n,r=Xu())=>mC(e,t,n,r,`x`),mx_splittb:(e,t,n,r=Xu())=>mC(e,t,n,r,`y`),mx_srgb_texture_to_lin_rec709:cC,mx_subtract:(e,t=I(0))=>ac(e,t),mx_timer:()=>dv,mx_transform_uv:(e=1,t=0,n=Xu())=>n.mul(e).add(t),mx_unifiednoise2d:(e,t=Xu(),n=z(1,1),r=z(0,0),i=1,a=0,o=1,s=!1,c=1,l=2,u=.5)=>iC(e,t.convert(`vec2|vec3`),n,r,i,a,o,s,c,l,u),mx_unifiednoise3d:(e,t=Xu(),n=z(1,1),r=z(0,0),i=1,a=0,o=1,s=!1,c=1,l=2,u=.5)=>aC(e,t.convert(`vec2|vec3`),n,r,i,a,o,s,c,l,u),mx_worley_noise_float:(e=Xu(),t=1)=>tC(e.convert(`vec2|vec3`),t,L(1)),mx_worley_noise_vec2:(e=Xu(),t=1)=>nC(e.convert(`vec2|vec3`),t,L(1)),mx_worley_noise_vec3:(e=Xu(),t=1)=>rC(e.convert(`vec2|vec3`),t,L(1)),negate:il,neutralToneMapping:ab,nodeArray:zo,nodeImmutable:M,nodeObject:A,nodeObjectIntent:Lo,nodeObjects:Ro,nodeProxy:j,nodeProxyIntent:N,normalFlat:Mf,normalGeometry:Af,normalLocal:jf,normalMap:Rp,normalView:Ff,normalViewGeometry:Nf,normalWorld:If,normalWorldGeometry:Pf,normalize:qc,not:gc,notEqual:lc,numWorkgroups:Tb,objectDirection:$d,objectGroup:Ys,objectPosition:tf,objectRadius:af,objectScale:nf,objectViewPosition:rf,objectWorldMatrix:ef,oneMinus:al,or:hc,orthographicDepthToViewZ:gh,oscSawtooth:_v,oscSine:mv,oscSquare:hv,oscTriangle:gv,output:Fs,outputStruct:A_,overloadingFn:uv,packHalf2x16:tv,packSnorm2x16:$_,packUnorm2x16:ev,parabola:J_,parallaxDirection:Mp,parallaxUV:Np,parameter:C_,pass:Gy,passTexture:Ky,pcurve:X_,perspectiveDepthToViewZ:yh,pmremTexture:v_,pointShadow:yS,pointUV:py,pointWidth:Rs,positionGeometry:bf,positionLocal:xf,positionPrevious:Sf,positionView:Tf,positionViewDirection:Ef,positionWorld:Cf,positionWorldDirection:wf,posterize:Ry,pow:Cl,pow2:wl,pow3:Tl,pow4:El,premultiplyAlpha:Vh,property:ps,quadBroadcast:yx,quadSwapDiagonal:px,quadSwapX:dx,quadSwapY:fx,radians:Lc,rand:Il,range:Sb,rangeFogFactor:gb,reciprocal:ll,reference:ip,referenceBuffer:ap,reflect:vl,reflectVector:Xf,reflectView:Jf,reflector:Hv,refract:Nl,refractVector:Zf,refractView:Yf,reinhardToneMapping:Zy,remap:Fu,remapClamp:Iu,renderGroup:H,renderOutput:Vu,rendererReference:hu,replaceDefaultUV:vv,rotate:b_,rotateUV:yv,roughness:vs,round:cl,rtt:Jv,sRGBTransferEOTF:iu,sRGBTransferOETF:au,sample:ny,sampler:sd,samplerComparison:cd,saturate:Ml,saturation:Ny,screenCoordinate:xd,screenDPR:vd,screenSize:bd,screenUV:yd,select:Hl,setCurrentStack:Ho,setName:Kl,shaderStages:Ba,shadow:oS,shadowPositionWorld:Fx,shapeCircle:CS,sharedUniformGroup:qs,sheen:Ss,sheenRoughness:Cs,shiftLeft:Sc,shiftRight:Cc,shininess:Ps,sign:nl,sin:Yc,sinc:Z_,skinning:Wm,smoothstep:Pl,smoothstepElement:Rl,specularColor:js,specularColorBlended:Ms,specularF90:Ns,spherizeUV:bv,split:us,spritesheetUV:Cv,sqrt:Uc,stack:w_,step:_l,stepElement:zl,storage:Am,storageBarrier:Mb,storageTexture:yy,string:os,struct:O_,sub:ac,subBuild:tu,subgroupAdd:Zb,subgroupAll:cx,subgroupAnd:rx,subgroupAny:lx,subgroupBallot:Xb,subgroupBroadcast:mx,subgroupBroadcastFirst:ux,subgroupElect:Yb,subgroupExclusiveAdd:$b,subgroupExclusiveMul:nx,subgroupInclusiveAdd:Qb,subgroupInclusiveMul:tx,subgroupIndex:Pm,subgroupMax:sx,subgroupMin:ox,subgroupMul:ex,subgroupOr:ix,subgroupShuffle:hx,subgroupShuffleDown:vx,subgroupShuffleUp:_x,subgroupShuffleXor:gx,subgroupSize:kb,subgroupXor:ax,tan:Zc,tangentGeometry:Sp,tangentLocal:Cp,tangentView:wp,tangentWorld:Tp,texture:rd,texture3D:Sy,texture3DLevel:wy,texture3DLoad:Cy,textureBarrier:Nb,textureBicubic:gg,textureBicubicLevel:hg,textureCubeUV:Ng,textureLevel:od,textureLoad:ad,textureSize:Zu,textureStore:by,thickness:Vs,time:dv,toneMapping:_u,toneMappingExposure:vu,toonOutlinePass:Yy,transformDirection:Dl,transformNormal:Rf,transformNormalToView:zf,transformedClearcoatNormalView:Hf,transformedNormalView:Bf,transformedNormalWorld:Vf,transmission:Bs,transpose:fl,triNoise3D:cv,triplanarTexture:Tv,triplanarTextures:wv,trunc:ul,uint:R,uintBitsToFloat:V_,uniform:U,uniformArray:pd,uniformCubeTexture:tp,uniformFlow:Gl,uniformGroup:Ks,uniformTexture:id,unpackHalf2x16:av,unpackNormal:Lp,unpackSnorm2x16:rv,unpackUnorm2x16:iv,unpremultiplyAlpha:Hh,userData:Ey,uv:Xu,uvec2:Yo,uvec3:Qo,uvec4:ts,varying:nu,varyingProperty:ms,vec2:z,vec3:B,vec4:V,vectorComponents:Va,velocity:jy,vertexColor:Fh,vertexIndex:Mm,vertexStage:ru,vibrance:Py,viewZToLogarithmicDepth:bh,viewZToOrthographicDepth:mh,viewZToPerspectiveDepth:_h,viewZToReversedOrthographicDepth:hh,viewZToReversedPerspectiveDepth:vh,viewport:Sd,viewportCoordinate:wd,viewportDepthTexture:fh,viewportLinearDepth:Th,viewportMipTexture:ch,viewportOpaqueMipTexture:uh,viewportResolution:Ed,viewportSafeUV:Sv,viewportSharedTexture:By,viewportSize:Cd,viewportTexture:sh,viewportUV:Td,vogelDiskSample:ey,wgsl:lb,wgslFn:mb,workgroupArray:Ib,workgroupBarrier:jb,workgroupId:Eb,workingToColorSpace:lu,xor:_c}),hC=class{constructor(e,t,n=null,r=``,i=!1){this.type=e,this.name=t,this.count=n,this.qualifier=r,this.isConst=i}};hC.isNodeFunctionInput=!0;var gC=class{constructor(e,t,n=``,r=``){this.type=e,this.inputs=t,this.name=n,this.precision=r}getCode(){T(`Abstract function.`)}};gC.isNodeFunction=!0,new ob(`uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }`),new ob(`uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }`);var _C=typeof self<`u`&&self.GPUShaderStage?self.GPUShaderStage:{VERTEX:1,FRAGMENT:2,COMPUTE:4};La.READ_ONLY,La.WRITE_ONLY,La.READ_WRITE,_C.VERTEX,_C.FRAGMENT,_C.COMPUTE,new ob(`fn tsl_xor( a : bool, b : bool ) -> bool { return ( a || b ) && !( a && b ); }`),new ob(`fn tsl_mod_float( x : f32, y : f32 ) -> f32 { return x - y * floor( x / y ); }`),new ob(`fn tsl_mod_vec2( x : vec2f, y : vec2f ) -> vec2f { return x - y * floor( x / y ); }`),new ob(`fn tsl_mod_vec3( x : vec3f, y : vec3f ) -> vec3f { return x - y * floor( x / y ); }`),new ob(`fn tsl_mod_vec4( x : vec4f, y : vec4f ) -> vec4f { return x - y * floor( x / y ); }`),new ob(`fn tsl_equals_bool( a : bool, b : bool ) -> bool { return a == b; }`),new ob(`fn tsl_equals_bvec2( a : vec2f, b : vec2f ) -> vec2<bool> { return vec2<bool>( a.x == b.x, a.y == b.y ); }`),new ob(`fn tsl_equals_bvec3( a : vec3f, b : vec3f ) -> vec3<bool> { return vec3<bool>( a.x == b.x, a.y == b.y, a.z == b.z ); }`),new ob(`fn tsl_equals_bvec4( a : vec4f, b : vec4f ) -> vec4<bool> { return vec4<bool>( a.x == b.x, a.y == b.y, a.z == b.z, a.w == b.w ); }`),new ob(`fn tsl_repeatWrapping_float( coord: f32 ) -> f32 { return fract( coord ); }`),new ob(`fn tsl_mirrorWrapping_float( coord: f32 ) -> f32 { let mirrored = fract( coord * 0.5 ) * 2.0; return 1.0 - abs( 1.0 - mirrored ); }`),new ob(`fn tsl_clampWrapping_float( coord: f32 ) -> f32 { return clamp( coord, 0.0, 1.0 ); }`),new ob(`
300
+ fn tsl_biquadraticTexture( map : texture_2d<f32>, coord : vec2f, iRes : vec2u, level : u32 ) -> vec4f {
301
+
302
+ let res = vec2f( iRes );
303
+
304
+ let uvScaled = coord * res;
305
+ let uvWrapping = ( ( uvScaled % res ) + res ) % res;
306
+
307
+ // https://www.shadertoy.com/view/WtyXRy
308
+
309
+ let uv = uvWrapping - 0.5;
310
+ let iuv = floor( uv );
311
+ let f = fract( uv );
312
+
313
+ let rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, level );
314
+ let rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, level );
315
+ let rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, level );
316
+ let rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, level );
317
+
318
+ return mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );
319
+
320
+ }
321
+ `),new ob(`
322
+ fn tsl_biquadraticTexture_array( map : texture_2d_array<f32>, coord : vec2f, iRes : vec2u, layer : u32, level : u32 ) -> vec4f {
323
+
324
+ let res = vec2f( iRes );
325
+
326
+ let uvScaled = coord * res;
327
+ let uvWrapping = ( ( uvScaled % res ) + res ) % res;
328
+
329
+ // https://www.shadertoy.com/view/WtyXRy
330
+
331
+ let uv = uvWrapping - 0.5;
332
+ let iuv = floor( uv );
333
+ let f = fract( uv );
334
+
335
+ let rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, layer, level );
336
+ let rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, layer, level );
337
+ let rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, layer, level );
338
+ let rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, layer, level );
339
+
340
+ return mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );
341
+
342
+ }
343
+ `);var vC=``;(typeof navigator<`u`&&/Firefox|Deno/g.test(navigator.userAgent))!==!0&&(vC+=`diagnostic( off, derivative_uniformity );
344
+ `);var yC=new Map([[Int8Array,[`sint8`,`snorm8`]],[Uint8Array,[`uint8`,`unorm8`]],[Int16Array,[`sint16`,`snorm16`]],[Uint16Array,[`uint16`,`unorm16`]],[Int32Array,[`sint32`,`snorm32`]],[Uint32Array,[`uint32`,`unorm32`]],[Float32Array,[`float32`]]]);typeof Float16Array<`u`&&yC.set(Float16Array,[`float16`]);function bC(e,t,n){if(n){let r=new D().subVectors(e.position,n).applyQuaternion(e.quaternion.clone().invert()).applyQuaternion(t).add(n);e.position.copy(r)}e.quaternion.copy(t)}function xC(e){return e==null}var SC=class extends tn{removeChildren(){for(;this.children.length>0;)this.remove(this.children[0]);return this}add(...e){let t=e.filter(Boolean);return t.length===0?this:super.add(...t)}addIfNotExists(...e){return e.forEach(e=>{this.children.includes(e)||this.add(e)}),this}remove(...e){if(e.length===0)return this;let t=e.filter(Boolean);return super.remove(...t)}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}get helperObject(){return this}constructor(e,t){var n,r;super(),this.originObject3D=e,this.onRender=(n=t==null?void 0:t.onRender)==null?(()=>{}):n,this.positionFrom=(r=t==null?void 0:t.positionFrom)==null?`objectPosition`:r}render(){this.onRender()}enable(){this.parent&&(this.parent.children.includes(this)||this.parent.add(this))}disable(){this.removeFromParent()}show(){this.visible=!0,this.render()}hide(){this.visible=!1,this.render()}raycasterIntersectObject(e,t=[]){return e.intersectObject(this,!0,t)}initialPosition(e){this.positionFrom===`objectPosition`?this.position.copy(this.originObject3D.position):this.positionFrom===`boundingBox`||this.positionFrom===`boundingSphere`?this.position.copy(new Tn().expandByObject(this.originObject3D).getCenter(new D)):this.positionFrom instanceof D?this.position.copy(this.positionFrom):this.positionFrom instanceof Function&&this.position.copy(this.positionFrom(this.originObject3D)),e&&this.position.add(e)}setScaleByCamera(e){}initQuaternion(e){if(this.quaternion.set(0,0,0,1),e&&(e.xAxis||e.yAxis||e.zAxis)){let t=e.xAxis instanceof Function?e.xAxis():e.xAxis,n=e.yAxis instanceof Function?e.yAxis():e.yAxis,r=e.zAxis instanceof Function?e.zAxis():e.zAxis,i=t==null?void 0:t.clone(),a=n==null?void 0:n.clone(),o=r==null?void 0:r.clone();if(i&&!a&&!a){let e=new ot().setFromUnitVectors(new D(1,0,0),i.normalize());this.applyQuaternion(e)}if(a&&!i&&!o){let e=new ot().setFromUnitVectors(new D(0,1,0),a.normalize());this.applyQuaternion(e)}if(o&&!i&&!a){let e=new ot().setFromUnitVectors(new D(0,0,1),o.normalize());this.applyQuaternion(e)}if([i,a,o].filter(e=>!xC(e)).length>=2){i||(i=new D().crossVectors(a,o).normalize()),a||(a=new D().crossVectors(i,o).normalize()),o||(o=new D().crossVectors(i,a).normalize()),i.applyQuaternion(this.quaternion),a.applyQuaternion(this.quaternion),o.applyQuaternion(this.quaternion);let e=new Ot().makeBasis(i,a,o),t=new ot().setFromRotationMatrix(e);this.quaternion.copy(t)}}}applyHelperScaleMatrix4(e,t){this.scale.applyMatrix4(e)}setHelperQuaternion(e,t){this.initQuaternion(),t?bC(this,this.quaternion.clone().premultiply(e),t):this.quaternion.premultiply(e)}applyHelperQuaternion(e,t){if(t){let n=new D().subVectors(this.position,t).applyQuaternion(e).add(t);this.position.copy(n)}this.applyQuaternion(e)}dispose(){this.removeFromParent()}},CC=class extends SC{},wC=class extends SC{},TC=class extends SC{},EC=class extends nn{constructor(e){super(),this.direction=e||`x`}},DC=class extends Ar{constructor(e,t,n){super(e,t),this.direction=n||`x`}},OC={X:16730698,Y:54927,Z:3368703},kC=class{static get X(){return new cn(OC.X).convertSRGBToLinear().clone()}static get Y(){return new cn(OC.Y).convertSRGBToLinear().clone()}static get Z(){return new cn(OC.Z).convertSRGBToLinear().clone()}},AC={ROTATE_HELPER:9992,MOVE_HELPER:9993,SCALE_HELPER_LINE:9994,SCALE_HELPER_SPHERE:9995,MOVE_HELPER_ARROW:10001,MOVE_HELPER_CENTER:10002,DRAG_GUIDE_LINE:10003,DRAG_FACE_PATCH:10004},jC=class extends EC{constructor(e){var t;super(e.direction),this.lineHeight=.5,this.arrowHeight=.1,this.name=`ArrowGroup`;let n=new cn((t=e.color)==null?16214315:t),r=()=>new vr({color:n,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1}),i=new oi(.04,this.arrowHeight,32);this.arrow=new DC(i,r(),e.direction),this.arrow.name=`arrow-${e.direction}`,this.arrow.renderOrder=AC.MOVE_HELPER_ARROW;let a=new oi(.04,this.arrowHeight,32);this.arrowNeg=new DC(a,r(),e.direction),this.arrowNeg.name=`arrow-neg-${e.direction}`,this.arrowNeg.renderOrder=AC.MOVE_HELPER_ARROW;let o=.004,s=new ai(o,o,this.lineHeight,32);this.line=new DC(s,r(),e.direction),this.line.name=`line-${e.direction}`,this.line.renderOrder=AC.MOVE_HELPER_ARROW,this.formatGeometries(),this.add(this.arrow,this.arrowNeg,this.line)}formatGeometries(){let e=this.lineHeight,t=this.arrowHeight;this.arrow.geometry.translate(0,e+t/2,0),this.arrowNeg.geometry.rotateZ(Math.PI),this.arrowNeg.geometry.translate(0,-(e+t/2),0),this.line.geometry.translate(0,e/2,0),this.direction===`x`?(this.arrow.geometry.rotateX(Math.PI/2),this.arrow.geometry.rotateY(Math.PI/2),this.arrowNeg.geometry.rotateX(Math.PI/2),this.arrowNeg.geometry.rotateY(Math.PI/2),this.line.geometry.rotateX(Math.PI/2),this.line.geometry.rotateY(Math.PI/2)):this.direction===`z`&&(this.arrow.geometry.rotateX(Math.PI/2),this.arrowNeg.geometry.rotateX(Math.PI/2),this.line.geometry.rotateX(Math.PI/2))}},MC=class extends EC{constructor(e){var t,n;super(`plane`),this.name=`CenterHandle`,this.faceNormals=[new D(1,0,0),new D(-1,0,0),new D(0,1,0),new D(0,-1,0),new D(0,0,1),new D(0,0,-1)],this.baseColor=new cn((t=e==null?void 0:e.color)==null?16419862:t);let r=(n=e==null?void 0:e.size)==null?.05:n,i=new cn(16755008).convertSRGBToLinear();this.faceMaterials=Array.from({length:6},()=>new vr({color:i,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,side:0}));let a=new Ar(new ri(r,r,r),this.faceMaterials);a.direction=`plane`,a.renderOrder=AC.MOVE_HELPER_CENTER,a.name=`center-plane-handle`,this.cube=a,this.add(this.cube)}update(e){let t=new D().subVectors(e.position,this.cube.getWorldPosition(new D)).normalize(),n=this.cube.getWorldQuaternion(new ot),r=this.faceNormals.map((e,r)=>{let i=e.clone().applyQuaternion(n).dot(t);return{index:r,angle:Math.acos(Math.abs(i))}});r.sort((e,t)=>e.angle-t.angle);let i=[new cn(16755008).convertSRGBToLinear(),new cn(16419862).convertSRGBToLinear(),new cn(13921032).convertSRGBToLinear()];r.forEach((e,t)=>{let n=Math.floor(t/2);this.faceMaterials[e.index].color.copy(i[n])})}},NC=class extends EC{constructor(e){var t,n,r;super(e.direction),this.name=`PlaneHandle`;let i=(t=e.size)==null?.12:t,a=(n=e.offset)==null?.12:n,o=new cn((r=e.color)==null?16776960:r),s=new ri(i,i,.005),c=new vr({color:o,transparent:!0,opacity:.4,depthTest:!1,depthWrite:!1,side:2});switch(this.handle=new Ar(s,c),this.handle.direction=e.direction,this.handle.renderOrder=AC.MOVE_HELPER_ARROW,this.handle.name=`plane-handle-${e.direction}`,e.direction){case`xy`:this.handle.position.set(a,a,0);break;case`xz`:this.handle.position.set(a,0,a),this.handle.rotation.x=-Math.PI/2;break;case`yz`:this.handle.position.set(0,a,a),this.handle.rotation.y=Math.PI/2;break}this.add(this.handle)}};function PC(e,t,n){let r=e.position.distanceTo(t),i=e.fov,a=e.distance||3,o=r/3,s=i/90,c=a/3,l=o*s*c,u=(n==null?void 0:n.min)||.6,d=n==null?void 0:n.max;return u&&l<u?u:d&&l>d?d:l}function FC(e){let{latitude:t,longitude:n}=e,r=new D;return IC-t<.03?r.set(0,1,0):LC(0,n)?r.set(0,0,1):LC(Math.PI,n)?r.set(0,0,-1):LC(IC,n)?r.set(1,0,0):r.set(-1,0,0),r}var IC=Number((Math.PI/2).toFixed(5));function LC(e,t){return typeof e!=`number`||typeof t!=`number`?!1:Math.abs(e-t)<.001}function RC(e,t){return zC(document.createElement(t==null?`div`:t),e)}function zC(e,t){if(!t)return e;for(let n in t)n&&t[n]&&(e.style[n]=t[n]);return e}function BC(e){let t=RC(Object.assign({position:`absolute`,display:`block`,borderRadius:`4px`,paddingTop:`1px`,paddingBottom:`1px`,paddingLeft:`4px`,paddingRight:`4px`,pointerEvents:`none`,userSelect:`none`,zIndex:`99999`,backgroundColor:`rgba(0,0,0,0.7)`,fontSize:`12px`,color:`#fff`,letterSpacing:`0`,lineHeight:`18px`},e)),n=()=>{t.style.display!==`block`&&t.style.top&&t.style.left&&(t.style.display=`block`)};return{element:t,show:n,hide:()=>{t.style.display=`none`,t.style.top=``,t.style.left=``},setLeftTop:(e,r)=>{t.style.left=e,t.style.top=r,n()}}}var VC=class extends CC{constructor(e,t){super(e,t),this.name=`MoveHelper`,(t==null?void 0:t.xArrowEnable)!==!1&&(this.xArrow=new jC({direction:`x`,color:kC.X})),(t==null?void 0:t.yArrowEnable)!==!1&&(this.yArrow=new jC({direction:`y`,color:kC.Y})),(t==null?void 0:t.zArrowEnable)!==!1&&(this.zArrow=new jC({direction:`z`,color:kC.Z})),(t==null?void 0:t.centerHandleEnable)!==!1&&(this.centerHandle=new MC),(t==null?void 0:t.xyPlaneEnable)!==!1&&(this.xyPlane=new NC({direction:`xy`,color:kC.Z})),(t==null?void 0:t.xzPlaneEnable)!==!1&&(this.xzPlane=new NC({direction:`xz`,color:kC.Y})),(t==null?void 0:t.yzPlaneEnable)!==!1&&(this.yzPlane=new NC({direction:`yz`,color:kC.X})),t!=null&&t.container&&(t==null?void 0:t.moveTipsEnable)!==!1&&(this.container=t.container,this.moveTips=BC({display:`none`}),this.container.appendChild(this.moveTips.element)),this.add(...[this.xArrow,this.yArrow,this.zArrow,this.centerHandle,this.xyPlane,this.xzPlane,this.yzPlane].filter(Boolean))}update(e){if(this.xArrow&&(this.xArrow.visible=!0),this.yArrow&&(this.yArrow.visible=!0),this.zArrow&&(this.zArrow.visible=!0),this.centerHandle&&this.centerHandle.update(e),e.type===`OrthographicCamera`){let t=new D(1,0,0).applyQuaternion(this.quaternion),n=new D(0,1,0).applyQuaternion(this.quaternion),r=new D(0,0,1).applyQuaternion(this.quaternion),i=e.pose,a=FC(i),o=.0872665;Math.abs(t.angleTo(a)-0)<o||Math.abs(t.angleTo(a)-Math.PI)<o?this.xArrow&&(this.xArrow.visible=!1):Math.abs(n.angleTo(a)-0)<o||Math.abs(n.angleTo(a)-Math.PI)<o?this.yArrow&&(this.yArrow.visible=!1):(Math.abs(r.angleTo(a)-0)<o||Math.abs(r.angleTo(a)-Math.PI)<o)&&this.zArrow&&(this.zArrow.visible=!1)}}show(){var e;super.show(),this.xArrow&&this.add(this.xArrow),this.yArrow&&this.add(this.yArrow),this.zArrow&&this.add(this.zArrow),this.centerHandle&&this.add(this.centerHandle),this.xyPlane&&this.add(this.xyPlane),this.xzPlane&&this.add(this.xzPlane),this.yzPlane&&this.add(this.yzPlane),(e=this.moveTips)==null||e.hide()}setScaleByCamera(e){this.scale.setScalar(PC(e,this.position))}showDraggingHelper(e){this.xArrow&&(e.includes(`x`)?this.add(this.xArrow):this.remove(this.xArrow)),this.yArrow&&(e.includes(`y`)?this.add(this.yArrow):this.remove(this.yArrow)),this.zArrow&&(e.includes(`z`)?this.add(this.zArrow):this.remove(this.zArrow)),this.centerHandle&&(e.includes(`plane`)?this.add(this.centerHandle):this.remove(this.centerHandle)),this.xyPlane&&(e.includes(`xy`)?this.add(this.xyPlane):this.remove(this.xyPlane)),this.xzPlane&&(e.includes(`xz`)?this.add(this.xzPlane):this.remove(this.xzPlane)),this.yzPlane&&(e.includes(`yz`)?this.add(this.yzPlane):this.remove(this.yzPlane))}dispose(){var e,t;this.remove(...[this.xArrow,this.yArrow,this.zArrow,this.centerHandle,this.xyPlane,this.xzPlane,this.yzPlane].filter(Boolean)),(t=(e=this.moveTips)==null?void 0:e.element)==null||t.remove(),super.dispose()}},HC=class extends TC{constructor(e,t){super(e,t),this.name=`RotateHelper`,this.children=[],(t==null?void 0:t.yzCircleEnable)!==!1&&(this.xCircle=new UC({direction:`x`,color:kC.X})),(t==null?void 0:t.xzCircleEnable)!==!1&&(this.yCircle=new UC({direction:`y`,color:kC.Y})),(t==null?void 0:t.xyCircleEnable)!==!1&&(this.zCircle=new UC({direction:`z`,color:kC.Z})),t!=null&&t.container&&(t==null?void 0:t.angleTipsEnable)!==!1&&(this.container=t==null?void 0:t.container,this.angleTips=BC({display:`none`}),this.container.appendChild(this.angleTips.element)),this.add(...[this.xCircle,this.yCircle,this.zCircle].filter(Boolean)),this.show()}hide(){this.children.forEach(e=>e.hide())}show(){var e;this.children.forEach(e=>e.showCircle()),(e=this.angleTips)==null||e.hide()}setScaleByCamera(e){this.scale.setScalar(PC(e,this.position))}update(e){if(e.type===`OrthographicCamera`)return;let t=this.helperObject.position.clone().sub(e.position).normalize(),n=new D(1,0,0).applyQuaternion(this.quaternion),r=new D(0,1,0).applyQuaternion(this.quaternion),i=new D(0,0,1).applyQuaternion(this.quaternion),a=t.angleTo(n),o=t.angleTo(r),s=t.angleTo(i),c=Math.PI/2,l=o>=c,u=s>=c,d=a>=c;if(this.xCircle){let e=this.xCircle.circle.gapAngle;l&&u?this.xCircle.circle.geometry=new mi(.3,.35,20,8,e,Math.PI/2-e*2):l&&!u?this.xCircle.circle.geometry=new mi(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!l&&u?this.xCircle.circle.geometry=new mi(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!l&&!u&&(this.xCircle.circle.geometry=new mi(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),this.xCircle.angleSector&&(this.xCircle.angleSector.offsetAngle=e=>e,l&&u||l&&!u?this.xCircle.angleSector.baseAxes=new D(0,0,1):!l&&u?(this.xCircle.angleSector.baseAxes=new D(0,-1,0),this.xCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!l&&!u&&(this.xCircle.angleSector.baseAxes=new D(0,0,-1),this.xCircle.angleSector.offsetAngle=e=>e-Math.PI))}if(this.yCircle){this.yCircle.angleSector.offsetAngle=e=>e;let e=this.yCircle.circle.gapAngle;d&&u?this.yCircle.circle.geometry=new mi(.3,.35,20,8,e,Math.PI/2-e*2):d&&!u?this.yCircle.circle.geometry=new mi(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!d&&u?this.yCircle.circle.geometry=new mi(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!d&&!u&&(this.yCircle.circle.geometry=new mi(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),d&&u?this.yCircle.angleSector.baseAxes=new D(1,0,0):d&&!u?(this.yCircle.angleSector.baseAxes=new D(0,0,-1),this.yCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!d&&u?(this.yCircle.angleSector.baseAxes=new D(0,0,1),this.yCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!d&&!u&&(this.yCircle.angleSector.baseAxes=new D(-1,0,0),this.yCircle.angleSector.offsetAngle=e=>e+Math.PI)}if(this.zCircle){this.zCircle.angleSector.offsetAngle=e=>e;let e=this.zCircle.circle.gapAngle;d&&l?this.zCircle.circle.geometry=new mi(.3,.35,20,8,e,Math.PI/2-e*2):d&&!l?this.zCircle.circle.geometry=new mi(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!d&&l?this.zCircle.circle.geometry=new mi(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!d&&!l&&(this.zCircle.circle.geometry=new mi(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),this.zCircle.angleSector&&(d&&l?this.zCircle.angleSector.baseAxes=new D(1,0,0):d&&!l?(this.zCircle.angleSector.baseAxes=new D(0,-1,0),this.zCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!d&&l?(this.zCircle.angleSector.baseAxes=new D(0,1,0),this.zCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!d&&!l&&(this.zCircle.angleSector.baseAxes=new D(-1,0,0),this.zCircle.angleSector.offsetAngle=e=>e+Math.PI))}}showDraggingHelper(e){var t;this.hide(),this.children.filter(t=>e.includes(t.direction)).forEach(e=>e.showRing()),(t=this.angleTips)==null||t.show()}dispose(){var e,t;this.removeFromParent(),(t=(e=this.angleTips)==null?void 0:e.element)==null||t.remove()}},UC=class extends nn{constructor(e){super(),this.direction=e.direction,this.circle=new WC(e),this.ring=new GC(e),this.angleSector=new KC(e),this.add(this.circle,this.ring,this.angleSector),this.direction===`y`?this.rotation.x=Math.PI/2:this.direction===`x`&&(this.rotation.y=-Math.PI/2)}showCircle(){this.add(this.circle),this.remove(this.ring,this.angleSector)}showRing(){this.add(this.ring,this.angleSector),this.remove(this.circle)}hide(){this.remove(this.ring,this.angleSector,this.circle)}},WC=class extends Ar{constructor(e){var t;super(),this.gapAngle=.02,this.geometry=new mi(.3,.35,20,8,this.gapAngle,Math.PI/2-this.gapAngle*2),this.material=new vr({opacity:.6,transparent:!0,color:(t=e.color)==null?16777215:t,side:2,depthTest:!1}),this.direction=e.direction,this.renderOrder=AC.ROTATE_HELPER,this.geometry.name=`RotateHelperCircleGeometry-${this.direction}`}},GC=class extends nn{constructor(e){super(),this.direction=e.direction;let t=.015,n=Array(8).fill(null).map((e,n)=>{let r=new Ar(new mi(.3,.35,20,8,Math.PI/4*n+t,Math.PI/4-t*2),new vr({opacity:1,color:16777215,depthTest:!1,depthWrite:!1,transparent:!0,side:2}));return r.name=`AxesDashedRing-${this.direction}-${n}`,r});this.add(...n)}},KC=class extends Ar{constructor(e){var t;switch(super(),this.offsetAngle=e=>e,e.direction){case`x`:this.baseAxes=new D(0,0,1);break;case`y`:this.baseAxes=new D(1,0,0);break;case`z`:this.baseAxes=new D(1,0,0);break}this.geometry=new ii(.3505,48,0,1e-4),this.material=new vr({opacity:.4,color:(t=e.color)==null?16777215:t,depthTest:!1,depthWrite:!1,transparent:!0,side:2}),this.direction=e.direction,this.angleDirection=1}setClockwiseDirection(){this.angleDirection=-1}setCounterClockwiseDirection(){this.angleDirection=1}toggleDirection(){this.angleDirection=this.angleDirection===1?-1:1}setBaseAxes(e){this.baseAxes=e.clone().normalize()}getDirection(){return this.angleDirection===-1?`clockwise`:`counterclockwise`}},qC=class extends wC{constructor(e){super(e),this.name=`BoundingBoxHelper`,this.positionAttribute=new Un(new Float32Array(24),3),this.box=this.createBox(),this.outline=this.createOutline(),this.add(this.box,this.outline),this.update()}initQuaternion(){this.quaternion.copy(this.originObject3D.quaternion),this.scale.copy(this.originObject3D.scale)}setHelperQuaternion(e,t){bC(this,e,t)}raycasterIntersectObject(e,t){return e.intersectObject(this,!1,t)}raycast(e,t){this.box.raycast(e,t)}update(){let e=new Tn,t=new Ot().copy(this.originObject3D.matrixWorld).invert(),n=new D;if(this.originObject3D.updateMatrixWorld(!0),this.originObject3D.traverse(r=>{let i=r.geometry;if(!i)return;r.updateMatrixWorld(!0);let a=new Ot().multiplyMatrices(t,r.matrixWorld);if(i.isBufferGeometry){let t=i,r=t.attributes.position;if(r)for(let t=0,i=r.count;t<i;t++)n.fromBufferAttribute(r,t).applyMatrix4(a),e.expandByPoint(n);let o=t.attributes.instanceStart,s=t.attributes.instanceEnd;if(o)for(let t=0,r=o.count;t<r;t++)n.fromBufferAttribute(o,t).applyMatrix4(a),e.expandByPoint(n);if(s)for(let t=0,r=s.count;t<r;t++)n.fromBufferAttribute(s,t).applyMatrix4(a),e.expandByPoint(n)}else if(i.vertices){let t=i.vertices;for(let r of t)n.copy(r).applyMatrix4(a),e.expandByPoint(n)}}),e.isEmpty())return;let{min:r,max:i}=e;this.positionAttribute.setXYZ(0,i.x,i.y,i.z),this.positionAttribute.setXYZ(1,r.x,i.y,i.z),this.positionAttribute.setXYZ(2,r.x,r.y,i.z),this.positionAttribute.setXYZ(3,i.x,r.y,i.z),this.positionAttribute.setXYZ(4,i.x,i.y,r.z),this.positionAttribute.setXYZ(5,r.x,i.y,r.z),this.positionAttribute.setXYZ(6,r.x,r.y,r.z),this.positionAttribute.setXYZ(7,i.x,r.y,r.z),this.positionAttribute.needsUpdate=!0}createOutline(){let e=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),t=new ir;t.setIndex(new Un(e,1)),t.setAttribute(`position`,this.positionAttribute);let n=new Zr(t,new zr({color:64767,linewidth:1,opacity:1,toneMapped:!1}));return n.matrixAutoUpdate=!1,n}createBox(){let e=new Uint16Array([0,1,2,0,2,3,0,3,7,0,7,4,0,4,5,0,5,1,6,1,5,6,2,1,6,5,4,6,4,7,6,3,2,6,7,3]),t=new ir;return t.setIndex(new Un(e,1)),t.setAttribute(`position`,this.positionAttribute),new Ar(t,new vr({color:64767,opacity:.1,depthTest:!1,transparent:!0}))}},JC=new Map;function YC(e){if(JC.has(e))return JC.get(e).hooks;let n=new t.Subscribe,r=null,i,a=()=>{r=requestAnimationFrame(a);let t=e.projectionMatrix.toArray().join(`,`)+e.matrixWorld.toArray().join(`,`);t!==i&&(i=t,n.emit(`cameraUpdate`))};return a(),JC.set(e,{hooks:n,dispose:()=>{JC.delete(e),cancelAnimationFrame(r)}}),n}function XC(e){return arguments.length===0?[]:Array.isArray(e)?e:[e]}var ZC=class{updateOtherControllers(e){this.otherControllers=e}getIsDragging(){return this.isDragging}constructor(e,n){var r,i,a;this.preventTapDefaultEvent=!1,this.disposers=[],this.isDragging=!1,this.enabled=!1,this.name=`BaseController`,this.onWantsTapGesture=e=>{if(this.getIntersectObject(e))return!1},this.updateHelperScale=()=>{`update`in this.helperObject3D&&typeof this.helperObject3D.update==`function`&&this.helperObject3D.update(this.camera),this.helperObject3D.setScaleByCamera(this.camera)},this.getBox=()=>(this.boundingBox||(this.boundingBox=new Tn().expandByObject(this.originObject3D)),this.boundingBox),this.hooks=(r=e.sharedHooks)==null?new t.Subscribe:r,this.internalHooks=(i=e.sharedInternalHooks)==null?new t.Subscribe:i,this.camera=e.camera,this.model=e.model,this.originObject3D=e.originObject3D,this.helperObject3D=e.helperObject3D,this.container=e.container,this.scene=e.scene,this.domEvents=e.domEvents,this.onRender=(a=e.onRender)==null?(()=>{}):a,this.config=n==null?{}:n,this.otherControllers=e.otherControllers,this.initialHelperPosition(),this.initialHelperQuaternion(),this.updateHelperScale(),this.cameraHooks=YC(this.camera),this.enable();let o=this.onSetOriginObjectScale.bind(this),s=this.onSetOriginObjectRotate.bind(this),c=this.onSetOriginObjectPosition.bind(this),l=this.onApplyOriginObjectScale.bind(this),u=this.onApplyOriginObjectRotate.bind(this),d=this.onApplyOriginObjectPosition.bind(this),f=this.initialHelperPosition.bind(this);this.cameraHooks.on(`cameraUpdate`,this.updateHelperScale),this.internalHooks.on(`initialHelperPosition`,f),this.internalHooks.on(`setObjectScale`,o),this.internalHooks.on(`setObjectRotate`,s),this.internalHooks.on(`setObjectPosition`,c),this.internalHooks.on(`applyObjectPosition`,d),this.internalHooks.on(`applyObjectRotate`,u),this.internalHooks.on(`applyObjectScale`,l),this.hooks.on(`moveEnd`,this.updateHelperScale),this.internalHooks.on(`setObjectPosition`,this.updateHelperScale),this.internalHooks.on(`initialHelperPosition`,this.updateHelperScale),this.disposers.push(()=>{this.cameraHooks.off(`cameraUpdate`,this.updateHelperScale),this.internalHooks.off(`initialHelperPosition`,f),this.internalHooks.off(`setObjectScale`,o),this.internalHooks.off(`setObjectRotate`,s),this.internalHooks.off(`setObjectPosition`,c),this.internalHooks.off(`applyObjectPosition`,d),this.internalHooks.off(`applyObjectRotate`,u),this.internalHooks.off(`applyObjectScale`,l),this.hooks.off(`moveEnd`,this.updateHelperScale),this.internalHooks.off(`setObjectPosition`,this.updateHelperScale),this.internalHooks.off(`initialHelperPosition`,this.updateHelperScale)})}initialHelperPosition(){this.helperObject3D.initialPosition(this.calculateOffset(this.config.offset))}initialHelperQuaternion(){this.helperObject3D.initQuaternion(this.config)}enable(){this.enabled||(this.enabled=!0,this.scene.add(this.helperObject3D),this.helperObject3D.enable(),this.render())}disable(){this.enabled&&(this.enabled=!1,this.helperObject3D.disable(),this.render())}show(){this.helperObject3D.show(),this.render()}hide(){this.helperObject3D.hide(),this.render()}dispose(){var e;(e=this.disposers)==null||e.forEach(e=>e==null?void 0:e()),this.helperObject3D.dispose(),this.render()}applyHelperMatrix4(e){this.helperObject3D.applyMatrix4(e)}applyHelperQuaternion(e,t){this.helperObject3D.applyHelperQuaternion(e,t)}applyHelperScaleMatrix4(e,t){this.helperObject3D.applyHelperScaleMatrix4(e,t)}onWantsGesture(e,t,n){if(this.isDragging)return!1}onIntersectionOnModelUpdate(e){}onApplyOriginObjectScale(e){this.applyHelperScaleMatrix4(e.matrix,e.origin)}onApplyOriginObjectRotate(e){let t=e.origin;if(t){let n=new D().subVectors(this.helperObject3D.position,t).applyQuaternion(e.quaternion).add(t);this.helperObject3D.position.copy(n)}}onApplyOriginObjectPosition(e){this.applyHelperMatrix4(e.matrix)}onSetOriginObjectScale(e){this.helperObject3D.scale.copy(e),this.updateOffsetByScale(e)}onSetOriginObjectRotate(e,t){}onSetOriginObjectPosition(e){this.helperObject3D.position.copy(e.clone().add(this.calculateOffset(this.config.offset)))}render(){this.onRender()}updateOffsetByScale(e){if(this.boundingBox&&this.config.offset){let t=this.originObject3D.position,n=new D().subVectors(this.boundingBox.max,t).multiply(e).add(t),r=new D().subVectors(this.boundingBox.min,t).multiply(e).add(t),i=this.calculateOffset(this.config.offset,{min:r,max:n});this.helperObject3D.initialPosition(i)}}hoverListener(e,t=16777215,n=1){let r=XC(e).filter(e=>!xC(e)),i=[];for(let e of r)if(e.material||e instanceof nn){let r=e instanceof nn?e.children.filter(e=>e instanceof Ar):[e];r.forEach(e=>{var t,n,r,i;let a=e.material;Array.isArray(a)?(e.__originalColor__=(t=e.__originalColor__)==null?a.map(e=>e.color.clone()):t,e.__originalOpacity__=(n=e.__originalOpacity__)==null?a.map(e=>e.opacity):n):(e.__originalColor__=(r=e.__originalColor__)==null?a.color.clone():r,e.__originalOpacity__=(i=e.__originalOpacity__)==null?a.opacity:i)});let a=()=>{r.forEach(e=>{if(e.name===`ScaleHelperTransparentGroup`){if(e.children[0]){let r=e.children[0].material;r.color.set(t),r.opacity=n}}else{let r=e.material;Array.isArray(r)?r.forEach(e=>{e.color.set(t),e.opacity=n}):(r.color.set(t),r.opacity=n)}}),this.render()},o=()=>{r.forEach(e=>{if(e.name===`ScaleHelperTransparentGroup`){if(e.children[0]){let t=e.children[0].material;t.color.set(16776960),t.opacity=1}}else{let t=e.material;if(Array.isArray(t)){let n=e.__originalColor__,r=e.__originalOpacity__;t.forEach((e,t)=>{n&&n[t]&&e.color.copy(n[t]),r&&r[t]!==void 0&&(e.opacity=r[t])})}else t.color.copy(e.__originalColor__),t.opacity=e.__originalOpacity__}}),this.render()},s=e=>{this.isDragging||a()},c=e=>{this.isDragging||o()};for(let e of r)this.domEvents.addEventListener(e,`mouseover`,s),this.domEvents.addEventListener(e,`mouseout`,c),this.hooks.on(`moveStart`,a),this.hooks.on(`moveEnd`,o),this.hooks.on(`rotateEnd`,o),this.hooks.on(`scaleEnd`,o),i.push(()=>{this.domEvents.removeEventListener(e,`mouseover`,s),this.domEvents.removeEventListener(e,`mouseout`,c),this.hooks.off(`moveStart`,a),this.hooks.off(`moveEnd`,o),this.hooks.off(`rotateEnd`,o),this.hooks.off(`scaleEnd`,o)})}return()=>i.forEach(e=>e==null?void 0:e())}getIntersectObject(e){let t=this.camera.position,n=this.helperObject3D;if(!n)return;let r=this.helperObject3D.raycasterIntersectObject(e)[0];if(!r)return;let i=r;if(i.object=n,this.model.intersectRaycaster){let n=this.model.intersectRaycaster(e)[0];if(n&&n.point.distanceTo(t)<i.point.distanceTo(t))return}return i.object}calculateOffset(e,t){let n=new D(0,0,0);if(!e)return n;let r=()=>t||this.getBox();if(typeof e.x==`number`)n.setX(e.x);else if(typeof e.x==`object`){let t=r();n.setX((t.max.x-t.min.x)*e.x.percents)}if(typeof e.y==`number`)n.setY(e.y);else if(typeof e.y==`object`){let t=r();n.setY((t.max.y-t.min.y)*e.y.percents)}if(typeof e.z==`number`)n.setZ(e.z);else if(typeof e.z==`object`){let t=r();n.setZ((t.max.z-t.min.z)*e.z.percents)}return n}};function QC(e,t){let n=10,r=10,i=e.isPerspectiveCamera,a=e.isOrthographicCamera;if(i){let i=e,a=i.position.distanceTo(t),o=i.fov*Math.PI/180;r=2*Math.tan(o/2)*a,n=r*i.aspect}else if(a){let t=e;n=Math.abs(t.right-t.left),r=Math.abs(t.top-t.bottom)}let o=Math.sqrt(n*n+r*r),s=o*.8,c=Math.min(n,r)*.25,l=o*1.2;return Math.max(c,Math.min(s,l))}var $C=class{constructor(e,t,n){this.camera=e,this.container=t,this.defaults=Object.assign({},n||{})}createSolidLine(e,t,n){let r=Object.assign(Object.assign({color:16777215,renderOrder:AC.DRAG_GUIDE_LINE},this.defaults),n||{}),i=t.clone().normalize(),a=this.computeInfiniteLineLength(e),o=e.clone().add(i.clone().multiplyScalar(-a)),s=e.clone().add(i.clone().multiplyScalar(a)),c=new Float32Array([o.x,o.y,o.z,s.x,s.y,s.z]),l=new ir;l.setAttribute(`position`,new Un(c,3));let u=new qr(l,new zr({color:r.color,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.65}));return u.renderOrder=r.renderOrder,u}updateSolidLine(e,t,n,r){let i=n.clone().normalize(),a=this.computeInfiniteLineLength(t),o=t.clone().add(i.clone().multiplyScalar(-a)),s=t.clone().add(i.clone().multiplyScalar(a)),c=new Float32Array([o.x,o.y,o.z,s.x,s.y,s.z]),l=e.geometry,u=l.getAttribute(`position`);u&&u.itemSize===3&&u.array.length===c.length?(u.array.set(c),u.needsUpdate=!0):l.setAttribute(`position`,new Un(c,3)),(r==null?void 0:r.color)!==void 0&&e.material.color.setHex(r.color)}computeInfiniteLineLength(e){return QC(this.camera,e)*10}dispose(e){if(!e)return;e.geometry.dispose();let t=e.material;Array.isArray(t)?t.forEach(e=>e.dispose()):t.dispose()}updateDefaults(e){this.defaults=Object.assign(Object.assign({},this.defaults),e)}};function ew(e,t,n){let{top:r,left:i,width:a,height:o}=t.getBoundingClientRect();return n&&(i+=a*n.left,r+=o*(1-n.bottom-n.height),a*=n.width,o*=n.height),new at((e.x-i)/a*2-1,-(e.y-r)/o*2+1)}function tw(e,t,n){if(!t||!n||!e)return;let r=ew(t,n);if(Math.abs(r.x)===1||Math.abs(r.y)===1)return;let i=new ea;return i.setFromCamera(r,e),i.params.Points&&(i.params.Points.threshold=.1),i}function nw(e){let{raycaster:t,line:n,clampToLine:r=!0}=e,i=new Rr().setFromNormalAndCoplanarPoint(t.ray.direction.clone().normalize(),new D),a=i.projectPoint(n.start,new D),o=i.projectPoint(n.end,new D),s=new da(a,o),c=s.closestPointToPoint(t.ray.origin,r,new D),l=c.distanceTo(o),u=c.distanceTo(a),d=s.distance();if(l>u&&l>d){let e=-c.distanceTo(a)/d,t=n.start.clone().sub(n.end).normalize();return n.start.clone().sub(t.clone().multiplyScalar(e*n.distance()))}else{let e=c.distanceTo(a)/d;return new D().lerpVectors(n.start,n.end,e)}}var rw=class extends ZC{get moveByMouseEnable(){return this._moveByMouse.enabled}constructor(...e){var t,n,r,i,a;super(...e),this.name=`MoveController`,this.solidGuide=new $C(this.camera,this.container,(n=(t=this.config)==null?void 0:t.solidGuide)==null?{}:n),this._moveByMouse={enabled:!1},this.dragStart=e=>{if(this.moveByMouseEnable||this.isDragging)return;let t=e==null?void 0:e.intersect;if(!t)return this.dragEnd();let n=(t==null?void 0:t.object).direction;if(!n)return this.dragEnd();let r=new D(1,0,0),i=new D(0,1,0),a=new D(0,0,1),o=(()=>{switch(n){case`x`:return r;case`y`:return i;case`z`:return a;case`xy`:case`xz`:case`yz`:case`plane`:return}})(),s=t.point.clone();if(n===`xy`||n===`xz`||n===`yz`){let e=(()=>{switch(n){case`xy`:return a;case`xz`:return i;case`yz`:return r}})(),t=new Rr().setFromNormalAndCoplanarPoint(e,s),o=s.clone();this.startInfo={draggingDirection:n,startVectorProject:o,line:new da(o.clone(),o.clone()),plane:t}}else if(n===`plane`){let e=this.camera.position.clone(),t=s.clone(),r=t.clone().sub(e).normalize(),i=new Rr().setFromNormalAndCoplanarPoint(r,t),a=t.clone();this.startInfo={draggingDirection:n,startVectorProject:a,line:new da(a.clone(),a.clone()),plane:i}}else{if(!o)return this.dragEnd();let e=new da(s.clone().sub(o.normalize()),s.clone().add(o.normalize()));this.startInfo={draggingDirection:n,startVectorProject:s,line:e};try{let e=o.clone().normalize(),t=this.helperObject3D.getWorldPosition(new D),n=this.solidGuide.createSolidLine(t,e,{color:16777215,renderOrder:AC.DRAG_GUIDE_LINE});this.scene.add(n),this.dragGuideLine=n}catch(e){}}let c=(()=>{switch(n){case`plane`:return[];case`xy`:return[`x`,`y`,`xy`];case`xz`:return[`x`,`z`,`xz`];case`yz`:return[`y`,`z`,`yz`];default:return[n]}})();this.helperObject3D.showDraggingHelper(c),this.hooks.emit(`moveStart`,n),this.isDragging=!0,this.setTipsText(this.originObject3D.position),this.setTipsPosition(s)},this.dragging=e=>{if(!this.isDragging||!this.startInfo)return;let t=`touches`in e?e.touches[0].clientX:e.x,n=`touches`in e?e.touches[0].clientY:e.y,r=tw(this.camera,{x:t,y:n},this.container);return r?(this.move(r),!1):this.dragEnd()},this.dragEnd=()=>{if(this.isDragging){if(this.startInfo=void 0,this.isDragging=!1,this.dragGuideLine){this.scene.remove(this.dragGuideLine),this.dragGuideLine.geometry.dispose();let e=this.dragGuideLine.material;Array.isArray(e)?e.forEach(e=>e.dispose()):e.dispose(),this.dragGuideLine=void 0}this.helperObject3D.show(),this.hooks.emit(`moveEnd`)}};let o=this.helperObject3D;if(this.hoverListener([o.xArrow,o.yArrow,o.zArrow,(r=o.xyPlane)==null?void 0:r.handle,(i=o.xzPlane)==null?void 0:i.handle,(a=o.yzPlane)==null?void 0:a.handle]),o.centerHandle&&o.centerHandle instanceof MC){let e=o.centerHandle,t=e.cube;this.domEvents.addEventListener(t,`mouseover`,()=>{this.isDragging||(Array.isArray(t.material)&&t.material.forEach(e=>{e.color.set(16777215)}),this.render())}),this.domEvents.addEventListener(t,`mouseout`,()=>{this.isDragging||(e.update(this.camera),this.render())})}let s=this.show.bind(this),c=this.hide.bind(this),l=()=>{this.helperObject3D.update(this.camera),this.isDragging&&this.updateDragGuideLineScale(),this.render()};l(),this.domEvents.addEventListener(this.helperObject3D,`mousedown`,this.dragStart),document.addEventListener(`mousemove`,this.dragging),document.addEventListener(`mouseup`,this.dragEnd),this.domEvents.addEventListener(this.helperObject3D,`touchstart`,this.dragStart),document.addEventListener(`touchmove`,this.dragging),document.addEventListener(`touchend`,this.dragEnd),this.hooks.on(`rotateStart`,c),this.hooks.on(`rotateEnd`,s),this.hooks.on(`scaleStart`,c),this.hooks.on(`scaleEnd`,s),this.hooks.on(`moveByMouseEnable`,c),this.hooks.on(`moveByMouseDisable`,s),this.hooks.on(`updateOtherHelpers`,e=>{this.helperObject3D.update(e.camera),this.render()}),this.cameraHooks.on(`cameraUpdate`,l),this.disposers.push(()=>{this.domEvents.removeEventListener(this.helperObject3D,`mousedown`,this.dragStart),document.removeEventListener(`mousemove`,this.dragging),document.removeEventListener(`mouseup`,this.dragEnd),this.domEvents.removeEventListener(this.helperObject3D,`touchstart`,this.dragStart),document.removeEventListener(`touchmove`,this.dragging),document.removeEventListener(`touchend`,this.dragEnd),this.hooks.off(`rotateStart`,c),this.hooks.off(`rotateEnd`,s),this.hooks.off(`scaleStart`,c),this.hooks.off(`scaleEnd`,s),this.hooks.off(`moveByMouseEnable`,c),this.hooks.off(`moveByMouseDisable`,s),this.hooks.off(`updateOtherHelpers`),this.cameraHooks.off(`cameraUpdate`,l)}),this.moveByMouseEnable&&this.moveByMouse()}dispose(){var e;super.dispose(),(e=this.disposers)==null||e.forEach(e=>e==null?void 0:e())}moveByMouse(e){this._moveByMouse={enabled:!0,useFaceNormal:e==null?void 0:e.useFaceNormal},this.preventTapDefaultEvent=!0;let t=this.handleMouseDown.bind(this),n=this.handleMouseUp.bind(this);this.hooks.emit(`moveByMouseEnable`),setTimeout(()=>{this.container.addEventListener(`mousedown`,t),this.container.addEventListener(`mouseup`,n)}),this.mousedownEventListenerDisposer=()=>{this.container.removeEventListener(`mousedown`,t),this.container.removeEventListener(`mouseup`,n)}}disableMoveByMouse(){var e;this._moveByMouse={enabled:!1},this.preventTapDefaultEvent=!1,this.hooks.emit(`moveByMouseDisable`),(e=this.mousedownEventListenerDisposer)==null||e.call(this)}onIntersectionOnModelUpdate(e){var t,n,r;if(!this.moveByMouseEnable)return;let{point:i,face:a}=e;if(!this.hooks.emit(`wantToMove`,i)){if(this.originObject3D.position.copy(i),(this._moveByMouse.useFaceNormal===!0||typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.enable!==!1)&&a!=null&&a.normal){let e=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.alignmentVector?this._moveByMouse.useFaceNormal.alignmentVector:{x:0,y:1,z:0},i=new D((t=e.x)==null?0:t,(n=e.y)==null?0:n,(r=e.z)==null?0:r),o=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.fixedFaceNormal?this._moveByMouse.useFaceNormal.fixedFaceNormal(a.normal):a.normal;this.originObject3D.quaternion.setFromUnitVectors(i,o),this.internalHooks.emit(`setObjectRotate`,this.originObject3D.quaternion.clone(),new D)}this.internalHooks.emit(`setObjectPosition`,i),this.hooks.emit(`move`,i)}}handleMouseDown(e){let{x:t,y:n}=e;this.mouseInfo={x:t,y:n,mouseDownTimestamp:Date.now()}}handleMouseUp(e){if(!this.mouseInfo)return;let{x:t,y:n}=e;this.mouseInfo.x===t&&this.mouseInfo.y===n&&Date.now()-this.mouseInfo.mouseDownTimestamp<500&&(this.disableMoveByMouse(),this.mouseInfo=void 0)}updateDragGuideLineScale(){if(!this.dragGuideLine||!this.startInfo)return;let{line:e}=this.startInfo,t=e.end.clone().sub(e.start).normalize();if(t.lengthSq()<1e-6)return;let n=this.helperObject3D.getWorldPosition(new D);this.solidGuide.updateSolidLine(this.dragGuideLine,n,t)}move(e){if(!this.startInfo)return this.dragEnd();let{line:t,startVectorProject:n}=this.startInfo,r=this.originObject3D,i=this.startInfo.draggingDirection===`plane`||this.startInfo.draggingDirection===`xy`||this.startInfo.draggingDirection===`xz`||this.startInfo.draggingDirection===`yz`,a;if(i){let t=this.startInfo.plane;if(!t)return;let n=new D,r=t.normal.dot(e.ray.direction);if(Math.abs(r)<1e-6)return;let i=-(t.normal.dot(e.ray.origin)+t.constant)/r;if(i<0)return;n.copy(e.ray.origin.clone().add(e.ray.direction.clone().multiplyScalar(i))),a=n}else a=nw({raycaster:e,line:t,clampToLine:!1});let o=r.position.clone(),s=a.clone().sub(n),c=new Ot;c.setPosition(s);let l=r.position.clone().applyMatrix4(c);if(this.hooks.emit(`wantToMove`,l))return;let u=l.clone();this.hooks.emit(`moveBefore`,u);let d=new Ot;d.setPosition(u.clone().sub(o)),r.position.copy(u),this.setTipsText(u),this.setTipsPosition(u),n.copy(a),this.internalHooks.emit(`applyObjectPosition`,{matrix:d}),this.hooks.emit(`move`,u)}setTipsText(e){var t;let n=(t=this.helperObject3D.moveTips)==null?void 0:t.element;if(!n||!this.startInfo)return;let r=this.startInfo.draggingDirection,i=e=>e.toFixed(3);switch(r){case`x`:n.innerText=`x: ${i(e.x)}`;break;case`y`:n.innerText=`y: ${i(e.y)}`;break;case`z`:n.innerText=`z: ${i(e.z)}`;break;case`xy`:n.innerText=`x: ${i(e.x)} y: ${i(e.y)}`;break;case`xz`:n.innerText=`x: ${i(e.x)} z: ${i(e.z)}`;break;case`yz`:n.innerText=`y: ${i(e.y)} z: ${i(e.z)}`;break;case`plane`:n.innerText=`x: ${i(e.x)} y: ${i(e.y)} z: ${i(e.z)}`;break}}setTipsPosition(e){let t=this.helperObject3D.moveTips;if(!t)return;let{x:n,y:r,z:i}=this.helperObject3D.getWorldPosition(new D).clone().project(this.camera);if(i>1){t.hide();return}let a=this.container.getBoundingClientRect(),o=(n+1)/2*a.width,s=(-r+1)/2*a.height;t.setLeftTop(o+`px`,s+`px`)}},iw=class{constructor(e,t,n,r,i,a,o,s,c){this.onFiveWantsTapGesture=e=>{if(!this.helperController)return;if(this.helperController.preventTapDefaultEvent)return!1;let t=this.helperController.onWantsTapGesture(e);return this.five.needsRender=!0,t},this.onFiveWantsGesture=(...e)=>{if(!this.helperController)return;let t=this.helperController.onWantsGesture(...e);return this.five.needsRender=!0,t},this.onFiveIntersectionOnModelUpdate=(...e)=>{this.helperController&&this.helperController.onIntersectionOnModelUpdate(...e)};let{camera:l,model:u,scene:d}=e,f=e.getElement();if(this.five=e,!l||!u||!f||!d)return;let p=c==null?d:c,m=()=>{e.needsRender=!0};this.helperController=new n({camera:l,model:u,domEvents:t,originObject3D:r,helperObject3D:i,container:f,scene:p,onRender:m,sharedHooks:o,sharedInternalHooks:s},a),e.on(`wantsTapGesture`,this.onFiveWantsTapGesture),e.on(`wantsGesture`,this.onFiveWantsGesture),e.on(`intersectionOnModelUpdate`,this.onFiveIntersectionOnModelUpdate)}dispose(){var e;this.five.off(`wantsTapGesture`,this.onFiveWantsTapGesture),this.five.off(`wantsGesture`,this.onFiveWantsGesture),this.five.off(`intersectionOnModelUpdate`,this.onFiveIntersectionOnModelUpdate),(e=this.helperController)==null||e.dispose()}},aw=new ot,ow=class extends ZC{get rotateCenter(){return this.helperObject3D.position.clone()}constructor(...e){var t,n,r;super(...e),this.name=`RotateController`,this.solidGuide=new $C(this.camera,this.container),this.snapGuideLines=[];let i=this.helperObject3D;this.hoverListener([(t=i.xCircle)==null?void 0:t.circle,(n=i.yCircle)==null?void 0:n.circle,(r=i.zCircle)==null?void 0:r.circle].filter(Boolean));let a=this.dragStart.bind(this),o=this.dragging.bind(this),s=this.dragEnd.bind(this),c=this.show.bind(this),l=this.hide.bind(this),u=()=>{this.helperObject3D.update(this.camera),this.render()};u(),this.domEvents.addEventListener(this.helperObject3D,`mousedown`,a),document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s),this.domEvents.addEventListener(this.helperObject3D,`touchstart`,a),document.addEventListener(`touchmove`,o),document.addEventListener(`touchend`,s),this.hooks.on(`moveStart`,l),this.hooks.on(`moveEnd`,c),this.hooks.on(`scaleStart`,l),this.hooks.on(`scaleEnd`,c),this.hooks.on(`moveByMouseEnable`,l),this.hooks.on(`moveByMouseDisable`,c),this.hooks.on(`updateOtherHelpers`,e=>{this.helperObject3D.update(e.camera),this.render()}),this.cameraHooks.on(`cameraUpdate`,u),this.disposers.push(()=>{this.domEvents.removeEventListener(this.helperObject3D,`mousedown`,a),document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s),this.domEvents.removeEventListener(this.helperObject3D,`touchstart`,a),document.removeEventListener(`touchmove`,o),document.removeEventListener(`touchend`,s),this.hooks.off(`moveStart`,l),this.hooks.off(`moveEnd`,c),this.hooks.off(`scaleStart`,l),this.hooks.off(`scaleEnd`,c),this.hooks.off(`moveByMouseEnable`,l),this.hooks.off(`moveByMouseDisable`,c),this.hooks.off(`updateOtherHelpers`),this.cameraHooks.off(`cameraUpdate`,u)})}setRotateAngle(e){let{x:t=0,y:n=0,z:r=0}=e,i=new Rt(it.degToRad(t),it.degToRad(n),it.degToRad(r)),a=new ot().setFromEuler(i);if(this.hooks.emit(`wantToRotate`,a))return;let{originObject3D:o,rotateCenter:s}=this;bC(o,a,s),this.internalHooks.emit(`setObjectRotate`,a,s),this.hooks.emit(`rotate`,a),this.render()}getEulerAngle(e,t){let{originObject3D:n}=this,r=new Rt().setFromQuaternion(n.quaternion),i={x:it.radToDeg(r.x),y:it.radToDeg(r.y),z:it.radToDeg(r.z)},a={x:e===`x`?t:i.x,y:e===`y`?t:i.y,z:e===`z`?t:i.z},o=new Rt(it.degToRad(a.x),it.degToRad(a.y),it.degToRad(a.z));return new ot().setFromEuler(o)}onApplyOriginObjectRotate(e){this.isDragging||super.onApplyOriginObjectRotate(e)}onApplyOriginObjectScale(e){}dragStart(e){if(this.isDragging)return;this.helperObject3D.update(this.camera);let t=e==null?void 0:e.intersect;if(!t)return this.dragEnd();let n=(t==null?void 0:t.object).direction;if(!n)return this.dragEnd();let r=t.point;this.setTipsAngle(0);let i=r.clone();i.y+=.2,this.setTipsPosition(i);let a=new ot,o=n===`x`?new D(1,0,0):n===`y`?new D(0,1,0):n===`z`?new D(0,0,1):new D(0,1,0),s=new Rr().setFromNormalAndCoplanarPoint(o,r),c=s.projectPoint(r.clone(),new D).clone().sub(this.rotateCenter),l=this.getAngleHelper(n);if(!l)return this.dragEnd();let u=c.angleTo(l.baseAxes.clone().applyQuaternion(a)),d=l.offsetAngle(u);this.setAngleHelperStart(n,d),this.setAngleHelperLength(n,0),this.startInfo={direction:n,startVector:c,directionVector:o,plane:s,angleHelper:l,angle:0,helperQuaternion:a.clone(),startQuaternion:this.originObject3D.quaternion.clone()},aw=new ot,this.helperObject3D.showDraggingHelper([n]),this.hooks.emit(`rotateStart`,n),this.isDragging=!0}getMatrix(){var e,t;return(t=(e=this.originObject3D)==null?void 0:e.ext)==null?void 0:t.matrix}getMatrixAngle(e,t){let n;if(e&&e.isMatrix4){n=new ot,e.decompose(new D,n,new D);let r=new Rt().setFromQuaternion(n);if(t===`x`)return Math.round(it.radToDeg(r.z));if(t===`y`)return Math.round(it.radToDeg(r.y));if(t===`z`)return Math.round(it.radToDeg(r.x))}}parseAngleByDirection(e){var t,n;let r=(n=(t=this.originObject3D)==null?void 0:t.ext)==null?void 0:n.matrix,i;if(r&&r.isMatrix4){i=new ot,r.decompose(new D,i,new D);let t=new Rt().setFromQuaternion(i);if(e===`x`)return Math.round(it.radToDeg(t.z));if(e===`y`)return Math.round(it.radToDeg(t.y));if(e===`z`)return Math.round(it.radToDeg(t.x))}}dragging(e){if(!this.isDragging)return;let t=`touches`in e?e.touches[0].clientX:e.x,n=`touches`in e?e.touches[0].clientY:e.y,r=tw(this.camera,{x:t,y:n},this.container);return r?(this.rotate(r),!1):this.dragEnd()}rotate(e){if(!this.startInfo)return this.dragEnd();let{startVector:t,plane:n,angleHelper:r,direction:i,helperQuaternion:a}=this.startInfo,{originObject3D:o}=this,s=e.ray.intersectPlane(n,new D);if(!s)return;let c=this.rotateCenter.clone(),l=n.projectPoint(s.clone(),new D).clone().sub(c),u=this.startInfo.directionVector.clone().normalize();l=l.clone().projectOnPlane(u).normalize().multiplyScalar(l.length());let d=new ot().setFromUnitVectors(t.clone().normalize(),l.clone().normalize()),f=o.quaternion.clone().premultiply(d);if(t.angleTo(l)===0||this.hooks.emit(`wantToRotate`,f))return;let p=new Rt().setFromQuaternion(new ot().setFromUnitVectors(t.clone().normalize().applyQuaternion(a.clone().invert()),l.clone().normalize().applyQuaternion(a.clone().invert())),`${i.toUpperCase()}${`XZY`.replace(i.toUpperCase(),``)}`)[i]*r.angleDirection,m=this.startInfo.angle,h=m+p,g=Math.PI/2,_=it.degToRad(5),v=it.degToRad(10),y=new ot().setFromAxisAngle(u,h),b=this.startInfo.startQuaternion.clone().premultiply(y),x=this.extractAxisAngle(b,u),S=Math.round(x/g)*g,C=Math.abs(x-S);if(Math.abs(h)>v&&C<_){let e=S-x;h+=e}let ee=h-m;this.startInfo.angle=h;let te=Math.abs(ee)<1e-6&&Math.abs(p)>1e-6,ne=this.snapGuideLines.length>0;te&&!ne?this.showSnapGuideLines(i,c):!te&&ne&&this.removeSnapGuideLines(),this.setAngleHelperLength(i,this.startInfo.angle),this.setTipsAngle(it.radToDeg(this.startInfo.angle));let w=new ot().setFromAxisAngle(u,ee);if(c){let e=new D().subVectors(o.position,c).applyQuaternion(w).add(c);o.position.copy(e)}o.applyQuaternion(w),aw.premultiply(w),this.internalHooks.emit(`applyObjectRotate`,{quaternion:w,origin:c}),this.hooks.emit(`rotate`,o.quaternion),te||(this.startInfo.startVector=l)}dragEnd(){var e;this.isDragging&&(this.removeSnapGuideLines(),(e=this.startInfo)!=null&&e.lineMeshes&&this.startInfo.lineMeshes.forEach(e=>{this.scene.remove(e),e.geometry.dispose(),e.material instanceof lr&&e.material.dispose()}),this.startInfo=void 0,this.isDragging=!1,this.helperObject3D.show(),this.updateOtherHelpers(),this.hooks.emit(`rotateEnd`))}updateOtherHelpers(){this.hooks.emit(`updateOtherHelpers`,{camera:this.camera})}getAngleHelper(e){var t,n,r;switch(e){case`x`:return(t=this.helperObject3D.xCircle)==null?void 0:t.angleSector;case`y`:return(n=this.helperObject3D.yCircle)==null?void 0:n.angleSector;case`z`:return(r=this.helperObject3D.zCircle)==null?void 0:r.angleSector}}setAngleHelperStart(e,t){let n=this.getAngleHelper(e);if(!n){console.warn(`angleHelper is undefined`);return}if(n instanceof Ar&&n.geometry instanceof ii){let{radius:e,segments:r,thetaLength:i}=n.geometry.parameters;n.geometry=new ii(e,r,t,i)}else console.warn(`only support THREE.CircleGeometry`)}setAngleHelperLength(e,t){let n=e===`x`||e===`y`?-t:t,r=n>=0?Math.max(n,.001):Math.min(n,-.001),i=this.getAngleHelper(e);if(i instanceof Ar&&i.geometry instanceof ii){let{radius:e,thetaStart:t}=i.geometry.parameters;i.geometry=new ii(e,Math.ceil(Math.abs(r)*(40/(2*Math.PI))),t,r)}else console.warn(`only support THREE.CircleGeometry`)}setTipsAngle(e){var t;let n=(t=this.helperObject3D.angleTips)==null?void 0:t.element;n&&(n.innerText=`${e.toFixed(0)}°`)}setTipsPosition(e){let t=this.helperObject3D.angleTips;if(!t)return;let{x:n,y:r,z:i}=this.helperObject3D.getWorldPosition(new D).clone().project(this.camera);if(i>1){t.hide();return}let a=this.container.getBoundingClientRect(),o=(n+1)/2*a.width,s=(-r+1)/2*a.height;t.setLeftTop(o+`px`,s+`px`)}extractAxisAngle(e,t){let n=t.clone().normalize(),r=e.x*n.x+e.y*n.y+e.z*n.z,i=e.w,a=2*Math.atan2(r,i);return Math.atan2(Math.sin(a),Math.cos(a))}showSnapGuideLines(e,t){this.removeSnapGuideLines();let n=(()=>{switch(e){case`x`:return[new D(0,1,0),new D(0,0,1)];case`y`:return[new D(1,0,0),new D(0,0,1)];case`z`:return[new D(1,0,0),new D(0,1,0)];default:return[]}})();for(let e of n){let n=this.solidGuide.createSolidLine(t,e,{color:16777215,renderOrder:AC.DRAG_GUIDE_LINE});this.scene.add(n),this.snapGuideLines.push(n)}this.render()}removeSnapGuideLines(){for(let e of this.snapGuideLines)this.scene.remove(e),this.solidGuide.dispose(e);this.snapGuideLines=[]}},sw=class extends ZC{constructor(...e){super(...e),this.name=`BoundingBoxController`;let t=()=>{this.syncWithObject(),this.render()};this.hooks.on(`moveEnd`,t),this.hooks.on(`rotateEnd`,t),this.hooks.on(`scaleEnd`,t),this.disposers.push(()=>{this.hooks.off(`moveEnd`,t),this.hooks.off(`rotateEnd`,t),this.hooks.off(`scaleEnd`,t)})}onApplyOriginObjectRotate(e){this.helperObject3D.applyHelperQuaternion(e.quaternion,e.origin)}onSetOriginObjectRotate(e,t){this.helperObject3D.setHelperQuaternion(e,t)}syncWithObject(){this.helperObject3D.position.copy(this.originObject3D.position),this.helperObject3D.quaternion.copy(this.originObject3D.quaternion),this.helperObject3D.scale.copy(this.originObject3D.scale);let e=this.helperObject3D;e.update&&e.update()}};function cw(e,t){this._camera=e||null,this._domElement=t||document,this._raycaster=new ea,this._selected=null,this._boundObjs={};var n=this;this._$onClick=function(){n._onClick.apply(n,arguments)},this._$onDblClick=function(){n._onDblClick.apply(n,arguments)},this._$onMouseMove=function(){n._onMouseMove.apply(n,arguments)},this._$onMouseDown=function(){n._onMouseDown.apply(n,arguments)},this._$onMouseUp=function(){n._onMouseUp.apply(n,arguments)},this._$onTouchMove=function(){n._onTouchMove.apply(n,arguments)},this._$onTouchStart=function(){n._onTouchStart.apply(n,arguments)},this._$onTouchEnd=function(){n._onTouchEnd.apply(n,arguments)},this._$onContextmenu=function(){n._onContextmenu.apply(n,arguments)},this._domElement.addEventListener(`click`,this._$onClick,!1),this._domElement.addEventListener(`dblclick`,this._$onDblClick,!1),this._domElement.addEventListener(`mousemove`,this._$onMouseMove,!1),this._domElement.addEventListener(`mousedown`,this._$onMouseDown,!1),this._domElement.addEventListener(`mouseup`,this._$onMouseUp,!1),this._domElement.addEventListener(`touchmove`,this._$onTouchMove,!1),this._domElement.addEventListener(`touchstart`,this._$onTouchStart,!1),this._domElement.addEventListener(`touchend`,this._$onTouchEnd,!1),this._domElement.addEventListener(`contextmenu`,this._$onContextmenu,!1)}cw.prototype.destroy=function(){this._domElement.removeEventListener(`click`,this._$onClick,!1),this._domElement.removeEventListener(`dblclick`,this._$onDblClick,!1),this._domElement.removeEventListener(`mousemove`,this._$onMouseMove,!1),this._domElement.removeEventListener(`mousedown`,this._$onMouseDown,!1),this._domElement.removeEventListener(`mouseup`,this._$onMouseUp,!1),this._domElement.removeEventListener(`touchmove`,this._$onTouchMove,!1),this._domElement.removeEventListener(`touchstart`,this._$onTouchStart,!1),this._domElement.removeEventListener(`touchend`,this._$onTouchEnd,!1),this._domElement.removeEventListener(`contextmenu`,this._$onContextmenu,!1)},cw.eventNames=[`click`,`dblclick`,`mouseover`,`mouseout`,`mousemove`,`mousedown`,`mouseup`,`contextmenu`,`touchstart`,`touchend`],cw.prototype._getRelativeMouseXY=function(e){var t=e.target||e.srcElement;t.nodeType===3&&(t=t.parentNode);var n={x:0,y:0},r=t,i=getComputedStyle(r,null);n.y+=parseInt(i.getPropertyValue(`padding-top`),10),n.x+=parseInt(i.getPropertyValue(`padding-left`),10);do n.x+=r.offsetLeft,n.y+=r.offsetTop,i=getComputedStyle(r,null),n.x+=parseInt(i.getPropertyValue(`border-left-width`),10),n.y+=parseInt(i.getPropertyValue(`border-top-width`),10);while(r=r.offsetParent);var a={width:t===window?window.innerWidth:t.offsetWidth,height:t===window?window.innerHeight:t.offsetHeight};return{x:Number((e.pageX-n.x)/a.width)*2-1,y:-((e.pageY-n.y)/a.height)*2+1}},cw.prototype._objectCtxInit=function(e){e._3xDomEvent={}},cw.prototype._objectCtxDeinit=function(e){delete e._3xDomEvent},cw.prototype._objectCtxIsInit=function(e){return!!e._3xDomEvent},cw.prototype._objectCtxGet=function(e){return e._3xDomEvent},cw.prototype.camera=function(e){return e&&(this._camera=e),this._camera},cw.prototype.bind=function(e,t,n,r){console.assert(cw.eventNames.indexOf(t)!==-1,`not available events:`+t),this._objectCtxIsInit(e)||this._objectCtxInit(e);var i=this._objectCtxGet(e);i[t+`Handlers`]||(i[t+`Handlers`]=[]),i[t+`Handlers`].push({callback:n,useCapture:r}),this._boundObjs[t]===void 0&&(this._boundObjs[t]=[]),this._boundObjs[t].push(e)},cw.prototype.addEventListener=cw.prototype.bind,cw.prototype.unbind=function(e,t,n,r){console.assert(cw.eventNames.indexOf(t)!==-1,`not available events:`+t),this._objectCtxIsInit(e)||this._objectCtxInit(e);var i=this._objectCtxGet(e);i[t+`Handlers`]||(i[t+`Handlers`]=[]);for(var a=i[t+`Handlers`],o=0;o<a.length;o++){var s=a[o];if(n==s.callback&&r==s.useCapture){a.splice(o,1);break}}var c=this._boundObjs[t].indexOf(e);this._boundObjs[t].splice(c,1)},cw.prototype.removeEventListener=cw.prototype.unbind,cw.prototype._bound=function(e,t){var n=this._objectCtxGet(t);return n?!!n[e+`Handlers`]:!1},cw.prototype._isObjectVisible=function(e){for(var t=e;t;){if(t.visible===!1)return!1;t=t.parent}return!0},cw.prototype._filterVisibleObjects=function(e){var t=this;return e.filter(function(e){return t._isObjectVisible(e)})},cw.prototype._onMove=function(e,t,n,r){var i=this._boundObjs[e];if(!(i===void 0||i.length===0)){var a=this._filterVisibleObjects(i);if(a.length!==0){var o=new at;o.set(t,n),this._raycaster.setFromCamera(o,this._camera);var s=this._raycaster.intersectObjects(a),c=this;s=s.filter(function(e){return c._isObjectVisible(e.object)}),s.sort(function(e,t){var n=e.object.renderOrder||0,r=t.object.renderOrder||0;return n===r?e.distance-t.distance:r-n});var l=this._selected;if(s.length>0){var u,d,f,p=s[0],m=p.object;this._selected=m,f=this._bound(`mousemove`,m),l!=m&&(u=this._bound(`mouseover`,m),d=l&&this._bound(`mouseout`,l))}else d=l&&this._bound(`mouseout`,l),this._selected=null;f&&this._notify(`mousemove`,m,r,p),u&&this._notify(`mouseover`,m,r,p),d&&this._notify(`mouseout`,l,r,p)}}},cw.prototype._onEvent=function(e,t,n,r){var i=this._boundObjs[e];if(!(i===void 0||i.length===0)){var a=this._filterVisibleObjects(i);if(a.length!==0){var o=new at;o.set(t,n),this._raycaster.setFromCamera(o,this._camera);var s=this._raycaster.intersectObjects(a,!0),c=this;if(s=s.filter(function(e){return c._isObjectVisible(e.object)}),s.sort(function(e,t){var n=e.object.renderOrder||0,r=t.object.renderOrder||0;return n===r?e.distance-t.distance:r-n}),s.length!==0){for(var l=s[0],u=l.object,d=this._objectCtxGet(u),f=u.parent;d===void 0&&f;)d=this._objectCtxGet(f),f=f.parent;d&&this._notify(e,u,r,l)}}}},cw.prototype._notify=function(e,t,n,r){var i=this._objectCtxGet(t),a=i?i[e+`Handlers`]:null;if(!i||!a||a.length===0){t.parent&&this._notify(e,t.parent,n,r);return}for(var a=i[e+`Handlers`],o=0;o<a.length;o++){var s=a[o],c=!0;s.callback({type:e,target:t,origDomEvent:n,intersect:r,stopPropagation:function(){c=!1}}),c&&s.useCapture===!1&&t.parent&&this._notify(e,t.parent,n,r)}},cw.prototype._onMouseDown=function(e){return this._onMouseEvent(`mousedown`,e)},cw.prototype._onMouseUp=function(e){return this._onMouseEvent(`mouseup`,e)},cw.prototype._onMouseEvent=function(e,t){var n=this._getRelativeMouseXY(t);this._onEvent(e,n.x,n.y,t)},cw.prototype._onMouseMove=function(e){var t=this._getRelativeMouseXY(e);this._onMove(`mousemove`,t.x,t.y,e),this._onMove(`mouseover`,t.x,t.y,e),this._onMove(`mouseout`,t.x,t.y,e)},cw.prototype._onClick=function(e){this._onMouseEvent(`click`,e)},cw.prototype._onDblClick=function(e){this._onMouseEvent(`dblclick`,e)},cw.prototype._onContextmenu=function(e){this._onMouseEvent(`contextmenu`,e)},cw.prototype._onTouchStart=function(e){return this._onTouchEvent(`touchstart`,e)},cw.prototype._onTouchEnd=function(e){return this._onTouchEvent(`touchend`,e)},cw.prototype._onTouchMove=function(e){if(e.touches.length==1){var t=Number(e.touches[0].pageX/window.innerWidth)*2-1,n=-(e.touches[0].pageY/window.innerHeight)*2+1;this._onMove(`mousemove`,t,n,e),this._onMove(`mouseover`,t,n,e),this._onMove(`mouseout`,t,n,e)}},cw.prototype._onTouchEvent=function(e,t){var n=t.touches;if(n.length==0&&(n=t.changedTouches),n.length==1){var r=Number(n[0].pageX/window.innerWidth)*2-1,i=-(n[0].pageY/window.innerHeight)*2+1;this._onEvent(e,r,i,t)}};var lw=`Object3DHelperPlugin`,uw=lw,dw=()=>{console.error(`${uw} is disposed`)},fw=()=>{console.warn(`${uw} is disabled`)},pw=()=>{console.error(`${uw} is disabled`)},mw=class{constructor(e){this.controllers={},this.state={visible:!0,enabled:!0,disposed:!1},this.hooks=new t.Subscribe,e&&this.addControllers(e),this.setState(this.state)}show(e){this.setState({visible:!0},e)}hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,t){if(this.state.disposed||!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return;let n=Object.assign({},this.state);this.state=Object.assign(Object.assign({},this.state),e),e.disposed!==void 0&&e.disposed!==n.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&this.handleVisible(e.visible),e.enabled!==void 0&&this.handleEnable(e.enabled),this.hooks.emit(`stateChange`,{state:this.state,prevState:n})}addControllers(e){this.controllers=Object.assign(Object.assign({},this.controllers),e),this.setState(this.state)}initialHelperMatrix(){this.everyControllerDo(e=>{e.initialHelperPosition(),e.initialHelperQuaternion()})}handleEnable(e,t=!0){e?(this.everyControllerDo(e=>e.enable()),this.hooks.emit(`enable`,{userAction:t})):(this.everyControllerDo(e=>e.disable()),this.hooks.emit(`disable`,{userAction:t}))}handleVisible(e,t=!0){e?(this.everyControllerDo(e=>e.show()),this.state.enabled&&this.hooks.emit(`show`,{userAction:t})):(this.everyControllerDo(e=>e.hide()),this.state.enabled&&this.hooks.emit(`hide`,{userAction:t}))}handleDispose(){Object.values(this.controllers).forEach(e=>{e==null||e.dispose()})}everyControllerDo(e){Object.values(this.controllers).forEach(t=>{t&&e(t)})}},hw=class extends o.Controller{constructor(e){super(e),this.name=lw,this.state={visible:!0,enabled:!0,disposed:!1},this.objectHelperMap=new Map,this.five=e}show(e){return r(this,void 0,void 0,function*(){this.setState({visible:!0},e)})}hide(e){return r(this,void 0,void 0,function*(){this.setState({visible:!1},e)})}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}load(e){return r(this,void 0,void 0,function*(){})}setState(e,t){var n;if(this.state.disposed)return dw();if(!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return pw();let r=Object.assign({},this.state);this.state=Object.assign(Object.assign({},this.state),e),e.disposed!==void 0&&e.disposed!==r.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==r.visible&&this.handleVisible(e.visible),e.enabled!==void 0&&e.enabled!==r.enabled&&this.handleEnable(e.enabled),this.hooks.emit(`stateChange`,{state:this.state,prevState:r,userAction:(n=t==null?void 0:t.userAction)==null?!0:n})}getObject3DHelper(e){return this.objectHelperMap.get(e)}addObject3DHelper(e,n={}){var r,i;if(!e){console.error(`Object3D is undefined`);return}if(this.objectHelperMap.has(e)){console.warn(`Object3DHelperPlugin: object3D ${e.name} already has helper`);return}let a=new mw,o=[],s=(r=this.five.getElement())==null?void 0:r.parentElement;this.five.camera;let c=Object.assign(Object.assign({},{moveHelper:!0,rotateHelper:!0,boundingBoxHelper:!1,moveHelperTips:!1,positionFrom:`objectPosition`}),n),{moveHelper:l,rotateHelper:u,boundingBoxHelper:d}=c,f=new nn;c.helperOffset&&f.position.copy(c.helperOffset),this.five.scene.add(f);let p=a.hooks,m=new t.Subscribe,h=new cw(this.five.camera,this.five.getElement()),g=e=>{if(e)return typeof e==`boolean`?e:e.enable},_={};if(g(l)){let t=Object.assign(Object.assign({},this.getConfig(c.moveHelper)),c),n=new VC(e,Object.assign({container:s==null?void 0:s,moveTipsEnable:(i=c.moveHelperTips)==null?!1:i},t)),r=new iw(this.five,h,rw,e,n,t,p,m,f);_.moveController=r.helperController,o.push(()=>r.dispose())}if(g(u)){let t=Object.assign(Object.assign({},this.getConfig(c.rotateHelper)),c),n=new HC(e,Object.assign({container:s==null?void 0:s},t)),r=new iw(this.five,h,ow,e,n,t,p,m,f);_.rotateController=r.helperController,o.push(()=>r.dispose())}if(g(d)){let t=new qC(e),n=new iw(this.five,h,sw,e,t,void 0,p,m,f);_.boundingBoxController=n.helperController,o.push(()=>n.dispose())}return Object.values(_).forEach(e=>{e&&typeof e.updateOtherControllers==`function`&&e.updateOtherControllers(_)}),a.addControllers(_),this.objectHelperMap.set(e,{helper:a,disposers:o,helperGroup:f}),a.controllers}removeObject3DHelper(e){if(!this.objectHelperMap.has(e))return;let{helper:t,disposers:n,helperGroup:r}=this.objectHelperMap.get(e);this.objectHelperMap.delete(e),t.dispose(),n==null||n.forEach(e=>e==null?void 0:e()),r.parent&&r.parent.remove(r)}handleEnable(e,t=!0){e?(this.everyHelperDo(e=>e.enable()),this.hooks.emit(`enable`,{userAction:t})):(this.everyHelperDo(e=>e.disable()),this.hooks.emit(`disable`,{userAction:t})),this.state.enabled=e}handleVisible(e,t=!0){e?(this.everyHelperDo(e=>e.show()),this.actionIfStateIsEnabled(()=>this.hooks.emit(`show`,{userAction:t}))):(this.everyHelperDo(e=>e.hide()),this.actionIfStateIsEnabled(()=>this.hooks.emit(`hide`,{userAction:t}))),this.state.visible=e}handleDispose(){this.objectHelperMap.forEach(({helper:e,disposers:t,helperGroup:n})=>{e.dispose(),t==null||t.forEach(e=>e==null?void 0:e()),n.parent&&n.parent.remove(n)}),this.objectHelperMap.clear()}everyHelperDo(e){this.objectHelperMap.forEach(({helper:t,disposers:n})=>{t&&e(t,n)})}actionIfStateIsEnabled(e,t){if(this.state.enabled)return e();t!=null&&t.warnLog&&fw()}getConfig(e){if(e&&typeof e!=`boolean`&&e.enable)return e}},gw=e=>new hw(e);J.BRDF_GGX,J.BRDF_Lambert,J.BasicPointShadowFilter,J.BasicShadowFilter,J.Break,J.Const,J.Continue,J.DFGLUT,J.D_GGX;var _w=J.Discard;J.EPSILON,J.F_Schlick;var vw=J.Fn;J.INFINITY,J.If,J.Loop,J.NodeAccess,J.NodeShaderStage,J.NodeType,J.NodeUpdateType,J.PCFShadowFilter,J.PCFSoftShadowFilter,J.PI,J.PI2,J.TWO_PI,J.HALF_PI,J.PointShadowFilter,J.Return,J.Schlick_to_F0,J.ShaderNode,J.Stack,J.Switch,J.TBNViewMatrix,J.VSMShadowFilter,J.V_GGX_SmithCorrelated,J.Var,J.VarIntent,J.abs,J.acesFilmicToneMapping,J.acos,J.add,J.addMethodChaining,J.addNodeElement,J.agxToneMapping,J.all,J.alphaT,J.and,J.anisotropy,J.anisotropyB,J.anisotropyT,J.any,J.append,J.array,J.arrayBuffer,J.asin,J.assign,J.atan,J.atomicAdd,J.atomicAnd,J.atomicFunc,J.atomicLoad,J.atomicMax,J.atomicMin,J.atomicOr,J.atomicStore,J.atomicSub,J.atomicXor,J.attenuationColor,J.attenuationDistance,J.attribute,J.attributeArray,J.backgroundBlurriness,J.backgroundIntensity,J.backgroundRotation,J.batch,J.bentNormalView,J.billboarding,J.bitAnd,J.bitNot,J.bitOr,J.bitXor,J.bitangentGeometry,J.bitangentLocal,J.bitangentView,J.bitangentWorld,J.bitcast,J.blendBurn,J.blendColor,J.blendDodge,J.blendOverlay,J.blendScreen,J.blur,J.bool,J.buffer,J.bufferAttribute,J.bumpMap,J.builtin,J.builtinAOContext,J.builtinShadowContext,J.bvec2,J.bvec3,J.bvec4,J.bypass,J.cache,J.call,J.cameraFar,J.cameraIndex,J.cameraNear,J.cameraNormalMatrix,J.cameraPosition,J.cameraProjectionMatrix,J.cameraProjectionMatrixInverse,J.cameraViewMatrix,J.cameraViewport,J.cameraWorldMatrix,J.cbrt,J.cdl,J.ceil,J.checker,J.cineonToneMapping,J.clamp,J.clearcoat,J.clearcoatNormalView,J.clearcoatRoughness,J.clipSpace,J.code,J.color,J.colorSpaceToWorking,J.colorToDirection,J.compute,J.computeKernel,J.computeSkinning,J.context,J.convert,J.convertColorSpace,J.convertToTexture,J.countLeadingZeros,J.countOneBits,J.countTrailingZeros,J.cos,J.cross,J.cubeTexture,J.cubeTextureBase,J.dFdx,J.dFdy,J.dashSize,J.debug,J.decrement,J.decrementBefore,J.defaultBuildStages,J.defaultShaderStages,J.defined,J.degrees,J.deltaTime,J.densityFog,J.densityFogFactor,J.depth,J.depthPass,J.determinant,J.difference,J.diffuseColor,J.directPointLight,J.directionToColor,J.directionToFaceDirection,J.dispersion,J.distance,J.div,J.dot,J.drawIndex,J.dynamicBufferAttribute,J.element,J.emissive,J.equal,J.equirectUV,J.exp,J.exp2,J.exponentialHeightFogFactor,J.expression,J.faceDirection,J.faceForward,J.faceforward,J.float,J.floatBitsToInt,J.floatBitsToUint,J.floor,J.fog,J.fract,J.frameGroup,J.frameId,J.frontFacing,J.fwidth,J.gain,J.gapSize,J.getConstNodeType,J.getCurrentStack,J.getDirection,J.getDistanceAttenuation,J.getGeometryRoughness,J.getNormalFromDepth,J.interleavedGradientNoise,J.vogelDiskSample,J.getParallaxCorrectNormal,J.getRoughness,J.getScreenPosition,J.getShIrradianceAt,J.getShadowMaterial,J.getShadowRenderObjectFunction,J.getTextureIndex,J.getViewPosition,J.globalId,J.glsl,J.glslFn,J.grayscale,J.greaterThan,J.greaterThanEqual,J.hash,J.highpModelNormalViewMatrix,J.highpModelViewMatrix,J.hue,J.increment,J.incrementBefore,J.instance,J.instanceIndex,J.instancedArray,J.instancedBufferAttribute,J.instancedDynamicBufferAttribute,J.instancedMesh,J.int,J.intBitsToFloat,J.inverse,J.inverseSqrt,J.inversesqrt,J.invocationLocalIndex,J.invocationSubgroupIndex,J.ior,J.iridescence,J.iridescenceIOR,J.iridescenceThickness,J.ivec2,J.ivec3,J.ivec4,J.js,J.label,J.length,J.lengthSq,J.lessThan,J.lessThanEqual,J.lightPosition,J.lightProjectionUV,J.lightShadowMatrix,J.lightTargetDirection,J.lightTargetPosition,J.lightViewPosition,J.lightingContext,J.lights,J.linearDepth,J.linearToneMapping,J.localId,J.log,J.log2,J.logarithmicDepthToViewZ,J.luminance,J.mat2,J.mat3,J.mat4,J.matcapUV,J.materialAO,J.materialAlphaTest,J.materialAnisotropy,J.materialAnisotropyVector,J.materialAttenuationColor,J.materialAttenuationDistance,J.materialClearcoat,J.materialClearcoatNormal,J.materialClearcoatRoughness,J.materialColor,J.materialDispersion,J.materialEmissive,J.materialEnvIntensity,J.materialEnvRotation,J.materialIOR,J.materialIridescence,J.materialIridescenceIOR,J.materialIridescenceThickness,J.materialLightMap,J.materialLineDashOffset,J.materialLineDashSize,J.materialLineGapSize,J.materialLineScale,J.materialLineWidth,J.materialMetalness,J.materialNormal,J.materialOpacity,J.materialPointSize,J.materialReference,J.materialReflectivity,J.materialRefractionRatio,J.materialRotation,J.materialRoughness,J.materialSheen,J.materialSheenRoughness,J.materialShininess,J.materialSpecular,J.materialSpecularColor,J.materialSpecularIntensity,J.materialSpecularStrength,J.materialThickness,J.materialTransmission,J.max,J.maxMipLevel,J.mediumpModelViewMatrix,J.metalness,J.min,J.mix,J.mixElement,J.mod,J.modInt,J.modelDirection,J.modelNormalMatrix,J.modelPosition,J.modelRadius,J.modelScale,J.modelViewMatrix,J.modelViewPosition,J.modelViewProjection,J.modelWorldMatrix,J.modelWorldMatrixInverse,J.morphReference,J.mrt,J.mul,J.mx_aastep,J.mx_add,J.mx_atan2,J.mx_cell_noise_float,J.mx_contrast,J.mx_divide,J.mx_fractal_noise_float,J.mx_fractal_noise_vec2,J.mx_fractal_noise_vec3,J.mx_fractal_noise_vec4,J.mx_frame,J.mx_heighttonormal,J.mx_hsvtorgb,J.mx_ifequal,J.mx_ifgreater,J.mx_ifgreatereq,J.mx_invert,J.mx_modulo,J.mx_multiply,J.mx_noise_float,J.mx_noise_vec3,J.mx_noise_vec4,J.mx_place2d,J.mx_power,J.mx_ramp4,J.mx_ramplr,J.mx_ramptb,J.mx_rgbtohsv,J.mx_rotate2d,J.mx_rotate3d,J.mx_safepower,J.mx_separate,J.mx_splitlr,J.mx_splittb,J.mx_srgb_texture_to_lin_rec709,J.mx_subtract,J.mx_timer,J.mx_transform_uv,J.mx_unifiednoise2d,J.mx_unifiednoise3d,J.mx_worley_noise_float,J.mx_worley_noise_vec2,J.mx_worley_noise_vec3,J.negate,J.neutralToneMapping,J.nodeArray,J.nodeImmutable,J.nodeObject,J.nodeObjectIntent,J.nodeObjects,J.nodeProxy,J.nodeProxyIntent,J.normalFlat,J.normalGeometry,J.normalLocal,J.normalMap,J.normalView,J.normalViewGeometry,J.normalWorld,J.normalWorldGeometry,J.normalize,J.not,J.notEqual,J.numWorkgroups,J.objectDirection,J.objectGroup,J.objectPosition,J.objectRadius,J.objectScale,J.objectViewPosition,J.objectWorldMatrix,J.OnBeforeObjectUpdate,J.OnBeforeMaterialUpdate,J.OnObjectUpdate,J.OnMaterialUpdate,J.oneMinus,J.or,J.orthographicDepthToViewZ,J.oscSawtooth,J.oscSine,J.oscSquare,J.oscTriangle,J.output,J.outputStruct,J.overloadingFn,J.packHalf2x16,J.packSnorm2x16,J.packUnorm2x16,J.parabola,J.parallaxDirection,J.parallaxUV,J.parameter,J.pass,J.passTexture,J.pcurve,J.perspectiveDepthToViewZ,J.pmremTexture,J.pointShadow,J.pointUV,J.pointWidth;var yw=J.positionGeometry;J.positionLocal,J.positionPrevious,J.positionView,J.positionViewDirection,J.positionWorld,J.positionWorldDirection,J.posterize,J.pow,J.pow2,J.pow3,J.pow4,J.premultiplyAlpha,J.property,J.radians,J.rand,J.range,J.rangeFog,J.rangeFogFactor,J.reciprocal,J.reference,J.referenceBuffer,J.reflect,J.reflectVector,J.reflectView,J.reflector,J.refract,J.refractVector,J.refractView,J.reinhardToneMapping,J.remap,J.remapClamp,J.renderGroup,J.renderOutput,J.rendererReference,J.replaceDefaultUV,J.rotate,J.rotateUV,J.roughness,J.round,J.rtt,J.sRGBTransferEOTF,J.sRGBTransferOETF,J.sample,J.sampler,J.samplerComparison,J.saturate,J.saturation,J.screen,J.screenCoordinate,J.screenDPR,J.screenSize,J.screenUV;var bw=J.select;J.setCurrentStack,J.setName,J.shaderStages,J.shadow,J.shadowPositionWorld,J.shapeCircle,J.sharedUniformGroup,J.sheen,J.sheenRoughness,J.shiftLeft,J.shiftRight,J.shininess,J.sign,J.sin,J.sinc,J.skinning,J.smoothstep,J.smoothstepElement,J.specularColor,J.specularF90,J.spherizeUV,J.split,J.spritesheetUV,J.sqrt,J.stack,J.step,J.stepElement,J.storage,J.storageBarrier,J.storageTexture,J.string,J.struct,J.sub,J.subgroupAdd,J.subgroupAll,J.subgroupAnd,J.subgroupAny,J.subgroupBallot,J.subgroupBroadcast,J.subgroupBroadcastFirst,J.subBuild,J.subgroupElect,J.subgroupExclusiveAdd,J.subgroupExclusiveMul,J.subgroupInclusiveAdd,J.subgroupInclusiveMul,J.subgroupIndex,J.subgroupMax,J.subgroupMin,J.subgroupMul,J.subgroupOr,J.subgroupShuffle,J.subgroupShuffleDown,J.subgroupShuffleUp,J.subgroupShuffleXor,J.subgroupSize,J.subgroupXor,J.tan,J.tangentGeometry,J.tangentLocal,J.tangentView,J.tangentWorld;var xw=J.texture;J.texture3D,J.textureBarrier,J.textureBicubic,J.textureBicubicLevel,J.textureCubeUV,J.textureLoad,J.textureSize,J.textureLevel,J.textureStore,J.thickness,J.time,J.toneMapping,J.toneMappingExposure,J.toonOutlinePass,J.transformDirection,J.transformNormal,J.transformNormalToView,J.transformedClearcoatNormalView,J.transformedNormalView,J.transformedNormalWorld,J.transmission,J.transpose,J.triNoise3D,J.triplanarTexture,J.triplanarTextures,J.trunc,J.uint,J.uintBitsToFloat;var Sw=J.uniform;J.uniformArray,J.uniformCubeTexture,J.uniformGroup,J.uniformFlow,J.uniformTexture,J.unpackHalf2x16,J.unpackSnorm2x16,J.unpackUnorm2x16,J.unpremultiplyAlpha,J.userData;var Cw=J.uv;J.uvec2,J.uvec3,J.uvec4;var ww=J.varying;J.varyingProperty,J.vec2;var Tw=J.vec3,Ew=J.vec4;J.vectorComponents,J.velocity,J.vertexColor,J.vertexIndex,J.vertexStage,J.vibrance,J.viewZToLogarithmicDepth,J.viewZToOrthographicDepth,J.viewZToPerspectiveDepth,J.viewZToReversedOrthographicDepth,J.viewZToReversedPerspectiveDepth,J.viewport,J.viewportCoordinate,J.viewportDepthTexture,J.viewportLinearDepth,J.viewportMipTexture,J.viewportOpaqueMipTexture,J.viewportResolution,J.viewportSafeUV,J.viewportSharedTexture,J.viewportSize,J.viewportTexture,J.viewportUV,J.wgsl,J.wgslFn,J.workgroupArray,J.workgroupBarrier,J.workgroupId,J.workingToColorSpace,J.xor;function Dw(e,t,n){return e<t?t:e>n?n:e}function Ow(){let e={map:xw(new wt),progress:Sw(0),opacity:Sw(0)},t=vw(()=>{let t=Cw(),n=ww(yw);_w(t.y.greaterThan(e.progress));let r=e.map.sample(t),i=Ew(Tw(1,1,1),e.progress.sub(n.y).mul(.7)),a=i.add(Ew(r.rgb,r.a.mul(n.y.oneMinus()))),o=bw(e.progress.equal(1),a,i);return Ew(o.rgb,o.a.mul(e.opacity))}),n=new Uh;return n.fragmentNode=t(),n.transparent=!0,n.depthTest=!1,{material:n,u:e}}var kw=[1,5,2,6,3,7,4,8,9,13,10,14,11,15,12,16],Aw=512,jw=512,Mw=128,Nw=class extends o.Controller{get config(){return Object.assign({},this._config)}updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}updateConfig(e,t={}){var n;let r=this.config,i=Object.assign(Object.assign({},r),e);this._config=i,this.hooks.emit(`configChange`,{prevConfig:r,config:i,userAction:(n=t.userAction)==null?!0:n})}constructor(e,n){super(e),this.group=new nn,this.materialUniforms=Ow(),this.mesh=(()=>{let e=new ai(.12,.12,1,32,1,!0);return e.translate(0,.5,0),new Ar(e,this.materialUniforms.material)})(),this.panoMesh=new t.PanoCircleMesh({scale:1.5}),this.stop=()=>{},this.drawLine=(e,t)=>{if(!this.ctx)return;let n=(()=>{var t;return 32*((t=kw[e])==null?0:t)})(),r=(1-(t+e*150)%1200/1200)*640,i=this.ctx.createLinearGradient(0,r-Mw,0,r);i.addColorStop(0,`rgba(255,255,255,0)`),i.addColorStop(.5,`rgba(255,255,255,1)`),i.addColorStop(1,`rgba(255,255,255,0)`),this.ctx.fillStyle=i,this.ctx.fillRect(n,r-Mw,3,Mw)},this.anime=e=>{if(!this.ctx||!this.startTime)return;this.ctx.clearRect(0,0,Aw,jw);for(let t=0;t<16;t++)this.drawLine(t,e-this.startTime);let t=Dw((e-this.startTime)/1e3,0,1),n=Dw((e-this.startTime)/300,0,this.config.maxOpacity);this.panoMesh.setOpacity(n),this.materialUniforms.u.progress.value=t,this.materialUniforms.u.opacity.value=n,this.canvasTexture&&(this.canvasTexture.needsUpdate=!0),this.five.needsRender=!0},this.dispose=()=>{this.disable()},this.five=e;let r={enabled:!1,visible:!0};this.state=Object.assign(r,n==null?void 0:n.initialState);let i=Object.assign(Object.assign({},n==null?void 0:n.config),{maxOpacity:1});this._config=i,!(typeof document>`u`)&&(this.canvas=document.createElement(`canvas`),this.ctx=this.canvas.getContext(`2d`),this.canvas.width=Aw,this.canvas.height=jw,this.ctx.shadowColor=`rgba(255,255,255,0.5)`,this.ctx.shadowBlur=6,this.ctx.shadowOffsetX=0,this.ctx.shadowOffsetY=0,this.canvasTexture=new ei(this.canvas),this.materialUniforms.u.map.value=this.canvasTexture,this.group.add(this.mesh),this.panoMesh.setProgress(1),this.panoMesh.setOpacity(0),this.group.add(this.panoMesh),this.state.enabled&&this._enable({userAction:!1}))}load(e){return r(this,void 0,void 0,function*(){})}_enable(e){this.mesh.position.copy(this.five.observers[this.five.state.panoIndex].standingPosition),this.panoMesh.position.copy(this.five.observers[this.five.state.panoIndex].standingPosition),this.five.ready().then(()=>{this.five.scene.add(this.group),this.stop=t.AnimationFrameLoop.shared.add((e,t)=>{this.startTime||(this.startTime=e),this.panoMesh.updateTime(e,t),this.anime(e)})})}_disable(e){this.five.scene.remove(this.group),this.panoMesh.setOpacity(0),this.startTime=void 0,this.stop(),this.five.needsRender=!0}enable(e){var t;if(!this.ctx||this.state.enabled||!this.five.observers[this.five.state.panoIndex])return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!0},n),this._enable({userAction:n})}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!1},n),this._disable({userAction:n})}setState(e,t={}){let n=this.state,r=t.userAction===void 0?!0:t.userAction;if(this.updateState(e,r),e.enabled!==void 0&&n.enabled!==e.enabled){let t={userAction:r};e.enabled?this._enable(t):this._disable(t)}}},Pw=(e,t)=>new Nw(e,t),Fw=class extends tn{constructor(e=document.createElement(`div`)){super(),this.isCSS2DObject=!0,this.element=e,this.element.style.position=`absolute`,this.element.style.userSelect=`none`,this.element.setAttribute(`draggable`,!1),this.center=new at(.5,.5),this.addEventListener(`removed`,function(){this.traverse(function(e){e.element&&e.element instanceof Element&&e.element.parentNode!==null&&e.element.remove()})})}copy(e,t){return super.copy(e,t),this.element=e.element.cloneNode(!0),this.center=e.center.clone(),this}},Iw=new D,Lw=new Ot,Rw=new Ot,zw=new D,Bw=new D,Vw=class{constructor(e={}){let t=this,n,r,i,a,o={objects:new WeakMap},s=e.element===void 0?document.createElement(`div`):e.element;s.style.overflow=`hidden`,this.domElement=s,this.sortObjects=!0,this.getSize=function(){return{width:n,height:r}},this.render=function(e,n){e.updateMatrixWorld(),n.parent===null&&n.updateMatrixWorld(),Lw.copy(n.matrixWorldInverse),Rw.multiplyMatrices(n.projectionMatrix,Lw),l(e,e,n),t.sortObjects&&f(e)},this.setSize=function(e,t){n=e,r=t,i=n/2,a=r/2,s.style.width=e+`px`,s.style.height=t+`px`};function c(e){e.isCSS2DObject&&(e.element.style.display=`none`);for(let t=0,n=e.children.length;t<n;t++)c(e.children[t])}function l(e,n,r){if(e.visible===!1){c(e);return}if(e.isCSS2DObject){Iw.setFromMatrixPosition(e.matrixWorld),Iw.applyMatrix4(Rw);let c=Iw.z>=-1&&Iw.z<=1&&e.layers.test(r.layers)===!0,l=e.element;l.style.display=c===!0?``:`none`,c===!0&&(e.onBeforeRender(t,n,r),l.style.transform=`translate(`+-100*e.center.x+`%,`+-100*e.center.y+`%)translate(`+(Iw.x*i+i)+`px,`+(-Iw.y*a+a)+`px)`,l.parentNode!==s&&s.appendChild(l),e.onAfterRender(t,n,r));let d={distanceToCameraSquared:u(r,e)};o.objects.set(e,d)}for(let t=0,i=e.children.length;t<i;t++)l(e.children[t],n,r)}function u(e,t){return zw.setFromMatrixPosition(e.matrixWorld),Bw.setFromMatrixPosition(t.matrixWorld),zw.distanceToSquared(Bw)}function d(e){let t=[];return e.traverseVisible(function(e){e.isCSS2DObject&&t.push(e)}),t}function f(e){let t=d(e).sort(function(e,t){return e.renderOrder===t.renderOrder?o.objects.get(e).distanceToCameraSquared-o.objects.get(t).distanceToCameraSquared:t.renderOrder-e.renderOrder}),n=t.length;for(let e=0,r=t.length;e<r;e++)t[e].element.style.zIndex=n-e}}},Hw=`#five-CSS2DPlugin {
345
+ position: absolute;
346
+ pointer-events: none;
347
+ user-select: none;
348
+ top: 0;
349
+ left: 0;
350
+ }
351
+
352
+ .five-CSS2DPlugin-X {
353
+ --timeout: 300ms;
354
+ transition: opacity ease-in-out var(--timeout);
355
+ }
356
+
357
+ .five-CSS2DPlugin-hidden {
358
+ opacity: 0;
359
+ }
360
+
361
+ #five-CSS2DPlugin .five-CSS2DPlugin-hidden * {
362
+ pointer-events: none;
363
+ }
364
+ `;function Uw(){return((1+Math.random())*parseInt(`10000`,36)|0).toString(36).substring(1)}function Ww(){let e=Uw()+Uw().substr(0,2)+Date.now().toString(36),t=e.length,n=``,r=Math.floor(Math.random()*Math.pow(2,t));for(let i=0;i<t;i++){let t=e[i];t>=`a`&&t<=`z`&&r>>i&1&&(t=t.toUpperCase()),n+=t}return`u-`+n}var Gw=class extends o.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){super(e),this.scene=new un,this.styleSheet=new CSSStyleSheet,this.camera=new Ri,this.createCSS2DObject=({id:e=Ww(),name:t,innerHTML:n,center:r,position:i,visible:a=!0,timeout:o})=>{let s=document.createElement(`div`);s.className=`five-CSS2DPlugin-X`,a||s.classList.add(`five-CSS2DPlugin-hidden`),o&&s.style.setProperty(`--timeout`,o+`ms`),s.innerHTML=n;let c=new Fw(s);return c.userData={id:e,_visible:a,_timeout:o,get visible(){return this._visible},set visible(e){e?s.classList.remove(`five-CSS2DPlugin-hidden`):s.classList.add(`five-CSS2DPlugin-hidden`),this._visible=e},get timeout(){return this._timeout},set timeout(e){s.style.setProperty(`--timeout`,e+`ms`),this._timeout=e}},r&&c.center.copy(r),i&&c.position.copy(i),t&&(c.name=t),c},this.render=()=>{this.camera.fov=this.five.camera.fov,this.camera.aspect=this.five.camera.aspect,this.camera.position.copy(this.five.camera.position),this.camera.rotation.copy(this.five.camera.rotation),this.camera.updateProjectionMatrix(),this.renderer.render(this.scene,this.camera)},this._addEventListener=()=>{this.five.on(`render.prepare`,this.render),this.appendToFiveContainer()},this._removeEventListener=()=>{var e;this.five.off(`render.prepare`,this.render),(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=void 0},this.dispose=()=>{this.removeAll(),this._disable({userAction:!1})},this.five=e,this.renderer=new Vw,this.renderer.domElement.id=`five-CSS2DPlugin`,this.styleSheet.replaceSync(Hw),document&&document.adoptedStyleSheets.push(this.styleSheet);let n={enabled:!0,visible:!0};this.state=Object.assign(n,t==null?void 0:t.initialState),this.state.enabled?this._enable({userAction:!1}):this.styleSheet.disabled=!0}load(e){return r(this,void 0,void 0,function*(){})}appendToFiveContainer(){var e;if(!this.five.renderer)return;let t=this.five.getElement();if(!(t!=null&&t.parentElement))return;let{x:n,y:r}=this.five.renderer.getSize(new at);t.parentElement.appendChild(this.renderer.domElement),this.renderer.setSize(n,r),(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=new ResizeObserver(()=>{var e;if(!this.five.renderer)return;let t=(e=this.five.getElement())==null?void 0:e.getBoundingClientRect();if(!t)return;let{x:n,y:r,width:i,height:a}=t;this.renderer.setSize(i,a),this.renderer.domElement.style.left=n+`px`,this.renderer.domElement.style.top=r+`px`,this.render()}),this.resizeObserver.observe(t)}add(...e){this.scene.add(...e),this.render()}remove(e){this.scene.remove(e),e.traverse(e=>{e instanceof Fw&&e.element.remove()}),this.render()}removeAll(){this.scene.remove(...this.scene.children),this.render()}fadeInObjects(...e){for(let t of e)t.userData.visible=!0;this.render()}fadeOutObjects(...e){for(let t of e)t.userData.visible=!1;this.render()}_enable(e){this.styleSheet.disabled=!1,this.updateState({enabled:!0},e.userAction),this._addEventListener(),this.render()}_disable(e){this.styleSheet.disabled=!0,this.updateState({enabled:!1},e.userAction),this._removeEventListener()}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this._enable({userAction:n})}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this._disable({userAction:n})}show(e){this.renderer.domElement.style.display=`block`,this.updateState({visible:!0},!0),this.render()}hide(e){this.renderer.domElement.style.display=`none`,this.updateState({visible:!1},!0)}},Kw=(e,t)=>new Gw(e,t),qw=new D,Jw=new ot,Yw=new D,Xw=class extends tn{constructor(e=document.createElement(`div`)){super(),this.isCSS3DObject=!0,this.element=e,this.element.style.position=`absolute`,this.element.style.userSelect=`none`,this.element.setAttribute(`draggable`,!1),this.addEventListener(`removed`,function(){this.traverse(function(e){e.element&&e.element instanceof Element&&e.element.parentNode!==null&&e.element.remove()})})}copy(e,t){return super.copy(e,t),this.element=e.element.cloneNode(!0),this}},Zw=class extends Xw{constructor(e){super(e),this.isCSS3DSprite=!0,this.rotation2D=0}copy(e,t){return super.copy(e,t),this.rotation2D=e.rotation2D,this}},Qw=new Ot,$w=new Ot,eT=class{constructor(e={}){let t=this,n,r,i,a,o={camera:{style:``},objects:new WeakMap},s=e.element===void 0?document.createElement(`div`):e.element;s.style.overflow=`hidden`,this.domElement=s;let c=document.createElement(`div`);c.style.transformOrigin=`0 0`,c.style.pointerEvents=`none`,s.appendChild(c);let l=document.createElement(`div`);l.style.transformStyle=`preserve-3d`,c.appendChild(l),this.getSize=function(){return{width:n,height:r}};let u=!0,d=new Set;this.markDirty=function(){u=!0},this.updateSpriteSet=function(e){d.clear(),e.traverse(function(e){e.isCSS3DSprite&&d.add(e)})};function f(e,n,r){if(e.visible===!1)return;let i=e.layers.test(r.layers)===!0,a=e.element;if(a.style.display=i===!0?``:`none`,i===!0){e.onBeforeRender(t,n,r),Qw.copy(r.matrixWorldInverse),Qw.transpose(),e.rotation2D!==0&&Qw.multiply($w.makeRotationZ(e.rotation2D)),e.matrixWorld.decompose(qw,Jw,Yw),Qw.setPosition(qw),Qw.scale(Yw),Qw.elements[3]=0,Qw.elements[7]=0,Qw.elements[11]=0,Qw.elements[15]=1;let i=h(Qw),s=o.objects.get(e);(s===void 0||s.style!==i)&&(a.style.transform=i,o.objects.set(e,{style:i})),a.parentNode!==l&&l.appendChild(a),e.onAfterRender(t,n,r)}}this.render=function(e,t){let n=t.projectionMatrix.elements[5]*a;e.updateMatrixWorld(),t.parent===null&&t.updateMatrixWorld();let r,s;t.isOrthographicCamera&&(r=-(t.right+t.left)/2,s=(t.top+t.bottom)/2);let c=t.isOrthographicCamera?`scale(`+n+`)translate(`+p(r)+`px,`+p(s)+`px)`+m(t.matrixWorldInverse):`translateZ(`+n+`px)`+m(t.matrixWorldInverse),h=(t.isPerspectiveCamera?`perspective(`+n+`px) `:``)+c+` translate(`+i+`px,`+a+`px)`;if(o.camera.style!==h&&(l.style.transform=h,o.camera.style=h),u)_(e,e,t,c),u=!1;else if(d.size>0)for(let n of d)f(n,e,t)},this.setSize=function(e,t){n=e,r=t,i=n/2,a=r/2,s.style.width=e+`px`,s.style.height=t+`px`,c.style.width=e+`px`,c.style.height=t+`px`,l.style.width=e+`px`,l.style.height=t+`px`};function p(e){return Math.abs(e)<1e-10?0:e}function m(e){let t=e.elements;return`matrix3d(`+p(t[0])+`,`+p(-t[1])+`,`+p(t[2])+`,`+p(t[3])+`,`+p(t[4])+`,`+p(-t[5])+`,`+p(t[6])+`,`+p(t[7])+`,`+p(t[8])+`,`+p(-t[9])+`,`+p(t[10])+`,`+p(t[11])+`,`+p(t[12])+`,`+p(-t[13])+`,`+p(t[14])+`,`+p(t[15])+`)`}function h(e){let t=e.elements;return`translate(-50%,-50%) matrix3d(${[t[0],t[1],t[2],t[3],-t[4],-t[5],-t[6],-t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15]].map(e=>Math.abs(e)<1e-10?0:e).join(`,`)})`}function g(e){e.isCSS3DObject&&(e.element.style.display=`none`);for(let t=0,n=e.children.length;t<n;t++)g(e.children[t])}function _(e,n,r,i){if(e.visible===!1){g(e);return}if(e.isCSS3DObject){let i=e.layers.test(r.layers)===!0,a=e.element;if(a.style.display=i===!0?``:`none`,i===!0){e.onBeforeRender(t,n,r);let i;e.isCSS3DSprite?(Qw.copy(r.matrixWorldInverse),Qw.transpose(),e.rotation2D!==0&&Qw.multiply($w.makeRotationZ(e.rotation2D)),e.matrixWorld.decompose(qw,Jw,Yw),Qw.setPosition(qw),Qw.scale(Yw),Qw.elements[3]=0,Qw.elements[7]=0,Qw.elements[11]=0,Qw.elements[15]=1,i=h(Qw)):i=h(e.matrixWorld);let s=o.objects.get(e);if(s===void 0||s.style!==i){a.style.transform=i;let t={style:i};o.objects.set(e,t)}a.parentNode!==l&&l.appendChild(a),e.onAfterRender(t,n,r)}}for(let t=0,a=e.children.length;t<a;t++)_(e.children[t],n,r,i)}}},tT=`#five-CSS3DPlugin {
365
+ position: absolute;
366
+ pointer-events: none;
367
+ user-select: none;
368
+ transform-origin: left top;
369
+ }
370
+
371
+ .five-CSS3DPlugin-X {
372
+ --timeout: 300ms;
373
+ transition: opacity ease-in-out var(--timeout);
374
+ }
375
+
376
+ .five-CSS3DPlugin-hidden {
377
+ opacity: 0;
378
+ }
379
+
380
+ #five-CSS3DPlugin .five-CSS3DPlugin-hidden * {
381
+ pointer-events: none;
382
+ }
383
+ `,nT=class extends o.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){super(e),this.scene=new un,this.styleSheet=new CSSStyleSheet,this.camera=new Ri,this.cacheMap=new WeakMap,this.createCSS3DObject=({id:e=Ww(),name:t,innerHTML:n,sprite:r,normal:i,position:a,scalar:o=.00216,visible:s=!0,timeout:c})=>{let l=document.createElement(`div`);l.className=`five-CSS3DPlugin-X`,s||l.classList.add(`five-CSS3DPlugin-hidden`),c&&l.style.setProperty(`--timeout`,c+`ms`),l.innerHTML=n;let u=r?new Zw(l):new Xw(l);if(u.userData={id:e,_visible:s,_timeout:c,get visible(){return this._visible},set visible(e){e?l.classList.remove(`five-CSS3DPlugin-hidden`):l.classList.add(`five-CSS3DPlugin-hidden`),this._visible=e},get timeout(){return this._timeout},set timeout(e){l.style.setProperty(`--timeout`,e+`ms`),this._timeout=e}},i){let e=new D(0,0,1),t=new ot().setFromUnitVectors(e,i.clone().normalize());u.quaternion.copy(t)}return a&&u.position.copy(a),o&&u.scale.setScalar(o),t&&(u.name=t),u},this.render=()=>{this.camera.fov=this.five.camera.fov,this.camera.aspect=this.five.camera.aspect,this.camera.position.copy(this.five.camera.position),this.camera.rotation.copy(this.five.camera.rotation),this.camera.updateProjectionMatrix(),this.renderer.render(this.scene,this.camera)},this.forceRender=()=>{this.renderer.markDirty(),this.render()},this._addEventListener=()=>{this.five.on(`render.prepare`,this.render),this.appendToFiveContainer()},this._removeEventListener=()=>{var e;this.five.off(`render.prepare`,this.render),(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=void 0},this.dispose=()=>{this.removeAll(),this._disable({userAction:!1})},this.five=e,this.renderer=new eT,this.renderer.domElement.id=`five-CSS3DPlugin`,this.styleSheet.replaceSync(tT),/Chrome/.test(navigator.userAgent)&&!/Edge|Edg|OPR/.test(navigator.userAgent)&&this.styleSheet.insertRule(`#five-CSS3DPlugin * { transform-style: preserve-3d; }`),document&&document.adoptedStyleSheets.push(this.styleSheet);let n={enabled:!0,visible:!0};this.state=Object.assign(n,t==null?void 0:t.initialState),this.state.enabled?this._enable({userAction:!1}):this.styleSheet.disabled=!0}load(e){return r(this,void 0,void 0,function*(){})}appendToFiveContainer(){var e;if(!this.five.renderer)return;let t=this.five.getElement();if(!(t!=null&&t.parentElement))return;let{x:n,y:r}=this.five.renderer.getSize(new at);t.parentElement.appendChild(this.renderer.domElement),this.renderer.setSize(n*2,r*2),this.renderer.domElement.style.width=n*2+`px`,this.renderer.domElement.style.height=r*2+`px`,this.renderer.domElement.style.transform=`scale(0.5)`,(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=new ResizeObserver(()=>{var e;if(!this.five.renderer)return;let t=(e=this.five.getElement())==null?void 0:e.getBoundingClientRect();if(!t)return;let{x:n,y:r,width:i,height:a}=t;this.renderer.setSize(i*2,a*2),this.renderer.domElement.style.left=n+`px`,this.renderer.domElement.style.top=r+`px`,this.renderer.domElement.style.width=i*2+`px`,this.renderer.domElement.style.height=a*2+`px`,this.render()}),this.resizeObserver.observe(t)}add(...e){this.scene.add(...e),this.renderer.updateSpriteSet(this.scene),this.forceRender()}remove(e){this.scene.remove(e),e.traverse(e=>{e instanceof Xw&&e.element.remove()}),this.renderer.updateSpriteSet(this.scene),this.forceRender()}removeAll(){this.scene.remove(...this.scene.children),this.renderer.updateSpriteSet(this.scene),this.forceRender()}fadeInObjects(...e){for(let t of e)t.userData.visible=!0;this.render()}fadeOutObjects(...e){for(let t of e)t.userData.visible=!1;this.render()}_enable(e){this.styleSheet.disabled=!1,this.updateState({enabled:!0},e.userAction),this._addEventListener(),this.render()}_disable(e){this.styleSheet.disabled=!0,this.updateState({enabled:!1},e.userAction),this._removeEventListener()}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this._enable({userAction:n})}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this._disable({userAction:n})}show(e){this.renderer.domElement.style.display=`block`,this.updateState({visible:!0},!0),this.forceRender()}hide(e){this.renderer.domElement.style.display=`none`,this.updateState({visible:!1},!0)}},rT=(e,t)=>new nT(e,t);function iT(e){return r(this,void 0,void 0,function*(){return Promise.all(e.map(e=>r(this,void 0,void 0,function*(){if(!e.svg_url)return{url:e.url,index:e.index};let t=yield fetch(e.svg_url).then(e=>e.text()).catch(()=>void 0);return{url:e.url,index:e.index,svgUrl:e.svg_url,svgContent:t}})))})}function aT(e){let{room_type:t,floor_type:r,room_label:i,observer_indexs:a,customized_name:o,dimension:s}=e,c=n(e,[`room_type`,`floor_type`,`room_label`,`observer_indexs`,`customized_name`,`dimension`]);return Object.assign(Object.assign({},c),{roomType:t,floorType:r,roomLabel:{position:i.position,positionInImage:i.position_in_image},observerIndexs:a,customizedName:o,dimension:s?{width:s.width,height:s.height,vertical:s.vertical,horizontal:s.horizontal}:void 0})}function oT(e){let{floor_name:t,floor_index:r,rooms:i}=e,a=n(e,[`floor_name`,`floor_index`,`rooms`]);return Object.assign(Object.assign({},a),{floorName:t,floorIndex:r,rooms:i.map(aT)})}function sT(e){return{floorIndex:e.floor_index,positionInImage:e.position_in_image}}function cT(e){return{positionInImage:e.position_in_image,northRad:e.north_rad,roomId:e.room_id,floorIndex:e.floor_index}}function lT(e){return r(this,void 0,void 0,function*(){var t,n;let{computed_data:r}=e;return{outlines:yield iT((t=e.outlines)==null?[]:t),bounding:r.bounding,floorDatas:r.floor_datas.map(oT),entrance:r.entrance?cT(r.entrance):null,observers:((n=r.observers)==null?[]:n).map(sT)}})}function uT(e,t,n=2){return Number(e.toFixed(n))===Number(t.toFixed(n))}function dT(e,t,n=2){let r=Math.PI*2,i=e=>(e%r+r)%r,a=i(e),o=i(t),s=Math.min(Math.abs(a-o),r-Math.abs(a-o));return Number(s.toFixed(n))===0}function fT(e){return r(this,void 0,void 0,function*(){try{return[null,yield e]}catch(e){return e instanceof Error?[e,null]:[Error(String(e)),null]}})}function pT(e){return Object.prototype.toString.call(e)===`[object Object]`&&!!e.isVector3}function mT(e,t){return Object.keys(e).every(n=>{let r=t[n],i=e[n];return r===void 0||i===void 0?!0:n===`longitude`||n===`latitude`?dT(r,i,2):typeof r==`number`&&typeof i==`number`?uT(r,i,2):pT(i)&&pT(r)?i.distanceTo(r)<.01:r===i})}function hT(e,t){return r(this,void 0,void 0,function*(){let[n]=yield fT(e.changeMode(...t));if(n)throw Error(`change mode canceled`);yield new Promise(t=>{e.once(`initAnimationWillStart`,()=>{e.once(`initAnimationEnded`,()=>t())})});let r=t[1];if(r&&!mT(r,e.getCurrentState()))throw Error(`pose 与预期不符`)})}function gT(e,t,n){let r=e.modelScene.boundingBox,i=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2),a=i/2/Math.tan(Math.PI*t/360);return n<1&&(a/=n),Number.isNaN(a)?i:a}function _T(e,t){let n=Object.assign({},e);for(let e of t)delete n[e];return n}function vT(e,t){if(e.currentMode!==t.mode)return!1;let n=e.getCurrentState(),r=e.camera.fov;return!(!uT(n.latitude,t.latitude,2)||!uT(n.longitude,t.longitude,2)||t.fov!==void 0&&!uT(r,t.fov,2)||t.offset&&n.offset.distanceTo(t.offset)>.01)}function yT(e,t){return r(this,arguments,void 0,function*(e,t,n=!0){var r;if(vT(e,t))return;let i=e.getCurrentState();if(e.currentMode!==t.mode){let r=e.models.find(t=>t.name===e.state.workCode),i=typeof t.fov==`number`?t.fov:80;r&&(t.distance=gT(e,i,e.camera.aspect));let[a]=yield fT(hT(e,[t.mode,t,void 0,n]));if(a)throw a;return}let{latitude:a,longitude:o,fov:s}=i,c=(r=t.fov)==null?s:r,l=Math.min(1e3,Math.max(200,Math.abs(a-Math.PI/2)*1e3,(o>Math.PI?Math.PI*2-o:o)*500,Number.isFinite(c)?Math.abs(s-c)*10:1/0)),[u]=yield fT(e.updateCamera(_T(t,[`mode`]),l,n));if(u)throw Error(`UpdateCameraError`)})}function bT(e,t,n=300){let r=e.getElement();if(!r)return;r.style.opacity=t+``;let i=r.parentElement;if(i)for(let e=0;e<i.children.length;e++){let n=i.children[e];n instanceof HTMLElement&&n.dataset.infive===`1`&&(n.style.opacity=t+``)}r.style.transition=n===0?`none`:`opacity ${n}ms linear`,n!==0&&Promise.race([new Promise(e=>r.addEventListener(`transitionend`,()=>e(),{once:!0})),new Promise(e=>setTimeout(e,n))]).then(()=>{r.style.transition=`none`})}function xT(e,t){var n,r;let i=(r=(n=e.work)==null?void 0:n.observers)==null?[]:r;if(t>(i.length?Math.max(...i.map(e=>e.floorIndex)):0))return e.modelScene.boundingBox.max.y;let a=i.filter(e=>e.floorIndex===t).map(e=>e.standingPosition.y);return a.length?Math.max(...a):e.modelScene.boundingBox.min.y}function ST(e,t,n=3){let r=e.modelScene.boundingBox;return n===3?(r.max.y+r.min.y)/2:n===2?xT(e,t+1):xT(e,t)}function CT(e,t,n,r){let i=ST(e,n,r==null?void 0:r.attachedTo),a=new D(0,i,0),o=new D(1,i,0),s=a.clone().project(e.camera),c=o.clone().project(e.camera);return Math.abs((c.x-s.x)/1e3)*(t.getBoundingClientRect().width/2)}function wT(e){var t;return((t=e.models)==null?void 0:t.filter(t=>t.name===e.state.workCode)[0])||e.model}function TT(e){var t;return!!((t=wT(e))!=null&&t.loaded)}function ET(e){return r(this,void 0,void 0,function*(){return new Promise(t=>{if(TT(e)){t();return}let n=r=>{r===wT(e)&&(e.off(`modelLoaded`,n),t())};e.on(`modelLoaded`,n)})})}function DT(e){return Object.prototype.toString.call(e)===`[object Object]`}function OT(e,t){return!!(e===t||typeof e==`number`&&typeof t==`number`&&Number.isNaN(e)&&Number.isNaN(t))}function kT(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length?n.every(n=>OT(e[n],t[n])):!1}function AT(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length?n.every(n=>PT(e[n],t[n])):!1}function jT(e,t){return e.length===t.length?e.every((e,n)=>OT(e,t[n])):!1}function MT(e,t){return e.length===t.length?e.every((e,n)=>PT(e,t[n])):!1}function NT(e,t){return OT(e,t)?!0:DT(e)&&DT(t)?kT(e,t):Array.isArray(e)&&Array.isArray(t)?jT(e,t):!1}function PT(e,t){return OT(e,t)?!0:DT(e)&&DT(t)?AT(e,t):Array.isArray(e)&&Array.isArray(t)?MT(e,t):!1}function FT(e,t,n={deep:!1}){return n.deep?PT(e,t):NT(e,t)}function IT(e,t={}){let n=``,{needZ:r,format:i}=t;return(r?e.slice().concat(e[0]):e.slice()).forEach((e,t)=>{let{x:r,y:a}=i?i(e):e,o=`${r},${a}`;n+=(t===0?`M`:`L`)+o}),n+(r?`Z`:``)}function LT({x:e,y:t},n){let{max:r,min:i}=n;return{x:e-i.x,y:r.y-t}}function RT(e,t){let[n,r]=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let[o,s]=t[e],[c,l]=t[a];s>r!=l>r&&n<(c-o)*(r-s)/(l-s)+o&&(i=!i)}return i}function zT(e,t,n){if(t.width===0||t.height===0)return!1;let r=e.path.map(({x:e,y:t})=>[e,t]),{x:i,y:a}=e.roomLabel.position,o=t.width/2,s=t.height/2,c=i*n,l=a*n,u=r.map(([e,t])=>[e*n,t*n]);return[[c+o,l-s],[c-o,l-s],[c-o,l+s],[c+o,l+s]].every(e=>RT(e,u))}var BT=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArUAAAB7CAMAAABdA4ieAAAC91BMVEUAAACOpP/H0P+yxP/a4/+asv/W3/+/z/+cs//S3f+mu//Q2//5+v/H1P/d5f/l6//y9f++zf/i6f+ww/+ovP/7/P/u8v/N2f+Mp//q7/+4yf+uwf+Wr/+7y/+1xv+Ho//x9P+9zP+2x/+swP+gt/+Oqf/Y4v/r8P/l7P/b4//F0/+juf+Zsv+XsP+Trf/p7v97mv9wj/+kuv+ftf/x9P92lf/3+f/I1f+5yv+Eof98m//8/f/4+f90lf+9zf/j6f/T3f/L1/+Bnv/6+/+SrP/m7P/f5v/O2v/L2P/E0v/Az//+///s8P/e5v+rv/+pvv+Anv+qvv+Pqv+Kpv+CoP93l/9xlP/z9v/p7v90lf9uj//P2//v8//o7f/k6v/K1v+6yv9rjv98nv/E0v/9/v/09//h6P/X4f9pjP/9/f/N2f/K1v/C0f+Ho/99nP/1+P9sj//6+//u8/+iuP/u8//g6P/U3v+3x/+0xv+etf+Vrv9pjf/B0P9ukf+ht/+Vr/94mP/G0/+8zP+2x//+/v/09v/W4f9ojv/c5P+xxP/d5v+xw/+vwv+Jo//g6P+nvP+SrP/R3P/1+f/W3//U3//C0P+Jp/9nh/+Kpv+Fov/Y4f/J1/+Pqf+rv/+Oqv+Oqv+muv+twP/f5//t8P97mf/h5/+twP+kuf/L2P+juP+Ipf+huP+Pqf/d5v+zxf+cs/+Zsf+wwv/V3v+8zP+Go/+zxP+GpP/T3f/r8P/u8v/o7f/d5P/m7P/H1P/w9P/D0f+uwf/Z4v/F0v/09//D0v/v8//s8v/d5P/Y4f/s8P+etv/X4f+gt/+ovf+bsv+xw/+Vr//j6v+1x//J1v+4yf/r8P+yxf/T3f/B0f+Fo//09//W4P/h6P/L1v/i6f/x9f/t8v/G0/+uwf/z9f/7/P/n7f/z9v/T3f+4yf/J1v/z9f/w8//q7v/O2v/8/f/5+v/y9f/w8//g6P/z9v+/zv+5yf+9zf/5+v/Q3P/B0P/u8f/R2//////LSJnaAAAA/HRSTlMAAwGMx2jAn2u7ebn0q8zX7J3TiHz45bRS35SFYZmPSembkYNwVMXh2cmodWVjXN43DHZu6gfyrJZGOvrzLAbVvbBB91raz7aypqH+4s6Bfj9/Vk9EMint3C8gt+fc1q+XGAml/O/SxBz7s66kSz3wI/bjc+fQvpOObV8VoyZyXjSpmgv97sMPyorNiYZN0XpYuvHCv6JNEhEWw61YgCUdGBIP5CIgHypaUEU6NS9JQy8lGlY6NCuMfVtPSzspJoRxcExBNTMUyn9zaWRfVkk9Oad9emtkY0RBMLGsnJaQj4ZmXVHhsaKbeW9owb466dnVy7mYj45wyaGV3bdGzuNnAAASkklEQVR42uyaS0iUURiGTUQZ1MaMURSEbOFt4ybGQClFHO9rBS8F3nAURHG0hZvyQrgQRsfNuKmRCTcGGaEzThNqMyouwswKNTVMLe/a/bLo+845/5z/dzIiumj971I3gz6+Puc9x0POT6bRaXfYrJa18YHFhYXXKzMz6+/fb2+/ePFia8uvWlXelFkcr6pO2NqCr2xv77xfn5lZWXm9sDgwvmZZGnHYzaZjHnLk/PaYzL0jS9Pji6+XN3Z3gvJPnTkTEJCT01xSUtWuVick+PlVJ6tUqvj44uLipkxIU3F5fLxKlZxc7efnl6BWt1eVlDTn5AQEnDl16lR+be2n3fWZlYWBNcugze485yFHzq/Kub7eEcv44tzyekpsbEhIZGRWVk1NUFBtPqU2gFGbANRWVycnI7XlCO0XQm25mFp1VRWjFrDNz68NCqqpyYqMDAmJjc3NzQ3cmJwfmLba7CZPDzlyfg5Wh3V6YG559HyhUhkVlZJSUJDLqK3pDkJqoS8ZtVWEWiCTUltejl37BaCVdG2Cul1MLUIb1M2pLShIiYpSKpWF58+37U3Oj1ue2E0ecuT8EK1mm3VoYG4vW6MrLQ0MDDwvUIvQ8q6tBWqZIeRQQ+DU8q51NwQxtbVAbRajNrZARG1gaWBpm0anyY6enB+bGOyV6ZVzIK6bPUPzs17Rx48fb80GaHVtpQRaF7XYtZFIbTcRBAFb7rWc2uJM1rVoCCqgFquWdy0TBDCEbqSWlm2KQC38rZSW6nS67OxW+CxXr0Z7ec/J8MqRxtQ7ONQ/2xIREeHlFR191UVtqRu1wBep2hpqCNxrpYYg6dp4Ude2Y9cG8K5FQ8hyNwSglnZtNoE22svLKyKirKxFsTo28cQsH9v+81Bevb29O1qMZQAtUhs9SqnVsK5199osRi3fENwNgXitcBqrrmZly7r2DKUWq7Zb8FrBEAoptW1tGg3rWk5tC3xSQ53ig8zuf5pzd4df9c8qFIrEOgOhtgyphdCubaVdC9iyrkVo+Wnsm12bID6NZYqWLxX32qpm0fKVD9ii10bSrkVDiJJ2bWuriFqjsaUDPmpdXWIifG7f1bGezT55bfhfYrrfM7Wamufrq9cjtIkGA+1aZgiArdRrlUBtirRr2YbAvBZGBLV71/INAcuWbwjcEERey7tWKe7abGnXdiC1DFq9r29eampF/3O5dv/1ODd7pj5og4ODU13UQtdyQ+Beq9FovnMaE20IAdwQJHut2BCE05jaffkSDAGwxbJl1CK27DQ2iqcxCFKLXWsgXatX+BJqg4O1aWlJz14N35XR/RfTeP/2VOeFpKS0tDQCLVDrq9AjtXVIrdFYVsaoHWWGQKgN3EdtCNVa91sGtdQQmvhpjFUtX74QWjoioNdm0a5lGwL3Wp1GI/HaCCP1WkMddi1Cm5cH1BJsky5UxGHrysLw7wQd9pl/XFfFBaRWq9UCtalIrZ56rcG7A7u2jHktMQQN91qllFq2fImoba468G5M6rVq4rV8Q0CvZdTGgtcitrxrNUgtli1QCyFe6+0yBL3eF6Cl1CYBtYBtnL9/0b2ezWseco56QGLvpV++7O8fF1dRAdhC16Ih0K4lhpBoQBaMLS6vZacxTdu+DSFXsiHkU689YENgd2MSQ0iQ7rXiG90Qvnxh2eJhTOfqWihb7rXUEIBalyFotaRru+IQ28uXY9LBF27JD3OObPqePn9TlJ4eExNDqO0CapOQWsCWdq2CUmtgGwKnli9f6LWFrg0hhFEr7doS1rXSu7HM8nK3DaHd7W6shnutyxACqdficYxSyzYEgVqEVsENQYtdi9j6U2rTi4oqfaZu32n0kHO04nlr+N3HjIaGoqIipNafUNsF1KIicK9VUK8FQ8Cu5YbAqQVslfv2Wuq1+TU7uxszK/DycG1t2mJZWrKOjIzYHA673Wx2Ok3nPImbNJqcfWa7vdfhsMG3rUtLFss0PG3Eh43ruzvC8sW7lhkCgxYMQXzLYCReyzYESGoePY0JXesPiYlBbCsbOjMyMu713L/uIedo5NiNm+8++vhkALSVlaRrqSEAtNKu1VNqWddKN4Rs3f6uLdxYnsTXsdNLg7Ze8y95WOhp6rM7RqyW6fGB+bnJ5Q0lNQRyo+u+fOGGIMFWOI2Rqq2ghgDUYtcSbH18fE4AuXLnHvr0PX30JvzEiRM+gG0nYFsE2IIgQARD0LINIY9vCNLla1R8ozu6PLc4brE6zH/iEcAxp90GD83mJ/dAqjU64TTGvNYodC0uX2SvJV1LNwSkFg3B1bWEWvhBhIdfeSjbwiHO9QeP34aFXQkPp9AitWgIgtfGYdcecBrrMJYJy1c0gLIHb62GrE96+/7aCmoyOwYnhvrnJo3otXz5Yl6roNCmptLTGHYtei1imy50rQ+lFrANC7v48ra86B6+HLs1/PDs2YsA7RWAlmLb0MkNgXStdENwv2WIUKzi2yrnoZo98ekkPpYQ7saQWtq1dPlCr+WGIO1axJZSe/Hs2bePHsiae4jSeOfxpdBQhJZULe/aSmIISG0cNwTetQoIMQTDbP9Qj818mP+Pejp7ByfGVmeF5WufIVw4wGuxahm1oaGh9S9vyqPYYYgnnL1O19cDtEAt7VrqtXCIdnWtsCEkYdfyWwaF4jMp174j9JtsvGvrGer/oMcNQXzL0CVZvhoaMii1iG2YQG19/enTp08+li33K/tm7JNGGIbxqiEht5m7iasMcBuwwOJk0tEFcn9BG7s1bizQGBycCCbXpUkTo9VFJVpRSeNkuBqnq6BRoiwOMtldm3Tr+37fJ9+dtFEUbNX3+RPIj+d+93zf/ctgyZb1YDAUAmx510J410JY1wqvbTeEma3vJ9uP9571yObu8rfTd6xrhSEIahFb2bXCayW1wWAwM2CvLf5XFvSMMr9fzw9kMhnEFqmVXSsMYQI3hFFJLUD7GixwZuvHU/kuoG+zsXx0CtS+Yl4runZ0fHzcvSEAtUPcEEKCWshhdYlezx44I0vV80J+AILQQgIuagdby9e1vXbm9Ogp3kmd2j45q7z1Ll/tXRuAoCEAtQzbQkE93qdLCw+Wsa9NXVXVfB6xdXftsOxauSHwszHgtfG0L6IufNkBdhm0vGul10Kk14quzQO1qqqDK7yg9Dwj682wrk+raqEgoGXUtrp2yGUI3Gt/we3T5/L+0Q+6W/mIXTvR7rWArTSEfJ5Rq+the40at5dBMTDDCC2jVhoCYjscAGo5tBC+fA0elXefhsF2dqTdOKtMyLlWvo2F3NQCtNPTiG04aZcI3B6lb6mqJZPhK2rVFrVBFATRtXKvrZw1Fh/RotXdoOzu/LwYhLj3Wo8hCGrDQG1y1jTIcbufvo2ilTJnZxFbnRsC81qxIYQ8XntRpy9SWOZ3y+dv2pevjPRaQa1pplIph87OuoxsXEulTJND6zWEjPRagDZwXqbredd94bgiqfUYgsq6Ngldi9hqmna8Qj9etw6/bMvSNIYt/MAtQ8i7DQG79rLeoPH8b75QPg8wbINyQ+CGILtW0yxLUZoE7v2RrRmKolgaUouGwL1W93gtdu1lnY57bj5IPBRei+GGAHF3rYKJ7608l82lF5lacSLxOFLLutaUXeuhNlOnOyEdkMu9VnYtJGnysrUshDYej6SLG9QBd5TZdASgjSsQhNZFrS69FoilF6+OsgDkIrauDWEWu1ZjhoDYRiKRdNohU+g4CyUnl2tRa1nSEKTXFmwi9s7kNg89G4IwBNG1SG0uZ9BVhQ4PEwzDyKWBWoEtUis2BNG19toSydc9bx81D91dC9hKaiNIrWE4dPxwy8yXnEQCoL3WtSnetQhtsklXRLv1YajNli8BraYgtozaXBqgTSQS2cl1+q1vytj6pD+bBWpF10qvFV2btIukBV2WhVRrQxDQCkNAbLNZv1N7zoeMt/jr13x+P1LLyhawlYLAX8fobl33g0ZWtE2+11oearFr/RDf3gEV7p/z6WDS5/MJaF1eqwhslSo9q3qW/vn9Y63Na7Fqs0gtpDZHhXs9/Z9r0ShC6+5aQS1C65ToEKHXmVqvRtoNwQ9BbKPR96vUGt5H1IcYg9YjCDkxIcSrNB32ONLRSg7H1msIEMA2GqNJoZWp1ckYQCuoRWwZtUYaFSFdpNHwYbOwsodde7UhtLAFaGOxl7U5eub9Ztfscd0Eoihsu8oSKJBoQpUYyYULmhSIBVjACuip0tFQpEaaagTSyLiI9GSMZArEKp4it95N7oXBk6dUr7Ln59sB4uNw7p0BTlfb3s7Wcm0fvfbbV7MveAYo7k9eEB5h+x0Aa22b9OlKb9bHP7kNgLZC2slawKTs80Bx/2sIW8DO7dy7VSt9SfuoyHMurei1k7bnt/3K8ExQXLT2Y0MA8qLwro2mRaG6hV5RTNpuuba81345v+n+E3oR6su7aAjc2hyt9cL4qN+fcNNcw9DzPJG1i7VG2dfidHlHaYW1qK0H2oauZvvz/ZEyhtLyrBUN4WzuxLweIO6HrOXWhiQa6pUupHeLkRCYrbWB2dqzZh+vPGxOl1xoW3iztYyxqNWj4KadG0URm7z9tyHoPZi+PnBJRExjk7WEEHiTrtMof9T7q7NctJYwcBaYGgJwVf/R5Sft3bkh8KydrXVV93aHzs7WklBMY2b+kob65uE0NhcEQhhaa1mWo+7VmqqzgElaRlDbKWtD0wykAg6GikJkretO2saKelt1cRyjtQAD5qw1zUBCdr2L1jIWAdzaWEVvq44+pI0AErLQs/rdyiAjm9ONiF5rATGlpaPWwUM1ZHSxFokIY9FNn12fivw4toQwkbWobemPynhbD1lW0hKtfYTtVa3PUk+q3pp7LYDW0jLL2lGJ+yP14DhZltFFW5DW6swApgbrpn1kbVmCtJnj+KP0GyFwFsCspZRLq1j70Z2qsxC0loK0qK0vd95Wne/7IC1Q8qgd9DgB1Il0dKx4CVsH8P1E3n3C7t76AM/aErKW3s1FAxVZNweUllvrIwc5V5r7MUiSWVoMW5C2NdVAXao7DmNL1vpJkgy1dH/V9W9wNmmTxdqy7OR7CMMnV2EiaxMgkGzoXjdDEKC2S0HwR3OeoD6beuBZ26K0QXC4y/Pa/7Jrx7gJw1AYx2su0iuYgYFI7sAJstiS2ZKpk8UeWfKWKyQLLJ5Qxyp34TZ9D15YOkBpm9ji/U/A8CP+HFj0styMapHtZ54bh/t5y2E9LoQNVppMXoN1uixLQns8rl9PeZ0T3O96O5T4rL2wBQkuZnCbWQ7OXdUe1zwNni8YCsh2VOuK1I/a2jtHapHtZp/J+cD9bf0HoiW1rpAp38TfYlEUgJaetWUOZwP3P3UnetYCW1ChU52JogoS1UKIlq9gT95yILSugKRKciq2VhLaEpIVm3366j2pxaSMyf07YRUlND5qTynvGG6aaDOSWgnptFiIKoQLWmQ7pLphuOkTB0lqoZDSTGiVBrXE1iT0wbgEEn0gtSEEncoNfRV1uKKN/KqL+/4C1xYSA7XapjATRGU1hGxT3NtcGnUK0UJgZf7TuDWEls1yt9wiWsja7awzYRWttYgWYrPcLbejWqua2WaCqBSixQLvWe5mi06RWqv8TDOhNUrZC9sdm+Xuu5cpUqvU+wwzYbVVkIXYLHd/olekVpmpZ8KiMYbU7ma/EXJZBW5JrZl2V9bRnNWyWe4xt8TWTPd3FdEYSEFslnsoURlAi01FqN56f2br2xeOe9ytgbyf4nErGg/hl6RN4Jc5Lt++2rVjHMdCIIqiqtoRQW2mMogIyZFjlsB2B9wjjaY1PXa3wcbSPaEDR1fP9fVt8aPai2+f2+TlWu2l0yweZHlEO5S9cyu1lDKj5T/fWCH4jLaUnXMbvFyrzby8xRrayqUM2+ZWqvuM1nmpgHWkl8F9z9yG7LNa5yEMa0n8yHb93Er1oXjnoMVyFn3KQVcP7VRpFn+sDiznaiuHNufsHnkIwy7aPA/r5jbFGW3m7S12ku55WPN7Li1PPIRhN6sjtBjTmm+KmYcwPEOKs9tHF1JDHCoHLZ5DQ8yPBic9DoHjAKvsb85qjbFxHOCprMZaf5qdhlorxwGeTsPIttvPlno0y3GAZfbHp6n3ynGAV0m99u/2J6H3znGAvW4n+J25tdY7xwFey1pvQe6/DlrjOMDLqfXW7N5pbs0YWhxgtpj0rl1uiaHFISzccSWohUCzOIemm0VKChwHOMutKCVwHOA4av/JVi0xtDiRpCRfRcvQ4lBfxSnG0OJc/+xTjKHFyVRMP38iDC0O92lZVRhanO+vcVWGFu9BRWkW7+Z3rapEizdy7ZVm8V5Gtr8AtSnix59eOmYAAAAASUVORK5CYII=`,VT=e=>e*180/Math.PI;function HT(e,t){let n=document.createElement(e);return t&&(n.className=t),n}function UT(e,t){let n=document.createElementNS(`http://www.w3.org/2000/svg`,e);if(t)for(let e in t)n.setAttribute(e,t[e]);return n}function WT(e){let t=HT(`div`,`floorplan-plugin__missing-floor`),{imageURL:n,imageWidth:r=200,imageHeight:i=120,text:a,textFontSize:o=14}=e.missingFloorConfig;if(n){let e=HT(`img`);e.src=n,e.alt=`缺省楼层展位图`,e.style.width=r+`px`,e.style.height=i+`px`,e.style.maxWidth=`none`,t.appendChild(e)}if(a){let e=HT(`span`,`floorplan-plugin__missing-floor-text`);e.style.fontSize=o+`px`,e.textContent=a,t.appendChild(e)}return t}var GT=0;function KT(e,t){e.appendChild(UT(`path`,{d:t,fill:`#2F313A`}))}function qT(e,t){let n=`fpm-room-pattern-tile-${GT++}`,r=UT(`defs`),i=UT(`pattern`,{id:n,x:`0`,y:`0`,width:`12`,height:`12`,patternUnits:`userSpaceOnUse`,patternTransform:`scale(50 50)`});i.appendChild(UT(`rect`,{x:`0`,y:`0`,width:`12`,height:`12`,fill:`#323747`})),i.appendChild(UT(`path`,{d:`M0 6 h 12 M6 0 v 12`,stroke:`#ffffff`,"stroke-opacity":`0.06`,"stroke-width":`0.5`,fill:`none`})),r.appendChild(i),e.appendChild(r),e.appendChild(UT(`path`,{d:t,fill:`url(#${n})`}))}function JT(e,t){let n=`fpm-room-pattern-wood-1-${GT++}`,r=`fpm-room-pattern-wood-2-${GT++}`,i=UT(`defs`),a=UT(`pattern`,{id:n,x:`0`,y:`0`,width:`12`,height:`50`,patternUnits:`userSpaceOnUse`,patternTransform:`scale(50 50)`});a.appendChild(UT(`rect`,{x:`0`,y:`0`,width:`6`,height:`50`,fill:`none`,stroke:`#4B4B57`,"stroke-width":`0.5`}));let o=UT(`pattern`,{id:r,x:`6`,y:`25`,width:`12`,height:`50`,patternUnits:`userSpaceOnUse`,patternTransform:`scale(50 50)`});o.appendChild(UT(`rect`,{x:`0`,y:`0`,width:`6`,height:`50`,fill:`none`,stroke:`#4B4B57`,"stroke-width":`0.5`})),i.appendChild(a),i.appendChild(o),e.appendChild(i),e.appendChild(UT(`path`,{d:t,fill:`#43434D`})),e.appendChild(UT(`path`,{d:t,fill:`url(#${n})`})),e.appendChild(UT(`path`,{d:t,fill:`url(#${r})`}))}function YT(e){let{vertical:t,horizontal:n}=e;if(!(!t||t.length<2||!n||n.length<2))return`${IT([{x:t[1].x,y:t[1].y+53},{x:t[1].x-60,y:t[1].y+124},{x:t[1].x+60,y:t[1].y+124}],{needZ:!0})} ${IT([{x:t[0].x,y:t[0].y-53},{x:t[0].x-60,y:t[0].y-124},{x:t[0].x+60,y:t[0].y-124}],{needZ:!0})} ${IT([{x:n[0].x+53,y:n[0].y},{x:n[0].x+124,y:n[0].y+60},{x:n[0].x+124,y:n[0].y-60}],{needZ:!0})} ${IT([{x:n[1].x-53,y:n[1].y},{x:n[1].x-124,y:n[1].y+60},{x:n[1].x-124,y:n[1].y-60}],{needZ:!0})}`}function XT(e,t,n){let r=HT(`div`,`floorplan-plugin__room-material`),{bounding:i}=t,a=i.max.x-i.min.x,o=i.max.y-i.min.y,s=n.roomLabelsEnable&&n.roomDimensionEnable;for(let t of e.rooms){let e=IT(t.path.map(e=>LT(e,i)),{needZ:!0}),n=UT(`svg`,{width:`100%`,height:`100%`,viewBox:`0 0 ${a} ${o}`});if(t.floorType===1?KT(n,e):t.floorType===0?JT(n,e):qT(n,e),r.appendChild(n),s&&t.dimension){let e=YT(t.dimension);if(e){let t=UT(`svg`,{width:`100%`,height:`100%`,viewBox:`0 0 ${a} ${o}`});t.appendChild(UT(`path`,{d:e,fill:`#969696`,stroke:`#969696`,"stroke-width":`1`,"fill-rule":`evenodd`})),r.appendChild(t)}}}return r}function ZT(e,t,n){let r=HT(`div`,`floorplan-plugin__room-highlight`),{bounding:i}=t,a=UT(`svg`,{width:`100%`,height:`100%`,viewBox:`0 0 ${i.max.x-i.min.x} ${i.max.y-i.min.y}`});for(let t of e.rooms){let e=UT(`path`,{d:IT(t.path,{needZ:!0,format:e=>LT(e,i)}),id:`${n.floorIndex}_${t.id}`}),r=n.highlightData[`${n.floorIndex}_${t.id}`];r&&(r.fill&&(e.style.fill=r.fill),r.opacity!==void 0&&e.style.setProperty(`--opacity`,String(r.opacity)),e.style.pointerEvents=r.disabled?`none`:`auto`),e.addEventListener(`mouseenter`,()=>n.onRoomHover(t)),e.addEventListener(`mouseleave`,()=>n.onRoomHover(null)),a.appendChild(e)}return r.appendChild(a),r}function QT(e,t){let n=HT(`div`,`floorplan-plugin__base-image`),r=e.outlines[t];if(r!=null&&r.svgContent)n.innerHTML=r.svgContent;else if(r!=null&&r.url){let e=HT(`img`);e.src=r.url,e.alt=`floorplan image`,n.appendChild(e)}return n}function $T(e){var t;let n=HT(`div`,`floorplan-plugin__items`);for(let r of(t=e.items)==null?[]:t){let e=HT(`div`,`floorplan-plugin__item`);e.style.left=r.positionInImage.x*100+`%`,e.style.top=r.positionInImage.y*100+`%`,e.style.width=r.width*100+`%`,e.style.height=r.height*100+`%`;let t=HT(`img`,`floorplan-plugin__item-img`);if(t.src=r.src,t.alt=``,t.style.transform=`rotate(${r.rotateZ}deg) scaleX(${r.rotateX?-1:1}) scaleY(${r.rotateY?-1:1})`,e.appendChild(t),r.notes){let t=HT(`span`,`floorplan-plugin__item-notes`);t.textContent=r.notes,e.appendChild(t)}n.appendChild(e)}return n}function eE(e,t,n,r){var i,a;let o=HT(`div`,`floorplan-plugin__room-label-item`);o.style.left=e.roomLabel.positionInImage.x*100+`%`,o.style.top=e.roomLabel.positionInImage.y*100+`%`;let s=r===e.id,{bounding:c}=t,l=c.max.x-c.min.x;o.dataset.roomId=e.id,o.dataset.roomLabelX=String(e.roomLabel.position.x),o.dataset.roomLabelY=String(e.roomLabel.position.y),o.dataset.boundingWidth=String(l);let u=(i=n.getLabelElement)==null?void 0:i.call(n,e);if(u)return o.appendChild(u),o;let d=HT(`div`,`floorplan-plugin__room-part1`);if(n.roomNameEnable){let t=HT(`span`,`floorplan-plugin__room-name`);t.textContent=n.roomNameOtherTypeEnable?e.name:e.roomType===`100900000012`?(a=e.customizedName)==null?e.name:a:e.name,d.appendChild(t)}if(n.roomAreaEnable&&e.size){let t=HT(`span`,`floorplan-plugin__room-area`);t.textContent=n.getRoomAreaText(e.size),d.appendChild(t)}if(o.appendChild(d),n.roomDimensionEnable&&e.dimension){let t=HT(`span`,`floorplan-plugin__room-size`);t.textContent=n.getRoomDimensionText(e.dimension.width,e.dimension.height),o.appendChild(t)}return s&&(o.style.opacity=`1`,d.style.opacity=`1`),o}function tE(e,t,n,r){let i=HT(`div`,`floorplan-plugin__room-labels`);for(let a of e.rooms)i.appendChild(eE(a,t,n,r));return i}function nE(e,t,n,r){let i=e.observers[t];if(!i)return;let a=HT(`div`,`floorplan-plugin__camera-position`);a.style.left=i.positionInImage.x*100+`%`,a.style.top=i.positionInImage.y*100+`%`;let o=HT(`div`,`floorplan-plugin__camera-rotate`),s=document.body.clientWidth,c=document.body.clientHeight,l=`${(s<500||c<500?17:37)/16}rem`;return o.style.width=l,o.style.height=l,o.style.left=`-`+l,o.style.top=`-`+l,o.style.transform=`rotate(${-VT(n)+45}deg)`,o.style.transformOrigin=`${l} ${l}`,o.style.backgroundImage=`url(${r||`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAMAAAANf8AYAAAC2VBMVEUAAACCnP+Dn/+Enf+HqP+Gp/+Fof+Gpf+IrP+Lsf+Dof+Cmv+Lsv+Mtf+Eo/+Bmf+JrP+Hqf+Env+Krv+Fo/+Pu/+Ms/+Qvv+Hqf+RwP+KsP+Fpf+Mtv+Gov+Bnf+Qv/+Nt/+Krv+Ho/+Rwf+Ouv+Emv+Amv+SxP+Sw/+NuP+Mtf/G0f6huP+Ot/+JrP+Jqv+Dnv+crf6Uqv////+QvP+PvP+Ms//J0/3p9/+Ux/+Ouf+Krf+Iqf+Fpv+/zf6WsP+MpP+RqP+Uyf+Jy//V3P6Yuf+Qqf+Rqv/5/f+Sxf+Jy/////+Lx/+Ouf+Nw/+Owv+PwP+Jr/+Jq/+VvP+Vuv/c4v+Fnf+btP+InP+Blf/3+P6Txf+Jzf+Jyf+NxP+Qwf/t8/6Svv+Tvf/O1f7Czv3T2f6cu/+qvP7a4fvo7v77/v/o9//p9//0+v////+Vy//w9//k8/+B1f/v9/+D0/+UyP/u9v+D0v/i8f+F0v/g7/+G0P+KzP+Hz/////+Lx//s8/+Puf/h7P+Mxv/w9f7q8v/q8f2RwP/r8f6JrP/t8v6RvP/l6f7////j6P6VvP/f5/7q8P7a4P/U2f6au/+ZuP+ewf+auP+iu//n6f2Fn//j6P/h4fn9/v/4/P/3/P/o9v/l9P+F1P+B1f/i8v+UyP+J0f+E0f/h7//r8v6Izf/g7v/q8v6Pv//f7P7f7f/g7f+Lxf+MyP+Mw//k7v6Ow/+Ov//v8/2Pu//t8f+Tvv/p8P6Uu//q7v/i6P2Xvf+WuP/L1vypu//Azv7K0/zy8v/l8v/A4P/o9f/x+f+I0f/j8v+J0P/s9v/h8P+I0P/t9v/r9P6Lyv+Lyf/s9P/g7P+Myv/s8/7j7v+Jrv/q8P2Uwf+Epf+TuP/a3vzh5f3w8P/a4P20v//Nzfzx8f/Pz/Cg0P/f7//u9f/q8v7o8v7s8/7s8v3w9f+Sv/+TuP+Gp//s8fr///8/HFXHAAAA8nRSTlMANUQ/Z2JJXXaKTjCPmVMre3E6gFiylLxsxoVYnk5JwaOFU8utOjrV0KieQS2icWwzMC4Dt7aTQvjfrHprXD0zMyvpvUxGNjH+2sK9raeYkoiAcF5TUi0rKCYY2cy3pIJ/eGpEQDcxLx0S/Pv19PPu7Ovr5+Tk4eDe3NXU09DIsq2opKCViYN9e3V1cmZlXllVTk1GQDs2NTMwJw0K/vn28u/u5+Pj3tjNycjGw8DAua2pqJ6SjYyMf3BvaWNgWk5NSTc3MxT79PHw6efl2trY19PHurWysqWZe2xkXVlUPjo6OSskCO7Qzs6+vKCedmhdN1av0hoAAAV1SURBVEjHjZT3P9RxHMe1nCjcObo4cjpX5w53l7pUbnBGkr2TPZJKmiqVEQlJhGjvvfcm2nvvvXf5C3q/P98bkuR1D7+9n16v1/vzvtPrnAade/ty6anHJfFHOjkfXbe07PGxkuL4oqIjCzoDjHtxurzsRHmFStokjBDG/59JrwurOF2hkkUoIyKEQmFqatG3/xDnXlSGPZcKI5VKiVgsli+vrakpfNAx8UoVlpRWH6mUeMsVcm8vhah6WfXB3A6IlSlVKoE4KjxcgtNGRl1Ayzw9H+Z20DypMVkZZWKiUIi6oHj2PAbPs6Eh/+6/kBUpVUliIEQKGGcwGPbdiBpCQ/O//AMZJ218XW9igoHsGTwY7kopdMmSvTvbz/VGmiyhCARwWJ/Ss5CQ9pl3zVJZJCEwEszb6BtaGxrCn3XIyZP3trW3rybBWTCB1jy0sNGHeWM7+BgzrX4kJu752E57mWA5mIjsMRVxgGkrJpPpRvtJSywt3X2rPUSMuUgqIIzx37vRaLQeqNKEhN03/womg/bYhDJBBzdqvjsqYeHCHdfa1k9BF0QoEyuwoOadWc4sFutoXNzWGW2W3Axd8E3AxAZ6WNGeEoDl7EwPho/T0cDAtswb2Bi6kFx2VkwaDYgRI5zo9EUGRIGHD82e+ufrJ8uo+l31oQogYMJiOdFh2BQ03NTscEDAn8wKgQCeUsRTI8QEMhkYDDc1NTMLMuNwLAP8/a9Pbl0mJQlXhvVtrO2YNLce3Uew6IvAAsYtLS17gvwLCrKR0d3la0DsgdG3NiZVMBZacMh8L9CB2NjsS61eRiCtB4YH/Q21CMQKAgLnh1hYWAyJ3b9/40Qd09woppJhFytAnIPpBmBCCBjvjdrn59eKSU+SRWkZphu40IMBgRpAAMBmO7DZbL/786+s0TIpKqXOhgqGCKcnhOrd28HBlmj+2LFZWia9KjkqnHoa3BmsjG7wKIgDuSzQw9F29Gh+3jDunTseWas1zKtKYbiIsrEjZdAF2iPiYOvIz+Nyuebm5h6+HuvGa2xU0qhwBbkzayzjDO8y3IwgbAdHPp87zNx8sIvLYN/tvhc1TF1lWqSEwaMWgG3ABpIB4sC2HY2Ei0sf0O2YmLWr1CdQGRYp8SK3ic/ZnRWMLqQ+2xGRwUD069dvV8zcuRom+rlA6Y2MbgGmhAGEz4VYSPQF5cyZM6GFYl6eTlN6ixi6aE6PqDLQZRi4EKI/KOfGFjUzqCKsXu6l2RpuAKJxiI1tHhcQJAYOHDhgwOZZs4ZSTHR5lQQYPDW1DS4aELQxdyEIAANGjtk8c6aaqTslk8gVwIAN0w3rAEL2bMtHm12AIOHqenXaNDWztEwo9hKJGHjR6OO0yDSI1IGdoQ0iY0a6Tt+06fKUDRQzqKw8Qlxr1AXrwNqwDvGBA+BrGUDc3d3Xr5+SQZj0E2ERqXIjPAJYNUbD18FoWEeDbHLPzLyQ4ePjQ5i3x1RCubfmpqkjMMNo6KOJ5uqe+f58C9GoaD29XyVSYS1h4DftKeWDDN4AbACZMZAsExEKghWUNKXWhlPfA2P1qjmUT556a9jmQotWi/VOFael1lR7ep4JfRZy8nhpwtG4wMMB/gdi9/nNH+vhezsmJ+fG5quX12fomHl6J+KFy88uA2RJyJPE4wkL4wIPBfgXxO5HxGN7zNw5W2bNnLZhio+OmaR3LD6tplrLfKeYAwX7/O6Dje/2dpniwuKiwoMHH+bn7723Z8/uHTu2fpg9+3p29sYrWVnr1l1cO2HCUFCGT+tshUcWLPj6IDf37ued27Z9unXz2owZU6dOnnxp4sQ1q1ePH79KN6vbQWc1SrfrTit6lO5NO6/F8yZNmofBfgNTwRQLsPLsHQAAAABJRU5ErkJggg==`})`,a.appendChild(o),a}var rE=1e3,iE=180;function aE(e,t,n,r){let i=e===`top`||e===`bottom`,a=n.max.x-n.min.x-(rE-iE)*2,o=n.max.y-n.min.y-(rE-iE)*2,s=t.map(([e,t])=>i?[e.x,t.x]:[e.y,t.y]).flat().sort((e,t)=>e-t).filter((e,t,n)=>t===0||e!==n[t-1]),c=s.map(e=>({left:i?(e-n.min.x-rE+iE)/a:0,bottom:i?0:(e-n.min.y-rE+iE)/o}));c.unshift({left:0,bottom:0}),c.push(i?{left:1,bottom:0}:{left:0,bottom:1});let l=s.length?s[s.length-1]-s[0]:0,u=s.map((e,t,r)=>{let s=t===0?0:e-r[t-1],c=t===0?0:(e+r[t-1])/2;return{left:i?(c-n.min.x-rE+iE)/a:0,bottom:i?0:(c-n.min.y-rE+iE)/o,distance:s}}).filter(({distance:e})=>l?e/l>.1:!1),d=HT(`div`,`floorplan-plugin__rule-labels floorplan-plugin__rule-labels--${e}${i?` is-row`:``}`);d.style.width=i?`100%`:`0.0625rem`,d.style.height=i?`0.0625rem`:`100%`,d.appendChild(HT(`div`,`floorplan-plugin__rule-line`));let f=HT(`div`,`floorplan-plugin__rule-scale-wrapper${i?` is-row`:``}`);for(let{left:e,bottom:t}of c){let n=HT(`div`,`floorplan-plugin__rule-scale`);n.style.left=e*100+`%`,n.style.bottom=t*100+`%`,f.appendChild(n)}d.appendChild(f);let p=HT(`div`,`floorplan-plugin__rule-text-wrapper`);for(let{left:e,bottom:t,distance:n}of u){let a=HT(`div`,`floorplan-plugin__rule-text-item`);a.style.left=e*100+`%`,a.style.bottom=t*100+`%`;let o=HT(`div`,`floorplan-plugin__rule-text${i?` is-row`:``}`);o.textContent=r(n),a.appendChild(o),p.appendChild(a)}return d.appendChild(p),d}function oE(e,t,n){let r=t.bounding,i=r.max.x-r.min.x,a=r.max.y-r.min.y,o=i-(rE-iE)*2,s=a-(rE-iE)*2,c=HT(`div`,`floorplan-plugin__rule-labels-wrapper`);c.style.width=o/i*100+`%`,c.style.height=s/a*100+`%`;let l=e.rules;for(let e of[`top`,`right`,`bottom`,`left`]){let t=l[e];!t||t.length===0||c.appendChild(aE(e,t,r,n.getRuleDistanceText))}return c}function sE(e,t){var n;let r=(n=e.entrance)==null?void 0:n.northRad;if(typeof r!=`number`)return;let i=HT(`div`,`floorplan-plugin__compass`),a=VT(r);i.style.transform=`translateX(-50%) translateZ(10px) rotate(${-a+90}deg)`;let o=HT(`div`,`floorplan-plugin__compass-image`);o.style.backgroundImage=`url(${BT})`,i.appendChild(o);let s=HT(`span`,`floorplan-plugin__compass-text`);return s.textContent=t,i.appendChild(s),i}function cE(e){var t,n;let{floorplanData:r,floorIndex:i,config:a}=e,o=r.floorDatas[i],s=HT(`div`,`floorplan-plugin__floor`);if(!(o.rooms.length>0||o.is_has_wall))return s.appendChild(WT(a)),s;if(s.appendChild(XT(o,r,a)),(a.highlightEnable||a.hoverEnable)&&s.appendChild(ZT(o,r,e)),s.appendChild(QT(r,i)),s.appendChild($T(o)),a.roomLabelsEnable&&s.appendChild(tE(o,r,a,(n=(t=e.store.roomOnMouse)==null?void 0:t.id)==null?null:n)),a.ruleLabelsEnable&&s.appendChild(oE(o,r,a)),a.cameraEnable){let t=nE(r,e.panoIndex,e.lastPanoramaLongitude,a.cameraImageUrl);t&&s.appendChild(t)}if(a.compassEnable){let e=sE(r,a.northDesc);e&&s.appendChild(e)}return s}function lE(e,t,n,r){let i=e.querySelector(`.floorplan-plugin__room-labels`);if(!i)return;let a=i.clientWidth;if(!a)return;let o=t.floorDatas[n],s=new Map(o.rooms.map(e=>[e.id,e])),{max:c,min:l}=t.bounding,u=a/(c.x-l.x);i.querySelectorAll(`.floorplan-plugin__room-label-item`).forEach(e=>{if(!r){e.style.opacity=`1`;return}let t=e.dataset.roomId,n=t?s.get(t):void 0;if(!n)return;let i=e.querySelector(`.floorplan-plugin__room-part1`),a=e.querySelector(`.floorplan-plugin__room-size`),o=zT(n,{width:e.clientWidth,height:e.clientHeight},u),c=i?zT(n,{width:i.clientWidth,height:i.clientHeight},u):o;e.style.opacity=o||c?`1`:`0`,i&&(i.style.opacity=c?`1`:`0`),a&&(a.style.opacity=o?`0.6`:`0`)})}var uE=class{constructor(){this.floorElements=new Map,this.currentFloorIndex=-1,this.isVisible=!1,this.rootElement=document.createElement(`div`),this.rootElement.className=`floorplan-plugin__main`}render(e){let{floorplanData:t,config:n}=e;this.rootElement.style.transitionDuration=e.duration+`ms`,e.visible!==this.isVisible&&(this.isVisible=e.visible,e.visible?(this.rootElement.classList.remove(`floorplan-plugin__main--visible`),requestAnimationFrame(()=>{this.rootElement.classList.add(`floorplan-plugin__main--visible`)})):this.rootElement.classList.remove(`floorplan-plugin__main--visible`));let r=new Set(t.floorDatas.map(e=>e.floorIndex));for(let[e,t]of this.floorElements)r.has(e)||(t.remove(),this.floorElements.delete(e));for(let r of t.floorDatas){let i=cE({floorplanData:t,floorIndex:r.floorIndex,panoIndex:e.panoIndex,lastPanoramaLongitude:e.lastPanoramaLongitude,config:n,highlightData:e.highlightData,store:e.store,onRoomHover:e.onRoomHover}),a=this.floorElements.get(r.floorIndex);a?this.rootElement.replaceChild(i,a):this.rootElement.appendChild(i),this.floorElements.set(r.floorIndex,i)}this.currentFloorIndex!==e.floorIndex&&(this.currentFloorIndex=e.floorIndex);for(let[t,n]of this.floorElements)n.classList.toggle(`floorplan-plugin__floor--is-current`,t===e.floorIndex);let i=this.floorElements.get(e.floorIndex);i&&requestAnimationFrame(()=>{lE(i,t,e.floorIndex,n.adaptiveRoomLabelVisibleEnable)})}updateLabelsVisibility(e,t,n){let r=this.floorElements.get(t);r&&lE(r,e,t,n)}dispose(){this.rootElement.remove(),this.floorElements.clear()}},dE=`.floorplan-plugin__main {
384
+ position: absolute;
385
+ pointer-events: none;
386
+ opacity: 0;
387
+ transition-property: opacity;
388
+ transition-timing-function: linear;
389
+ }
390
+
391
+ .floorplan-plugin__main--visible {
392
+ opacity: 1;
393
+ }
394
+
395
+ .floorplan-plugin__floor {
396
+ position: absolute;
397
+ left: 0;
398
+ top: 0;
399
+ width: 100%;
400
+ height: 100%;
401
+ opacity: 0;
402
+ pointer-events: none;
403
+ }
404
+
405
+ .floorplan-plugin__floor--is-current {
406
+ opacity: 1;
407
+ pointer-events: auto;
408
+ }
409
+
410
+ /* ============ missing floor ============ */
411
+ .floorplan-plugin__missing-floor {
412
+ position: absolute;
413
+ left: 50%;
414
+ top: 50%;
415
+ transform: translate(-50%, -50%);
416
+ display: flex;
417
+ flex-direction: column;
418
+ align-items: center;
419
+ }
420
+ .floorplan-plugin__missing-floor-text {
421
+ margin-top: 12px;
422
+ color: #fff;
423
+ opacity: 0.3;
424
+ white-space: nowrap;
425
+ }
426
+
427
+ /* ============ room material ============ */
428
+ .floorplan-plugin__room-material {
429
+ position: absolute;
430
+ left: 0;
431
+ top: 0;
432
+ width: 100%;
433
+ height: 100%;
434
+ }
435
+ .floorplan-plugin__room-material svg {
436
+ position: absolute;
437
+ left: 0;
438
+ top: 0;
439
+ width: 100%;
440
+ height: 100%;
441
+ overflow: visible;
442
+ }
443
+
444
+ /* ============ room highlight ============ */
445
+ .floorplan-plugin__room-highlight {
446
+ position: absolute;
447
+ width: 100%;
448
+ height: 100%;
449
+ }
450
+ .floorplan-plugin__room-highlight svg {
451
+ width: 100%;
452
+ height: 100%;
453
+ overflow: visible;
454
+ }
455
+ .floorplan-plugin__room-highlight path {
456
+ --opacity: 0;
457
+ opacity: var(--opacity);
458
+ fill: #fff;
459
+ pointer-events: auto;
460
+ }
461
+ .floorplan-plugin__room-highlight path:hover {
462
+ opacity: calc(var(--opacity) + 0.1);
463
+ }
464
+ /* main 未展示时,子元素显式设置的 pointer-events:auto 会覆盖父级 none,这里强制统一关闭交互 */
465
+ .floorplan-plugin__main:not(.floorplan-plugin__main--visible) * {
466
+ pointer-events: none !important;
467
+ }
468
+
469
+ /* ============ base image ============ */
470
+ .floorplan-plugin__base-image {
471
+ position: absolute;
472
+ z-index: 10;
473
+ width: 100%;
474
+ height: 100%;
475
+ pointer-events: none;
476
+ }
477
+ .floorplan-plugin__base-image img {
478
+ width: 100%;
479
+ height: 100%;
480
+ }
481
+ .floorplan-plugin__base-image svg [type='lineGroup'] path {
482
+ fill: #ffffff;
483
+ stroke: #ffffff;
484
+ }
485
+ .floorplan-plugin__base-image svg [type='lineItemGroup'] g g g g {
486
+ stroke: #ffffff;
487
+ }
488
+
489
+ /* ============ items ============ */
490
+ .floorplan-plugin__items {
491
+ width: 100%;
492
+ height: 100%;
493
+ position: absolute;
494
+ left: 0;
495
+ top: 0;
496
+ z-index: 20;
497
+ pointer-events: none;
498
+ }
499
+ .floorplan-plugin__item {
500
+ position: absolute;
501
+ display: flex;
502
+ flex-flow: column;
503
+ align-items: center;
504
+ line-height: 1;
505
+ color: #fff;
506
+ transform: translate(-50%, -50%);
507
+ white-space: nowrap;
508
+ transition: opacity 300ms;
509
+ }
510
+ .floorplan-plugin__item-img {
511
+ width: 100%;
512
+ height: 100%;
513
+ }
514
+ .floorplan-plugin__item-notes {
515
+ position: absolute;
516
+ top: 50%;
517
+ left: 50%;
518
+ transform: translate(-50%, -50%);
519
+ padding: 4px;
520
+ line-height: 1;
521
+ border-radius: 4px;
522
+ color: #fff;
523
+ background: rgba(0, 0, 0, 0.6);
524
+ font-size: 12px;
525
+ }
526
+
527
+ /* ============ room labels ============ */
528
+ .floorplan-plugin__room-labels {
529
+ width: 100%;
530
+ height: 100%;
531
+ position: absolute;
532
+ left: 0;
533
+ top: 0;
534
+ z-index: 20;
535
+ pointer-events: none;
536
+ }
537
+ .floorplan-plugin__room-label-item {
538
+ position: absolute;
539
+ display: flex;
540
+ flex-flow: column;
541
+ align-items: center;
542
+ line-height: 1;
543
+ color: #fff;
544
+ transform: translate(-50%, -50%);
545
+ white-space: nowrap;
546
+ transition: opacity 300ms;
547
+ font-size: 12px;
548
+ }
549
+ .floorplan-plugin__room-part1 {
550
+ display: flex;
551
+ flex-flow: column;
552
+ align-items: center;
553
+ color: #fff;
554
+ white-space: nowrap;
555
+ transition: opacity 300ms;
556
+ }
557
+ .floorplan-plugin__room-name {
558
+ font-size: 12px;
559
+ }
560
+ .floorplan-plugin__room-area {
561
+ opacity: 0.6;
562
+ line-height: 1.25;
563
+ margin-top: 2px;
564
+ font-size: 10px;
565
+ }
566
+ .floorplan-plugin__room-size {
567
+ font-size: 10px;
568
+ transition: opacity 300ms;
569
+ }
570
+
571
+ /* ============ camera ============ */
572
+ .floorplan-plugin__camera-position {
573
+ pointer-events: none;
574
+ position: absolute;
575
+ width: 0;
576
+ height: 0;
577
+ }
578
+ .floorplan-plugin__camera-rotate {
579
+ position: absolute;
580
+ background-repeat: no-repeat;
581
+ background-size: 100%;
582
+ }
583
+
584
+ /* ============ rule labels ============ */
585
+ .floorplan-plugin__rule-labels-wrapper {
586
+ position: absolute;
587
+ top: 50%;
588
+ left: 50%;
589
+ transform: translate(-50%, -50%);
590
+ pointer-events: none;
591
+ }
592
+ .floorplan-plugin__rule-labels {
593
+ position: absolute;
594
+ display: flex;
595
+ }
596
+ .floorplan-plugin__rule-labels--top {
597
+ left: 0;
598
+ top: -1.25rem;
599
+ }
600
+ .floorplan-plugin__rule-labels--bottom {
601
+ left: 0;
602
+ bottom: -1.25rem;
603
+ }
604
+ .floorplan-plugin__rule-labels--left {
605
+ top: 0;
606
+ left: -1.25rem;
607
+ }
608
+ .floorplan-plugin__rule-labels--right {
609
+ top: 0;
610
+ right: -1.25rem;
611
+ }
612
+ .floorplan-plugin__rule-line {
613
+ background: #fff;
614
+ opacity: 0.2;
615
+ width: 100%;
616
+ height: 100%;
617
+ }
618
+ .floorplan-plugin__rule-scale-wrapper {
619
+ position: absolute;
620
+ width: 0.3125rem;
621
+ height: 100%;
622
+ left: 50%;
623
+ top: 0;
624
+ transform: translateX(-50%);
625
+ }
626
+ .floorplan-plugin__rule-labels.is-row .floorplan-plugin__rule-scale-wrapper {
627
+ width: 100%;
628
+ height: 0.3125rem;
629
+ top: 50%;
630
+ left: 0;
631
+ transform: translateY(-50%);
632
+ }
633
+ .floorplan-plugin__rule-scale {
634
+ position: absolute;
635
+ background: #fff;
636
+ opacity: 0.2;
637
+ width: 100%;
638
+ height: 0.0625rem;
639
+ }
640
+ .floorplan-plugin__rule-labels.is-row .floorplan-plugin__rule-scale {
641
+ width: 0.0625rem;
642
+ height: 100%;
643
+ }
644
+ .floorplan-plugin__rule-text-wrapper {
645
+ position: absolute;
646
+ }
647
+ .floorplan-plugin__rule-labels--top .floorplan-plugin__rule-text-wrapper {
648
+ width: 100%;
649
+ height: 0;
650
+ top: 0.625rem;
651
+ }
652
+ .floorplan-plugin__rule-labels--bottom .floorplan-plugin__rule-text-wrapper {
653
+ width: 100%;
654
+ height: 0;
655
+ bottom: 0.625rem;
656
+ }
657
+ .floorplan-plugin__rule-labels--left .floorplan-plugin__rule-text-wrapper {
658
+ width: 0;
659
+ height: 100%;
660
+ left: 0.625rem;
661
+ }
662
+ .floorplan-plugin__rule-labels--right .floorplan-plugin__rule-text-wrapper {
663
+ width: 0;
664
+ height: 100%;
665
+ right: 0.625rem;
666
+ }
667
+ .floorplan-plugin__rule-text-item {
668
+ width: 0;
669
+ height: 0;
670
+ position: absolute;
671
+ transform: rotate(90deg);
672
+ }
673
+ .floorplan-plugin__rule-labels.is-row .floorplan-plugin__rule-text-item {
674
+ transform: rotate(0);
675
+ }
676
+ .floorplan-plugin__rule-text {
677
+ width: max-content;
678
+ transform: translate(-50%, -50%);
679
+ font-size: 0.625rem;
680
+ color: #fff;
681
+ opacity: 0.35;
682
+ }
683
+
684
+ /* ============ compass ============ */
685
+ .floorplan-plugin__compass {
686
+ position: absolute;
687
+ left: 50%;
688
+ top: -46px;
689
+ width: 231px;
690
+ height: 41px;
691
+ transform-origin: center 184px;
692
+ }
693
+ .floorplan-plugin__compass-image {
694
+ width: 100%;
695
+ height: 100%;
696
+ position: absolute;
697
+ left: 0;
698
+ top: 0;
699
+ opacity: 0.1;
700
+ background-repeat: no-repeat;
701
+ background-size: 100% 100%;
702
+ }
703
+ .floorplan-plugin__compass-text {
704
+ position: absolute;
705
+ left: 50%;
706
+ top: 15px;
707
+ transform: translateX(-50%);
708
+ opacity: 0.2;
709
+ font-weight: bold;
710
+ font-size: 10px;
711
+ color: #fff;
712
+ }
713
+ `,fE=500,pE=.01;function mE(e){let{latitude:t,longitude:n}=e,r=Math.abs(t-Math.PI/2)>5*Math.PI/180,i=n>Math.PI/180*5&&n<Math.PI/180*355;return r||i}function hE(e){let{latitude:t,longitude:n}=e,r=Math.abs(t-Math.PI/2)<10*Math.PI/180,i=n<Math.PI/180*30||n>Math.PI/180*330;return r&&i}var gE=class extends o.Controller{constructor(e,t){var n,i,a;super(e),this.name=`FloorplanPlugin`,this.renderer=new uE,this.styleSheet=new CSSStyleSheet,this.panoIndex=0,this.floorIndex=0,this.lastPanoramaLongitude=0,this.size={width:0,height:0},this.hasAddedEventListener=!1,this.isHiddenByHideFunc=!1,this.highlightData={},this.store={roomOnMouse:null},this.dispose=()=>{var e,t;this.removeEventListener(),(e=this.resizeObserver)==null||e.disconnect(),(t=this.removeExtraElement)==null||t.call(this),this.removeExtraElement=void 0,this.pendingCameraUpdateFrame!==void 0&&cancelAnimationFrame(this.pendingCameraUpdateFrame),this.pendingResizeFrame!==void 0&&cancelAnimationFrame(this.pendingResizeFrame),this.renderer.dispose(),this.wrapper=void 0,this.data=void 0,this.hooks.emit(`dispose`)},this.show=(...e)=>r(this,[...e],void 0,function*(e={}){var t;if(!this.state.enabled||!this.showPromise&&this.state.visible)return;let n=(t=e.userAction)==null?!0:t;return this.updateState({visible:!0},n),this._show(e)}),this.hide=(...e)=>r(this,[...e],void 0,function*(e={}){var t;this.state.enabled&&(this.isHiddenByHideFunc=!0,this.state.visible!==!1&&(this.updateState({visible:!1},(t=e.userAction)==null?!0:t),this._hide(e)))}),this.highlight=e=>{this.state.config.highlightEnable&&(this.highlightData=e,this.renderCurrent())},this.unhighlight=()=>{this.highlightData={},this.renderCurrent()},this.updateShowState=e=>{this.showState=Object.assign(Object.assign({},this.showState),e)},this.onRoomHover=e=>{this.store.roomOnMouse=e},this.handleClick=()=>{if(this.state.visible&&this.hooks.emit(`click`,this.store.roomOnMouse))return!1},this.onFiveModelLoaded=()=>{var e,t,n;this.state.enabled!==!1&&(this.floorIndex=(n=(t=(e=this.five.work)==null?void 0:e.observers[this.panoIndex])==null?void 0:t.floorIndex)==null?0:n,this.renderCurrent())},this.onFiveModeChange=e=>{e!==this.showState.mode&&(this.updateState({visible:!1},!1),this._hide({userAction:!1}))},this.onFiveInertiaPan=(e,t)=>{t&&(this.state.visible||this.state.config.autoShowEnable!==!1&&(this.isHiddenByHideFunc||this.five.currentMode===this.showState.mode&&hE(this.getRelativePose(this.five.getCurrentState()))&&(this.updateState({visible:!0},!0),this._show({isAutoShow:!0}))))},this.onFivePanoArrived=e=>{var t,n;this.five.work&&(this.panoIndex=e,this.floorIndex=(n=(t=this.five.work.observers[e])==null?void 0:t.floorIndex)==null?this.floorIndex:n)},this.onFiveCameraUpdate=(e,t)=>{this.state.visible&&(this.showPromise||(this.scheduleCameraUpdate(),mE(this.getRelativePose(this.five.getCurrentState()))&&(this.updateState({visible:!1},t),this._hide({userAction:t}))))},this.onFiveWantsPanGesture=(e,t)=>{if(this.five.currentMode===this.showState.mode&&this.state.config.autoShowEnable!==!1&&t&&this.state.visible)return this.five.updateCamera(_T(this.showState,[`mode`,`offset`]),0),!1},this.onFiveWantsTapGesture=()=>this.handleClick(),this.onFiveWantsChangeMode=(e,t)=>{t===`Panorama`&&e===this.showState.mode&&(this.lastPanoramaLongitude=this.five.getCurrentState().longitude)},this.onModelShownFloorChange=e=>{var t,n,r;if(this.floorIndex!==e){if(e===null){this.floorIndex=(r=(n=(t=this.five.work)==null?void 0:t.observers[this.panoIndex])==null?void 0:n.floorIndex)==null?this.floorIndex:r;return}this.floorIndex=e,this.updateSize(),this.renderCurrent()}},this._show=e=>r(this,void 0,void 0,function*(){var t;if(!this.state.enabled)return;if(!((t=this.five.model)!=null&&t.loaded))throw Error(`ModelNotLoaded`);if(!this.data)throw Error(`DataNotLoaded`);if(this.showPromise)return this.showPromise;let n=Object.assign({floorIndex:this.floorIndex,modelOpacity:this.state.config.modelOpacity,immediately:!1,isAutoShow:!1,userAction:!0},e),i=()=>r(this,void 0,void 0,function*(){var e;this.hooks.emit(`show`,{userAction:n.userAction,auto:n.isAutoShow});let t=!1,r;this.showRejection=e=>{t=!0,r=e};let[i]=yield fT(yT(this.five,this.showState,n.userAction));if(i)throw i;if(t)throw Error(r||`UnknownError`);if(!this.updateSize())throw Error(`UpdateSizeError`);this.updatePosition(),this.floorIndex=n.floorIndex,(e=this.five.model)==null||e.show(this.floorIndex)});return this.isHiddenByHideFunc=!1,this.showPromise=i().then(()=>{this.showPromise=void 0,this.showRejection=void 0;let e=n.immediately?0:fE;bT(this.five,n.modelOpacity,e),this.renderWithDuration(e),this.hooks.emit(`showAnimationEnded`,{auto:n.isAutoShow,userAction:n.userAction})}).catch(e=>{if(this.showPromise=void 0,this.showRejection=void 0,this.updateState({visible:!1},n.userAction),!n.isAutoShow)throw e}),this.showPromise}),this._hide=e=>{var t;(t=this.showRejection)==null||t.call(this,`BreakOffByHide`),this.showPromise=void 0;let n=Object.assign({userAction:!0,isAutoHide:!1},e);bT(this.five,1,0),this.hooks.emit(`hide`,{auto:n.isAutoHide,userAction:n.userAction}),this.renderCurrent()},this.five=e,this.styleSheet.replaceSync(dE),typeof document<`u`&&document.adoptedStyleSheets.push(this.styleSheet),this.showState=Object.assign({mode:`Mapview`,longitude:0,latitude:Math.PI/2,fov:80},t==null?void 0:t.showState);let o={northDesc:`北`,modelOpacity:pE,cameraEnable:!0,highlightEnable:!1,hoverEnable:!0,compassEnable:!0,autoShowEnable:!0,ruleLabelsEnable:!0,roomLabelsEnable:!0,roomAreaEnable:!0,roomNameEnable:!0,roomNameOtherTypeEnable:!0,roomDimensionEnable:!0,cameraImageUrl:void 0,attachedTo:3,getLabelElement:void 0,adaptiveRoomLabelVisibleEnable:!0,missingFloorConfig:{imageWidth:200,imageHeight:120,text:`暂无平面图`,textFontSize:14},i18n:e=>e,getRoomAreaText:e=>(e/1e6).toFixed(1)+`㎡`,getRoomDimensionText:(e,t)=>(e/1e3).toFixed(1)+`m × `+(t/1e3).toFixed(1)+`m`,getRuleDistanceText:e=>e.toString()},s=Object.assign(Object.assign(Object.assign({},o),t==null?void 0:t.config),{missingFloorConfig:Object.assign(Object.assign({},o.missingFloorConfig),(n=t==null?void 0:t.config)==null?void 0:n.missingFloorConfig)});this.state={enabled:!0,visible:!1,config:s},Object.assign(this.state,_T((i=t==null?void 0:t.initialState)==null?{}:i,[`config`])),this.panoIndex=(a=e.state.panoIndex)==null?0:a,this.initContainer(),ET(e).then(this.onFiveModelLoaded),e.once(`dispose`,this.dispose),this.state.enabled?this.addEventListener():this.styleSheet.disabled=!0}load(e,t){return r(this,arguments,void 0,function*(e,t,n=!0){let r=`data`in e?e.data:e,i=this.data;this.data=yield lT(r),this.hooks.emit(`dataLoaded`,this.data),this.hooks.emit(`dataChange`,this.data,i),t&&this.updateState(t,n),this.updateSize(),this.updatePosition(),this.renderCurrent()})}loadItems(e){this.data&&(this.data.floorDatas.forEach((t,n)=>{t.items=e[n]}),this.renderCurrent())}appendTo(e){this.wrapper=e,this.state.enabled&&(e.appendChild(this.renderer.rootElement),this.observeResize(e),this.registerExtraElement(),this.updateSize(),this.updatePosition(),this.renderCurrent())}enable(e={}){var t;if(this.state.enabled)return;let n=(t=e.userAction)==null?!0:t;this.updateState({enabled:!0},n),this._enable({userAction:n})}disable(e={}){var t;if(!this.state.enabled)return;let n=(t=e.userAction)==null?!0:t;this.updateState({enabled:!1},n),this._disable({userAction:n})}setState(e,t={}){var n;let r=this.state,i=(n=t.userAction)==null?!0:n;this.updateState(e,i),e.enabled!==void 0&&r.enabled!==e.enabled&&(e.enabled?this._enable({userAction:i}):this._disable({userAction:i})),e.visible!==void 0&&r.visible!==e.visible&&(e.visible?this._show({userAction:i}):this._hide({userAction:i}))}changeConfigs(e,t=!0){this.updateState({config:Object.assign(Object.assign({},this.state.config),e)},t),this.renderCurrent()}updateSize(){if(!this.data||!this.wrapper)return!1;let{min:e,max:t}=this.data.bounding,n=t.x-e.x,r=t.y-e.y,i=this.getPxmmWithRotation(),a=Math.ceil(n*i),o=Math.ceil(r*i);return this.size.width===a&&this.size.height===o?!0:(this.renderer.rootElement.style.width=a+`px`,this.renderer.rootElement.style.height=o+`px`,this.size={width:a,height:o},!0)}updatePosition(){if(!this.wrapper)return;let e=ST(this.five,this.floorIndex,this.state.config.attachedTo),t=this.five.modelScene.boundingBox.getCenter(new D);t.y=e;let n=t.clone().project(this.five.camera),r=(n.x+1)/2,i=-(n.y-1)/2;this.renderer.rootElement.style.position=`absolute`,this.renderer.rootElement.style.left=r*100+`%`,this.renderer.rootElement.style.top=i*100+`%`,this.renderer.rootElement.style.transform=`translate(-50%, -50%)`}getPxmmWithRotation(){if(!this.wrapper)return 0;let e={attachedTo:this.state.config.attachedTo};return CT(this.five,this.wrapper,this.floorIndex,e)}updateState(e,t){let n=this.state,r=e.config?Object.assign(Object.assign({},n.config),e.config):n.config;this.state=Object.assign(Object.assign(Object.assign({},this.state),e),{config:r}),!FT(this.state,n,{deep:!0})&&this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}initContainer(){this.renderer.rootElement.classList.add(`floorplan-plugin`)}registerExtraElement(){var e;(e=this.removeExtraElement)==null||e.call(this),this.removeExtraElement=this.five.addExtraElement(this.renderer.rootElement)}observeResize(e){var t;(t=this.resizeObserver)==null||t.disconnect(),this.resizeObserver=new ResizeObserver(()=>{this.scheduleResizeUpdate()}),this.resizeObserver.observe(e)}scheduleResizeUpdate(){this.pendingResizeFrame===void 0&&(this.pendingResizeFrame=requestAnimationFrame(()=>{this.pendingResizeFrame=void 0,this.updateSize(),this.updatePosition(),this.data&&this.renderer.updateLabelsVisibility(this.data,this.floorIndex,this.state.config.adaptiveRoomLabelVisibleEnable)}))}renderCurrent(){this.data&&this.renderer.render({visible:this.state.visible,duration:0,panoIndex:this.panoIndex,floorIndex:this.floorIndex,floorplanData:this.data,lastPanoramaLongitude:this.lastPanoramaLongitude,config:this.state.config,highlightData:this.highlightData,store:this.store,onRoomHover:this.onRoomHover})}addEventListener(){if(!this.state.enabled||this.hasAddedEventListener)return;this.hasAddedEventListener=!0;let e=this.five;e.on(`modeChange`,this.onFiveModeChange),e.on(`interiaPan`,this.onFiveInertiaPan),e.on(`panoArrived`,this.onFivePanoArrived),e.on(`cameraUpdate`,this.onFiveCameraUpdate),e.on(`wantsPanGesture`,this.onFiveWantsPanGesture),e.on(`wantsTapGesture`,this.onFiveWantsTapGesture),e.on(`wantsChangeMode`,this.onFiveWantsChangeMode),e.on(`modelShownFloorChange`,this.onModelShownFloorChange)}removeEventListener(){this.hasAddedEventListener=!1;let e=this.five;e.off(`modeChange`,this.onFiveModeChange),e.off(`interiaPan`,this.onFiveInertiaPan),e.off(`panoArrived`,this.onFivePanoArrived),e.off(`cameraUpdate`,this.onFiveCameraUpdate),e.off(`wantsPanGesture`,this.onFiveWantsPanGesture),e.off(`wantsTapGesture`,this.onFiveWantsTapGesture),e.off(`wantsChangeMode`,this.onFiveWantsChangeMode),e.off(`modelShownFloorChange`,this.onModelShownFloorChange)}scheduleCameraUpdate(){this.pendingCameraUpdateFrame===void 0&&(this.pendingCameraUpdateFrame=requestAnimationFrame(()=>{this.pendingCameraUpdateFrame=void 0,this.updatePosition(),this.updateSize()}))}getRelativePose(e){let t=this.showState.longitude||0,n=((e.longitude-t)%(2*Math.PI)+2*Math.PI)%(2*Math.PI);return{latitude:e.latitude,longitude:n}}_enable(e){this.styleSheet.disabled=!1,this.addEventListener(),this.wrapper&&(this.wrapper.appendChild(this.renderer.rootElement),this.registerExtraElement()),this.hooks.emit(`enable`,{userAction:e.userAction}),this.state.visible&&this._show({userAction:e.userAction})}_disable(e){var t,n;this.styleSheet.disabled=!0,(t=this.showRejection)==null||t.call(this,`BreakOffByDisable`),this.showPromise=void 0,this.renderer.rootElement.remove(),(n=this.removeExtraElement)==null||n.call(this),this.removeExtraElement=void 0,this.removeEventListener(),this.hooks.emit(`disable`,{userAction:e.userAction})}renderWithDuration(e){this.data&&this.renderer.render({visible:this.state.visible,duration:e,panoIndex:this.panoIndex,floorIndex:this.floorIndex,floorplanData:this.data,lastPanoramaLongitude:this.lastPanoramaLongitude,config:this.state.config,highlightData:this.highlightData,store:this.store,onRoomHover:this.onRoomHover})}};function _E(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)+(`z`in e?Math.pow(e.z-t.z,2):0))}function vE(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function yE(e){if(Array.isArray(e))return e}function bE(e){if(Array.isArray(e))return vE(e)}function xE(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function SE(e,t,n){return t=AE(t),LE(e,ME()?Reflect.construct(t,n||[],AE(e).constructor):t.apply(e,n))}function CE(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function wE(e,t,n){if(ME())return Reflect.construct.apply(null,arguments);var r=[null];return r.push.apply(r,t),new(e.bind.apply(e,r))}function TE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,WE(r.key),r)}}function EE(e,t,n){return t&&TE(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function DE(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=KE(e))||t){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
714
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function OE(e,t,n){return(t=WE(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kE(){return kE=typeof Reflect<`u`&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=BE(e,t);if(r){var i=Object.getOwnPropertyDescriptor(r,t);return i.get?i.get.call(arguments.length<3?e:n):i.value}},kE.apply(null,arguments)}function AE(e){return AE=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},AE(e)}function jE(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&RE(e,t)}function ME(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ME=function(){return!!e})()}function NE(e){if(typeof Symbol<`u`&&e[Symbol.iterator]!=null||e[`@@iterator`]!=null)return Array.from(e)}function PE(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function FE(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
715
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function IE(){throw TypeError(`Invalid attempt to spread non-iterable instance.
716
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function LE(e,t){if(t&&(typeof t==`object`||typeof t==`function`))return t;if(t!==void 0)throw TypeError(`Derived constructors may only return object or undefined`);return xE(e)}function RE(e,t){return RE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},RE(e,t)}function zE(e,t){return yE(e)||PE(e,t)||KE(e,t)||FE()}function BE(e,t){for(;!{}.hasOwnProperty.call(e,t)&&(e=AE(e))!==null;);return e}function VE(e,t,n,r){var i=kE(AE(e.prototype),t,n);return typeof i==`function`?function(e){return i.apply(n,e)}:i}function HE(e){return bE(e)||NE(e)||KE(e)||IE()}function UE(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return String(e)}function WE(e){var t=UE(e,`string`);return typeof t==`symbol`?t:t+``}function GE(e){"@babel/helpers - typeof";return GE=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},GE(e)}function KE(e,t){if(e){if(typeof e==`string`)return vE(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?vE(e,t):void 0}}var qE=`0.6.307-beta`,Y={},X=X||function(e,t){var n={},r=n.lib={},i=r.Base=function(){function e(){}return{extend:function(t){e.prototype=this;var n=new e;return t&&n.mixIn(t),n.hasOwnProperty(`init`)||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty(`toString`)&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),a=r.WordArray=i.extend({init:function(e,n){e=this.words=e||[],n==t?this.sigBytes=e.length*4:this.sigBytes=n},toString:function(e){return(e||s).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes,i=e.sigBytes;if(this.clamp(),r%4)for(var a=0;a<i;a++){var o=n[a>>>2]>>>24-a%4*8&255;t[r+a>>>2]|=o<<24-(r+a)%4*8}else for(var a=0;a<i;a+=4)t[r+a>>>2]=n[a>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r<t;r+=4)n.push(e.random()*4294967296|0);return new a.init(n,t)}}),o=n.enc={},s=o.Hex={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push((a>>>4).toString(16)),r.push((a&15).toString(16))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},c=o.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push(String.fromCharCode(a))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(e.charCodeAt(r)&255)<<24-r%4*8;return new a.init(n,t)}},l=o.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error(`Malformed UTF-8 data`)}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},u=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){typeof e==`string`&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,s=i/(o*4);s=t?e.ceil(s):e.max((s|0)-this._minBufferSize,0);var c=s*o,l=e.min(c*4,i);if(c){for(var u=0;u<c;u+=o)this._doProcessBlock(r,u);var d=r.splice(0,c);n.sigBytes-=l}return new a.init(d,l)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=u.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){u.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:512/32,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new d.HMAC.init(e,n).finalize(t)}}});var d=n.algo={};return n}(Math);(function(e){for(var t=X,n=t.lib,r=n.WordArray,i=n.Hasher,n=t.algo,a=[],o=[],s=function(e){return 4294967296*(e-(e|0))|0},c=2,l=0;64>l;){var u;a:{u=c;for(var d=e.sqrt(u),f=2;f<=d;f++)if(!(u%f)){u=!1;break a}u=!0}u&&(8>l&&(a[l]=s(e.pow(c,.5))),o[l]=s(e.pow(c,1/3)),l++),c++}var p=[],n=n.SHA256=i.extend({_doReset:function(){this._hash=new r.init(a.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],a=n[2],s=n[3],c=n[4],l=n[5],u=n[6],d=n[7],f=0;64>f;f++){if(16>f)p[f]=e[t+f]|0;else{var m=p[f-15],h=p[f-2];p[f]=((m<<25|m>>>7)^(m<<14|m>>>18)^m>>>3)+p[f-7]+((h<<15|h>>>17)^(h<<13|h>>>19)^h>>>10)+p[f-16]}m=d+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&l^~c&u)+o[f]+p[f],h=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&a^i&a),d=u,u=l,l=c,c=s+m|0,s=a,a=i,i=r,r=m+h|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0,n[5]=n[5]+l|0,n[6]=n[6]+u|0,n[7]=n[7]+d|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[(i+64>>>9<<4)+14]=e.floor(r/4294967296),n[(i+64>>>9<<4)+15]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=i._createHelper(n),t.HmacSHA256=i._createHmacHelper(n)})(Math),X.lib.Cipher||function(e){var t=X,n=t.lib,r=n.Base,i=n.WordArray,a=n.BufferedBlockAlgorithm,o=t.enc.Base64,s=t.algo.EvpKDF,c=n.Cipher=a.extend({cfg:r.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){a.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(t,n,r){return(typeof n==`string`?m:p).encrypt(e,t,n,r)},decrypt:function(t,n,r){return(typeof n==`string`?m:p).decrypt(e,t,n,r)}}}});n.StreamCipher=c.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var l=t.mode={},u=function(t,n,r){var i=this._iv;i?this._iv=e:i=this._prevBlock;for(var a=0;a<r;a++)t[n+a]^=i[a]},d=(n.BlockCipherMode=r.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}})).extend();d.Encryptor=d.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize;u.call(this,e,t,r),n.encryptBlock(e,t),this._prevBlock=e.slice(t,t+r)}}),d.Decryptor=d.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,i=e.slice(t,t+r);n.decryptBlock(e,t),u.call(this,e,t,r),this._prevBlock=i}}),l=l.CBC=d,d=(t.pad={}).Pkcs7={pad:function(e,t){for(var n=4*t,n=n-e.sigBytes%n,r=n<<24|n<<16|n<<8|n,a=[],o=0;o<n;o+=4)a.push(r);n=i.create(a,n),e.concat(n)},unpad:function(e){e.sigBytes-=e.words[e.sigBytes-1>>>2]&255}},n.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:d}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var f=n.CipherParams=r.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?i.create([1398893684,1701076831]).concat(e).concat(t):t).toString(o)},parse:function(e){e=o.parse(e);var t=e.words;if(t[0]==1398893684&&t[1]==1701076831){var n=i.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return f.create({ciphertext:e,salt:n})}},p=n.SerializableCipher=r.extend({cfg:r.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,f.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return typeof e==`string`?t.parse(e,this):e}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=i.random(8)),e=s.create({keySize:t+n}).compute(e,r),n=i.create(e.words.slice(t),4*n),e.sigBytes=4*t,f.create({key:e,iv:n,salt:r})}},m=n.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),(function(){for(var e=X,t=e.lib.BlockCipher,n=e.algo,r=[],i=[],a=[],o=[],s=[],c=[],l=[],u=[],d=[],f=[],p=[],m=0;256>m;m++)p[m]=128>m?m<<1:m<<1^283;for(var h=0,g=0,m=0;256>m;m++){var _=g^g<<1^g<<2^g<<3^g<<4,_=_>>>8^_&255^99;r[h]=_,i[_]=h;var v=p[h],y=p[v],b=p[y],x=257*p[_]^16843008*_;a[h]=x<<24|x>>>8,o[h]=x<<16|x>>>16,s[h]=x<<8|x>>>24,c[h]=x,x=16843009*b^65537*y^257*v^16843008*h,l[_]=x<<24|x>>>8,u[_]=x<<16|x>>>16,d[_]=x<<8|x>>>24,f[_]=x,h?(h=v^p[p[p[b^v]]],g^=p[p[g]]):h=g=1}var S=[0,1,2,4,8,16,32,64,128,27,54],n=n.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),i=this._keySchedule=[],a=0;a<e;a++)if(a<n)i[a]=t[a];else{var o=i[a-1];a%n?6<n&&a%n==4&&(o=r[o>>>24]<<24|r[o>>>16&255]<<16|r[o>>>8&255]<<8|r[o&255]):(o=o<<8|o>>>24,o=r[o>>>24]<<24|r[o>>>16&255]<<16|r[o>>>8&255]<<8|r[o&255],o^=S[a/n|0]<<24),i[a]=i[a-n]^o}for(t=this._invKeySchedule=[],n=0;n<e;n++)a=e-n,o=n%4?i[a]:i[a-4],t[n]=4>n||4>=a?o:l[r[o>>>24]]^u[r[o>>>16&255]]^d[r[o>>>8&255]]^f[r[o&255]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,a,o,s,c,r)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,l,u,d,f,i),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,a,o,s){for(var c=this._nRounds,l=e[t]^n[0],u=e[t+1]^n[1],d=e[t+2]^n[2],f=e[t+3]^n[3],p=4,m=1;m<c;m++)var h=r[l>>>24]^i[u>>>16&255]^a[d>>>8&255]^o[f&255]^n[p++],g=r[u>>>24]^i[d>>>16&255]^a[f>>>8&255]^o[l&255]^n[p++],_=r[d>>>24]^i[f>>>16&255]^a[l>>>8&255]^o[u&255]^n[p++],f=r[f>>>24]^i[l>>>16&255]^a[u>>>8&255]^o[d&255]^n[p++],l=h,u=g,d=_;h=(s[l>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[f&255])^n[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[f>>>8&255]<<8|s[l&255])^n[p++],_=(s[d>>>24]<<24|s[f>>>16&255]<<16|s[l>>>8&255]<<8|s[u&255])^n[p++],f=(s[f>>>24]<<24|s[l>>>16&255]<<16|s[u>>>8&255]<<8|s[d&255])^n[p++],e[t]=h,e[t+1]=g,e[t+2]=_,e[t+3]=f},keySize:8});e.AES=t._createHelper(n)})();var JE;function Z(e,t,n){e!=null&&(typeof e==`number`?this.fromNumber(e,t,n):t==null&&typeof e!=`string`?this.fromString(e,256):this.fromString(e,t))}function YE(){return new Z(null)}function XE(e,t,n,r,i,a){for(;--a>=0;){var o=t*this[e++]+n[r]+i;i=Math.floor(o/67108864),n[r++]=o&67108863}return i}function ZE(e,t,n,r,i,a){for(var o=t&32767,s=t>>15;--a>=0;){var c=this[e]&32767,l=this[e++]>>15,u=s*c+l*o;c=o*c+((u&32767)<<15)+n[r]+(i&1073741823),i=(c>>>30)+(u>>>15)+s*l+(i>>>30),n[r++]=c&1073741823}return i}function QE(e,t,n,r,i,a){for(var o=t&16383,s=t>>14;--a>=0;){var c=this[e]&16383,l=this[e++]>>14,u=s*c+l*o;c=o*c+((u&16383)<<14)+n[r]+i,i=(c>>28)+(u>>14)+s*l,n[r++]=c&268435455}return i}typeof navigator<`u`&&navigator.appName==`Microsoft Internet Explorer`?(Z.prototype.am=ZE,JE=30):typeof navigator<`u`&&navigator.appName!=`Netscape`?(Z.prototype.am=XE,JE=26):(Z.prototype.am=QE,JE=28),Z.prototype.DB=JE,Z.prototype.DM=(1<<JE)-1,Z.prototype.DV=1<<JE;var $E=52;Z.prototype.FV=Math.pow(2,$E),Z.prototype.F1=$E-JE,Z.prototype.F2=2*JE-$E;var eD=`0123456789abcdefghijklmnopqrstuvwxyz`,tD=[],nD=48,rD;for(rD=0;rD<=9;++rD)tD[nD++]=rD;for(nD=97,rD=10;rD<36;++rD)tD[nD++]=rD;for(nD=65,rD=10;rD<36;++rD)tD[nD++]=rD;function iD(e){return eD.charAt(e)}function aD(e,t){var n=tD[e.charCodeAt(t)];return n==null?-1:n}function oD(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s}function sD(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0}function cD(e){var t=YE();return t.fromInt(e),t}function lD(e,t){var n;if(t==16)n=4;else if(t==8)n=3;else if(t==256)n=8;else if(t==2)n=1;else if(t==32)n=5;else if(t==4)n=2;else{this.fromRadix(e,t);return}this.t=0,this.s=0;for(var r=e.length,i=!1,a=0;--r>=0;){var o=n==8?e[r]&255:aD(e,r);if(o<0){e.charAt(r)==`-`&&(i=!0);continue}i=!1,a==0?this[this.t++]=o:a+n>this.DB?(this[this.t-1]|=(o&(1<<this.DB-a)-1)<<a,this[this.t++]=o>>this.DB-a):this[this.t-1]|=o<<a,a+=n,a>=this.DB&&(a-=this.DB)}n==8&&e[0]&128&&(this.s=-1,a>0&&(this[this.t-1]|=(1<<this.DB-a)-1<<a)),this.clamp(),i&&Z.ZERO.subTo(this,this)}function uD(){for(var e=this.s&this.DM;this.t>0&&this[this.t-1]==e;)--this.t}function dD(e){if(this.s<0)return`-`+this.negate().toString(e);var t;if(e==16)t=4;else if(e==8)t=3;else if(e==2)t=1;else if(e==32)t=5;else if(e==4)t=2;else return this.toRadix(e);var n=(1<<t)-1,r,i=!1,a=``,o=this.t,s=this.DB-o*this.DB%t;if(o-->0)for(s<this.DB&&(r=this[o]>>s)>0&&(i=!0,a=iD(r));o>=0;)s<t?(r=(this[o]&(1<<s)-1)<<t-s,r|=this[--o]>>(s+=this.DB-t)):(r=this[o]>>(s-=t)&n,s<=0&&(s+=this.DB,--o)),r>0&&(i=!0),i&&(a+=iD(r));return i?a:`0`}function fD(){var e=YE();return Z.ZERO.subTo(this,e),e}function pD(){return this.s<0?this.negate():this}function mD(e){var t=this.s-e.s;if(t!=0)return t;var n=this.t;if(t=n-e.t,t!=0)return this.s<0?-t:t;for(;--n>=0;)if((t=this[n]-e[n])!=0)return t;return 0}function hD(e){var t=1,n;return(n=e>>>16)!=0&&(e=n,t+=16),(n=e>>8)!=0&&(e=n,t+=8),(n=e>>4)!=0&&(e=n,t+=4),(n=e>>2)!=0&&(e=n,t+=2),(n=e>>1)!=0&&(e=n,t+=1),t}function gD(){return this.t<=0?0:this.DB*(this.t-1)+hD(this[this.t-1]^this.s&this.DM)}function _D(e,t){var n;for(n=this.t-1;n>=0;--n)t[n+e]=this[n];for(n=e-1;n>=0;--n)t[n]=0;t.t=this.t+e,t.s=this.s}function vD(e,t){for(var n=e;n<this.t;++n)t[n-e]=this[n];t.t=Math.max(this.t-e,0),t.s=this.s}function yD(e,t){var n=e%this.DB,r=this.DB-n,i=(1<<r)-1,a=Math.floor(e/this.DB),o=this.s<<n&this.DM,s;for(s=this.t-1;s>=0;--s)t[s+a+1]=this[s]>>r|o,o=(this[s]&i)<<n;for(s=a-1;s>=0;--s)t[s]=0;t[a]=o,t.t=this.t+a+1,t.s=this.s,t.clamp()}function bD(e,t){t.s=this.s;var n=Math.floor(e/this.DB);if(n>=this.t){t.t=0;return}var r=e%this.DB,i=this.DB-r,a=(1<<r)-1;t[0]=this[n]>>r;for(var o=n+1;o<this.t;++o)t[o-n-1]|=(this[o]&a)<<i,t[o-n]=this[o]>>r;r>0&&(t[this.t-n-1]|=(this.s&a)<<i),t.t=this.t-n,t.clamp()}function xD(e,t){for(var n=0,r=0,i=Math.min(e.t,this.t);n<i;)r+=this[n]-e[n],t[n++]=r&this.DM,r>>=this.DB;if(e.t<this.t){for(r-=e.s;n<this.t;)r+=this[n],t[n++]=r&this.DM,r>>=this.DB;r+=this.s}else{for(r+=this.s;n<e.t;)r-=e[n],t[n++]=r&this.DM,r>>=this.DB;r-=e.s}t.s=r<0?-1:0,r<-1?t[n++]=this.DV+r:r>0&&(t[n++]=r),t.t=n,t.clamp()}function SD(e,t){var n=this.abs(),r=e.abs(),i=n.t;for(t.t=i+r.t;--i>=0;)t[i]=0;for(i=0;i<r.t;++i)t[i+n.t]=n.am(0,r[i],t,i,0,n.t);t.s=0,t.clamp(),this.s!=e.s&&Z.ZERO.subTo(t,t)}function CD(e){for(var t=this.abs(),n=e.t=2*t.t;--n>=0;)e[n]=0;for(n=0;n<t.t-1;++n){var r=t.am(n,t[n],e,2*n,0,1);(e[n+t.t]+=t.am(n+1,2*t[n],e,2*n+1,r,t.t-n-1))>=t.DV&&(e[n+t.t]-=t.DV,e[n+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(n,t[n],e,2*n,0,1)),e.s=0,e.clamp()}function wD(e,t,n){var r=e.abs();if(!(r.t<=0)){var i=this.abs();if(i.t<r.t){t!=null&&t.fromInt(0),n!=null&&this.copyTo(n);return}n==null&&(n=YE());var a=YE(),o=this.s,s=e.s,c=this.DB-hD(r[r.t-1]);c>0?(r.lShiftTo(c,a),i.lShiftTo(c,n)):(r.copyTo(a),i.copyTo(n));var l=a.t,u=a[l-1];if(u!=0){var d=u*(1<<this.F1)+(l>1?a[l-2]>>this.F2:0),f=this.FV/d,p=(1<<this.F1)/d,m=1<<this.F2,h=n.t,g=h-l,_=t==null?YE():t;for(a.dlShiftTo(g,_),n.compareTo(_)>=0&&(n[n.t++]=1,n.subTo(_,n)),Z.ONE.dlShiftTo(l,_),_.subTo(a,a);a.t<l;)a[a.t++]=0;for(;--g>=0;){var v=n[--h]==u?this.DM:Math.floor(n[h]*f+(n[h-1]+m)*p);if((n[h]+=a.am(0,v,n,g,0,l))<v)for(a.dlShiftTo(g,_),n.subTo(_,n);n[h]<--v;)n.subTo(_,n)}t!=null&&(n.drShiftTo(l,t),o!=s&&Z.ZERO.subTo(t,t)),n.t=l,n.clamp(),c>0&&n.rShiftTo(c,n),o<0&&Z.ZERO.subTo(n,n)}}}function TD(e){var t=YE();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(Z.ZERO)>0&&e.subTo(t,t),t}function ED(e){this.m=e}function DD(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e}function OD(e){return e}function kD(e){e.divRemTo(this.m,null,e)}function AD(e,t,n){e.multiplyTo(t,n),this.reduce(n)}function jD(e,t){e.squareTo(t),this.reduce(t)}ED.prototype.convert=DD,ED.prototype.revert=OD,ED.prototype.reduce=kD,ED.prototype.mulTo=AD,ED.prototype.sqrTo=jD;function MD(){if(this.t<1)return 0;var e=this[0];if(!(e&1))return 0;var t=e&3;return t=t*(2-(e&15)*t)&15,t=t*(2-(e&255)*t)&255,t=t*(2-((e&65535)*t&65535))&65535,t=t*(2-e*t%this.DV)%this.DV,t>0?this.DV-t:-t}function ND(e){this.m=e,this.mp=e.invDigit(),this.mpl=this.mp&32767,this.mph=this.mp>>15,this.um=(1<<e.DB-15)-1,this.mt2=2*e.t}function PD(e){var t=YE();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(Z.ZERO)>0&&this.m.subTo(t,t),t}function FD(e){var t=YE();return e.copyTo(t),this.reduce(t),t}function ID(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t<this.m.t;++t){var n=e[t]&32767,r=n*this.mpl+((n*this.mph+(e[t]>>15)*this.mpl&this.um)<<15)&e.DM;for(n=t+this.m.t,e[n]+=this.m.am(0,r,e,t,0,this.m.t);e[n]>=e.DV;)e[n]-=e.DV,e[++n]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)}function LD(e,t){e.squareTo(t),this.reduce(t)}function RD(e,t,n){e.multiplyTo(t,n),this.reduce(n)}ND.prototype.convert=PD,ND.prototype.revert=FD,ND.prototype.reduce=ID,ND.prototype.mulTo=RD,ND.prototype.sqrTo=LD;function zD(){return(this.t>0?this[0]&1:this.s)==0}function BD(e,t){if(e>4294967295||e<1)return Z.ONE;var n=YE(),r=YE(),i=t.convert(this),a=hD(e)-1;for(i.copyTo(n);--a>=0;)if(t.sqrTo(n,r),(e&1<<a)>0)t.mulTo(r,i,n);else{var o=n;n=r,r=o}return t.revert(n)}function VD(e,t){var n=e<256||t.isEven()?new ED(t):new ND(t);return this.exp(e,n)}Z.prototype.copyTo=oD,Z.prototype.fromInt=sD,Z.prototype.fromString=lD,Z.prototype.clamp=uD,Z.prototype.dlShiftTo=_D,Z.prototype.drShiftTo=vD,Z.prototype.lShiftTo=yD,Z.prototype.rShiftTo=bD,Z.prototype.subTo=xD,Z.prototype.multiplyTo=SD,Z.prototype.squareTo=CD,Z.prototype.divRemTo=wD,Z.prototype.invDigit=MD,Z.prototype.isEven=zD,Z.prototype.exp=BD,Z.prototype.toString=dD,Z.prototype.negate=fD,Z.prototype.abs=pD,Z.prototype.compareTo=mD,Z.prototype.bitLength=gD,Z.prototype.mod=TD,Z.prototype.modPowInt=VD,Z.ZERO=cD(0),Z.ONE=cD(1);function HD(){if(this.s<0){if(this.t==1)return this[0]-this.DV;if(this.t==0)return-1}else if(this.t==1)return this[0];else if(this.t==0)return 0;return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]}function UD(e){return Math.floor(Math.LN2*this.DB/Math.log(e))}function WD(){return this.s<0?-1:this.t<=0||this.t==1&&this[0]<=0?0:1}function GD(e){if(e==null&&(e=10),this.signum()==0||e<2||e>36)return`0`;var t=this.chunkSize(e),n=Math.pow(e,t),r=cD(n),i=YE(),a=YE(),o=``;for(this.divRemTo(r,i,a);i.signum()>0;)o=(n+a.intValue()).toString(e).substr(1)+o,i.divRemTo(r,i,a);return a.intValue().toString(e)+o}Z.prototype.chunkSize=UD,Z.prototype.toRadix=GD,Z.prototype.intValue=HD,Z.prototype.signum=WD;var KD=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,qD=`=`;function JD(e){var t,n,r=``;for(t=0;t+3<=e.length;t+=3)n=parseInt(e.substring(t,t+3),16),r+=KD.charAt(n>>6)+KD.charAt(n&63);for(t+1==e.length?(n=parseInt(e.substring(t,t+1),16),r+=KD.charAt(n<<2)):t+2==e.length&&(n=parseInt(e.substring(t,t+2),16),r+=KD.charAt(n>>2)+KD.charAt((n&3)<<4));(r.length&3)>0;)r+=qD;return r}function YD(e){var t=``,n,r=0,i,a;for(n=0;n<e.length&&e.charAt(n)!=qD;++n)a=KD.indexOf(e.charAt(n)),!(a<0)&&(r==0?(t+=iD(a>>2),i=a&3,r=1):r==1?(t+=iD(i<<2|a>>4),i=a&15,r=2):r==2?(t+=iD(i),t+=iD(a>>2),i=a&3,r=3):(t+=iD(i<<2|a>>4),t+=iD(a&15),r=0));return r==1&&(t+=iD(i<<2)),t}function XD(e,t){return new Z(e,t)}function ZD(e,t){if(t<e.length+11)throw`Message too long for RSA`;for(var n=[],r=e.length-1;r>=0&&t>0;){var i=e.charCodeAt(r--);i<128?n[--t]=i:i>127&&i<2048?(n[--t]=i&63|128,n[--t]=i>>6|192):(n[--t]=i&63|128,n[--t]=i>>6&63|128,n[--t]=i>>12|224)}n[--t]=0;for(var a=new SecureRandom,o=[];t>2;){for(o[0]=0;o[0]==0;)a.nextBytes(o);n[--t]=o[0]}return n[--t]=2,n[--t]=0,new Z(n)}function QD(e,t,n){for(var r=``,i=0;r.length<t;)r+=n(String.fromCharCode.apply(String,e.concat([(i&4278190080)>>24,(i&16711680)>>16,(i&65280)>>8,i&255]))),i+=1;return r}function $D(e,t,n,r){var i=Y.crypto.MessageDigest,a=Y.crypto.Util,o=null;if(n||(n=`sha1`),typeof n==`string`&&(o=i.getCanonicalAlgName(n),r=i.getHashLength(o),n=function(e){return gO(a.hashHex(_O(e),o))}),e.length+2*r+2>t)throw`Message too long for RSA`;var s=``,c;for(c=0;c<t-e.length-2*r-2;c+=1)s+=`\0`;var l=n(``)+s+``+e,u=Array(r);new SecureRandom().nextBytes(u);var d=QD(u,l.length,n),f=[];for(c=0;c<l.length;c+=1)f[c]=l.charCodeAt(c)^d.charCodeAt(c);var p=QD(f,u.length,n),m=[0];for(c=0;c<u.length;c+=1)m[c+1]=u[c]^p.charCodeAt(c);return new Z(m.concat(f))}function eO(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function tO(e,t){if(this.isPublic=!0,this.isPrivate=!1,typeof e!=`string`)this.n=e,this.e=t;else if(e!=null&&t!=null&&e.length>0&&t.length>0)this.n=XD(e,16),this.e=parseInt(t,16);else throw`Invalid RSA public key`}function nO(e){return e.modPowInt(this.e,this.n)}function rO(e){var t=ZD(e,this.n.bitLength()+7>>3);if(t==null)return null;var n=this.doPublic(t);if(n==null)return null;var r=n.toString(16);return r.length&1?`0`+r:r}function iO(e,t,n){var r=$D(e,this.n.bitLength()+7>>3,t,n);if(r==null)return null;var i=this.doPublic(r);if(i==null)return null;var a=i.toString(16);return a.length&1?`0`+a:a}eO.prototype.doPublic=nO,eO.prototype.setPublic=tO,eO.prototype.encrypt=rO,eO.prototype.encryptOAEP=iO,eO.prototype.type=`RSA`;function aO(e,t){for(var n=e.toByteArray(),r=0;r<n.length&&n[r]==0;)++r;if(n.length-r!=t-1||n[r]!=2)return null;for(++r;n[r]!=0;)if(++r>=n.length)return null;for(var i=``;++r<n.length;){var a=n[r]&255;a<128?i+=String.fromCharCode(a):a>191&&a<224?(i+=String.fromCharCode((a&31)<<6|n[r+1]&63),++r):(i+=String.fromCharCode((a&15)<<12|(n[r+1]&63)<<6|n[r+2]&63),r+=2)}return i}function oO(e,t,n){for(var r=``,i=0;r.length<t;)r+=n(e+String.fromCharCode.apply(String,[(i&4278190080)>>24,(i&16711680)>>16,(i&65280)>>8,i&255])),i+=1;return r}function sO(e,t,n,r){var i=Y.crypto.MessageDigest,a=Y.crypto.Util,o=null;n||(n=`sha1`),typeof n==`string`&&(o=i.getCanonicalAlgName(n),r=i.getHashLength(o),n=function(e){return gO(a.hashHex(_O(e),o))}),e=e.toByteArray();var s;for(s=0;s<e.length;s+=1)e[s]&=255;for(;e.length<t;)e.unshift(0);if(e=String.fromCharCode.apply(String,e),e.length<2*r+2)throw`Cipher too short`;var c=e.substr(1,r),l=e.substr(r+1),u=oO(l,r,n),d=[],s;for(s=0;s<c.length;s+=1)d[s]=c.charCodeAt(s)^u.charCodeAt(s);var f=oO(String.fromCharCode.apply(String,d),e.length-r,n),p=[];for(s=0;s<l.length;s+=1)p[s]=l.charCodeAt(s)^f.charCodeAt(s);if(p=String.fromCharCode.apply(String,p),p.substr(0,r)!==n(``))throw`Hash mismatch`;p=p.substr(r);var m=p.indexOf(``);if((m==-1?-1:p.substr(0,m).lastIndexOf(`\0`))+1!=m)throw`Malformed data`;return p.substr(m+1)}function cO(e,t,n){if(this.isPrivate=!0,typeof e!=`string`)this.n=e,this.e=t,this.d=n;else if(e!=null&&t!=null&&e.length>0&&t.length>0)this.n=XD(e,16),this.e=parseInt(t,16),this.d=XD(n,16);else throw`Invalid RSA private key`}function lO(e,t,n,r,i,a,o,s){if(this.isPrivate=!0,this.isPublic=!1,e==null)throw`RSASetPrivateEx N == null`;if(t==null)throw`RSASetPrivateEx E == null`;if(e.length==0)throw`RSASetPrivateEx N.length == 0`;if(t.length==0)throw`RSASetPrivateEx E.length == 0`;if(e!=null&&t!=null&&e.length>0&&t.length>0)this.n=XD(e,16),this.e=parseInt(t,16),this.d=XD(n,16),this.p=XD(r,16),this.q=XD(i,16),this.dmp1=XD(a,16),this.dmq1=XD(o,16),this.coeff=XD(s,16);else throw`Invalid RSA private key in RSASetPrivateEx`}function uO(e){if(this.p==null||this.q==null)return e.modPow(this.d,this.n);for(var t=e.mod(this.p).modPow(this.dmp1,this.p),n=e.mod(this.q).modPow(this.dmq1,this.q);t.compareTo(n)<0;)t=t.add(this.p);return t.subtract(n).multiply(this.coeff).mod(this.p).multiply(this.q).add(n)}function dO(e){if(e.length!=Math.ceil(this.n.bitLength()/4))throw Error(`wrong ctext length`);var t=XD(e,16),n=this.doPrivate(t);return n==null?null:aO(n,this.n.bitLength()+7>>3)}function fO(e,t,n){if(e.length!=Math.ceil(this.n.bitLength()/4))throw Error(`wrong ctext length`);var r=XD(e,16),i=this.doPrivate(r);return i==null?null:sO(i,this.n.bitLength()+7>>3,t,n)}eO.prototype.doPrivate=uO,eO.prototype.setPrivate=cO,eO.prototype.setPrivateEx=lO,eO.prototype.decrypt=dO,eO.prototype.decryptOAEP=fO,(Y.lang===void 0||!Y.lang)&&(Y.lang={}),Y.lang.String=function(){};function pO(e){return e.length%4==2?e+=`==`:e.length%4==3&&(e+=`=`),e=e.replace(/-/g,`+`),e=e.replace(/_/g,`/`),e}function mO(e){return YD(pO(e))}function hO(e){return decodeURIComponent(CO(e))}function gO(e){for(var t=``,n=0;n<e.length-1;n+=2)t+=String.fromCharCode(parseInt(e.substr(n,2),16));return t}function _O(e){for(var t=``,n=0;n<e.length;n++)t+=(`0`+e.charCodeAt(n).toString(16)).slice(-2);return t}function vO(e){return JD(e)}function yO(e){var t=vO(e).replace(/(.{64})/g,`$1\r
717
+ `);return t=t.replace(/\r\n$/,``),t}function bO(e){return YD(e.replace(/[^0-9A-Za-z\/+=]*/g,``))}function xO(e,t){var n=yO(e);return`-----BEGIN `+t+`-----\r
718
+ `+n+`\r
719
+ -----END `+t+`-----\r
720
+ `}function SO(e,t){if(e.indexOf(`-----BEGIN `)==-1)throw`can't find PEM header: `+t;return t===void 0?(e=e.replace(/^[^]*-----BEGIN [^-]+-----/,``),e=e.replace(/-----END [^-]+-----[^]*$/,``)):(e=e.replace(RegExp(`^[^]*-----BEGIN `+t+`-----`),``),e=e.replace(RegExp(`-----END `+t+`-----[^]*$`),``)),bO(e)}function CO(e){return e.replace(/(..)/g,`%$1`)}function wO(e){if(!e.match(/^[0-9A-Fa-f]{32}$/))throw`malformed IPv6 address octet`;e=e.toLowerCase();for(var t=e.match(/.{1,4}/g),n=0;n<8;n++)t[n]=t[n].replace(/^0+/,``),t[n]==``&&(t[n]=`0`);e=`:`+t.join(`:`)+`:`;var r=e.match(/:(0:){2,}/g);if(r===null)return e.slice(1,-1);for(var i=``,n=0;n<r.length;n++)r[n].length>i.length&&(i=r[n]);return e=e.replace(i,`::`),e.slice(1,-1)}function TO(e){var t=`malformed hex value`;if(!e.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/))throw t;if(e.length==8){var n;try{return n=parseInt(e.substr(0,2),16)+`.`+parseInt(e.substr(2,2),16)+`.`+parseInt(e.substr(4,2),16)+`.`+parseInt(e.substr(6,2),16),n}catch(e){throw t}}else if(e.length==32)return wO(e);else return e}function EO(e){function t(e){var t=parseInt(e.substr(0,2),16),n=parseInt(e.substr(2),16);if(t==0&n<128)return String.fromCharCode(n);if(t<8){var r=192|(t&7)<<3|(n&192)>>6,i=128|n&63;return hO(r.toString(16)+i.toString(16))}var r=224|(t&240)>>4,i=128|(t&15)<<2|(n&192)>>6,a=128|n&63;return hO(r.toString(16)+i.toString(16)+a.toString(16))}return e.match(/.{4}/g).map(t).join(``)}Y.lang.String.isHex=function(e){return DO(e)};function DO(e){return!!(e.length%2==0&&(e.match(/^[0-9a-f]+$/)||e.match(/^[0-9A-F]+$/)))}Y.lang.String.isMail=function(e){return e.match(/^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}\.[A-Za-z0-9]{1,}$/)!==null};function OO(e){return e.length%2==1?`0`+e:e.substr(0,1)>`7`?`00`+e:e}function kO(e){if(!DO(e))return null;try{var t=[],n=e.substr(0,2),r=parseInt(n,16);t[0]=new String(Math.floor(r/40)),t[1]=new String(r%40);for(var i=e.substr(2),a=[],o=0;o<i.length/2;o++)a.push(parseInt(i.substr(o*2,2),16));for(var s=[],c=``,o=0;o<a.length;o++)a[o]&128?c+=AO((a[o]&127).toString(2),7):(c+=AO((a[o]&127).toString(2),7),s.push(new String(parseInt(c,2))),c=``);var l=t.join(`.`);return s.length>0&&(l=l+`.`+s.join(`.`)),l}catch(e){return null}}var AO=function(e,t,n){return n==null&&(n=`0`),e.length>=t?e:Array(t-e.length+1).join(n)+e};function jO(e){try{var t=e.substr(0,2);if(t==`00`)return parseInt(e.substr(2),16);var n=parseInt(t,16),r=e.substr(2),i=parseInt(r,16).toString(2);return i==`0`&&(i=`00000000`),i=i.slice(0,0-n),parseInt(i,2)}catch(e){return-1}}(Y.crypto===void 0||!Y.crypto)&&(Y.crypto={}),Y.crypto.Util=new function(){this.DIGESTINFOHEAD={sha1:`3021300906052b0e03021a05000414`,sha224:`302d300d06096086480165030402040500041c`,sha256:`3031300d060960864801650304020105000420`,sha384:`3041300d060960864801650304020205000430`,sha512:`3051300d060960864801650304020305000440`,md2:`3020300c06082a864886f70d020205000410`,md5:`3020300c06082a864886f70d020505000410`,ripemd160:`3021300906052b2403020105000414`},this.DEFAULTPROVIDER={md5:`cryptojs`,sha1:`cryptojs`,sha224:`cryptojs`,sha256:`cryptojs`,sha384:`cryptojs`,sha512:`cryptojs`,ripemd160:`cryptojs`,hmacmd5:`cryptojs`,hmacsha1:`cryptojs`,hmacsha224:`cryptojs`,hmacsha256:`cryptojs`,hmacsha384:`cryptojs`,hmacsha512:`cryptojs`,hmacripemd160:`cryptojs`,MD5withRSA:`cryptojs/jsrsa`,SHA1withRSA:`cryptojs/jsrsa`,SHA224withRSA:`cryptojs/jsrsa`,SHA256withRSA:`cryptojs/jsrsa`,SHA384withRSA:`cryptojs/jsrsa`,SHA512withRSA:`cryptojs/jsrsa`,RIPEMD160withRSA:`cryptojs/jsrsa`,MD5withECDSA:`cryptojs/jsrsa`,SHA1withECDSA:`cryptojs/jsrsa`,SHA224withECDSA:`cryptojs/jsrsa`,SHA256withECDSA:`cryptojs/jsrsa`,SHA384withECDSA:`cryptojs/jsrsa`,SHA512withECDSA:`cryptojs/jsrsa`,RIPEMD160withECDSA:`cryptojs/jsrsa`,SHA1withDSA:`cryptojs/jsrsa`,SHA224withDSA:`cryptojs/jsrsa`,SHA256withDSA:`cryptojs/jsrsa`,MD5withRSAandMGF1:`cryptojs/jsrsa`,SHAwithRSAandMGF1:`cryptojs/jsrsa`,SHA1withRSAandMGF1:`cryptojs/jsrsa`,SHA224withRSAandMGF1:`cryptojs/jsrsa`,SHA256withRSAandMGF1:`cryptojs/jsrsa`,SHA384withRSAandMGF1:`cryptojs/jsrsa`,SHA512withRSAandMGF1:`cryptojs/jsrsa`,RIPEMD160withRSAandMGF1:`cryptojs/jsrsa`},this.CRYPTOJSMESSAGEDIGESTNAME={md5:X.algo.MD5,sha1:X.algo.SHA1,sha224:X.algo.SHA224,sha256:X.algo.SHA256,sha384:X.algo.SHA384,sha512:X.algo.SHA512,ripemd160:X.algo.RIPEMD160},this.hashString=function(e,t){return new Y.crypto.MessageDigest({alg:t}).digestString(e)},this.hashHex=function(e,t){return new Y.crypto.MessageDigest({alg:t}).digestHex(e)},this.sha1=function(e){return this.hashString(e,`sha1`)},this.sha256=function(e){return this.hashString(e,`sha256`)},this.sha256Hex=function(e){return this.hashHex(e,`sha256`)},this.sha512=function(e){return this.hashString(e,`sha512`)},this.sha512Hex=function(e){return this.hashHex(e,`sha512`)}},Y.crypto.MessageDigest=function(e){this.setAlgAndProvider=function(e,t){if(e=Y.crypto.MessageDigest.getCanonicalAlgName(e),e!==null&&t===void 0&&(t=Y.crypto.Util.DEFAULTPROVIDER[e]),`:md5:sha1:sha224:sha256:sha384:sha512:ripemd160:`.indexOf(e)!=-1&&t==`cryptojs`){try{this.md=Y.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[e].create()}catch(t){throw`setAlgAndProvider hash alg set fail alg=`+e+`/`+t}this.updateString=function(e){this.md.update(e)},this.updateHex=function(e){var t=X.enc.Hex.parse(e);this.md.update(t)},this.digest=function(){return this.md.finalize().toString(X.enc.Hex)},this.digestString=function(e){return this.updateString(e),this.digest()},this.digestHex=function(e){return this.updateHex(e),this.digest()}}if(`:sha256:`.indexOf(e)!=-1&&t==`sjcl`){try{this.md=new sjcl.hash.sha256}catch(t){throw`setAlgAndProvider hash alg set fail alg=`+e+`/`+t}this.updateString=function(e){this.md.update(e)},this.updateHex=function(e){var t=sjcl.codec.hex.toBits(e);this.md.update(t)},this.digest=function(){var e=this.md.finalize();return sjcl.codec.hex.fromBits(e)},this.digestString=function(e){return this.updateString(e),this.digest()},this.digestHex=function(e){return this.updateHex(e),this.digest()}}},this.updateString=function(e){throw`updateString(str) not supported for this alg/prov: `+this.algName+`/`+this.provName},this.updateHex=function(e){throw`updateHex(hex) not supported for this alg/prov: `+this.algName+`/`+this.provName},this.digest=function(){throw`digest() not supported for this alg/prov: `+this.algName+`/`+this.provName},this.digestString=function(e){throw`digestString(str) not supported for this alg/prov: `+this.algName+`/`+this.provName},this.digestHex=function(e){throw`digestHex(hex) not supported for this alg/prov: `+this.algName+`/`+this.provName},e!==void 0&&e.alg!==void 0&&(this.algName=e.alg,e.prov===void 0&&(this.provName=Y.crypto.Util.DEFAULTPROVIDER[this.algName]),this.setAlgAndProvider(this.algName,this.provName))},Y.crypto.MessageDigest.getCanonicalAlgName=function(e){return typeof e==`string`&&(e=e.toLowerCase(),e=e.replace(/-/,``)),e},Y.crypto.MessageDigest.getHashLength=function(e){var t=Y.crypto.MessageDigest,n=t.getCanonicalAlgName(e);if(t.HASHLENGTH[n]===void 0)throw`not supported algorithm: `+e;return t.HASHLENGTH[n]},Y.crypto.MessageDigest.HASHLENGTH={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,ripemd160:20},Y.crypto.Signature=function(e){var t=null;if(this._setAlgNames=function(){var e=this.algName.match(/^(.+)with(.+)$/);e&&(this.mdAlgName=e[1].toLowerCase(),this.pubkeyAlgName=e[2].toLowerCase(),this.pubkeyAlgName==`rsaandmgf1`&&this.mdAlgName==`sha`&&(this.mdAlgName=`sha1`))},this._zeroPaddingOfSignature=function(e,t){for(var n=``,r=t/4-e.length,i=0;i<r;i++)n+=`0`;return n+e},this.setAlgAndProvider=function(e,t){if(this._setAlgNames(),t!=`cryptojs/jsrsa`)throw Error(`provider not supported: `+t);if(`:md5:sha1:sha224:sha256:sha384:sha512:ripemd160:`.indexOf(this.mdAlgName)!=-1){try{this.md=new Y.crypto.MessageDigest({alg:this.mdAlgName})}catch(e){throw Error(`setAlgAndProvider hash alg set fail alg=`+this.mdAlgName+`/`+e)}this.init=function(e,t){var n=null;try{n=t===void 0?MO.getKey(e):MO.getKey(e,t)}catch(e){throw`init failed:`+e}if(n.isPrivate===!0)this.prvKey=n,this.state=`SIGN`;else if(n.isPublic===!0)this.pubKey=n,this.state=`VERIFY`;else throw`init failed.:`+n},this.updateString=function(e){this.md.updateString(e)},this.updateHex=function(e){this.md.updateHex(e)},this.verify=function(e){if(this.sHashHex=this.md.digest(),this.pubKey instanceof eO&&this.pubkeyAlgName===`rsaandmgf1`)return this.pubKey.verifyWithMessageHashPSS(this.sHashHex,e,this.mdAlgName,this.pssSaltLen);if(this.pubKey instanceof eO&&this.pubkeyAlgName===`rsa`)return this.pubKey.verifyWithMessageHash(this.sHashHex,e);throw`Signature: unsupported public key alg: `+this.pubkeyAlgName}}},this.init=function(e,t){throw`init(key, pass) not supported for this alg:prov=`+this.algProvName},this.updateString=function(e){throw`updateString(str) not supported for this alg:prov=`+this.algProvName},this.updateHex=function(e){throw`updateHex(hex) not supported for this alg:prov=`+this.algProvName},this.verify=function(e){throw`verify(hSigVal) not supported for this alg:prov=`+this.algProvName},this.initParams=e,e!==void 0&&(e.alg!==void 0&&(this.algName=e.alg,e.prov===void 0?this.provName=Y.crypto.Util.DEFAULTPROVIDER[this.algName]:this.provName=e.prov,this.algProvName=this.algName+`:`+this.provName,this.setAlgAndProvider(this.algName,this.provName),this._setAlgNames()),e.psssaltlen!==void 0&&(this.pssSaltLen=e.psssaltlen),e.prvkeypem!==void 0)){if(e.prvkeypas!==void 0)throw`both prvkeypem and prvkeypas parameters not supported`;try{var t=MO.getKey(e.prvkeypem);this.init(t)}catch(e){throw`fatal error to load pem private key: `+e}}},Y.crypto.OID=new function(){this.oidhex2name={"2a864886f70d010101":`rsaEncryption`,"2a8648ce3d0201":`ecPublicKey`,"2a8648ce380401":`dsa`,"2a8648ce3d030107":`secp256r1`,"2b8104001f":`secp192k1`,"2b81040021":`secp224r1`,"2b8104000a":`secp256k1`,"2b81040023":`secp521r1`,"2b81040022":`secp384r1`,"2a8648ce380403":`SHA1withDSA`,"608648016503040301":`SHA224withDSA`,"608648016503040302":`SHA256withDSA`}};var MO=function(){var e=function(e,t,n){return r(X.AES,e,t,n)},t=function(e,t,n){return r(X.TripleDES,e,t,n)},n=function(e,t,n){return r(X.DES,e,t,n)},r=function(e,t,n,r){var i=X.enc.Hex.parse(t),a=X.enc.Hex.parse(n),o=X.enc.Hex.parse(r),s={};s.key=a,s.iv=o,s.ciphertext=i;var c=e.decrypt(s,a,{iv:o});return X.enc.Hex.stringify(c)},i=function(e,t,n){return s(X.AES,e,t,n)},a=function(e,t,n){return s(X.TripleDES,e,t,n)},o=function(e,t,n){return s(X.DES,e,t,n)},s=function(e,t,n,r){var i=X.enc.Hex.parse(t),a=X.enc.Hex.parse(n),o=X.enc.Hex.parse(r),s=e.encrypt(i,a,{iv:o}),c=X.enc.Hex.parse(s.toString());return X.enc.Base64.stringify(c)},c={"AES-256-CBC":{proc:e,eproc:i,keylen:32,ivlen:16},"AES-192-CBC":{proc:e,eproc:i,keylen:24,ivlen:16},"AES-128-CBC":{proc:e,eproc:i,keylen:16,ivlen:16},"DES-EDE3-CBC":{proc:t,eproc:a,keylen:24,ivlen:8},"DES-CBC":{proc:n,eproc:o,keylen:8,ivlen:8}},l=function(e){var t=X.lib.WordArray.random(e);return X.enc.Hex.stringify(t)},u=function(e){var t={},n=e.match(RegExp(`DEK-Info: ([^,]+),([0-9A-Fa-f]+)`,`m`));n&&(t.cipher=n[1],t.ivsalt=n[2]);var r=e.match(RegExp(`-----BEGIN ([A-Z]+) PRIVATE KEY-----`));r&&(t.type=r[1]);var i=-1,a=0;e.indexOf(`\r
721
+ \r
722
+ `)!=-1&&(i=e.indexOf(`\r
723
+ \r
724
+ `),a=2),e.indexOf(`
725
+
726
+ `)!=-1&&(i=e.indexOf(`
727
+
728
+ `),a=1);var o=e.indexOf(`-----END`);if(i!=-1&&o!=-1){var s=e.substring(i+a*2,o-a);s=s.replace(/\s+/g,``),t.data=s}return t},d=function(e,t,n){for(var r=n.substring(0,16),i=X.enc.Hex.parse(r),a=X.enc.Utf8.parse(t),o=c[e].keylen+c[e].ivlen,s=``,l=null;;){var u=X.algo.MD5.create();if(l!=null&&u.update(l),u.update(a),u.update(i),l=u.finalize(),s+=X.enc.Hex.stringify(l),s.length>=o*2)break}var d={};return d.keyhex=s.substr(0,c[e].keylen*2),d.ivhex=s.substr(c[e].keylen*2,c[e].ivlen*2),d},f=function(e,t,n,r){var i=X.enc.Base64.parse(e),a=X.enc.Hex.stringify(i),o=c[t].proc;return o(a,n,r)},p=function(e,t,n,r){var i=c[t].eproc;return i(e,n,r)};return{version:`1.0.0`,parsePKCS5PEM:function(e){return u(e)},getKeyAndUnusedIvByPasscodeAndIvsalt:function(e,t,n){return d(e,t,n)},decryptKeyB64:function(e,t,n,r){return f(e,t,n,r)},getDecryptedKeyHex:function(e,t){var n=u(e),r=n.cipher,i=n.ivsalt,a=n.data,o=d(r,t,i).keyhex;return f(a,r,o,i)},getEncryptedPKCS5PEMFromPrvKeyHex:function(e,t,n,r,i){var a=``;if((r===void 0||r==null)&&(r=`AES-256-CBC`),c[r]===void 0)throw`KEYUTIL unsupported algorithm: `+r;if(i===void 0||i==null){var o=c[r].ivlen;i=l(o).toUpperCase()}var s=d(r,n,i).keyhex,u=p(t,r,s,i).replace(/(.{64})/g,`$1\r
729
+ `),a=`-----BEGIN `+e+` PRIVATE KEY-----\r
730
+ `;return a+=`Proc-Type: 4,ENCRYPTED\r
731
+ `,a+=`DEK-Info: `+r+`,`+i+`\r
732
+ `,a+=`\r
733
+ `,a+=u,a+=`\r
734
+ -----END `+e+` PRIVATE KEY-----\r
735
+ `,a},parseHexOfEncryptedPKCS8:function(e){var t=Q,n=t.getChildIdx,r=t.getV,i={},a=n(e,0);if(a.length!=2)throw`malformed format: SEQUENCE(0).items != 2: `+a.length;i.ciphertext=r(e,a[1]);var o=n(e,a[0]);if(o.length!=2)throw`malformed format: SEQUENCE(0.0).items != 2: `+o.length;if(r(e,o[0])!=`2a864886f70d01050d`)throw`this only supports pkcs5PBES2`;var s=n(e,o[1]);if(o.length!=2)throw`malformed format: SEQUENCE(0.0.1).items != 2: `+s.length;var c=n(e,s[1]);if(c.length!=2)throw`malformed format: SEQUENCE(0.0.1.1).items != 2: `+c.length;if(r(e,c[0])!=`2a864886f70d0307`)throw`this only supports TripleDES`;i.encryptionSchemeAlg=`TripleDES`,i.encryptionSchemeIV=r(e,c[1]);var l=n(e,s[0]);if(l.length!=2)throw`malformed format: SEQUENCE(0.0.1.0).items != 2: `+l.length;if(r(e,l[0])!=`2a864886f70d01050c`)throw`this only supports pkcs5PBKDF2`;var u=n(e,l[1]);if(u.length<2)throw`malformed format: SEQUENCE(0.0.1.0.1).items < 2: `+u.length;i.pbkdf2Salt=r(e,u[0]);var d=r(e,u[1]);try{i.pbkdf2Iter=parseInt(d,16)}catch(e){throw`malformed format pbkdf2Iter: `+d}return i},getPBKDF2KeyHexFromParam:function(e,t){var n=X.enc.Hex.parse(e.pbkdf2Salt),r=e.pbkdf2Iter,i=X.PBKDF2(t,n,{keySize:192/32,iterations:r});return X.enc.Hex.stringify(i)},_getPlainPKCS8HexFromEncryptedPKCS8PEM:function(e,t){var n=SO(e,`ENCRYPTED PRIVATE KEY`),r=this.parseHexOfEncryptedPKCS8(n),i=MO.getPBKDF2KeyHexFromParam(r,t),a={};a.ciphertext=X.enc.Hex.parse(r.ciphertext);var o=X.enc.Hex.parse(i),s=X.enc.Hex.parse(r.encryptionSchemeIV),c=X.TripleDES.decrypt(a,o,{iv:s});return X.enc.Hex.stringify(c)},getKeyFromEncryptedPKCS8PEM:function(e,t){var n=this._getPlainPKCS8HexFromEncryptedPKCS8PEM(e,t);return this.getKeyFromPlainPrivatePKCS8Hex(n)},parsePlainPrivatePKCS8Hex:function(e){var t=Q,n=t.getChildIdx,r=t.getV,i={};if(i.algparam=null,e.substr(0,2)!=`30`)throw Error(`malformed plain PKCS8 private key(code:001)`);var a=n(e,0);if(a.length<3)throw Error(`malformed plain PKCS8 private key(code:002)`);if(e.substr(a[1],2)!=`30`)throw Error(`malformed PKCS8 private key(code:003)`);var o=n(e,a[1]);if(o.length!=2)throw Error(`malformed PKCS8 private key(code:004)`);if(e.substr(o[0],2)!=`06`)throw Error(`malformed PKCS8 private key(code:005)`);if(i.algoid=r(e,o[0]),e.substr(o[1],2)==`06`&&(i.algparam=r(e,o[1])),e.substr(a[2],2)!=`04`)throw Error(`malformed PKCS8 private key(code:006)`);return i.keyidx=t.getVidx(e,a[2]),i},getKeyFromPlainPrivatePKCS8PEM:function(e){var t=SO(e,`PRIVATE KEY`);return this.getKeyFromPlainPrivatePKCS8Hex(t)},getKeyFromPlainPrivatePKCS8Hex:function(e){var t=this.parsePlainPrivatePKCS8Hex(e),n;if(t.algoid==`2a864886f70d010101`)n=new eO;else if(Y.crypto.DSA&&t.algoid==`2a8648ce380401`)n=new Y.crypto.DSA;else if(Y.crypto.ECDSA&&t.algoid==`2a8648ce3d0201`)n=new Y.crypto.ECDSA;else throw`unsupported private key algorithm`;return n.readPKCS8PrvKeyHex(e),n},_getKeyFromPublicPKCS8Hex:function(e){var t,n=Q.getVbyList(e,0,[0,0],`06`);if(n===`2a864886f70d010101`)t=new eO;else if(Y.crypto.DSA&&n===`2a8648ce380401`)t=new Y.crypto.DSA;else if(Y.crypto.ECDSA&&n===`2a8648ce3d0201`)t=new Y.crypto.ECDSA;else throw`unsupported PKCS#8 public key hex`;return t.readPKCS8PubKeyHex(e),t},parsePublicRawRSAKeyHex:function(e){var t=Q,n=t.getChildIdx,r=t.getV,i={};if(e.substr(0,2)!=`30`)throw`malformed RSA key(code:001)`;var a=n(e,0);if(a.length!=2)throw`malformed RSA key(code:002)`;if(e.substr(a[0],2)!=`02`)throw`malformed RSA key(code:003)`;if(i.n=r(e,a[0]),e.substr(a[1],2)!=`02`)throw`malformed RSA key(code:004)`;return i.e=r(e,a[1]),i},parsePublicPKCS8Hex:function(e){var t=Q,n=t.getChildIdx,r=t.getV,i={};i.algparam=null;var a=n(e,0);if(a.length!=2)throw`outer DERSequence shall have 2 elements: `+a.length;var o=a[0];if(e.substr(o,2)!=`30`)throw`malformed PKCS8 public key(code:001)`;var s=n(e,o);if(s.length!=2)throw`malformed PKCS8 public key(code:002)`;if(e.substr(s[0],2)!=`06`)throw`malformed PKCS8 public key(code:003)`;if(i.algoid=r(e,s[0]),e.substr(s[1],2)==`06`?i.algparam=r(e,s[1]):e.substr(s[1],2)==`30`&&(i.algparam={},i.algparam.p=t.getVbyList(e,s[1],[0],`02`),i.algparam.q=t.getVbyList(e,s[1],[1],`02`),i.algparam.g=t.getVbyList(e,s[1],[2],`02`)),e.substr(a[1],2)!=`03`)throw`malformed PKCS8 public key(code:004)`;return i.key=r(e,a[1]).substr(2),i}}}();MO.getKey=function(e,t,n){var r=Q,i=r.getChildIdx;r.getV;var a=r.getVbyList,o=Y.crypto,s=o.ECDSA,c=o.DSA,l=eO,u=SO,d=MO;if(l!==void 0&&e instanceof l||s!==void 0&&e instanceof s||c!==void 0&&e instanceof c)return e;if(e.curve!==void 0&&e.xy!==void 0&&e.d===void 0)return new s({pub:e.xy,curve:e.curve});if(e.curve!==void 0&&e.d!==void 0)return new s({prv:e.d,curve:e.curve});if(e.kty===void 0&&e.n!==void 0&&e.e!==void 0&&e.d===void 0){var f=new l;return f.setPublic(e.n,e.e),f}if(e.kty===void 0&&e.n!==void 0&&e.e!==void 0&&e.d!==void 0&&e.p!==void 0&&e.q!==void 0&&e.dp!==void 0&&e.dq!==void 0&&e.co!==void 0&&e.qi===void 0){var f=new l;return f.setPrivateEx(e.n,e.e,e.d,e.p,e.q,e.dp,e.dq,e.co),f}if(e.kty===void 0&&e.n!==void 0&&e.e!==void 0&&e.d!==void 0&&e.p===void 0){var f=new l;return f.setPrivate(e.n,e.e,e.d),f}if(e.p!==void 0&&e.q!==void 0&&e.g!==void 0&&e.y!==void 0&&e.x===void 0){var f=new c;return f.setPublic(e.p,e.q,e.g,e.y),f}if(e.p!==void 0&&e.q!==void 0&&e.g!==void 0&&e.y!==void 0&&e.x!==void 0){var f=new c;return f.setPrivate(e.p,e.q,e.g,e.y,e.x),f}if(e.kty===`RSA`&&e.n!==void 0&&e.e!==void 0&&e.d===void 0){var f=new l;return f.setPublic(mO(e.n),mO(e.e)),f}if(e.kty===`RSA`&&e.n!==void 0&&e.e!==void 0&&e.d!==void 0&&e.p!==void 0&&e.q!==void 0&&e.dp!==void 0&&e.dq!==void 0&&e.qi!==void 0){var f=new l;return f.setPrivateEx(mO(e.n),mO(e.e),mO(e.d),mO(e.p),mO(e.q),mO(e.dp),mO(e.dq),mO(e.qi)),f}if(e.kty===`RSA`&&e.n!==void 0&&e.e!==void 0&&e.d!==void 0){var f=new l;return f.setPrivate(mO(e.n),mO(e.e),mO(e.d)),f}if(e.kty===`EC`&&e.crv!==void 0&&e.x!==void 0&&e.y!==void 0&&e.d===void 0){var p=new s({curve:e.crv}),m=p.ecparams.keylen/4,h=(`0000000000`+mO(e.x)).slice(-m),g=(`0000000000`+mO(e.y)).slice(-m),_=`04`+h+g;return p.setPublicKeyHex(_),p}if(e.kty===`EC`&&e.crv!==void 0&&e.x!==void 0&&e.y!==void 0&&e.d!==void 0){var p=new s({curve:e.crv}),m=p.ecparams.keylen/4,h=(`0000000000`+mO(e.x)).slice(-m),g=(`0000000000`+mO(e.y)).slice(-m),_=`04`+h+g,v=(`0000000000`+mO(e.d)).slice(-m);return p.setPublicKeyHex(_),p.setPrivateKeyHex(v),p}if(n===`pkcs5prv`){var y=e,r=Q,b=i(y,0),f;if(b.length===9)f=new l,f.readPKCS5PrvKeyHex(y);else if(b.length===6)f=new c,f.readPKCS5PrvKeyHex(y);else if(b.length>2&&y.substr(b[1],2)===`04`)f=new s,f.readPKCS5PrvKeyHex(y);else throw`unsupported PKCS#1/5 hexadecimal key`;return f}if(n===`pkcs8prv`){var f=d.getKeyFromPlainPrivatePKCS8Hex(e);return f}if(n===`pkcs8pub`)return d._getKeyFromPublicPKCS8Hex(e);if(n===`x509pub`)return PO.getPublicKeyFromCertHex(e);if(e.indexOf(`-END CERTIFICATE-`,0)!=-1||e.indexOf(`-END X509 CERTIFICATE-`,0)!=-1||e.indexOf(`-END TRUSTED CERTIFICATE-`,0)!=-1)return PO.getPublicKeyFromCertPEM(e);if(e.indexOf(`-END PUBLIC KEY-`)!=-1){var x=SO(e,`PUBLIC KEY`);return d._getKeyFromPublicPKCS8Hex(x)}if(e.indexOf(`-END RSA PRIVATE KEY-`)!=-1&&e.indexOf(`4,ENCRYPTED`)==-1){var S=u(e,`RSA PRIVATE KEY`);return d.getKey(S,null,`pkcs5prv`)}if(e.indexOf(`-END DSA PRIVATE KEY-`)!=-1&&e.indexOf(`4,ENCRYPTED`)==-1){var C=u(e,`DSA PRIVATE KEY`),ee=a(C,0,[1],`02`),te=a(C,0,[2],`02`),ne=a(C,0,[3],`02`),w=a(C,0,[4],`02`),re=a(C,0,[5],`02`),f=new c;return f.setPrivate(new Z(ee,16),new Z(te,16),new Z(ne,16),new Z(w,16),new Z(re,16)),f}if(e.indexOf(`-END EC PRIVATE KEY-`)!=-1&&e.indexOf(`4,ENCRYPTED`)==-1){var S=u(e,`EC PRIVATE KEY`);return d.getKey(S,null,`pkcs5prv`)}if(e.indexOf(`-END PRIVATE KEY-`)!=-1)return d.getKeyFromPlainPrivatePKCS8PEM(e);if(e.indexOf(`-END RSA PRIVATE KEY-`)!=-1&&e.indexOf(`4,ENCRYPTED`)!=-1){var ie=d.getDecryptedKeyHex(e,t),ae=new eO;return ae.readPKCS5PrvKeyHex(ie),ae}if(e.indexOf(`-END EC PRIVATE KEY-`)!=-1&&e.indexOf(`4,ENCRYPTED`)!=-1){var C=d.getDecryptedKeyHex(e,t),f=a(C,0,[1],`04`),oe=a(C,0,[2,0],`06`),se=a(C,0,[3,0],`03`).substr(2),ce=``;if(Y.crypto.OID.oidhex2name[oe]!==void 0)ce=Y.crypto.OID.oidhex2name[oe];else throw`undefined OID(hex) in KJUR.crypto.OID: `+oe;var p=new s({curve:ce});return p.setPublicKeyHex(se),p.setPrivateKeyHex(f),p.isPublic=!1,p}if(e.indexOf(`-END DSA PRIVATE KEY-`)!=-1&&e.indexOf(`4,ENCRYPTED`)!=-1){var C=d.getDecryptedKeyHex(e,t),ee=a(C,0,[1],`02`),te=a(C,0,[2],`02`),ne=a(C,0,[3],`02`),w=a(C,0,[4],`02`),re=a(C,0,[5],`02`),f=new c;return f.setPrivate(new Z(ee,16),new Z(te,16),new Z(ne,16),new Z(w,16),new Z(re,16)),f}if(e.indexOf(`-END ENCRYPTED PRIVATE KEY-`)!=-1)return d.getKeyFromEncryptedPKCS8PEM(e,t);throw Error(`not supported argument`)},(Y.asn1===void 0||!Y.asn1)&&(Y.asn1={}),Y.asn1.ASN1Util={},Y.asn1.ASN1Util.oidHexToInt=function(e){for(var t=``,n=parseInt(e.substr(0,2),16),r=Math.floor(n/40),i=n%40,t=r+`.`+i,a=``,o=2;o<e.length;o+=2){var s=(`00000000`+parseInt(e.substr(o,2),16).toString(2)).slice(-8);if(a+=s.substr(1,7),s.substr(0,1)==`0`){var c=new Z(a,2);t=t+`.`+c.toString(10),a=``}}return t};var Q=new function(){};Q.getLblen=function(e,t){if(e.substr(t+2,1)!=`8`)return 1;var n=parseInt(e.substr(t+3,1));return n==0?-1:0<n&&n<10?n+1:-2},Q.getL=function(e,t){var n=Q.getLblen(e,t);return n<1?``:e.substr(t+2,n*2)},Q.getVblen=function(e,t){var n=Q.getL(e,t),r;return n==``?-1:(r=n.substr(0,1)===`8`?new Z(n.substr(2),16):new Z(n,16),r.intValue())},Q.getVidx=function(e,t){var n=Q.getLblen(e,t);return n<0?n:t+(n+1)*2},Q.getV=function(e,t){var n=Q.getVidx(e,t),r=Q.getVblen(e,t);return e.substr(n,r*2)},Q.getTLV=function(e,t){return e.substr(t,2)+Q.getL(e,t)+Q.getV(e,t)},Q.getTLVblen=function(e,t){return 2+Q.getLblen(e,t)*2+Q.getVblen(e,t)*2},Q.getNextSiblingIdx=function(e,t){return Q.getVidx(e,t)+Q.getVblen(e,t)*2},Q.getChildIdx=function(e,t){var n=Q,r=[],i=n.getVidx(e,t),a=n.getVblen(e,t)*2,o;e.substr(t,2)==`03`&&(i+=2,a-=2),o=0;for(var s=i;o<=a;){var c=n.getTLVblen(e,s);if(o+=c,o<=a&&r.push(s),s+=c,o>=a)break}return r},Q.getNthChildIdx=function(e,t,n){return Q.getChildIdx(e,t)[n]},Q.getIdxbyList=function(e,t,n,r){var i=Q,a,o;return n.length==0?r!==void 0&&e.substr(t,2)!==r?-1:t:(a=n.shift(),o=i.getChildIdx(e,t),a>=o.length?-1:i.getIdxbyList(e,o[a],n,r))},Q.getIdxbyListEx=function(e,t,n,r){var i=Q,a,o;if(n.length==0)return r!==void 0&&e.substr(t,2)!==r?-1:t;a=n.shift(),o=i.getChildIdx(e,t);for(var s=0,c=0;c<o.length;c++){var l=e.substr(o[c],2);if(typeof a==`number`&&!i.isContextTag(l)&&s==a||typeof a==`string`&&i.isContextTag(l,a))return i.getIdxbyListEx(e,o[c],n,r);i.isContextTag(l)||s++}return-1},Q.getTLVbyList=function(e,t,n,r){var i=Q,a=i.getIdxbyList(e,t,n,r);return a==-1||a>=e.length?null:i.getTLV(e,a)},Q.getTLVbyListEx=function(e,t,n,r){var i=Q,a=i.getIdxbyListEx(e,t,n,r);return a==-1?null:i.getTLV(e,a)},Q.getVbyList=function(e,t,n,r,i){var a=Q,o=a.getIdxbyList(e,t,n,r),s;return o==-1||o>=e.length?null:(s=a.getV(e,o),i===!0&&(s=s.substr(2)),s)},Q.getVbyListEx=function(e,t,n,r,i){var a=Q,o=a.getIdxbyListEx(e,t,n,r),s;return o==-1?null:(s=a.getV(e,o),e.substr(o,2)==`03`&&i!==!1&&(s=s.substr(2)),s)},Q.getInt=function(e,t,n){n==null&&(n=-1);try{var r=e.substr(t,2);if(r!=`02`&&r!=`03`)return n;var i=Q.getV(e,t);return r==`02`?parseInt(i,16):jO(i)}catch(e){return n}},Q.getOID=function(e,t,n){n==null&&(n=null);try{return e.substr(t,2)==`06`?kO(Q.getV(e,t)):n}catch(e){return n}},Q.getOIDName=function(e,t,n){n==null&&(n=null);try{var r=Q.getOID(e,t,n);if(r==n)return n;var i=Y.asn1.x509.OID.oid2name(r);return i==``?r:i}catch(e){return n}},Q.getString=function(e,t,n){n==null&&(n=null);try{return gO(Q.getV(e,t))}catch(e){return n}},Q.hextooidstr=function(e){var t=function(e,t){return e.length>=t?e:Array(t-e.length+1).join(`0`)+e},n=[],r=e.substr(0,2),i=parseInt(r,16);n[0]=new String(Math.floor(i/40)),n[1]=new String(i%40);for(var a=e.substr(2),o=[],s=0;s<a.length/2;s++)o.push(parseInt(a.substr(s*2,2),16));for(var c=[],l=``,s=0;s<o.length;s++)o[s]&128?l+=t((o[s]&127).toString(2),7):(l+=t((o[s]&127).toString(2),7),c.push(new String(parseInt(l,2))),l=``);var u=n.join(`.`);return c.length>0&&(u=u+`.`+c.join(`.`)),u},Q.isContextTag=function(e,t){e=e.toLowerCase();var n,r;try{n=parseInt(e,16)}catch(e){return-1}if(t===void 0)return(n&192)==128;try{return t.match(/^\[[0-9]+\]$/)==null||(r=parseInt(t.substr(1,t.length-1),10),r>31)?!1:(n&192)==128&&(n&31)==r}catch(e){return!1}},Q.isASN1HEX=function(e){var t=Q;if(e.length%2==1)return!1;var n=t.getVblen(e,0),r=e.substr(0,2),i=t.getL(e,0);return e.length-r.length-i.length==n*2},Q.checkStrictDER=function(e,t,n,r,i){var a=Q;if(n===void 0){if(typeof e!=`string`||(e=e.toLowerCase(),!Y.lang.String.isHex(e)))throw Error(`not hex string`);n=e.length,r=e.length/2,i=r<128?1:Math.ceil(r.toString(16))+1}if(a.getL(e,t).length>i*2)throw Error(`L of TLV too long: idx=`+t);var o=a.getVblen(e,t);if(o>r)throw Error(`value of L too long than hex: idx=`+t);var s=a.getTLV(e,t),c=s.length-2-a.getL(e,t).length;if(c!==o*2)throw Error(`V string length and L's value not the same:`+c+`/`+o*2);if(t===0&&e.length!=s.length)throw Error(`total length and TLV length unmatch:`+e.length+`!=`+s.length);var l=e.substr(t,2);if(l===`02`){var u=a.getVidx(e,t);if(e.substr(u,2)==`00`&&e.charCodeAt(u+2)<56)throw Error(`not least zeros for DER INTEGER`)}if(parseInt(l,16)&32){for(var d=a.getVblen(e,t),f=0,p=a.getChildIdx(e,t),m=0;m<p.length;m++){var h=a.getTLV(e,p[m]);f+=h.length,a.checkStrictDER(e,p[m],n,r,i)}if(d*2!=f)throw Error(`sum of children's TLV length and L unmatch: `+d*2+`!=`+f)}},Q.oidname=function(e){var t=Y.asn1;Y.lang.String.isHex(e)&&(e=t.ASN1Util.oidHexToInt(e));var n=t.x509.OID.oid2name(e);return n===``&&(n=e),n},(Y.asn1===void 0||!Y.asn1)&&(Y.asn1={}),(Y.asn1.x509===void 0||!Y.asn1.x509)&&(Y.asn1.x509={}),Y.asn1.x509.AlgorithmIdentifier={},Y.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV={SHAwithRSAandMGF1:`300d06092a864886f70d01010a3000`,SHA256withRSAandMGF1:`303d06092a864886f70d01010a3030a00d300b0609608648016503040201a11a301806092a864886f70d010108300b0609608648016503040201a203020120`,SHA384withRSAandMGF1:`303d06092a864886f70d01010a3030a00d300b0609608648016503040202a11a301806092a864886f70d010108300b0609608648016503040202a203020130`,SHA512withRSAandMGF1:`303d06092a864886f70d01010a3030a00d300b0609608648016503040203a11a301806092a864886f70d010108300b0609608648016503040203a203020140`},Y.asn1.x509.OID=new function(e){this.atype2oidList={CN:`2.5.4.3`,L:`2.5.4.7`,ST:`2.5.4.8`,O:`2.5.4.10`,OU:`2.5.4.11`,C:`2.5.4.6`,STREET:`2.5.4.9`,DC:`0.9.2342.19200300.100.1.25`,UID:`0.9.2342.19200300.100.1.1`,SN:`2.5.4.4`,T:`2.5.4.12`,DN:`2.5.4.49`,E:`1.2.840.113549.1.9.1`,description:`2.5.4.13`,businessCategory:`2.5.4.15`,postalCode:`2.5.4.17`,serialNumber:`2.5.4.5`,uniqueIdentifier:`2.5.4.45`,organizationIdentifier:`2.5.4.97`,jurisdictionOfIncorporationL:`1.3.6.1.4.1.311.60.2.1.1`,jurisdictionOfIncorporationSP:`1.3.6.1.4.1.311.60.2.1.2`,jurisdictionOfIncorporationC:`1.3.6.1.4.1.311.60.2.1.3`},this.name2oidList={sha1:`1.3.14.3.2.26`,sha256:`2.16.840.1.101.3.4.2.1`,sha384:`2.16.840.1.101.3.4.2.2`,sha512:`2.16.840.1.101.3.4.2.3`,sha224:`2.16.840.1.101.3.4.2.4`,md5:`1.2.840.113549.2.5`,md2:`1.3.14.7.2.2.1`,ripemd160:`1.3.36.3.2.1`,MD2withRSA:`1.2.840.113549.1.1.2`,MD4withRSA:`1.2.840.113549.1.1.3`,MD5withRSA:`1.2.840.113549.1.1.4`,SHA1withRSA:`1.2.840.113549.1.1.5`,"pkcs1-MGF":`1.2.840.113549.1.1.8`,rsaPSS:`1.2.840.113549.1.1.10`,SHA224withRSA:`1.2.840.113549.1.1.14`,SHA256withRSA:`1.2.840.113549.1.1.11`,SHA384withRSA:`1.2.840.113549.1.1.12`,SHA512withRSA:`1.2.840.113549.1.1.13`,SHA1withECDSA:`1.2.840.10045.4.1`,SHA224withECDSA:`1.2.840.10045.4.3.1`,SHA256withECDSA:`1.2.840.10045.4.3.2`,SHA384withECDSA:`1.2.840.10045.4.3.3`,SHA512withECDSA:`1.2.840.10045.4.3.4`,dsa:`1.2.840.10040.4.1`,SHA1withDSA:`1.2.840.10040.4.3`,SHA224withDSA:`2.16.840.1.101.3.4.3.1`,SHA256withDSA:`2.16.840.1.101.3.4.3.2`,rsaEncryption:`1.2.840.113549.1.1.1`,commonName:`2.5.4.3`,countryName:`2.5.4.6`,localityName:`2.5.4.7`,stateOrProvinceName:`2.5.4.8`,streetAddress:`2.5.4.9`,organizationName:`2.5.4.10`,organizationalUnitName:`2.5.4.11`,domainComponent:`0.9.2342.19200300.100.1.25`,userId:`0.9.2342.19200300.100.1.1`,surname:`2.5.4.4`,givenName:`2.5.4.42`,title:`2.5.4.12`,distinguishedName:`2.5.4.49`,emailAddress:`1.2.840.113549.1.9.1`,description:`2.5.4.13`,businessCategory:`2.5.4.15`,postalCode:`2.5.4.17`,uniqueIdentifier:`2.5.4.45`,organizationIdentifier:`2.5.4.97`,jurisdictionOfIncorporationL:`1.3.6.1.4.1.311.60.2.1.1`,jurisdictionOfIncorporationSP:`1.3.6.1.4.1.311.60.2.1.2`,jurisdictionOfIncorporationC:`1.3.6.1.4.1.311.60.2.1.3`,subjectDirectoryAttributes:`2.5.29.9`,subjectKeyIdentifier:`2.5.29.14`,keyUsage:`2.5.29.15`,subjectAltName:`2.5.29.17`,issuerAltName:`2.5.29.18`,basicConstraints:`2.5.29.19`,cRLNumber:`2.5.29.20`,cRLReason:`2.5.29.21`,nameConstraints:`2.5.29.30`,cRLDistributionPoints:`2.5.29.31`,certificatePolicies:`2.5.29.32`,anyPolicy:`2.5.29.32.0`,authorityKeyIdentifier:`2.5.29.35`,policyConstraints:`2.5.29.36`,extKeyUsage:`2.5.29.37`,authorityInfoAccess:`1.3.6.1.5.5.7.1.1`,ocsp:`1.3.6.1.5.5.7.48.1`,ocspBasic:`1.3.6.1.5.5.7.48.1.1`,ocspNonce:`1.3.6.1.5.5.7.48.1.2`,ocspNoCheck:`1.3.6.1.5.5.7.48.1.5`,caIssuers:`1.3.6.1.5.5.7.48.2`,anyExtendedKeyUsage:`2.5.29.37.0`,serverAuth:`1.3.6.1.5.5.7.3.1`,clientAuth:`1.3.6.1.5.5.7.3.2`,codeSigning:`1.3.6.1.5.5.7.3.3`,emailProtection:`1.3.6.1.5.5.7.3.4`,timeStamping:`1.3.6.1.5.5.7.3.8`,ocspSigning:`1.3.6.1.5.5.7.3.9`,dateOfBirth:`1.3.6.1.5.5.7.9.1`,placeOfBirth:`1.3.6.1.5.5.7.9.2`,gender:`1.3.6.1.5.5.7.9.3`,countryOfCitizenship:`1.3.6.1.5.5.7.9.4`,countryOfResidence:`1.3.6.1.5.5.7.9.5`,ecPublicKey:`1.2.840.10045.2.1`,"P-256":`1.2.840.10045.3.1.7`,secp256r1:`1.2.840.10045.3.1.7`,secp256k1:`1.3.132.0.10`,secp384r1:`1.3.132.0.34`,pkcs5PBES2:`1.2.840.113549.1.5.13`,pkcs5PBKDF2:`1.2.840.113549.1.5.12`,"des-EDE3-CBC":`1.2.840.113549.3.7`,data:`1.2.840.113549.1.7.1`,"signed-data":`1.2.840.113549.1.7.2`,"enveloped-data":`1.2.840.113549.1.7.3`,"digested-data":`1.2.840.113549.1.7.5`,"encrypted-data":`1.2.840.113549.1.7.6`,"authenticated-data":`1.2.840.113549.1.9.16.1.2`,tstinfo:`1.2.840.113549.1.9.16.1.4`,signingCertificate:`1.2.840.113549.1.9.16.2.12`,timeStampToken:`1.2.840.113549.1.9.16.2.14`,signaturePolicyIdentifier:`1.2.840.113549.1.9.16.2.15`,etsArchiveTimeStamp:`1.2.840.113549.1.9.16.2.27`,signingCertificateV2:`1.2.840.113549.1.9.16.2.47`,etsArchiveTimeStampV2:`1.2.840.113549.1.9.16.2.48`,extensionRequest:`1.2.840.113549.1.9.14`,contentType:`1.2.840.113549.1.9.3`,messageDigest:`1.2.840.113549.1.9.4`,signingTime:`1.2.840.113549.1.9.5`,counterSignature:`1.2.840.113549.1.9.6`,archiveTimeStampV3:`0.4.0.1733.2.4`,pdfRevocationInfoArchival:`1.2.840.113583.1.1.8`,adobeTimeStamp:`1.2.840.113583.1.1.9.1`},this.objCache={},this.name2obj=function(e){if(this.objCache[e]!==void 0)return this.objCache[e];if(this.name2oidList[e]===void 0)throw`Name of ObjectIdentifier not defined: `+e;var t=this.name2oidList[e],n=new Y.asn1.DERObjectIdentifier({oid:t});return this.objCache[e]=n,n},this.atype2obj=function(e){if(this.objCache[e]!==void 0)return this.objCache[e];var t;if(e.match(/^\d+\.\d+\.[0-9.]+$/))t=e;else if(this.atype2oidList[e]!==void 0)t=this.atype2oidList[e];else if(this.name2oidList[e]!==void 0)t=this.name2oidList[e];else throw`AttributeType name undefined: `+e;var n=new Y.asn1.DERObjectIdentifier({oid:t});return this.objCache[e]=n,n}},Y.asn1.x509.OID.oid2name=function(e){var t=Y.asn1.x509.OID.name2oidList;for(var n in t)if(t[n]==e)return n;return``},Y.asn1.x509.OID.oid2atype=function(e){var t=Y.asn1.x509.OID.atype2oidList;for(var n in t)if(t[n]==e)return n;return e},Y.asn1.x509.OID.name2oid=function(e){if(e.match(/^[0-9.]+$/))return e;var t=Y.asn1.x509.OID.name2oidList;return t[e]===void 0?``:t[e]},eO.getPosArrayOfChildrenFromHex=function(e){return Q.getChildIdx(e,0)},eO.getHexValueArrayOfChildrenFromHex=function(e){var t=Q.getV,n=eO.getPosArrayOfChildrenFromHex(e),r=t(e,n[0]),i=t(e,n[1]),a=t(e,n[2]),o=t(e,n[3]),s=t(e,n[4]),c=t(e,n[5]),l=t(e,n[6]),u=t(e,n[7]),d=t(e,n[8]),n=[];return n.push(r,i,a,o,s,c,l,u,d),n},eO.prototype.readPrivateKeyFromPEMString=function(e){var t=SO(e),n=eO.getHexValueArrayOfChildrenFromHex(t);this.setPrivateEx(n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8])},eO.prototype.readPKCS5PrvKeyHex=function(e){var t=eO.getHexValueArrayOfChildrenFromHex(e);this.setPrivateEx(t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8])},eO.prototype.readPKCS8PrvKeyHex=function(e){var t,n,r,i,a,o,s,c,l=Q,u=l.getVbyListEx;if(l.isASN1HEX(e)===!1)throw Error(`not ASN.1 hex string`);try{t=u(e,0,[2,0,1],`02`),n=u(e,0,[2,0,2],`02`),r=u(e,0,[2,0,3],`02`),i=u(e,0,[2,0,4],`02`),a=u(e,0,[2,0,5],`02`),o=u(e,0,[2,0,6],`02`),s=u(e,0,[2,0,7],`02`),c=u(e,0,[2,0,8],`02`)}catch(e){throw Error(`malformed PKCS#8 plain RSA private key`)}this.setPrivateEx(t,n,r,i,a,o,s,c)},eO.prototype.readPKCS5PubKeyHex=function(e){var t=Q,n=t.getV;if(t.isASN1HEX(e)===!1)throw Error(`keyHex is not ASN.1 hex string`);var r=t.getChildIdx(e,0);if(r.length!==2||e.substr(r[0],2)!==`02`||e.substr(r[1],2)!==`02`)throw Error(`wrong hex for PKCS#5 public key`);var i=n(e,r[0]),a=n(e,r[1]);this.setPublic(i,a)},eO.prototype.readPKCS8PubKeyHex=function(e){var t=Q;if(t.isASN1HEX(e)===!1)throw Error(`not ASN.1 hex string`);if(t.getTLVbyListEx(e,0,[0,0])!==`06092a864886f70d010101`)throw Error(`not PKCS8 RSA public key`);var n=t.getTLVbyListEx(e,0,[1,0]);this.readPKCS5PubKeyHex(n)},eO.prototype.readCertPubKeyHex=function(e,t){var n=new PO,r;n.readCertHex(e),r=n.getPublicKeyHex(),this.readPKCS8PubKeyHex(r)};function NO(e){for(var t in Y.crypto.Util.DIGESTINFOHEAD){var n=Y.crypto.Util.DIGESTINFOHEAD[t],r=n.length;if(e.substring(0,r)==n)return[t,e.substring(r)]}return[]}eO.prototype.verify=function(e,t){if(t=t.toLowerCase(),t.match(/^[0-9a-f]+$/)==null)return!1;var n=XD(t,16),r=this.n.bitLength();if(n.bitLength()>r)return!1;var i=this.doPublic(n).toString(16);if(i.length+3!=r/4)return!1;var a=NO(i.replace(/^1f+00/,``));if(a.length==0)return!1;var o=a[0];return a[1]==function(e){return Y.crypto.Util.hashString(e,o)}(e)},eO.prototype.verifyWithMessageHash=function(e,t){if(t.length!=Math.ceil(this.n.bitLength()/4))return!1;var n=XD(t,16);if(n.bitLength()>this.n.bitLength())return 0;var r=NO(this.doPublic(n).toString(16).replace(/^1f+00/,``));return r.length==0?!1:(r[0],r[1]==e)},eO.prototype.verifyPSS=function(e,t,n,r){var i=function(e){return Y.crypto.Util.hashHex(e,n)}(_O(e));return r===void 0&&(r=-1),this.verifyWithMessageHashPSS(i,t,n,r)},eO.prototype.verifyWithMessageHashPSS=function(e,t,n,r){if(t.length!=Math.ceil(this.n.bitLength()/4))return!1;var i=new Z(t,16),a=function(e){return Y.crypto.Util.hashHex(e,n)},o=gO(e),s=o.length,c=this.n.bitLength()-1,l=Math.ceil(c/8),u;if(r===-1||r===void 0)r=s;else if(r===-2)r=l-s-2;else if(r<-2)throw Error(`invalid salt length`);if(l<s+r+2)throw Error(`data too long`);var d=this.doPublic(i).toByteArray();for(u=0;u<d.length;u+=1)d[u]&=255;for(;d.length<l;)d.unshift(0);if(d[l-1]!==188)throw Error(`encoded message does not end in 0xbc`);d=String.fromCharCode.apply(String,d);var f=d.substr(0,l-s-1),p=d.substr(f.length,s),m=65280>>8*l-c&255;if((f.charCodeAt(0)&m)!==0)throw Error(`bits beyond keysize not zero`);var h=pss_mgf1_str(p,f.length,a),g=[];for(u=0;u<f.length;u+=1)g[u]=f.charCodeAt(u)^h.charCodeAt(u);g[0]&=~m;var _=l-s-r-2;for(u=0;u<_;u+=1)if(g[u]!==0)throw Error(`leftmost octets not zero`);if(g[_]!==1)throw Error(`0x01 marker not found`);return p===gO(a(_O(`\0\0\0\0\0\0\0\0`+o+String.fromCharCode.apply(String,g.slice(-r)))))},eO.SALT_LEN_HLEN=-1,eO.SALT_LEN_MAX=-2,eO.SALT_LEN_RECOVER=-2;function PO(e){var t=Q,n=t.getChildIdx,r=t.getV,i=t.getTLV,a=t.getVbyList,o=t.getVbyListEx,s=t.getTLVbyList,c=t.getTLVbyListEx,l=t.getIdxbyList,u=t.getIdxbyListEx,d=t.getVidx,f=t.getInt,p=t.oidname,m=t.hextooidstr,h=SO,g;try{g=Y.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV}catch(e){}this.HEX2STAG={"0c":`utf8`,13:`prn`,16:`ia5`,"1a":`vis`,"1e":`bmp`},this.hex=null,this.version=0,this.foffset=0,this.aExtInfo=null,this.getVersion=function(){if(this.hex===null||this.version!==0)return this.version;var e=s(this.hex,0,[0,0]);if(e.substr(0,2)==`a0`){var t=f(s(e,0,[0]),0);if(t<0||2<t)throw Error(`malformed version field`);return this.version=t+1,this.version}else return this.version=1,this.foffset=-1,1},this.getSerialNumberHex=function(){return o(this.hex,0,[0,0],`02`)},this.getSignatureAlgorithmField=function(){var e=c(this.hex,0,[0,1]);return this.getAlgorithmIdentifierName(e)},this.getAlgorithmIdentifierName=function(e){for(var t in g)if(e===g[t])return t;return p(o(e,0,[0],`06`))},this.getIssuer=function(){return this.getX500Name(this.getIssuerHex())},this.getIssuerHex=function(){return s(this.hex,0,[0,3+this.foffset],`30`)},this.getIssuerString=function(){return this.getIssuer().str},this.getSubject=function(){return this.getX500Name(this.getSubjectHex())},this.getSubjectHex=function(){return s(this.hex,0,[0,5+this.foffset],`30`)},this.getSubjectString=function(){return this.getSubject().str},this.getNotBefore=function(){var e=a(this.hex,0,[0,4+this.foffset,0]);return e=e.replace(/(..)/g,`%$1`),e=decodeURIComponent(e),e},this.getNotAfter=function(){var e=a(this.hex,0,[0,4+this.foffset,1]);return e=e.replace(/(..)/g,`%$1`),e=decodeURIComponent(e),e},this.getPublicKeyHex=function(){return t.getTLVbyList(this.hex,0,[0,6+this.foffset],`30`)},this.getPublicKeyIdx=function(){return l(this.hex,0,[0,6+this.foffset],`30`)},this.getPublicKeyContentIdx=function(){var e=this.getPublicKeyIdx();return l(this.hex,e,[1,0],`30`)},this.getPublicKey=function(){return MO.getKey(this.getPublicKeyHex(),null,`pkcs8pub`)},this.getSignatureAlgorithmName=function(){var e=s(this.hex,0,[1],`30`);return this.getAlgorithmIdentifierName(e)},this.getSignatureValueHex=function(){return a(this.hex,0,[2],`03`,!0)},this.verifySignature=function(e){var t=this.getSignatureAlgorithmField(),n=this.getSignatureValueHex(),r=s(this.hex,0,[0],`30`),i=new Y.crypto.Signature({alg:t});return i.init(e),i.updateHex(r),i.verify(n)},this.parseExt=function(e){var i,o,s;if(e===void 0){if(s=this.hex,this.version!==3)return-1;i=l(s,0,[0,7,0],`30`),o=n(s,i)}else{s=SO(e);var c=l(s,0,[0,3,0,0],`06`);if(r(s,c)!=`2a864886f70d01090e`){this.aExtInfo=[];return}i=l(s,0,[0,3,0,1,0],`30`),o=n(s,i),this.hex=s}this.aExtInfo=[];for(var u=0;u<o.length;u++){var f={};f.critical=!1;var p=n(s,o[u]),m=0;p.length===3&&(f.critical=!0,m=1),f.oid=t.hextooidstr(a(s,o[u],[0],`06`));var h=l(s,o[u],[1+m]);f.vidx=d(s,h),this.aExtInfo.push(f)}},this.getExtInfo=function(e){var t=this.aExtInfo,n=e;if(e.match(/^[0-9.]+$/)||(n=Y.asn1.x509.OID.name2oid(e)),n!==``){for(var r=0;r<t.length;r++)if(t[r].oid===n)return t[r]}},this.getExtBasicConstraints=function(e,t){if(e===void 0&&t===void 0){var n=this.getExtInfo(`basicConstraints`);if(n===void 0)return;e=i(this.hex,n.vidx),t=n.critical}var a={extname:`basicConstraints`};if(t&&(a.critical=!0),e===`3000`)return a;if(e===`30030101ff`)return a.cA=!0,a;if(e.substr(0,12)===`30060101ff02`){var o=r(e,10),s=parseInt(o,16);return a.cA=!0,a.pathLen=s,a}throw Error(`hExtV parse error: `+e)},this.getExtKeyUsage=function(e,t){if(e===void 0&&t===void 0){var n=this.getExtInfo(`keyUsage`);if(n===void 0)return;e=i(this.hex,n.vidx),t=n.critical}var r={extname:`keyUsage`};return t&&(r.critical=!0),r.names=this.getExtKeyUsageString(e).split(`,`),r},this.getExtKeyUsageBin=function(e){if(e===void 0){var t=this.getExtInfo(`keyUsage`);if(t===void 0)return``;e=i(this.hex,t.vidx)}if(e.length!=8&&e.length!=10)throw Error(`malformed key usage value: `+e);var n=`000000000000000`+parseInt(e.substr(6),16).toString(2);return e.length==8&&(n=n.slice(-8)),e.length==10&&(n=n.slice(-16)),n=n.replace(/0+$/,``),n==``&&(n=`0`),n},this.getExtKeyUsageString=function(e){for(var t=this.getExtKeyUsageBin(e),n=[],r=0;r<t.length;r++)t.substr(r,1)==`1`&&n.push(PO.KEYUSAGE_NAME[r]);return n.join(`,`)},this.getExtSubjectKeyIdentifier=function(e,t){if(e===void 0&&t===void 0){var n=this.getExtInfo(`subjectKeyIdentifier`);if(n===void 0)return;e=i(this.hex,n.vidx),t=n.critical}var a={extname:`subjectKeyIdentifier`};return t&&(a.critical=!0),a.kid={hex:r(e,0)},a},this.getExtAuthorityKeyIdentifier=function(e,t){if(e===void 0&&t===void 0){var a=this.getExtInfo(`authorityKeyIdentifier`);if(a===void 0)return;e=i(this.hex,a.vidx),t=a.critical}var o={extname:`authorityKeyIdentifier`};t&&(o.critical=!0);for(var s=n(e,0),c=0;c<s.length;c++){var l=e.substr(s[c],2);if(l===`80`&&(o.kid={hex:r(e,s[c])}),l===`a1`){var u=i(e,s[c]);o.issuer=this.getGeneralNames(u)[0].dn}l===`82`&&(o.sn={hex:r(e,s[c])})}return o},this.getExtExtKeyUsage=function(e,t){if(e===void 0&&t===void 0){var a=this.getExtInfo(`extKeyUsage`);if(a===void 0)return;e=i(this.hex,a.vidx),t=a.critical}var o={extname:`extKeyUsage`,array:[]};t&&(o.critical=!0);for(var s=n(e,0),c=0;c<s.length;c++)o.array.push(p(r(e,s[c])));return o},this.getExtExtKeyUsageName=function(){var e=this.getExtInfo(`extKeyUsage`);if(e===void 0)return e;var t=[],a=i(this.hex,e.vidx);if(a===``)return t;for(var o=n(a,0),s=0;s<o.length;s++)t.push(p(r(a,o[s])));return t},this.getExtSubjectAltName=function(e,t){if(e===void 0&&t===void 0){var n=this.getExtInfo(`subjectAltName`);if(n===void 0)return;e=i(this.hex,n.vidx),t=n.critical}var r={extname:`subjectAltName`,array:[]};return t&&(r.critical=!0),r.array=this.getGeneralNames(e),r},this.getExtIssuerAltName=function(e,t){if(e===void 0&&t===void 0){var n=this.getExtInfo(`issuerAltName`);if(n===void 0)return;e=i(this.hex,n.vidx),t=n.critical}var r={extname:`issuerAltName`,array:[]};return t&&(r.critical=!0),r.array=this.getGeneralNames(e),r},this.getGeneralNames=function(e){for(var t=n(e,0),r=[],a=0;a<t.length;a++){var o=this.getGeneralName(i(e,t[a]));o!==void 0&&r.push(o)}return r},this.getGeneralName=function(e){var t=e.substr(0,2),n=r(e,0),i=gO(n);if(t==`81`)return{rfc822:i};if(t==`82`)return{dns:i};if(t==`86`)return{uri:i};if(t==`87`)return{ip:TO(n)};if(t==`a4`)return{dn:this.getX500Name(n)}},this.getExtSubjectAltName2=function(){var e,t,a,o=this.getExtInfo(`subjectAltName`);if(o===void 0)return o;for(var s=[],c=i(this.hex,o.vidx),l=n(c,0),u=0;u<l.length;u++)a=c.substr(l[u],2),e=r(c,l[u]),a===`81`&&(t=hO(e),s.push([`MAIL`,t])),a===`82`&&(t=hO(e),s.push([`DNS`,t])),a===`84`&&(t=PO.hex2dn(e,0),s.push([`DN`,t])),a===`86`&&(t=hO(e),s.push([`URI`,t])),a===`87`&&(t=TO(e),s.push([`IP`,t]));return s},this.getExtCRLDistributionPoints=function(e,t){if(e===void 0&&t===void 0){var r=this.getExtInfo(`cRLDistributionPoints`);if(r===void 0)return;e=i(this.hex,r.vidx),t=r.critical}var a={extname:`cRLDistributionPoints`,array:[]};t&&(a.critical=!0);for(var o=n(e,0),s=0;s<o.length;s++){var c=i(e,o[s]);a.array.push(this.getDistributionPoint(c))}return a},this.getDistributionPoint=function(e){for(var t={},r=n(e,0),a=0;a<r.length;a++){var o=e.substr(r[a],2),s=i(e,r[a]);o==`a0`&&(t.dpname=this.getDistributionPointName(s))}return t},this.getDistributionPointName=function(e){for(var t={},r=n(e,0),a=0;a<r.length;a++){var o=e.substr(r[a],2),s=i(e,r[a]);o==`a0`&&(t.full=this.getGeneralNames(s))}return t},this.getExtCRLDistributionPointsURI=function(){var e=this.getExtInfo(`cRLDistributionPoints`);if(e===void 0)return e;for(var t=[],r=n(this.hex,e.vidx),i=0;i<r.length;i++)try{var o=hO(a(this.hex,r[i],[0,0,0],`86`));t.push(o)}catch(e){}return t},this.getExtAIAInfo=function(){var e=this.getExtInfo(`authorityInfoAccess`);if(e===void 0)return e;for(var t={ocsp:[],caissuer:[]},r=n(this.hex,e.vidx),i=0;i<r.length;i++){var o=a(this.hex,r[i],[0],`06`),s=a(this.hex,r[i],[1],`86`);o===`2b06010505073001`&&t.ocsp.push(hO(s)),o===`2b06010505073002`&&t.caissuer.push(hO(s))}return t},this.getExtAuthorityInfoAccess=function(e,t){if(e===void 0&&t===void 0){var r=this.getExtInfo(`authorityInfoAccess`);if(r===void 0)return;e=i(this.hex,r.vidx),t=r.critical}var s={extname:`authorityInfoAccess`,array:[]};t&&(s.critical=!0);for(var c=n(e,0),l=0;l<c.length;l++){var u=o(e,c[l],[0],`06`),d=hO(a(e,c[l],[1],`86`));if(u==`2b06010505073001`)s.array.push({ocsp:d});else if(u==`2b06010505073002`)s.array.push({caissuer:d});else throw Error(`unknown method: `+u)}return s},this.getExtCertificatePolicies=function(e,t){if(e===void 0&&t===void 0){var r=this.getExtInfo(`certificatePolicies`);if(r===void 0)return;e=i(this.hex,r.vidx),t=r.critical}var a={extname:`certificatePolicies`,array:[]};t&&(a.critical=!0);for(var o=n(e,0),s=0;s<o.length;s++){var c=i(e,o[s]),l=this.getPolicyInformation(c);a.array.push(l)}return a},this.getPolicyInformation=function(e){var t={};t.policyoid=p(a(e,0,[0],`06`));var r=u(e,0,[1],`30`);if(r!=-1){t.array=[];for(var o=n(e,r),s=0;s<o.length;s++){var c=i(e,o[s]),l=this.getPolicyQualifierInfo(c);t.array.push(l)}}return t},this.getPolicyQualifierInfo=function(e){var t={},n=a(e,0,[0],`06`);if(n===`2b06010505070201`)t.cps=gO(o(e,0,[1],`16`));else if(n===`2b06010505070202`){var r=s(e,0,[1],`30`);t.unotice=this.getUserNotice(r)}return t},this.getUserNotice=function(e){for(var t={},r=n(e,0),a=0;a<r.length;a++){var o=i(e,r[a]);o.substr(0,2)!=`30`&&(t.exptext=this.getDisplayText(o))}return t},this.getDisplayText=function(e){var t={"0c":`utf8`,16:`ia5`,"1a":`vis`,"1e":`bmp`},n={};return n.type=t[e.substr(0,2)],n.str=gO(r(e,0)),n},this.getExtCRLNumber=function(e,t){var n={extname:`cRLNumber`};if(t&&(n.critical=!0),e.substr(0,2)==`02`)return n.num={hex:r(e,0)},n;throw Error(`hExtV parse error: `+e)},this.getExtCRLReason=function(e,t){var n={extname:`cRLReason`};if(t&&(n.critical=!0),e.substr(0,2)==`0a`)return n.code=parseInt(r(e,0),16),n;throw Error(`hExtV parse error: `+e)},this.getExtOcspNonce=function(e,t){var n={extname:`ocspNonce`};return t&&(n.critical=!0),n.hex=r(e,0),n},this.getExtOcspNoCheck=function(e,t){var n={extname:`ocspNoCheck`};return t&&(n.critical=!0),n},this.getExtAdobeTimeStamp=function(e,t){if(e===void 0&&t===void 0){var r=this.getExtInfo(`adobeTimeStamp`);if(r===void 0)return;e=i(this.hex,r.vidx),t=r.critical}var a={extname:`adobeTimeStamp`};t&&(a.critical=!0);var o=n(e,0);if(o.length>1){var s=i(e,o[1]),c=this.getGeneralName(s);c.uri!=null&&(a.uri=c.uri)}if(o.length>2){var l=i(e,o[2]);l==`0101ff`&&(a.reqauth=!0),l==`010100`&&(a.reqauth=!1)}return a},this.getX500NameRule=function(e){for(var t=null,n=[],r=0;r<e.length;r++)for(var i=e[r],a=0;a<i.length;a++)n.push(i[a]);for(var r=0;r<n.length;r++){var o=n[r],s=o.ds,c=o.value,l=o.type;if(s!=`prn`&&s!=`utf8`&&s!=`ia5`)return`mixed`;if(s==`ia5`){if(l!=`CN`)return`mixed`;if(Y.lang.String.isMail(c))continue;return`mixed`}if(l==`C`){if(s==`prn`)continue;return`mixed`}if(t==null)t=s;else if(t!==s)return`mixed`}return t==null?`prn`:t},this.getX500Name=function(e){var t=this.getX500NameArray(e);return{array:t,str:this.dnarraytostr(t)}},this.getX500NameArray=function(e){for(var t=[],r=n(e,0),a=0;a<r.length;a++)t.push(this.getRDN(i(e,r[a])));return t},this.getRDN=function(e){for(var t=[],r=n(e,0),a=0;a<r.length;a++)t.push(this.getAttrTypeAndValue(i(e,r[a])));return t},this.getAttrTypeAndValue=function(e){var t={type:null,value:null,ds:null},r=n(e,0),i=a(e,r[0],[],`06`),o=a(e,r[1],[]),s=Y.asn1.ASN1Util.oidHexToInt(i);return t.type=Y.asn1.x509.OID.oid2atype(s),t.ds=this.HEX2STAG[e.substr(r[1],2)],t.ds==`bmp`?t.value=EO(o):t.value=hO(o),t},this.readCertPEM=function(e){this.readCertHex(h(e))},this.readCertHex=function(e){this.hex=e,this.getVersion();try{l(this.hex,0,[0,7],`a3`),this.parseExt()}catch(e){}},this.getParam=function(){var e={};return e.version=this.getVersion(),e.serial={hex:this.getSerialNumberHex()},e.sigalg=this.getSignatureAlgorithmField(),e.issuer=this.getIssuer(),e.notbefore=this.getNotBefore(),e.notafter=this.getNotAfter(),e.subject=this.getSubject(),e.sbjpubkey=xO(this.getPublicKeyHex(),`PUBLIC KEY`),this.aExtInfo.length>0&&(e.ext=this.getExtParamArray()),e.sighex=this.getSignatureValueHex(),e},this.getExtParamArray=function(e){e==null&&u(this.hex,0,[0,`[3]`])!=-1&&(e=c(this.hex,0,[0,`[3]`,0],`30`));for(var t=[],r=n(e,0),a=0;a<r.length;a++){var o=i(e,r[a]),s=this.getExtParam(o);s!=null&&t.push(s)}return t},this.getExtParam=function(e){var t=n(e,0).length;if(t!=2&&t!=3)throw Error(`wrong number elements in Extension: `+t+` `+e);var r=m(a(e,0,[0],`06`)),i=!1;t==3&&s(e,0,[1])==`0101ff`&&(i=!0);var o=s(e,0,[t-1,0]),c=void 0;if(r==`2.5.29.14`?c=this.getExtSubjectKeyIdentifier(o,i):r==`2.5.29.15`?c=this.getExtKeyUsage(o,i):r==`2.5.29.17`?c=this.getExtSubjectAltName(o,i):r==`2.5.29.18`?c=this.getExtIssuerAltName(o,i):r==`2.5.29.19`?c=this.getExtBasicConstraints(o,i):r==`2.5.29.31`?c=this.getExtCRLDistributionPoints(o,i):r==`2.5.29.32`?c=this.getExtCertificatePolicies(o,i):r==`2.5.29.35`?c=this.getExtAuthorityKeyIdentifier(o,i):r==`2.5.29.37`?c=this.getExtExtKeyUsage(o,i):r==`1.3.6.1.5.5.7.1.1`?c=this.getExtAuthorityInfoAccess(o,i):r==`2.5.29.20`?c=this.getExtCRLNumber(o,i):r==`2.5.29.21`?c=this.getExtCRLReason(o,i):r==`1.3.6.1.5.5.7.48.1.2`?c=this.getExtOcspNonce(o,i):r==`1.3.6.1.5.5.7.48.1.5`?c=this.getExtOcspNoCheck(o,i):r==`1.2.840.113583.1.1.9.1`&&(c=this.getExtAdobeTimeStamp(o,i)),c!=null)return c;var l={extname:r,extn:o};return i&&(l.critical=!0),l},this.findExt=function(e,t){for(var n=0;n<e.length;n++)if(e[n].extname==t)return e[n];return null},this.dnarraytostr=function(e){function t(e){return e.map(function(e){return n(e).replace(/\+/,`\\+`)}).join(`+`)}function n(e){return e.type+`=`+e.value}return`/`+e.map(function(e){return t(e).replace(/\//,`\\/`)}).join(`/`)},this.getInfo=function(){var e=function(e){return JSON.stringify(e.array).replace(/[\[\]\{\}\"]/g,``)},t=function(e){for(var t=``,n=e.array,r=0;r<n.length;r++){var i=n[r];if(t+=` policy oid: `+i.policyoid+`
736
+ `,i.array!==void 0)for(var a=0;a<i.array.length;a++){var o=i.array[a];o.cps!==void 0&&(t+=` cps: `+o.cps+`
737
+ `)}}return t},n=function(e){for(var t=``,n=e.array,r=0;r<n.length;r++){var i=n[r];try{i.dpname.full[0].uri!==void 0&&(t+=` `+i.dpname.full[0].uri+`
738
+ `)}catch(e){}try{i.dname.full[0].dn.hex!==void 0&&(t+=` `+PO.hex2dn(i.dpname.full[0].dn.hex)+`
739
+ `)}catch(e){}}return t},r=function(e){for(var t=``,n=e.array,r=0;r<n.length;r++){var i=n[r];i.caissuer!==void 0&&(t+=` caissuer: `+i.caissuer+`
740
+ `),i.ocsp!==void 0&&(t+=` ocsp: `+i.ocsp+`
741
+ `)}return t},i=`Basic Fields
742
+ `,a,o;if(i+=` serial number: `+this.getSerialNumberHex()+`
743
+ `,i+=` signature algorithm: `+this.getSignatureAlgorithmField()+`
744
+ `,i+=` issuer: `+this.getIssuerString()+`
745
+ `,i+=` notBefore: `+this.getNotBefore()+`
746
+ `,i+=` notAfter: `+this.getNotAfter()+`
747
+ `,i+=` subject: `+this.getSubjectString()+`
748
+ `,i+=` subject public key info:
749
+ `,a=this.getPublicKey(),i+=` key algorithm: `+a.type+`
750
+ `,a.type===`RSA`&&(i+=` n=`+OO(a.n.toString(16)).substr(0,16)+`...
751
+ `,i+=` e=`+OO(a.e.toString(16))+`
752
+ `),o=this.aExtInfo,o!=null){i+=`X509v3 Extensions:
753
+ `;for(var s=0;s<o.length;s++){var c=o[s],l=Y.asn1.x509.OID.oid2name(c.oid);l===``&&(l=c.oid);var u=``;if(c.critical===!0&&(u=`CRITICAL`),i+=` `+l+` `+u+`:
754
+ `,l===`basicConstraints`){var d=this.getExtBasicConstraints();d.cA===void 0?i+=` {}
755
+ `:(i+=` cA=true`,d.pathLen!==void 0&&(i+=`, pathLen=`+d.pathLen),i+=`
756
+ `)}else if(l===`keyUsage`)i+=` `+this.getExtKeyUsageString()+`
757
+ `;else if(l===`subjectKeyIdentifier`)i+=` `+this.getExtSubjectKeyIdentifier().kid.hex+`
758
+ `;else if(l===`authorityKeyIdentifier`){var f=this.getExtAuthorityKeyIdentifier();f.kid!==void 0&&(i+=` kid=`+f.kid.hex+`
759
+ `)}else if(l===`extKeyUsage`){var p=this.getExtExtKeyUsage().array;i+=` `+p.join(`, `)+`
760
+ `}else if(l===`subjectAltName`){var m=e(this.getExtSubjectAltName());i+=` `+m+`
761
+ `}else if(l===`cRLDistributionPoints`){var h=this.getExtCRLDistributionPoints();i+=n(h)}else if(l===`authorityInfoAccess`){var g=this.getExtAuthorityInfoAccess();i+=r(g)}else l===`certificatePolicies`&&(i+=t(this.getExtCertificatePolicies()))}}return i+=`signature algorithm: `+this.getSignatureAlgorithmName()+`
762
+ `,i+=`signature: `+this.getSignatureValueHex().substr(0,16)+`...
763
+ `,i},typeof e==`string`&&(e.indexOf(`-----BEGIN`)==-1?Y.lang.String.isHex(e)&&this.readCertHex(e):this.readCertPEM(e))}PO.hex2dn=function(e,t){t===void 0&&(t=0);var n=new PO;return Q.getTLV(e,t),n.getX500Name(e).str},PO.hex2rdn=function(e,t){if(t===void 0&&(t=0),e.substr(t,2)!==`31`)throw Error(`malformed RDN`);for(var n=[],r=Q.getChildIdx(e,t),i=0;i<r.length;i++)n.push(PO.hex2attrTypeValue(e,r[i]));return n=n.map(function(e){return e.replace(`+`,`\\+`)}),n.join(`+`)},PO.hex2attrTypeValue=function(e,t){var n=Q,r=n.getV;if(t===void 0&&(t=0),e.substr(t,2)!==`30`)throw Error(`malformed attribute type and value`);var i=n.getChildIdx(e,t);i.length!==2||e.substr(i[0],2);var a=r(e,i[0]),o=Y.asn1.ASN1Util.oidHexToInt(a),s=Y.asn1.x509.OID.oid2atype(o),c=gO(r(e,i[1]));return s+`=`+c},PO.getPublicKeyFromCertHex=function(e){var t=new PO;return t.readCertHex(e),t.getPublicKey()},PO.getPublicKeyFromCertPEM=function(e){var t=new PO;return t.readCertPEM(e),t.getPublicKey()},PO.getPublicKeyInfoPropOfCertPEM=function(e){var t=Q.getVbyList,n={},r,i;return n.algparam=null,r=new PO,r.readCertPEM(e),i=r.getPublicKeyHex(),n.keyhex=t(i,0,[1],`03`).substr(2),n.algoid=t(i,0,[0,0],`06`),n.algoid===`2a8648ce3d0201`&&(n.algparam=t(i,0,[0,1],`06`)),n},PO.KEYUSAGE_NAME=[`digitalSignature`,`nonRepudiation`,`keyEncipherment`,`dataEncipherment`,`keyAgreement`,`keyCertSign`,`cRLSign`,`encipherOnly`,`decipherOnly`];function FO(){}var IO=Object.prototype.toString,LO=[`Boolean`,`Number`,`String`,`Function`,`Array`,`Date`,`RegExp`,`Object`,`Error`].reduce(function(e,t){return e[`[object ${t}]`]=t.toLowerCase(),e},{});function RO(e){if(e===null)return`null`;var t=GE(e);return t===`object`||t===`function`?LO[IO.call(e)]||`object`:t}function zO(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4,n=Math.pow(10,t);switch(RO(e)){case`number`:return Math.round(e*n)/n;case`array`:return e.map(function(e){return zO(e,t)});case`object`:return Object.keys(e).forEach(function(n){e[n]=zO(e[n],t)}),e;default:return e}}function BO(e,t){var n={};for(var r in e)(e.hasOwnProperty===void 0||e.hasOwnProperty(r))&&(n[r]=t(e[r],r,e));return n}function VO(){for(var e={},t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return n.forEach(function(t){return e[t]=t}),e}function HO(e){for(var t=arguments.length,n=1;n<t;){var r=arguments[n++]||{};for(var i in r)r.hasOwnProperty(i)&&(e[i]=r[i])}return e}function UO(e,t){for(var n=0,r=t.length;n<r;n++)if(e===t[n])return t.splice(n,1)[0]}function WO(){return((1+Math.random())*parseInt(`10000`,36)|0).toString(36).substring(1)}function GO(){for(var e=WO()+WO().substr(0,2)+Date.now().toString(36),t=e.length,n=``,r=Math.floor(Math.random()*Math.pow(2,t)),i=0;i<t;i++){var a=e[i];a>=`a`&&a<=`z`&&r>>i&1&&(a=a.toUpperCase()),n+=a}return`u-`+n}function KO(e,t){var n,r=-1/0,i=DE(e),a;try{for(i.s();!(a=i.n()).done;){var o=a.value,s=t(o);s>=r&&(n=o,r=s)}}catch(e){i.e(e)}finally{i.f()}return[n,r]}function qO(e,t){var n,r=1/0,i=DE(e),a;try{for(i.s();!(a=i.n()).done;){var o=a.value,s=t(o);s<=r&&(n=o,r=s)}}catch(e){i.e(e)}finally{i.f()}return[n,r]}function JO(e,t,n){var r=t.indexOf(e),i=r===0?t[t.length-1]:t[r-1];if(i===e)return null;if(n){var a=n(i);if(a===null)return null;if(a===!1)return JO(i,t,n)}return i}function YO(e,t,n){if(!(t.length<=1)){var r=t.indexOf(e),i=r===t.length-1?t[0]:t[r+1];if(i===e)return null;if(n){var a=n(i);if(a===null)return null;if(a===!1)return YO(i,t,n)}return i}}function XO(e,t){var n=/{{([\s\S]+?)}}/g,r=Object.keys(t),i=r.map(function(e){return t[e]});return e.replace(n,function(e,t){return wE(Function,HE(r.concat(`return `+t))).apply(void 0,HE(i))})}function ZO(e,t){return e.x===t.x&&e.y===t.y?!0:$(e,t)<1}function $(e,t){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function QO(e,t){var n=zE([Math.atan(e),Math.atan(t)].sort(function(e,t){return e-t}),2),r=n[0],i=n[1];return Math.min(i-r,Math.PI-i+r)<.01}function $O(e,t){var n=(t.y-e.y)/(t.x-e.x);return isNaN(n)&&(n=0),n}function ek(e,t){var n=e.x-t[0].x,r=e.y-t[0].y,i=t[1].x-t[0].x,a=t[1].y-t[0].y,o=(n*i+r*a)/(i*i+a*a),s,c;return o<0||ZO(t[0],t[1])?(s=t[0].x,c=t[0].y):o>1?(s=t[1].x,c=t[1].y):(s=t[0].x+o*i,c=t[0].y+o*a),{x:s,y:c}}function tk(e,t){var n=e.x-t[0].x,r=e.y-t[0].y,i=t[1].x-t[0].x,a=t[1].y-t[0].y,o=(n*i+r*a)/(i*i+a*a);return isNaN(o)?e:{x:t[0].x+o*i,y:t[0].y+o*a}}function nk(e,t){return $(e,ek(e,t))}function rk(e,t){var n=$O(t[1],t[0]),r,i;Math.abs(n)===1/0?(i=0,r=e):(i=Math.sqrt(e*e/(n*n+1)),r=i/-(1/n));var a=[[{x:t[0].x-r,y:t[0].y-i},{x:t[1].x-r,y:t[1].y-i}],[{x:t[0].x+r,y:t[0].y+i},{x:t[1].x+r,y:t[1].y+i}]];return t[1].x-t[0].x<0||(t[1].x-t[0].x>0||t[1].y-t[0].y<0)&&a.reverse(),a}function ik(e,t,n){var r=dk(t),i=$(t[0],r),a=Math.sqrt(n*n-i*i),o=isNaN(a)?r:rk(a,[r,t[0]])[n>0?0:1][0],s=(o.x-t[0].x)/n*e,c=(o.y-t[0].y)/n*e,l=(o.x-t[1].x)/n*e,u=(o.y-t[1].y)/n*e;return[[{x:t[0].x-s,y:t[0].y-c},{x:t[1].x-l,y:t[1].y-u}],[{x:t[0].x+s,y:t[0].y+c},{x:t[1].x+l,y:t[1].y+u}]]}function ak(e,t,n){if(ck(e[0],t))return e[0];if(ck(e[1],t))return e[1];if(ck(t[0],e))return t[0];if(ck(t[1],e))return t[1];var r=$O(e[1],e[0]),i=$O(t[1],t[0]);if(isNaN(r)||isNaN(i)||QO(r,i)||n&&!pk(e,t))return!1;var a=e[0],o=t[0];if(r>2e12&&(r=1/0),r<-2e12&&(r=-1/0),i>2e12&&(i=1/0),i<-2e12&&(i=-1/0),Math.abs(r)===1/0)return{x:a.x,y:t[1].y-(t[1].x-a.x)*i};if(Math.abs(i)===1/0)return{x:o.x,y:e[1].y-(e[1].x-o.x)*r};var s=(o.y-a.y+r*a.x-i*o.x)/(r-i);return{x:s,y:r*s-r*a.x+a.y}}function ok(e,t){var n=zE(e,2),r=n[0],i=n[1],a=zE(t,2),o=a[0],s=a[1],c=tk(o,[r,i]),l=$(c,o);return l>s?[]:rk(Math.sqrt(s*s-l*l),[c,o]).map(function(e){return e[0]})}function sk(e,t){var n=e[0].x,r=e[0].y,i=e[1],a=t[0].x,o=t[0].y,s=t[1],c,l=a-n,u=o-r,d=Math.sqrt(u*u+l*l),f,p,m,h,g;return d>i+s||d<Math.abs(i-s)?[]:(c=(i*i-s*s+d*d)/(2*d),h=n+l*c/d,g=r+u*c/d,f=Math.sqrt(i*i-c*c),p=-u*(f/d),m=f/d*l,[{x:h+p,y:g+m},{x:h-p,y:g-m}])}function ck(e,t){return ZO(e,t[0])||ZO(e,t[1])?!0:(t[0].x-e.x)*(e.x-t[1].x)>=0&&(t[0].y-e.y)*(e.y-t[1].y)>=0&&QO($O(t[0],e),$O(e,t[1]))}function lk(e,t,n,r){var i=e.x,a=e.y,o=t.x,s=t.y,c=n.x,l=n.y,u=r.x,d=r.y,f=(d-l)*(o-i)-(u-c)*(s-a);if(f===0)return null;var p=((u-c)*(a-l)-(d-l)*(i-c))/f,m=((o-i)*(a-l)-(s-a)*(i-c))/f;return p<0||p>1||m<0||m>1?null:{x:i+p*(o-i),y:a+p*(s-a)}}function uk(e,t,n){var r=$(e,t),i=Math.atan2(e.y-t.y,e.x-t.x);return i-=n,{x:t.x+Math.cos(i)*r,y:t.y+Math.sin(i)*r}}function dk(e){var t=1/0,n=-1/0,r=1/0,i=-1/0;return e.forEach(function(e){t=Math.min(t,e.x),n=Math.max(n,e.x),r=Math.min(r,e.y),i=Math.max(i,e.y)}),{x:(t+n)/2,y:(r+i)/2}}function fk(e,t,n){return(e.x-n.x)*(t.y-n.y)-(t.x-n.x)*(e.y-n.y)}function pk(e,t){return+(Math.max(e[0].x,e[1].x)>=Math.min(t[0].x,t[1].x)&&Math.max(t[0].x,t[1].x)>=Math.min(e[0].x,e[1].x)&&Math.max(e[0].y,e[1].y)>=Math.min(t[0].y,t[1].y)&&fk(t[0],e[1],e[0])*fk(e[1],t[1],e[0])>0&&fk(e[0],t[1],t[0])*fk(t[1],e[1],t[0])>0)}function mk(e,t){return e.x*t.y-e.y*t.x}function hk(e){var t=0;return(mk(e.reduce(function(e,n){return t+=mk(e,n),n}),e[0])+t)/2}function gk(e){function t(e,t){return e===0?t.length-1:e-1}function n(e,t){return e===t.length-1?0:e+1}var r=0;e.reduce(function(e,t,n){return e.x<t.x?e:(r=n,t)});var i=e[n(r,e)],a=e[t(r,e)];return Math.atan2(i.y-e[r].y,i.x-e[r].x)-Math.atan2(a.y-e[r].y,a.x-e[r].x)>=0}function _k(e){return e.slice(0,e.length).reduce(function(e,t,n,r){return e.concat([[t,r[n+1]]])},[]).slice(0,e.length-1)}function vk(e){var t=1/0,n=1/0,r=-1/0,i=-1/0,a=DE(e),o;try{for(a.s();!(o=a.n()).done;){var s=o.value;t=Math.min(t,s.x),n=Math.min(n,s.y),r=Math.max(r,s.x),i=Math.max(i,s.y)}}catch(e){a.e(e)}finally{a.f()}return{minX:t,minY:n,maxX:r,maxY:i}}function yk(e){for(var t=0,n=0;n<e.length;n++)t=t*31+Math.round(e[n].x)|0,t=t*17+Math.round(e[n].y)|0;return t}function bk(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];t.forEach(function(e,t){e&&(e.innerHTML=``)})}function xk(e,t){var n=document.createElement(`div`);n.innerHTML=`<svg>`+t+`</svg>`;var r=n.childNodes[0].childNodes;bk(e);for(var i=0,a=r.length;i<a;i++)e.appendChild(r[i])}var Sk=`http://www.w3.org/2000/svg`,Ck=`http://www.w3.org/1999/xlink`,wk={};function Tk(){for(var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:`svg`,t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];wk[e]||(wk[e]=document.createElementNS(Sk,e));var i=wk[e].cloneNode();for(var a in n=HO.apply(null,[{}].concat(n)),n){var o=n[a];switch(a){case`xlink:href`:i.setAttributeNS(Ck,`href`,o);break;case`className`:i.setAttribute(`class`,o);break;case`textContent`:i.textContent=o;break;case`appendTo`:o.appendChild(i);break;case`prependTo`:o.insertBefore(i,o.firstChild);break;case`insertBefore`:o.parentNode.insertBefore(i,o);break;case`innerSVG`:xk(i,o);break;default:o!==void 0&&i.setAttribute(a,o)}}return i}var Ek=null,Dk={};function Ok(e,t){if(!Ek){var n=Tk(`svg`,{type:`getFontSizeText`,style:`visible: hidden; width: 0px; height: 0px; position: absolute;`});document.getElementById(`app`).appendChild(n),Ek=Tk(`text`,{appendTo:n})}var r=`${t}:${e}`;if(Dk[r])return Dk[r];Ek.textContent=e,Ek.setAttribute(`font-size`,t);var i=Ek.getBBox();return Dk[r]={width:i.width,height:i.height}}HO(Tk,{getFontSize:Ok,svg:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return Tk.apply(void 0,[`svg`].concat(t))},g:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return Tk.apply(void 0,[`g`].concat(t))},path:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return Tk.apply(void 0,[`path`,{d:e}].concat(n))},circle:function(e,t,n){for(var r=arguments.length,i=Array(r>3?r-3:0),a=3;a<r;a++)i[a-3]=arguments[a];return Tk.apply(void 0,[`circle`,{cx:e,cy:t,r:n}].concat(i))},text:function(e,t,n){for(var r=arguments.length,i=Array(r>3?r-3:0),a=3;a<r;a++)i[a-3]=arguments[a];return Tk.apply(void 0,[`text`,{x:e,y:t,textContent:n}].concat(i))},rect:function(e,t,n,r){for(var i=arguments.length,a=Array(i>4?i-4:0),o=4;o<i;o++)a[o-4]=arguments[o];return Tk.apply(void 0,[`rect`,{x:e,y:t,width:n,height:r}].concat(a))},image:function(e,t,n,r,i){for(var a=arguments.length,o=Array(a>5?a-5:0),s=5;s<a;s++)o[s-5]=arguments[s];return Tk.apply(void 0,[`image`,{x:e,y:t,width:n,height:r,"xlink:href":i}].concat(o))}}),typeof navigator<`u`&&(navigator.userAgent.indexOf(`Macintosh`)>-1||navigator.userAgent.indexOf(`iPhone`)>-1||navigator.userAgent.indexOf(`iPad`));function kk(e){return e=Math.round((e%360+360)%360),e=e<=30?0:e<=59?45:e<=120?90:e<=149?135:e<=210?180:e<=239?225:e<=300?270:e<=329?315:0,e}var Ak=function(){function e(){CE(this,e),this._events={},this._emitHooks=[]}return EE(e,[{key:`on`,value:function(e,t,n){var r=this;[].concat(e).forEach(function(e){(r._events[e]=r._events[e]||[]).push([t,n])})}},{key:`off`,value:function(e,t){var n=this;if(e===void 0){this._events={};return}[].concat(e).forEach(function(e){if(n._events[e]){if(t===void 0){n._events[e].length=0;return}n._events[e]=n._events[e].filter(function(e){return e[0]!=t})}})}},{key:`emit`,value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];[this].concat(this._emitHooks).forEach(function(t){var r=DE(t._events[e]||[]),i;try{for(r.s();!(i=r.n()).done;){var a=i.value;a[0].apply(a[1],n)}}catch(e){r.e(e)}finally{r.f()}})}},{key:`emitHook`,value:function(e){this._emitHooks.push(e)}},{key:`emitUnhook`,value:function(e){this._emitHooks&&(this._emitHooks=this._emitHooks.filter(function(t){return t!=e}))}}])}(),jk=function(e){function t(){var e;return CE(this,t),e=SE(this,t),e.id=GO(),e}return jE(t,e),EE(t,[{key:`set`,value:function(e,t){var n=this.constructor.propTypes;if(n.hasOwnProperty(e)&&Mk(t,n[e])===!1)throw`${this.constructor.displayName}.${e} need a ${n[e]}, but it's a ${RO(t)}`;RO(t)===`number`?this[e]=zO(t):this[e]=t}}])}(Ak);jk.displayName=`Model`,jk.prototype.displayName=`Model`,jk.propTypes={};function Mk(e,t){return[].concat(t).some(function(t){return RO(e)===t})}VO(`x`,`y`,`locked`);function Nk(e,t){var n=Math.atan2(t,e)-Math.PI/2;return n<Math.PI&&(n+=Math.PI),n}var Pk=function(e){function t(){var e,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return CE(this,t),e=SE(this,t),e.x=n,e.y=r,e.locked=!1,e.lines=[],e.rules=`1111`,e}return jE(t,e),EE(t,[{key:`set`,value:function(e,n){VE(t,`set`,this)([e,n])}},{key:`sortLinesClickWise`,value:function(){var e=this;this.lines.sort(function(t,n){var r=t.points[0]==e?t.points[1]:t.points[0],i=n.points[0]==e?n.points[1]:n.points[0];return Nk(r.x-e.x,r.y-e.y)-Nk(i.x-e.x,i.y-e.y)})}},{key:`removeLine`,value:function(e){this.lines=this.lines.filter(function(t){return t!=e})}},{key:`distanceFromPoint`,value:function(e){return $(this,e)}},{key:`distanceFromLine`,value:function(e){return nk(this,e.points)}}])}(jk);Pk.displayName=`Point`,Pk.prototype.displayName=`Point`,Pk.propTypes={x:`number`,y:`number`,lines:`array`,locked:`boolean`,rules:`string`},Pk.storeTypes={x:`value`,y:`value`,lines:`idArray`,locked:`value`,rules:`value`};var Fk=function(e){function t(e,n){var r;return CE(this,t),r=SE(this,t),r.thickness=null,r.offset=null,r.points=[e,n],r.items=[],r.curve=0,r.type=0,r.edgeComputed=!1,r.offsetComputed=0,r.thicknessComputed=0,r.isLoadBearing=!1,r.height=2700,r}return jE(t,e),EE(t,[{key:`getThickness`,value:function(){return this.thicknessComputed||(this.edgeComputed?240:120)}},{key:`getOffset`,value:function(){return this.offsetComputed}},{key:`curveR`,value:function(){var e=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.length())/2,t=Math.max(Math.min(this.curve,e),-e);return Math.abs((e*e+t*t)/2/t)}},{key:`curveSize`,value:function(){var e=this.length()/2,t=Math.max(Math.min(this.curve,e),-e);return this.curve===0?0:Math.abs(t)*e*3/2}},{key:`curveCenterPoint`,value:function(){var e=dk(this.points);return this.curve?rk(Math.abs(this.curve),[e,this.points[1]])[this.curve>0?0:1][0]:e}},{key:`isEdge`,value:function(){return this.edgeComputed===!0}},{key:`isVisibleEdge`,value:function(){if(!this.canvas)return this.edgeComputed===!0;var e=this.canvas.areas.filter(function(e){return e.type===26||e.type===17});if(e.length===0)return this.edgeComputed===!0;var t=this.points[0],n=this.points[1],r=!1;return e.map(function(e){e.points.concat(e.points[0]).reduce(function(e,i){return(e===t&&i===n||e===n&&i===t)&&(r=!0),i})}),r?this.edgeComputed===!1:this.edgeComputed===!0}},{key:`edgeLine`,value:function(){var e=this.getThickness(),t=this.getOffset?this.getOffset():0,n=this.points,r=this.curve?this.curveR()*(this.curve>0?1:-1):!1,i=r?ik(e/2+t,n,r):rk(e/2+t,n),a=r?ik(e/2-t,n,r):rk(e/2-t,n);return[i[0],a[1]]}},{key:`edgePoints`,value:function(){var e=this,t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,n=this.isVisibleEdge(),r=this.getThickness()*4,i=new Map,a=function(e){var t=i.get(e);return t||(t=e.edgeLine(),i.set(e,t)),t},o=function(e){var t=dk(e.points);return rk(e.curveR()-Math.abs(e.curve),[t,e.points[1]])[+(e.curve>0)][0]},s=a(this).map(function(i,s){return e.points.map(function(c,l){var u=(s==l?YO:JO)(e,c.lines,function(r){return e===r?null:!(!r||t!==!0&&(e.type===3||r.type===3||n&&!r.isVisibleEdge()))});if(u){var d=u.points[0]===c?0:1;if(!e.curve&&u.curve){var f=o(u),p=a(u)[1^s^l^d],m=ok(i,[f,$(f,p[0])]);if(m.length){var h=zE(qO(m,function(e){return $(e,c)}),1)[0];if(h&&$(h,c)<r)return h}}else if(e.curve&&!u.curve){var g=o(e),_=a(u)[1^s^l^d],v=ok(_,[g,$(g,i[0])]);if(v.length){var y=zE(qO(v,function(e){return $(e,c)}),1)[0];if(y&&$(y,c)<r)return y}}else if(e.curve&&u.curve){var b=o(e),x=o(u),S=a(u)[1^s^l^d],C=$(b,i[0]),ee=$(x,S[0]),te=sk([b,C],[x,ee]);if(te.length){var ne=zE(qO(te,function(e){return $(e,c)}),1)[0];if(ne&&$(ne,c)<r)return ne}}else{var w=ak(i,a(u)[1^s^l^d]);if(w!=0&&$(w,c)<r)return w}}return i[l]})}),c=t||n?this.points:this.points.map(function(t){var n=JO(e,t.lines,function(t){return e===t?null:!t||!t.isVisibleEdge()?!1:t}),r=YO(e,t.lines,function(t){return e===t?null:!t||!t.isVisibleEdge()?!1:t});if(n&&r&&n!==r){var i=ak(a(n)[0^n.points.indexOf(t)],a(r)[1^r.points.indexOf(t)]);if(i)return i}return t}),l=[s[0][0],s[0][1],s[1][1],s[1][0]];return[{x:Math.round(c[0].x),y:Math.round(c[0].y)},{x:Math.round(l[0].x),y:Math.round(l[0].y)},{x:Math.round(l[1].x),y:Math.round(l[1].y)},{x:Math.round(c[1].x),y:Math.round(c[1].y)},{x:Math.round(l[2].x),y:Math.round(l[2].y)},{x:Math.round(l[3].x),y:Math.round(l[3].y)}]}},{key:`angleWithLine`,value:function(e){var t=this,n;if(e.points.forEach(function(e){t.points.forEach(function(t){e===t&&(n=e)})}),n){var r=[this,e].map(function(e){return e.points.find(function(e){return e!=n})}),i=Math.atan2(r[0].y-n.y,r[0].x-n.x),a=Math.atan2(r[1].y-n.y,r[1].x-n.x)-i;return a>Math.PI&&(a-=2*Math.PI),a<-Math.PI&&(a+=2*Math.PI),a}return!1}},{key:`length`,value:function(){return this.points<2?0:$(this.points[0],this.points[1])}},{key:`distanceFromPoint`,value:function(e){return nk(e,this.points)}},{key:`closestPointOnLine`,value:function(e){return ek(e,this.points)}},{key:`isPointOnLine`,value:function(e){return ck(e,this.points)}},{key:`towardsRadWithArea`,value:function(e){for(var t=null,n=0;n<e.points.length;n++){var r=e.points[n],i=e.points[(n+1)%e.points.length];if(r===this.points[0]&&i===this.points[1]){t=!1;break}if(r===this.points[1]&&i===this.points[0]){t=!0;break}}if(t===null)return null;gk(e.points)||(t=!t);var a=zE(t?this.points.slice().reverse():this.points,2),o=a[0],s=a[1],c=Math.atan2(s.y-o.y,s.x-o.x)+Math.PI/2;return c>Math.PI&&(c-=Math.PI*2),zO(c)}}])}(jk);Fk.displayName=`Line`,Fk.prototype.displayName=`Line`,Fk.defaultThickness=200,Fk.typeMap=[`自动识别`,`外墙`,`内墙`,`虚拟墙`,`玻璃落地墙`,`栅栏`,`玻璃墙`,`矮墙`,`悬空墙`],Fk.propTypes={thickness:[`number`,`null`],offset:[`number`,`null`],points:`array`,items:`array`,curve:`number`,type:`number`,edgeComputed:`boolean`,offsetComputed:`number`,thicknessComputed:`number`,isLoadBearing:`boolean`},Fk.storeTypes={thickness:`value`,offset:`value`,points:`idArray`,items:`idArray`,curve:`value`,type:`value`,edgeComputed:`value`,offsetComputed:`value`,thicknessComputed:`value`,isLoadBearing:`value`,height:`value`};var Ik={好:{"de-DE":`OK`,"en-US":`OK`,"es-ES":`Bien`,"fr-FR":`OK`,"id-ID":`OK`,"it-IT":`OK`,"ja-JP":`はい`,"ko-KR":`좋아요.`,"ms-MY":`OK`,"nl-NL":`Oké.`,"pl-PL":`OK`,"pt-PT":`OK`,"sr-Cyrl":`Добро`,"vi-VN":`Được`,"zh-CN":`好`,"zh-TW":`好`},文件保存中:{"de-DE":`Die Datei wird gespeichert`,"en-US":`The file is being saved`,"es-ES":`Guardando el archivo`,"fr-FR":`Le fichier est en cours de sauvegarde`,"id-ID":`File sedang disimpan`,"it-IT":`Il file sta venendo salvato`,"ja-JP":`ファイル保存中`,"ko-KR":`파일 저장 중`,"ms-MY":`Fail sedang disimpan`,"nl-NL":`Bestand wordt opgeslagen`,"pl-PL":`Plik jest zapisywany`,"pt-PT":`O arquivo está sendo salvo`,"sr-Cyrl":`Датотека се чува`,"vi-VN":`Đang lưu tệp`,"zh-CN":`文件保存中`,"zh-TW":`正在保存文件`},文件保存成功:{"de-DE":`Datei erfolgreich gespeichert`,"en-US":`File saved successfully`,"es-ES":`Archivo guardado con éxito`,"fr-FR":`Fichier enregistré avec succès`,"id-ID":`Berkas berhasil disimpan`,"it-IT":`File salvato con successo`,"ja-JP":`ファイルの保存に成功しました`,"ko-KR":`파일이 성공적으로 저장되었습니다`,"ms-MY":`Fail berjaya disimpan`,"nl-NL":`Bestand succesvol opgeslagen`,"pl-PL":`Plik został pomyślnie zapisany`,"pt-PT":`Arquivo salvo com sucesso`,"sr-Cyrl":`Датотека је успешно сачувана`,"vi-VN":`Lưu tệp thành công`,"zh-CN":`文件保存成功`,"zh-TW":`文件保存成功`},文件保存失败:{"de-DE":`Speichern der Datei fehlgeschlagen`,"en-US":`File save failed`,"es-ES":`Error al guardar el archivo`,"fr-FR":`Échec de l'enregistrement du fichier`,"id-ID":`Gagal menyimpan file`,"it-IT":`Salvataggio del file non riuscito`,"ja-JP":`ファイルの保存に失敗しました`,"ko-KR":`파일 저장 실패`,"ms-MY":`Gagal menyimpan fail`,"nl-NL":`Bestandsopslag mislukt`,"pl-PL":`Zapisywanie pliku nie powiodło się`,"pt-PT":`Falha ao salvar o arquivo`,"sr-Cyrl":`Чување датотеке није успело`,"vi-VN":`Lưu tệp thất bại`,"zh-CN":`文件保存失败`,"zh-TW":`文件保存失敗`},标准图生成中:{"de-DE":`Standardzeichnung wird generiert`,"en-US":`Standard drawing is being generated`,"es-ES":`Se está generando el dibujo estándar`,"fr-FR":`La génération du dessin standard est en cours`,"id-ID":`Gambar standar sedang dibuat`,"it-IT":`La creazione del disegno standard è in corso`,"ja-JP":`標準図生成中`,"ko-KR":`표준 그림 생성 중`,"ms-MY":`Lukisan standard sedang dijana`,"nl-NL":`Standaardgrafieken worden gegenereerd`,"pl-PL":`Trwa generowanie rysunku standardowego`,"pt-PT":`Está a ser gerada a desenho padrão`,"sr-Cyrl":`Генерише се стандардни цртеж`,"vi-VN":`Đang tạo bản vẽ tiêu chuẩn`,"zh-CN":`标准图生成中`,"zh-TW":`正在生成標準圖`},标准图生成失败:{"de-DE":`Fehler bei der Generierung der Standardzeichnung`,"en-US":`Standard drawing generation failed`,"es-ES":`Error en la generación del dibujo estándar`,"fr-FR":`Échec de la génération du dessin standard`,"id-ID":`Pembuatan gambar standar gagal`,"it-IT":`Generazione del disegno standard fallita`,"ja-JP":`標準図の生成に失敗しました`,"ko-KR":`표준 그림 생성 실패`,"ms-MY":`Penjanaan lukisan standard gagal`,"nl-NL":`Het genereren van standaarddiagrammen is mislukt`,"pl-PL":`Nie udało się wygenerować rysunku standardowego`,"pt-PT":`Falha na geração do desenho padrão`,"sr-Cyrl":`Генерисање стандардног цртежа није успело`,"vi-VN":`Không tạo được bản vẽ tiêu chuẩn`,"zh-CN":`标准图生成失败`,"zh-TW":`標準圖生成失敗`},请稍后再试:{"de-DE":`Bitte probieren Sie es später noch einmal`,"en-US":`Please try again later`,"es-ES":`Por favor, inténtelo de nuevo más tarde`,"fr-FR":`Veuillez réessayer plus tard`,"id-ID":`Silakan coba lagi nanti`,"it-IT":`Si prega di riprovare più tardi`,"ja-JP":`あとでもう一度試してください`,"ko-KR":`나중에 다시 시도하십시오`,"ms-MY":`Sila cuba lagi kemudian`,"nl-NL":`Probeer het later opnieuw`,"pl-PL":`Spróbuj ponownie później`,"pt-PT":`Por favor, tente novamente mais tarde`,"sr-Cyrl":`Молимо вас да покушате поново касније`,"vi-VN":`Vui lòng thử lại sau`,"zh-CN":`请稍后再试`,"zh-TW":`請稍後再試`},加载矢量图可选项中:{"de-DE":`Laden der Vektorgrafikoptionen`,"en-US":`Loading vector graphics options`,"es-ES":`Cargando opciones de gráficos vectoriales`,"fr-FR":`Chargement des options de graphiques vectoriels`,"id-ID":`Memuat opsi grafik vektor`,"it-IT":`Caricamento delle opzioni di grafica vettoriale`,"ja-JP":`ベクターグラフィックオプションの読み込み中`,"ko-KR":`벡터 맵 옵션 로드 중`,"ms-MY":`Memuatkan pilihan grafik vektor`,"nl-NL":`Vectorgrafieken laden optie`,"pl-PL":`Ładowanie opcji grafiki wektorowej`,"pt-PT":`Carregando opções de gráficos vetoriais`,"sr-Cyrl":`Учитавање опција векторске графике`,"vi-VN":`Đang tải tùy chọn đồ họa vector`,"zh-CN":`加载矢量图可选项中`,"zh-TW":`正在加載矢量圖選項`},加载矢量图可选项失败:{"de-DE":`Fehler beim Laden der Vektorgrafikoptionen`,"en-US":`Failed to load vector graphics options`,"es-ES":`Error al cargar opciones de gráficos vectoriales`,"fr-FR":`Échec du chargement des options de graphiques vectoriels`,"id-ID":`Gagal memuat opsi grafik vektor`,"it-IT":`Impossibile caricare le opzioni di grafica vettoriale`,"ja-JP":`ベクターグラフィックオプションの読み込みに失敗しました`,"ko-KR":`벡터 맵 옵션 로드 실패`,"ms-MY":`Gagal memuatkan pilihan grafik vektor`,"nl-NL":`Het laden van vectorgrafische opties is mislukt`,"pl-PL":`Nie udało się załadować opcji grafiki wektorowej`,"pt-PT":`Falha ao carregar opções de gráficos vetoriais`,"sr-Cyrl":`Неуспешно учитавање опција за векторску графику`,"vi-VN":`Không tải được tùy chọn đồ họa vector`,"zh-CN":`加载矢量图可选项失败`,"zh-TW":`加載矢量圖選項失敗`},空白矢量图:{"de-DE":`Leere Vektorgrafiken`,"en-US":`Blank vector graphics`,"es-ES":`Gráficos vectoriales en blanco`,"fr-FR":`Graphiques vectoriels vierges`,"id-ID":`Grafik vektor kosong`,"it-IT":`Grafica vettoriale vuota`,"ja-JP":`空白ベクトル図`,"ko-KR":`빈 벡터 차트`,"ms-MY":`Grafik vektor kosong`,"nl-NL":`Leeg vectordiagram`,"pl-PL":`Puste grafiki wektorowe`,"pt-PT":`Gráficos vetoriais em branco`,"sr-Cyrl":`Празна векторска графика`,"vi-VN":`Đồ họa vector trống`,"zh-CN":`空白矢量图`,"zh-TW":`空白矢量圖`},矢量图加载中:{"de-DE":`Laden der Vektorgrafiken`,"en-US":`Loading vector graphics`,"es-ES":`Cargando gráficos vectoriales`,"fr-FR":`Chargement des graphiques vectoriels`,"id-ID":`Memuat grafik vektor`,"it-IT":`Caricamento della grafica vettoriale`,"ja-JP":`ベクトルグラフィックの読み込み中`,"ko-KR":`벡터 맵 로드 중`,"ms-MY":`Memuatkan grafik vektor`,"nl-NL":`Vectorgrafiek wordt geladen`,"pl-PL":`Ładowanie grafiki wektorowej`,"pt-PT":`Carregando gráficos vetoriais`,"sr-Cyrl":`Учитавање векторске графике`,"vi-VN":`Đang tải đồ họa vector`,"zh-CN":`矢量图加载中`,"zh-TW":`正在加載矢量圖`},矢量图加载失败:{"de-DE":`Fehler beim Laden der Vektorgrafiken`,"en-US":`Failed to load vector graphics`,"es-ES":`Error al cargar gráficos vectoriales`,"fr-FR":`Échec du chargement des graphiques vectoriels`,"id-ID":`Gagal memuat grafik vektor`,"it-IT":`Impossibile caricare la grafica vettoriale`,"ja-JP":`ベクトルグラフィックの読み込みに失敗しました`,"ko-KR":`벡터 맵 로드 실패`,"ms-MY":`Gagal memuatkan grafik vektor`,"nl-NL":`Het laden van de vectorafbeelding is mislukt`,"pl-PL":`Nie udało się załadować grafiki wektorowej`,"pt-PT":`Falha ao carregar gráficos vetoriais`,"sr-Cyrl":`Није успело учитавање векторске графике`,"vi-VN":`Không tải được đồ họa vector`,"zh-CN":`矢量图加载失败`,"zh-TW":`矢量圖加載失敗`},调整画布大小:{"de-DE":`Leinwandgröße`,"en-US":`Canvas Size`,"es-ES":`Ajustar tamaño del lienzo`,"fr-FR":`Ajuster la taille du canevas`,"id-ID":`Ukuran Kanvas`,"it-IT":`Regola le dimensioni del canvas`,"ja-JP":`キャンバスのサイズを調整します`,"ko-KR":`캔버스 크기 조정`,"ms-MY":`Saiz Kanvas`,"nl-NL":`De grootte van het doek aanpassen`,"pl-PL":`Dopasuj rozmiar płótna`,"pt-PT":`Ajustar tamanho do canvas`,"sr-Cyrl":`Величина платна`,"vi-VN":`Điều chỉnh kích thước bảng vẽ`,"zh-CN":`调整画布大小`,"zh-TW":`調整畫布大小`},系统升级啦:{"de-DE":`Das System wurde aktualisiert`,"en-US":`The system has been upgraded`,"es-ES":`El sistema ha sido actualizado`,"fr-FR":`Le système a été mis à niveau`,"id-ID":`Sistem telah ditingkatkan`,"it-IT":`Il sistema è stato aggiornato`,"ja-JP":`システムがアップグレードしました`,"ko-KR":`시스템이 업그레이드되었습니다`,"ms-MY":`Sistem telah dinaik taraf`,"nl-NL":`Het systeem is upgraded`,"pl-PL":`System został zaktualizowany`,"pt-PT":`O sistema foi atualizado`,"sr-Cyrl":`Систем је надограђен`,"vi-VN":`Hệ thống đã được nâng cấp`,"zh-CN":`系统升级啦`,"zh-TW":`系統升級啦`},"此户型图为老户型图,仅查看不会影响,进行编辑操作会造成外墙往外扩的问题":{"de-DE":`Diese Zeichnung des Haustyps ist veraltet, das Betrachten hat keine Auswirkungen. Änderungen können jedoch die Außenwand erweitern.`,"en-US":`This house type drawing is the old one, only viewing will not affect it. Editing operation will cause the problem of external wall expanding.`,"es-ES":`Este dibujo de tipo de casa es el antiguo, solo verlo no lo afectará. La operación de edición causará el problema de la expansión de la pared externa.`,"fr-FR":`Ce dessin de type de maison est l'ancien, seule la visualisation ne l'affectera pas. L'opération d'édition causera le problème de l'expansion du mur externe.`,"id-ID":`Gambar tipe rumah ini adalah yang lama, hanya melihat tidak akan memengaruhinya. Operasi pengeditan akan menyebabkan masalah perluasan dinding luar.`,"it-IT":`Questo disegno del tipo di casa è quello vecchio, solo la visualizzazione non lo influenzerà. L'operazione di modifica causerà il problema dell'espansione del muro esterno.`,"ja-JP":`このタイプの図は古いタイプの図で、ただ見るだけでは影響はありません。編集操作を行うと外壁が拡大する問題があります。`,"ko-KR":`이 평형도는 오래된 평형도이므로 보기만 해도 영향을 주지 않으며, 편집 조작을 하면 외벽이 밖으로 확장되는 문제를 초래할 수 있다.`,"ms-MY":`Lukisan jenis rumah ini adalah yang lama, hanya paparan tidak akan terjejas. Operasi penyuntingan akan menyebabkan masalah pengembangan dinding luar.`,"nl-NL":`Dit huistype is een oude huistype, alleen bekijken heeft geen invloed, bewerkingen kunnen problemen veroorzaken met de uitbreiding van de buitenmuur.`,"pl-PL":`Ten rysunek typu domu to stary, tylko przeglądanie go nie wpłynie na niego. Operacja edycji spowoduje problem z rozszerzaniem się ściany zewnętrznej.`,"pt-PT":`Este desenho de tipo de casa é o antigo, apenas visualizar não afetará. A operação de edição causará o problema da expansão da parede externa.`,"sr-Cyrl":`Овај цртеж типа куће је стари, само преглед неће утицати на њега. Уређивање може изазвати проблем проширења спољашњег зида.`,"vi-VN":`Bản vẽ loại nhà này là cũ, chỉ xem sẽ không ảnh hưởng. Thao tác chỉnh sửa sẽ gây ra vấn đề về việc mở rộng tường bên ngoài.`,"zh-CN":`此户型图为老户型图,仅查看不会影响,进行编辑操作会造成外墙往外扩的问题。`,"zh-TW":`此房屋類型圖為舊版,僅查看不會影響,進行編輯操作會導致外牆擴大的問題。`},墙面模型对比失败:{"de-DE":`Der Vergleich des Wandmodells schlug fehl`,"en-US":`Wall model comparison failed`,"es-ES":`Falló la comparación del modelo de pared`,"fr-FR":`La comparaison du modèle de mur a échoué`,"id-ID":`Perbandingan model dinding gagal`,"it-IT":`Confronto del modello di parete non riuscito`,"ja-JP":`壁面モデルの比較に失敗しました`,"ko-KR":`벽 모형 비교 실패`,"ms-MY":`Perbandingan model dinding gagal`,"nl-NL":`Vergelijking muurmodel mislukt`,"pl-PL":`Porównanie modelu ściany nie powiodło się`,"pt-PT":`Falha na comparação do modelo de parede`,"sr-Cyrl":`Поређење модела зида није успело`,"vi-VN":`So sánh mô hình tường thất bại`,"zh-CN":`墙面模型对比失败`,"zh-TW":`牆面模型對比失敗`},"2018年8月8日前上传的模型不支持墙面模型对比功能":{"de-DE":`Modelle, die vor dem 8. August 2018 hochgeladen wurden, unterstützen die Wandmodellvergleichsfunktion nicht`,"en-US":`Models uploaded before August 8, 2018 do not support wall model comparison function`,"es-ES":`Los modelos subidos antes del 8 de agosto de 2018 no admiten la función de comparación de modelos de pared`,"fr-FR":`Les modèles téléchargés avant le 8 août 2018 ne prennent pas en charge la fonction de comparaison de modèles de mur`,"id-ID":`Model yang diunggah sebelum 8 Agustus 2018 tidak mendukung fungsi perbandingan model dinding`,"it-IT":`I modelli caricati prima dell'8 agosto 2018 non supportano la funzione di confronto del modello di parete`,"ja-JP":`2018年8月8日までにアップロードしたモデルは壁面モデルのコントラスト機能に対応していません`,"ko-KR":`2018년 8월 8일 이전에 업로드된 모델은 벽면 모델 대비 기능을 지원하지 않음`,"ms-MY":`Model yang dimuat naik sebelum 8 Ogos 2018 tidak menyokong fungsi perbandingan model dinding`,"nl-NL":`Modellen geüpload vóór 8 augustus 2018 ondersteunen geen muurmodelvergelijking`,"pl-PL":`Modele przesłane przed 8 sierpnia 2018 r. nie obsługują funkcji porównywania modelu ściany`,"pt-PT":`Os modelos carregados antes de 8 de agosto de 2018 não suportam a função de comparação de modelos de parede`,"sr-Cyrl":`Модели отпремљени пре 8. августа 2018. не подржавају функцију поређења модела зидова`,"vi-VN":`Các mô hình tải lên trước ngày 8 tháng 8 năm 2018 không hỗ trợ chức năng so sánh mô hình tường`,"zh-CN":`2018年8月8日前上传的模型不支持墙面模型对比功能`,"zh-TW":`2018年8月8日前上傳的模型不支援牆面模型對比功能`},"正在自动绘制户型图...":{"de-DE":`Automatische Grundrisszeichnung…`,"en-US":`Drawing floor plan automatically…`,"es-ES":`Dibujando el plano de planta automáticamente…`,"fr-FR":`Dessin automatique du plan d'étage…`,"id-ID":`Menggambar denah lantai secara otomatis…`,"it-IT":`Disegno automatico della pianta del pavimento…`,"ja-JP":`自動的に間取り図を描いています…`,"ko-KR":`평형도를 자동으로 그리고 있습니다…`,"ms-MY":`Melukis pelan lantai secara automatik…`,"nl-NL":`Gebruikersdiagrammen worden automatisch getekend…`,"pl-PL":`Automatyczne rysowanie planu piętra…`,"pt-PT":`Desenhando o plano de chão automaticamente…`,"sr-Cyrl":`Аутоматско цртање плана спрата…`,"vi-VN":`Vẽ sơ đồ tầng tự động…`,"zh-CN":`正在自动绘制户型图…`,"zh-TW":`正在自動繪製平面圖…`},存在孤立分间:{"de-DE":`Isolierte Räume`,"en-US":`Isolated rooms`,"es-ES":`Habitaciones aisladas`,"fr-FR":`Pièces isolées`,"id-ID":`Ruangan terisolasi`,"it-IT":`Stanze isolate`,"ja-JP":`孤立空間があり`,"ko-KR":`고립 분간이 존재하다`,"ms-MY":`Bilik terasing`,"nl-NL":`Isolatie bestaat`,"pl-PL":`Izolowane pokoje`,"pt-PT":`Quartos isolados`,"sr-Cyrl":`Изоловане собе`,"vi-VN":`Các phòng cô lập`,"zh-CN":`存在孤立分间`,"zh-TW":`存在孤立分間`},"户型图中存在未与其他分间连通的分间,暂时无法发起AI设计,请添加门或修改户型":{"de-DE":`Einige Räume im Grundriss sind nicht mit anderen Räumen verbunden. Das KI-Design kann aktuell nicht gestartet werden. Bitte ergänzen Sie Türen oder überarbeiten Sie den Grundriss.`,"en-US":`There are rooms in the floor plan that are not connected to other rooms, the AI design cannot be initiated at this time, please add doors or modify the floor plan.`,"es-ES":`Hay habitaciones en el plano de planta que no están conectadas a otras habitaciones, el diseño de IA no se puede iniciar en este momento, por favor agregue puertas o modifique el plano de planta.`,"fr-FR":`Il y a des pièces dans le plan d'étage qui ne sont pas connectées à d'autres pièces, la conception IA ne peut pas être initiée pour le moment, veuillez ajouter des portes ou modifier le plan d'étage.`,"id-ID":`Ada ruangan dalam denah lantai yang tidak terhubung dengan ruangan lain, desain AI tidak dapat dimulai saat ini, silakan tambahkan pintu atau modifikasi denah lantai.`,"it-IT":`Ci sono stanze nel piano della casa che non sono collegate ad altre stanze, il design IA non può essere avviato in questo momento, per favore aggiungi porte o modifica il piano della casa.`,"ja-JP":`住宅プランの中に他の分譲地とつながっていない分譲地があるため、現時点ではAI設計を開始できないので、ドアの追加や住宅タイプの変更をお願いします。`,"ko-KR":`평형도에는 다른 분간과 연결되지 않은 분간이 존재하여 잠시 AI 설계를 시작할 수 없습니다. 문을 추가하거나 평형을 수정하십시오.`,"ms-MY":`Terdapat bilik dalam pelan lantai yang tidak bersambung dengan bilik lain, reka bentuk AI tidak dapat dimulakan pada masa ini, sila tambah pintu atau ubah suai pelan lantai.`,"nl-NL":`Er is een scheiding in het huistype diagram die niet is verbonden met andere scheidingen. Het AI-ontwerp kan tijdelijk niet worden gestart. Voeg een deur toe of wijzig het huistype.`,"pl-PL":`W planie piętra są pokoje, które nie są połączone z innymi pokojami, projektowanie AI nie może zostać uruchomione w tym momencie, proszę dodać drzwi lub zmodyfikować plan piętra.`,"pt-PT":`Existem quartos no plano de chão que não estão conectados a outros quartos, o design de IA não pode ser iniciado neste momento, por favor adicione portas ou modifique o plano de chão.`,"sr-Cyrl":`Нацрт просторија садржи собе које нису повезане са другим собама, АИ дизајн тренутно не може бити покренут, молимо вас да додате врата или измените нацрт просторија.`,"vi-VN":`Có phòng trong bản đồ tầng không được kết nối với các phòng khác, thiết kế AI không thể được khởi động vào thời điểm này, vui lòng thêm cửa hoặc sửa đổi kế hoạch tầng.`,"zh-CN":`户型图中存在未与其他分间连通的分间,暂时无法发起AI设计,请添加门或修改户型。`,"zh-TW":`户型图中存在未与其他分间连通的分间,暂时无法发起AI设计,请添加门或修改户型。`},"存在{{0}}面孤立墙":{"de-DE":[`Eine isolierte Wand`,`{{0}} isolierte Wände`],"en-US":[`An isolated wall`,`{{0}} isolated walls`],"es-ES":[`Una pared aislada`,`{{0}} paredes aisladas`],"fr-FR":[`Un mur isolé`,`{{0}} murs isolés`],"id-ID":[`Dinding terisolasi`,`Dinding terisolasi {{0}}`],"it-IT":[`Una parete isolata`,`{{0}} pareti isolate`],"ja-JP":[`孤立した壁`,`{{0}} の孤立した壁`],"ko-KR":[`고립된 벽`,`{{0}} 고립된 벽들`],"ms-MY":[`Dinding terpencil`,`Dinding terpencil {{0}}`],"nl-NL":[`Een geïsoleerde muur`,`{{0}} geïsoleerde muren`],"pl-PL":[`Izolowana ściana`,`{{0}} izolowane ściany`],"pt-PT":[`Uma parede isolada`,`{{0}} paredes isoladas`],"sr-Cyrl":[`Изоловани зид`,`{{0}} изоловани зидови`],"vi-VN":[`Một bức tường cô lập`,`{{0}} bức tường cô lập`],"zh-CN":[`一面独立的墙`,`{{0}} 面独立的墙`],"zh-TW":[`存在孤立牆`,`{{0}} 面孤立牆`]},"这些墙可能是多余的,暂时无法发起AI设计,请删除":{"de-DE":`Diese Wände wirken entbehrlich. Das KI-Design ist nicht ausführbar. Bitte löschen Sie sie.`,"en-US":`These walls may be redundant. AI design cannot be initiated. Please delete them.`,"es-ES":`Estas paredes pueden ser redundantes. El diseño de IA no puede ser iniciado. Por favor, elimínelas.`,"fr-FR":`Ces murs peuvent être redondants. La conception IA ne peut pas être initiée. Veuillez les supprimer.`,"id-ID":`Dinding ini mungkin berlebihan. Desain AI tidak dapat dimulai. Harap hapus.`,"it-IT":`Queste pareti potrebbero essere ridondanti. Il design IA non può essere avviato. Si prega di eliminarle.`,"ja-JP":`これらの壁は余分かもしれません。AI設計を開始できません。削除してください。`,"ko-KR":`이러한 벽은 불필요한 것일 수 있으며 당분간 AI 설계를 시작할 수 없습니다. 삭제하십시오.`,"ms-MY":`Dinding ini mungkin berlebihan. Reka bentuk AI tidak dapat dimulakan. Sila hapuskannya.`,"nl-NL":`Deze muren kunnen overbodig zijn en het AI-ontwerp tijdelijk niet kunnen starten, verwijder het alstublieft.`,"pl-PL":`Te ściany mogą być zbędne. Projektowanie AI nie może być uruchomione. Proszę je usunąć.`,"pt-PT":`Estas paredes podem ser redundantes. O design de IA não pode ser iniciado. Por favor, delete-as.`,"sr-Cyrl":`Ови зидови могу бити сувишни. АИ дизајн не може бити покренут. Молимо избришите их.`,"vi-VN":`Những bức tường này có thể là dư thừa. Thiết kế AI không thể được khởi động. Vui lòng xóa chúng.`,"zh-CN":`这些墙可能是多余的,暂时无法发起AI设计,请删除。`,"zh-TW":`這些牆可能是多餘的,暫時無法發起AI設計,請刪除。`},卧室数量错误:{"de-DE":`Falsche Anzahl von Schlafzimmern`,"en-US":`Wrong number of bedrooms`,"es-ES":`Número incorrecto de dormitorios`,"fr-FR":`Nombre incorrect de chambres`,"id-ID":`Jumlah kamar tidur salah`,"it-IT":`Numero errato di camere da letto`,"ja-JP":`寝室の数が間違っています`,"ko-KR":`침실 수 오류`,"ms-MY":`Bilangan bilik tidur salah`,"nl-NL":`Verkeerde aantal slaapkamers`,"pl-PL":`Błędna liczba sypialni`,"pt-PT":`Número errado de quartos`,"sr-Cyrl":`Погрешан број спаваћих соба`,"vi-VN":`Số lượng phòng ngủ sai`,"zh-CN":`卧室数量错误`,"zh-TW":`卧室数量错误`},"缺少卧室或卧室数量已超过5个,暂时无法发起AI设计,请修改":{"de-DE":`Es gibt keine Schlafzimmer oder die Anzahl der Schlafzimmer hat 5 überschritten. Das KI-Design kann nicht gestartet werden. Bitte ändern Sie es.`,"en-US":`There are no bedrooms or the number of bedrooms has exceeded 5. AI design cannot be initiated. Please modify it.`,"es-ES":`No hay dormitorios o el número de dormitorios ha superado los 5. El diseño de IA no puede ser iniciado. Por favor, modifíquelo.`,"fr-FR":`Il n'y a pas de chambres ou le nombre de chambres a dépassé 5. La conception IA ne peut pas être initiée. Veuillez le modifier.`,"id-ID":`Tidak ada kamar tidur atau jumlah kamar tidur telah melebihi 5. Desain AI tidak dapat dimulai. Silakan modifikasi.`,"it-IT":`Non ci sono camere da letto o il numero di camere da letto ha superato 5. Il design IA non può essere avviato. Si prega di modificarlo.`,"ja-JP":`寝室がないか、寝室の数が5つを超えています。AI設計を開始できません。修正してください。`,"ko-KR":`누락된 침실 또는 침실 수가 5 개를 초과하여 당분간 AI 설계를 시작할 수 없습니다. 수정하십시오.`,"ms-MY":`Tiada bilik tidur atau bilangan bilik tidur melebihi 5. Reka bentuk AI tidak dapat dimulakan. Sila ubah suai.`,"nl-NL":`Het ontbreken van slaapkamers of het aantal slaapkamers is meer dan 5 en het AI-ontwerp kan voorlopig niet worden gestart, wijzig het alstublieft.`,"pl-PL":`Nie ma sypialni lub liczba sypialni przekroczyła 5. Projektowanie AI nie może być uruchomione. Proszę to zmienić.`,"pt-PT":`Não existem quartos ou o número de quartos excedeu 5. O design de IA não pode ser iniciado. Por favor, modifique.`,"sr-Cyrl":`Нема спаваћих соба или је број спаваћих соба премашио 5. АИ дизајн не може бити покренут. Молимо измените.`,"vi-VN":`Không có phòng ngủ hoặc số lượng phòng ngủ đã vượt quá 5. Thiết kế AI không thể được khởi động. Vui lòng sửa đổi.`,"zh-CN":`缺少卧室或卧室数量已超过5个,暂时无法发起AI设计,请修改。`,"zh-TW":`缺少卧室或卧室数量已超过5个,暂时无法发起AI设计,请修改。`},墙体类型错误:{"de-DE":`Nicht unterstützter Wandtyp`,"en-US":`Unsupported wall type`,"es-ES":`Tipo de pared no compatible`,"fr-FR":`Type de mur non pris en charge`,"id-ID":`Jenis dinding tidak didukung`,"it-IT":`Tipo di parete non supportato`,"ja-JP":`壁タイプエラーです`,"ko-KR":`벽 유형 오류`,"ms-MY":`Jenis dinding tidak disokong`,"nl-NL":`Verkeerde muurtype`,"pl-PL":`Niewspierany typ ściany`,"pt-PT":`Tipo de parede não suportado`,"sr-Cyrl":`Неподржани тип зида`,"vi-VN":`Loại tường không được hỗ trợ`,"zh-CN":`墙体类型错误`,"zh-TW":`墙体类型错误`},"AI设计暂不支持玻璃墙,弧形墙,矮墙和悬空墙,请修改":{"de-DE":`Das KI-Design unterstützt derzeit keine Glaswand, Bogenwand, niedrige Wand und schwebende Wand. Bitte ändern Sie es.`,"en-US":`AI design does not support glass wall, arc wall, short wall and suspended wall, please modify.`,"es-ES":`El diseño de IA no admite paredes de vidrio, paredes arqueadas, paredes bajas y paredes suspendidas, por favor modifique.`,"fr-FR":`La conception IA ne prend pas en charge les murs en verre, les murs en arc, les murs bas et les murs suspendus, veuillez les modifier.`,"id-ID":`Desain AI tidak mendukung dinding kaca, dinding lengkung, dinding pendek, dan dinding gantung, silakan ubah.`,"it-IT":`Il design IA non supporta al momento le pareti in vetro, le pareti ad arco, le pareti basse e le pareti sospese, si prega di modificarle.`,"ja-JP":`AIデザインはガラス壁、円弧壁、下がり壁、吊り壁に対応していますので、修正してください。`,"ko-KR":`AI 설계는 당분간 유리벽, 호형벽, 낮은 벽과 공중벽을 지원하지 않습니다. 수정하십시오.`,"ms-MY":`Reka bentuk AI tidak menyokong dinding kaca, dinding lengkung, dinding pendek dan dinding tergantung, sila ubah suai.`,"nl-NL":`AI-ontwerp ondersteunt voorlopig geen glazen muren, gebogen muren, lage muren en hangende muren, kunt u wijzigen.`,"pl-PL":`Projektowanie AI nie obsługuje ścian szklanych, ścian łukowych, niskich ścian i ścian zawieszonych, proszę je zmodyfikować.`,"pt-PT":`O design de IA não suporta parede de vidro, parede de arco, parede baixa e parede suspensa, por favor modifique.`,"sr-Cyrl":`АИ дизајн не подржава стаклени зид, лучни зид, кратки зид и висећи зид, молимо измените.`,"vi-VN":`Thiết kế AI không hỗ trợ tường kính, tường cung, tường thấp và tường treo, vui lòng sửa đổi.`,"zh-CN":`AI设计暂不支持玻璃墙,弧形墙,矮墙和悬空墙,请修改。`,"zh-TW":`AI设计暂不支持玻璃墙,弧形墙,矮墙和悬空墙,请修改。`},不支持的墙面物体类型:{"de-DE":`Nicht unterstützter Wandobjekttyp`,"en-US":`Unsupported wall object type`,"es-ES":`Tipos de objetos de pared no soportados`,"fr-FR":`Types d'objets muraux non pris en charge`,"id-ID":`Jenis objek dinding tidak didukung`,"it-IT":`Tipo di oggetto della parete non supportato`,"ja-JP":`サポートされていない壁面オブジェクトタイプ`,"ko-KR":`지원되지 않는 벽면 물체 유형`,"ms-MY":`Jenis objek dinding tidak disokong`,"nl-NL":`Niet ondersteund wandobjecttype`,"pl-PL":`Nieobsługiwany typ obiektu ściany`,"pt-PT":`Tipo de objecto de parede não suportado`,"sr-Cyrl":`Неподржани тип објекта зида`,"vi-VN":`Các loại vật thể tường không được hỗ trợ`,"zh-CN":`不支持的墙面物体类型`,"zh-TW":`不支持的墙面物体类型`},"AI设计暂不支持弧形垭口,请修改":{"de-DE":`Das KI-Design unterstützt derzeit keinen bogenförmigen Durchgang, bitte ändern Sie es`,"en-US":`AI design does not support arc-shaped pass, please modify`,"es-ES":`El diseño de IA no admite pasos en forma de arco, por favor modifique`,"fr-FR":`La conception IA ne prend pas en charge le passage en forme d'arc, veuillez le modifier`,"id-ID":`Desain AI tidak mendukung lorong berbentuk lengkung, harap modifikasi`,"it-IT":`Il design IA non supporta il passaggio ad arco, si prega di modificarlo`,"ja-JP":`AIデザインは弧状のパスに対応できません。修正してください`,"ko-KR":`AI 설계는 호형 산골짜기를 잠시 지원하지 않습니다. 수정하십시오`,"ms-MY":`Reka bentuk AI tidak menyokong laluan berbentuk lengkung, sila ubah suai`,"nl-NL":`AI-ontwerp ondersteunt nog geen gebogen bochten, wijzig het alstublieft`,"pl-PL":`Projektowanie AI nie obsługuje przejścia w kształcie łuku, proszę je zmodyfikować`,"pt-PT":`O design de IA não suporta passagem em forma de arco, por favor modifique`,"sr-Cyrl":`АИ дизајн не подржава пролаз у облику лука, молимо измените`,"vi-VN":`Thiết kế AI không hỗ trợ đường đi hình cung, vui lòng sửa đổi`,"zh-CN":`AI设计暂不支持弧形垭口,请修改`,"zh-TW":`AI设计暂不支持弧形垭口,请修改`},"{{0}}个点位不在户型图内":{"de-DE":`{{0}} Pano befinden sich nicht im Grundriss`,"en-US":`{{0}} pano are not in the floorplan`,"es-ES":`No hay {{0}} puntos en el plano de planta`,"fr-FR":`{{0}} pano ne sont pas dans le plan d'étage`,"id-ID":`{{0}} pano tidak ada di denah lantai`,"it-IT":`{{0}} pano non sono nel piano della casa`,"ja-JP":`{{0}} ポイントはフロアプランにありません`,"ko-KR":`{{0}} 파노는 평면도에 없습니다`,"ms-MY":`Pano {{0}} tidak berada dalam pelan lantai`,"nl-NL":`{{0}} pano's staan niet op de plattegrond`,"pl-PL":`{{0}} pano nie znajduje się na planie piętra`,"pt-PT":`{{0}} pano não está no plano do chão`,"sr-Cyrl":`{{0}} панои нису у плану спрата`,"vi-VN":`{{0}} pano không nằm trong bản đồ tầng`,"zh-CN":`{{0}}个点位不在户型图内`,"zh-TW":`{{0}}个点位不在户型图内`},点击查看按钮会暂时标出红色点位:{"de-DE":`Klicken Sie auf die Schaltfläche Ansicht, um den roten Punkt vorübergehend zu markieren`,"en-US":`Click the view button to temporarily mark the red point`,"es-ES":`Haga clic en el botón de vista para marcar temporalmente el punto rojo`,"fr-FR":`Cliquez sur le bouton de vue pour marquer temporairement le point rouge`,"id-ID":`Klik tombol lihat untuk menandai titik merah sementara`,"it-IT":`Clicca sul pulsante di visualizzazione per contrassegnare temporaneamente il punto rosso`,"ja-JP":`ボタンをクリックすると、一時的に赤いポイントが表示されます`,"ko-KR":`보기 버튼을 클릭하면 빨간색 지점이 일시적으로 표시됩니다`,"ms-MY":`Klik butang pandangan untuk menandakan titik merah buat sementara waktu`,"nl-NL":`Klik op de knop Bekijk om tijdelijk een rood punt te markeren`,"pl-PL":`Kliknij przycisk widoku, aby tymczasowo oznaczyć czerwony punkt`,"pt-PT":`Clique no botão de visualização para marcar temporariamente o ponto vermelho`,"sr-Cyrl":`Кликните на дугме за преглед да бисте привремено означили црвену тачку`,"vi-VN":`Nhấn vào nút xem để tạm thời đánh dấu điểm đỏ`,"zh-CN":`点击查看按钮会暂时标出红色点位`,"zh-TW":`点击查看按钮会暂时标出红色点位`},有外墙距模型太远了:{"de-DE":`Die Außenwand ist zu weit vom Modell entfernt`,"en-US":`The exterior wall is too far away from the model`,"es-ES":`La pared exterior está demasiado lejos del modelo`,"fr-FR":`Le mur extérieur est trop loin du modèle`,"id-ID":`Dinding luar terlalu jauh dari model`,"it-IT":`Il muro esterno è troppo lontano dal modello`,"ja-JP":`外壁があってモデルから遠すぎます`,"ko-KR":`외벽이 있는데 모형에서 너무 멀어요`,"ms-MY":`Dinding luar terlalu jauh dari model`,"nl-NL":`De buitenmuur is te ver van het model`,"pl-PL":`Ściana zewnętrzna jest zbyt daleko od modelu`,"pt-PT":`A parede exterior está muito longe do modelo`,"sr-Cyrl":`Спољашњи зид је предалеко од модела`,"vi-VN":`Bức tường ngoài quá xa so với mô hình`,"zh-CN":`有外墙距模型太远了`,"zh-TW":`有外墙距模型太远了`},"{{0}} 个绿色外墙可能离墙太远":{"de-DE":`{{0}} grüne Außenwände könnten zu weit von der Wand entfernt sein`,"en-US":`{{0}} green exterior walls may be too far from the wall`,"es-ES":`Puede que {{0}} paredes exteriores verdes estén demasiado lejos de la pared`,"fr-FR":`{{0}} murs extérieurs verts peuvent être trop loin du mur`,"id-ID":`Dinding eksterior hijau {{0}} mungkin terlalu jauh dari dinding`,"it-IT":`{{0}} pareti esterne verdi potrebbero essere troppo lontane dal muro`,"ja-JP":`{{0}}つの緑の外壁が壁から遠すぎる可能性があります`,"ko-KR":`{{0}} 녹색 외벽이 벽에서 지나치게 떨어져 있을 가능성이 있습니다`,"ms-MY":`Dinding luar hijau {{0}} mungkin terlalu jauh dari dinding`,"nl-NL":`{{0}} groene buitenmuren staan wellicht te ver van de muur`,"pl-PL":`{{0}} zielonych ścian zewnętrznych może być zbyt daleko od ściany`,"pt-PT":`{{0}} paredes exteriores verdes podem estar muito longe da parede`,"sr-Cyrl":`{{0}} зелени спољни зидови могу бити предалеко од зида`,"vi-VN":`{{0}} bức tường ngoài màu xanh lá cây có thể quá xa so với tường`,"zh-CN":`{{0}} 个绿色外墙可能离墙太远`,"zh-TW":`{{0}} 个绿色外墙可能离墙太远`},有墙体压到模型了:{"de-DE":`Die Wand drückt gegen das Modell`,"en-US":`The wall is pressing against the model`,"es-ES":`La pared está presionando contra el modelo`,"fr-FR":`Le mur appuie contre le modèle`,"id-ID":`Dinding menekan model`,"it-IT":`Il muro sta premendo contro il modello`,"ja-JP":`壁がモデルに押し付けられています`,"ko-KR":`벽이 모형에 깔렸어요`,"ms-MY":`Dinding menekan model`,"nl-NL":`Er zit een muur op het model`,"pl-PL":`Ściana naciska na model`,"pt-PT":`A parede está pressionando contra o modelo`,"sr-Cyrl":`Зид притиска модел`,"vi-VN":`Bức tường đang bóp mô hình`,"zh-CN":`有墙体压到模型了`,"zh-TW":`有墙体压到模型了`},"{{0}} 个红色墙可能压到模型":{"de-DE":`{{0}} rote Außenwände können auf das Modell gedrückt werden`,"en-US":`{{0}} red exterior walls may be pressed to the model`,"es-ES":`{{0}} paredes exteriores rojas pueden presionarse sobre el modelo`,"fr-FR":`{{0}} murs extérieurs rouges peuvent être pressés sur le modèle`,"id-ID":`Dinding luar merah {{0}} dapat ditekan ke model`,"it-IT":`{{0}} pareti esterne rosse potrebbero essere schiacciate sul modello`,"ja-JP":`{{0}}つの赤い壁をモデルに押し付けることができます`,"ko-KR":`{{0}} 빨간 외벽이 모델에 밀착될 수 있습니다`,"ms-MY":`Dinding luar merah {{0}} mungkin ditekan ke model`,"nl-NL":`{{0}} rode buitenmuren kunnen op het model worden gedrukt`,"pl-PL":`{{0}} czerwonych ścian zewnętrznych może być dociskanych do modelu`,"pt-PT":`{{0}} paredes exteriores vermelhas podem ser pressionadas contra o modelo`,"sr-Cyrl":`{{0}} црвени спољни зидови могу бити притиснути на модел`,"vi-VN":`{{0}} tường ngoại thất màu đỏ có thể được nhấn xuống mô hình`,"zh-CN":`{{0}} 个红色墙可能压到模型`,"zh-TW":`{{0}} 個紅色外牆可能壓到模型`},入户门不存在:{"de-DE":`Eingangstür existiert nicht`,"en-US":`Entrance door does not exist`,"es-ES":`La puerta de entrada no existe`,"fr-FR":`La porte d'entrée n'existe pas`,"id-ID":`Pintu masuk tidak ada`,"it-IT":`La porta d'ingresso non esiste`,"ja-JP":`入門は存在しません`,"ko-KR":`입주문은 존재하지 않는다`,"ms-MY":`Pintu masuk tidak wujud`,"nl-NL":`De ingang bestaat niet`,"pl-PL":`Drzwi wejściowe nie istnieją`,"pt-PT":`A porta de entrada não existe`,"sr-Cyrl":`Улазна врата не постоје`,"vi-VN":`Cửa vào không tồn tại`,"zh-CN":`入户门不存在`,"zh-TW":`入戶門不存在`},"请放置一个门,设置为入户门,并填写入户门角度":{"de-DE":`Bitte platzieren Sie eine Tür, setzen Sie sie als Eingangstür und füllen Sie den Eingangstürwinkel aus`,"en-US":`Please place a door, set it as the entrance door, and fill in the entrance door angle`,"es-ES":`Por favor, coloque una puerta, configúrela como la puerta de entrada y complete el ángulo de la puerta de entrada`,"fr-FR":`Veuillez placer une porte, la définir comme porte d'entrée et remplir l'angle de la porte d'entrée`,"id-ID":`Silakan tempatkan pintu, tetapkan sebagai pintu masuk, dan isi sudut pintu masuk`,"it-IT":`Per favore, posiziona una porta, impostala come porta d'ingresso e compila l'angolo della porta d'ingresso`,"ja-JP":`ドアを置いて、入戸に設置し、入戸の角度を記入してください`,"ko-KR":`문을 설치하여 입주문으로 설정하고 입주문 각도를 기입해 주십시오`,"ms-MY":`Sila letakkan pintu, tetapkan sebagai pintu masuk, dan isikan sudut pintu masuk`,"nl-NL":`Plaats een deur, stel deze in als de ingangsdeur en vul de ingangsdeur hoek in`,"pl-PL":`Proszę umieścić drzwi, ustawić je jako drzwi wejściowe i wypełnić kąt drzwi wejściowych`,"pt-PT":`Por favor, coloque uma porta, defina-a como a porta de entrada e preencha o ângulo da porta de entrada`,"sr-Cyrl":`Молимо поставите врата, означите их као улазна врата и унесите угао улазних врата`,"vi-VN":`Vui lòng đặt một cửa, thiết lập nó như cửa vào và điền góc của cửa vào`,"zh-CN":`请放置一个门,设置为入户门,并填写入户门角度`,"zh-TW":`請放置一個門,設置為入戶門,並填寫入戶門角度`},存在多个入户门:{"de-DE":`Es gibt mehrere Eingangstüren`,"en-US":`There are multiple entry doors`,"es-ES":`Hay varias puertas de entrada`,"fr-FR":`Il y a plusieurs portes d'entrée`,"id-ID":`Ada beberapa pintu masuk`,"it-IT":`Ci sono più porte d'ingresso`,"ja-JP":`入戸が複数存在する`,"ko-KR":`여러 개의 입주문이 존재하다`,"ms-MY":`Terdapat pelbagai pintu masuk`,"nl-NL":`Er zijn meerdere ingangen`,"pl-PL":`Istnieje wiele drzwi wejściowych`,"pt-PT":`Existem várias portas de entrada`,"sr-Cyrl":`Постоји више улазних врата`,"vi-VN":`Có nhiều cửa vào`,"zh-CN":`存在多个入户门`,"zh-TW":`存在多個入戶門`},只能有一个入户门:{"de-DE":`Es kann nur eine Eingangstür geben`,"en-US":`There can only be one entrance door`,"es-ES":`Solo puede haber una puerta de entrada`,"fr-FR":`Il ne peut y avoir qu'une seule porte d'entrée`,"id-ID":`Hanya boleh ada satu pintu masuk`,"it-IT":`Può esserci solo una porta d'ingresso`,"ja-JP":`入戸は一つしかありません`,"ko-KR":`출입문은 하나만 있을 수 있다`,"ms-MY":`Hanya boleh ada satu pintu masuk`,"nl-NL":`Er is maar één ingang`,"pl-PL":`Może być tylko jedne drzwi wejściowe`,"pt-PT":`Só pode haver uma porta de entrada`,"sr-Cyrl":`Може постојати само једна улазна врата`,"vi-VN":`Chỉ có thể có một cửa vào`,"zh-CN":`只能有一个入户门`,"zh-TW":`只能有一個入戶門`},入户门不在外墙上:{"de-DE":`Die Eingangstür befindet sich nicht an der Außenwand`,"en-US":`The entrance door is not on the external wall`,"es-ES":`La puerta de entrada no está en la pared externa`,"fr-FR":`La porte d'entrée n'est pas sur le mur extérieur`,"id-ID":`Pintu masuk tidak berada di dinding luar`,"it-IT":`La porta d'ingresso non è sulla parete esterna`,"ja-JP":`入門は外壁にはない`,"ko-KR":`입주문은 외벽에 없다`,"ms-MY":`Pintu masuk tidak berada di dinding luar`,"nl-NL":`De ingang zit niet aan de buitenmuur`,"pl-PL":`Drzwi wejściowe nie są na zewnętrznej ścianie`,"pt-PT":`A porta de entrada não está na parede externa`,"sr-Cyrl":`Улазна врата нису на спољашњем зиду`,"vi-VN":`Cửa vào không nằm trên tường bên ngoài`,"zh-CN":`入户门不在外墙上`,"zh-TW":`入戶門不在外牆上`},入户门只能在外墙上:{"de-DE":`Die Eingangstür kann nur an der Außenwand sein`,"en-US":`The entrance door can only be on the external wall`,"es-ES":`La puerta de entrada solo puede estar en la pared externa`,"fr-FR":`La porte d'entrée ne peut être que sur le mur extérieur`,"id-ID":`Pintu masuk hanya dapat berada di dinding luar`,"it-IT":`La porta d'ingresso può essere solo sulla parete esterna`,"ja-JP":`入門は外壁だけである`,"ko-KR":`입주문은 외벽에만 있다`,"ms-MY":`Pintu masuk hanya boleh berada di dinding luar`,"nl-NL":`De ingang mag alleen aan de buitenmuur staan`,"pl-PL":`Drzwi wejściowe mogą być tylko na zewnętrznej ścianie`,"pt-PT":`A porta de entrada só pode estar na parede externa`,"sr-Cyrl":`Улазна врата могу бити само на спољашњем зиду`,"vi-VN":`Cửa vào chỉ có thể nằm trên tường bên ngoài`,"zh-CN":`入户门只能在外墙上`,"zh-TW":`入戶門只能在外牆上`},窗户不存在:{"de-DE":`Das Fenster existiert nicht`,"en-US":`The window doesn't exist`,"es-ES":`La ventana no existe`,"fr-FR":`La fenêtre n'existe pas`,"id-ID":`Jendela tidak ada`,"it-IT":`La finestra non esiste`,"ja-JP":`窓はありません`,"ko-KR":`창문이 존재하지 않습니다`,"ms-MY":`Tingkap tidak wujud`,"nl-NL":`Het raam bestaat niet`,"pl-PL":`Okno nie istnieje`,"pt-PT":`A janela não existe`,"sr-Cyrl":`Прозор не постоји`,"vi-VN":`Cửa sổ không tồn tại`,"zh-CN":`窗户不存在`,"zh-TW":`窗戶不存在`},"玻璃墙、玻璃落地墙、栅栏墙也算窗户哦":{"de-DE":`Glaswände, Glasbodenwände und Zaunwände sind auch Fenster`,"en-US":`Glass walls, glass floor walls and fence walls are also windows`,"es-ES":`Las paredes de vidrio, las paredes de piso de vidrio y las paredes de cercas también son ventanas`,"fr-FR":`Les murs en verre, les murs en verre au sol et les murs de clôture sont également des fenêtres`,"id-ID":`Dinding kaca, lantai kaca, dan dinding pagar juga merupakan jendela`,"it-IT":`Le pareti in vetro, le pareti in vetro a pavimento e le pareti di recinzione sono anche finestre`,"ja-JP":`ガラスの壁、ガラスの床につく壁、フェンスの壁も窓ですよ`,"ko-KR":`유리벽, 유리 바닥벽 및 울타리벽 역시 창문입니다`,"ms-MY":`Dinding kaca, dinding lantai kaca dan dinding pagar juga adalah tingkap`,"nl-NL":`Glazen muren, glazen vloeren muren, hekken muren zijn ramen`,"pl-PL":`Ściany szklane, szklane ściany podłogowe i ściany ogrodzeniowe są również oknami`,"pt-PT":`As paredes de vidro, as paredes de vidro do chão e as paredes de cercas também são janelas`,"sr-Cyrl":`Стаклени зидови, стаклени подни зидови и зидови ограде су такође прозори`,"vi-VN":`Các tường kính, các tường kính sàn và các tường hàng rào cũng là cửa sổ`,"zh-CN":`玻璃墙、玻璃落地墙、栅栏墙也算窗户哦`,"zh-TW":`玻璃牆、玻璃落地牆、柵欄牆也算窗戶哦`},"存在 {{0}} 个门窗重叠的墙面":{"de-DE":[`Es gibt {{0}} überlappende Türen und Fenster an der Wand`,`Es gibt {{0}} überlappende Türen und Fenster an der Wand`],"en-US":[`There is {{0}} overlapping doors and windows on the wall`,`There are {{0}} overlapping doors and windows on the wall`],"es-ES":[`Hay {{0}} puertas y ventanas superpuestas en la pared`,`Hay {{0}} puertas y ventanas superpuestas en la pared`],"fr-FR":[`Il y a {{0}} portes et fenêtres superposées sur le mur`,`Il y a {{0}} portes et fenêtres superposées sur le mur`],"id-ID":[`Ada {{0}} pintu dan jendela yang saling tumpang tindih di dinding`,`Ada {{0}} pintu dan jendela yang saling tumpang tindih di dinding`],"it-IT":[`Ci sono {{0}} porte e finestre sovrapposte sul muro`,`Ci sono {{0}} porte e finestre sovrapposte sul muro`],"ja-JP":[`壁には {{0}} の重なったドアと窓があります`,`壁には {{0}} の重なったドアと窓があります`],"ko-KR":[`벽에 {{0}} 겹쳐진 문과 창문이 있습니다`,`벽에 {{0}} 겹쳐진 문과 창문들이 있습니다`],"ms-MY":[`Terdapat {{0}} pintu dan tingkap bertindih pada dinding`,`Terdapat {{0}} pintu dan tingkap bertindih pada dinding`],"nl-NL":[`Op de muur zijn {{0}} deuren en ramen die overlappen`,`Er zijn {{0}} overlappende deuren en ramen op de muur`],"pl-PL":[`Na ścianie jest {{0}} nakładających się drzwi i okien`,`Na ścianie jest {{0}} nakładających się drzwi i okien`],"pt-PT":[`Existem {{0}} portas e janelas sobrepostas na parede`,`Existem {{0}} portas e janelas sobrepostas na parede`],"sr-Cyrl":[`Постоји {{0}} преклапајућих врата и прозора на зиду`,`На зиду се налази {{0}} преклапајућих врата и прозора`],"vi-VN":[`Có {{0}} cửa và cửa sổ chồng lên nhau trên tường`,`Có {{0}} cửa và cửa sổ chồng lên nhau trên tường`],"zh-CN":[`墙上有 {{0}} 个重叠的门窗`,`墙上有 {{0}} 个重叠的门窗`],"zh-TW":[`存在 {{0}} 個門窗重疊的牆面`,`存在 {{0}} 個門窗重疊的牆面`]},请点击查看并修改:{"de-DE":`Bitte klicken Sie, um anzuzeigen und zu bearbeiten`,"en-US":`Please click to view and modify`,"es-ES":`Por favor, haga clic para ver y modificar`,"fr-FR":`Veuillez cliquer pour voir et modifier`,"id-ID":`Silakan klik untuk melihat dan memodifikasi`,"it-IT":`Si prega di fare clic per visualizzare e modificare`,"ja-JP":`クリックして確認して修正してください`,"ko-KR":`보기 및 수정 을 클릭하십시오`,"ms-MY":`Sila klik untuk melihat dan mengubah suai`,"nl-NL":`Klik om te bekijken en te wijzigen`,"pl-PL":`Proszę kliknąć, aby wyświetlić i zmodyfikować`,"pt-PT":`Por favor, clique para visualizar e modificar`,"sr-Cyrl":`Кликните да бисте прегледали и изменили`,"vi-VN":`Vui lòng nhấp để xem và chỉnh sửa`,"zh-CN":`请点击查看并修改`,"zh-TW":`請點擊查看並修改`},户型结构与户型层数不对应:{"de-DE":`Es gibt keine Korrespondenz zwischen der Einheitenstruktur und der Anzahl der Stockwerke`,"en-US":`There is no correspondence between the unit structure and the number of floors`,"es-ES":`No hay correspondencia entre la estructura de la unidad y el número de pisos`,"fr-FR":`Il n'y a pas de correspondance entre la structure de l'unité et le nombre d'étages`,"id-ID":`Tidak ada kesesuaian antara struktur unit dan jumlah lantai`,"it-IT":`Non c'è corrispondenza tra la struttura dell'unità e il numero di piani`,"ja-JP":`世帯型構造と世帯型の層数は対応していません`,"ko-KR":`평형 구조와 평형 층수가 서로 대응하지 않는다`,"ms-MY":`Tiada kesesuaian antara struktur unit dan bilangan tingkat`,"nl-NL":`Huisbouw niet overeenkomen met het aantal huishoudelijke lagen`,"pl-PL":`Brak odpowiedniości między strukturą jednostki a liczbą pięter`,"pt-PT":`Não há correspondência entre a estrutura da unidade e o número de andares`,"sr-Cyrl":`Не постоји подударност између структуре јединице и броја спратова`,"vi-VN":`Không có sự tương ứng giữa cấu trúc đơn vị và số tầng`,"zh-CN":`户型结构与户型层数不对应`,"zh-TW":`戶型結構與戶型層數不對應`},"平层以外的户型结构要绘制多层,别忘记设置层高哦":{"de-DE":`Zeichnen Sie mehrere Stockwerke außerhalb der flachen Bodenstruktur, vergessen Sie nicht, die Stockwerkshöhe einzustellen`,"en-US":`Flat outside the flat floor structure to draw multi-storey, do not forget to set the floor height oh`,"es-ES":`Dibuja varios pisos fuera de la estructura plana del piso, no olvides configurar la altura del piso`,"fr-FR":`Dessinez plusieurs étages en dehors de la structure de sol plat, n'oubliez pas de définir la hauteur du sol`,"id-ID":`Di luar struktur lantai datar untuk menggambar bertingkat, jangan lupa untuk mengatur ketinggian lantai ya`,"it-IT":`Disegna più piani al di fuori della struttura del piano piano, non dimenticare di impostare l'altezza del piano`,"ja-JP":`平層以外の家の構造は多層を描きます。層の高さを忘れないでください`,"ko-KR":`평층 이외의 평형 구조는 여러 층을 그려야 하며, 층고를 설정하는 것을 잊지 말아야 한다`,"ms-MY":`Lukis struktur lantai rata di luar lantai rata untuk berbilang tingkat, jangan lupa tetapkan ketinggian lantai ya`,"nl-NL":`De huisstructuur buiten de laag moet meerdere lagen tekenen, vergeet niet de laaghoogte in te stellen`,"pl-PL":`Narysuj kilka pięter poza płaską strukturą piętra, nie zapomnij ustawić wysokości piętra`,"pt-PT":`Desenhe vários andares fora da estrutura plana do piso, não se esqueça de definir a altura do piso`,"sr-Cyrl":`Равно изван структуре равног пода за цртање више спратова, не заборавите да подесите висину пода ох`,"vi-VN":`Vẽ nhiều tầng ngoài cấu trúc sàn phẳng, đừng quên thiết lập chiều cao của sàn`,"zh-CN":`平层以外的户型结构要绘制多层,别忘记设置层高哦`,"zh-TW":`平層以外的戶型結構要繪製多層,別忘記設置層高哦`},有楼层未绘制:{"de-DE":`Einige Stockwerke sind nicht gezeichnet`,"en-US":`Some floors are not drawn`,"es-ES":`Algunos pisos no están dibujados`,"fr-FR":`Certains étages ne sont pas dessinés`,"id-ID":`Beberapa lantai tidak digambar`,"it-IT":`Alcuni piani non sono disegnati`,"ja-JP":`未描画のフロアがあります`,"ko-KR":`층수가 아직 그려지지 않았다`,"ms-MY":`Beberapa tingkat tidak dilukis`,"nl-NL":`De vloer is niet getekend`,"pl-PL":`Niektóre piętra nie są narysowane`,"pt-PT":`Alguns pisos não estão desenhados`,"sr-Cyrl":`Неки подови нису нацртани`,"vi-VN":`Một số tầng chưa được vẽ`,"zh-CN":`有楼层未绘制`,"zh-TW":`有樓層未繪製`},"{{0}}未绘制":{"de-DE":`{{0}} sind nicht gezeichnet`,"en-US":`{{0}} are not drawn`,"es-ES":`{{0}} no están dibujados`,"fr-FR":`{{0}} ne sont pas dessinés`,"id-ID":`{{0}} tidak digambar`,"it-IT":`{{0}} non sono disegnati`,"ja-JP":`{{0}}描かれていません`,"ko-KR":`{{0}}이(가) 렌더링되지 않음`,"ms-MY":`{{0}} tidak dilukis`,"nl-NL":`{{0}} zijn niet zichtbaar`,"pl-PL":`{{0}} nie są narysowane`,"pt-PT":`{{0}} não estão desenhados`,"sr-Cyrl":`{{0}} нису нацртани`,"vi-VN":`{{0}} chưa được vẽ`,"zh-CN":`{{0}}未绘制`,"zh-TW":`{{0}}未繪製`},户型层高未设置:{"de-DE":`Die Höhe des Hauses ist nicht eingestellt`,"en-US":`The height of house is not set`,"es-ES":`La altura de la casa no está establecida`,"fr-FR":`La hauteur de la maison n'est pas définie`,"id-ID":`Tinggi rumah belum diatur`,"it-IT":`L'altezza della casa non è impostata`,"ja-JP":`部屋の高さが設定されていません`,"ko-KR":`평형 높이가 설정되지 않았습니다`,"ms-MY":`Ketinggian rumah tidak ditetapkan`,"nl-NL":`Huishoudenhoogte niet ingesteld`,"pl-PL":`Wysokość domu nie jest ustawiona`,"pt-PT":`A altura da casa não está definida`,"sr-Cyrl":`Висина куће није постављена`,"vi-VN":`Chiều cao của ngôi nhà chưa được thiết lập`,"zh-CN":`户型层高未设置`,"zh-TW":`戶型層高未設置`},"请为{{0}}设置层高":{"de-DE":`Bitte setzen Sie die Höhe für {{0}}`,"en-US":`Please set the height for {{0}}`,"es-ES":`Por favor, establezca la altura para {{0}}`,"fr-FR":`Veuillez définir la hauteur pour {{0}}`,"id-ID":`Silakan atur ketinggian untuk {{0}}`,"it-IT":`Si prega di impostare l'altezza per {{0}}`,"ja-JP":`{{0}}の高さを設定してください`,"ko-KR":`{{0}}의 높이를 설정하십시오`,"ms-MY":`Sila tetapkan ketinggian untuk {{0}}`,"nl-NL":`Geef de hoogte op voor {{0}}`,"pl-PL":`Proszę ustawić wysokość dla {{0}}`,"pt-PT":`Por favor, defina a altura para {{0}}`,"sr-Cyrl":`Молимо поставите висину за {{0}}`,"vi-VN":`Vui lòng thiết lập chiều cao cho {{0}}`,"zh-CN":`请为{{0}}设置层高`,"zh-TW":`請為{{0}}設置層高`},没有楼梯:{"de-DE":`Es gibt keine Treppen`,"en-US":`There are no stairs`,"es-ES":`No hay escaleras`,"fr-FR":`Il n'y a pas d'escaliers`,"id-ID":`Tidak ada tangga`,"it-IT":`Non ci sono scale`,"ja-JP":`階段がありません`,"ko-KR":`계단이 없다`,"ms-MY":`Tiada tangga`,"nl-NL":`Geen trap`,"pl-PL":`Nie ma schodów`,"pt-PT":`Não há escadas`,"sr-Cyrl":`Нема степеница`,"vi-VN":`Không có cầu thang`,"zh-CN":`没有楼梯`,"zh-TW":`沒有樓梯`},"请为 {{0}} 层绘制楼梯":{"de-DE":`Bitte zeichnen Sie Treppen für Ebene {{0}}`,"en-US":`Please draw stairs for level {{0}}`,"es-ES":`Por favor, dibuja escaleras para el nivel {{0}}`,"fr-FR":`Veuillez dessiner des escaliers pour le niveau {{0}}`,"id-ID":`Harap gambar tangga untuk level {{0}}`,"it-IT":`Si prega di disegnare le scale per il livello {{0}}`,"ja-JP":`レベル{{0}}の階段を描画してください`,"ko-KR":`{{0}} 레벨용 계단을 작성해주세요`,"ms-MY":`Sila lukis tangga untuk tingkat {{0}}`,"nl-NL":`Teken een trap voor niveau {{0}}`,"pl-PL":`Proszę narysować schody dla poziomu {{0}}`,"pt-PT":`Por favor, desenhe escadas para o nível {{0}}`,"sr-Cyrl":`Молимо вас да нацртате степенице за ниво {{0}}`,"vi-VN":`Vui lòng vẽ cầu thang cho tầng {{0}}`,"zh-CN":`请为 {{0}} 层绘制楼梯`,"zh-TW":`請為{{0}}層繪製樓梯`},楼层名称重复:{"de-DE":`Doppelter Stockwerksname`,"en-US":`Duplicate floor name`,"es-ES":`Nombre de piso duplicado`,"fr-FR":`Nom de l'étage en double`,"id-ID":`Nama lantai duplikat`,"it-IT":`Nome del piano duplicato`,"ja-JP":`フロア名重複`,"ko-KR":`층명 중복`,"ms-MY":`Nama tingkat berulang`,"nl-NL":`De naam van de vloer herhaald`,"pl-PL":`Powtórzona nazwa piętra`,"pt-PT":`Nome do piso duplicado`,"sr-Cyrl":`Дуплирано име спрата`,"vi-VN":`Tên tầng trùng lặp`,"zh-CN":`楼层名称重复`,"zh-TW":`樓層名稱重複`},"楼层名称是区别楼层的重要标识,不能重复":{"de-DE":`Der Name des Stockwerks ist eine wichtige Kennzeichnung zur Unterscheidung des Stockwerks und darf nicht wiederholt werden`,"en-US":`The name of the floor is an important identification to distinguish the floor and cannot be repeated`,"es-ES":`El nombre del piso es una identificación importante para distinguir el piso y no puede repetirse`,"fr-FR":`Le nom de l'étage est une identification importante pour distinguer l'étage et ne peut pas être répété`,"id-ID":`Nama lantai adalah identifikasi penting untuk membedakan lantai dan tidak boleh diulang`,"it-IT":`Il nome del piano è un'importante identificazione per distinguere il piano e non può essere ripetuto`,"ja-JP":`フロア名は、フロアを区別する重要な表示であり、重複してはいけません`,"ko-KR":`층명은 층수를 구별하는 중요한 표지이므로 중복해서는 안 된다`,"ms-MY":`Nama tingkat adalah pengenalan penting untuk membezakan tingkat dan tidak boleh diulang`,"nl-NL":`De naam van de vloer is een belangrijk kenmerk van het onderscheid tussen de vloeren en kan niet worden herhaald`,"pl-PL":`Nazwa piętra jest ważnym identyfikatorem do rozróżniania piętra i nie może być powtórzona`,"pt-PT":`O nome do piso é uma identificação importante para distinguir o piso e não pode ser repetido`,"sr-Cyrl":`Име спрата је важна идентификација за разликовање спратова и не може се понављати`,"vi-VN":`Tên của tầng là một định danh quan trọng để phân biệt tầng và không thể lặp lại`,"zh-CN":`楼层名称是区别楼层的重要标识,不能重复`,"zh-TW":`樓層名稱是區別樓層的重要標識,不能重複`},"{{0}} 个房间名称不在房间内":{"de-DE":[`Der Raumname von {{0}} ist nicht im Raum`,`Die Raumnamen von {{0}} sind nicht im Raum`],"en-US":[`{{0}} room name is not in the room`,`{{0}} room names are not in the room`],"es-ES":[`El nombre de la {{0}} habitación no está en la habitación`,`Los nombres de las {{0}} habitaciones no están en la habitación`],"fr-FR":[`Le nom de la chambre {{0}} n'est pas dans la chambre`,`Les noms des chambres {{0}} ne sont pas dans la chambre`],"id-ID":[`Nama ruangan {{0}} tidak ada di ruangan`,`Nama ruangan {{0}} tidak ada di ruangan`],"it-IT":[`Il nome della stanza {{0}} non è nella stanza`,`I nomi delle stanze {{0}} non sono nella stanza`],"ja-JP":[`{{0}} の部屋名が部屋にありません`,`{{0}} の部屋名が部屋にありません`],"ko-KR":[`{{0}} 방 이름이 방에 없습니다`,`{{0}} 방 이름들이 방에 없습니다`],"ms-MY":[`Nama bilik {{0}} tidak berada dalam bilik`,`Nama-nama bilik {{0}} tidak berada dalam bilik`],"nl-NL":[`{{0}} kamernaam is niet in de kamer`,`{{0}} kamernamen zijn niet in de kamer`],"pl-PL":[`Nazwa pokoju {{0}} nie jest w pokoju`,`Nazwy pokoi {{0}} nie są w pokoju`],"pt-PT":[`O nome do quarto {{0}} não está no quarto`,`Os nomes dos {{0}} quartos não estão no quarto`],"sr-Cyrl":[`{{0}} име собе није у соби`,`{{0}} имена соба нису у соби`],"vi-VN":[`Tên phòng {{0}} không có trong phòng`,`Tên của {{0}} phòng không có trong phòng`],"zh-CN":[`{{0}} 房间名称不在房间内`,`{{0}} 个房间名称不在房间内`],"zh-TW":[`{{0}} 個房間的名稱不在房間內`,`{{0}} 個房間的名稱不在房間內`]},请把房间名称标签拖拽到对应房间中:{"de-DE":`Bitte ziehen Sie das Raumnamen-Label in den entsprechenden Raum`,"en-US":`Please drag the room name label to the corresponding room`,"es-ES":`Por favor, arrastra la etiqueta del nombre de la habitación a la habitación correspondiente`,"fr-FR":`Veuillez faire glisser l'étiquette du nom de la chambre vers la chambre correspondante`,"id-ID":`Silakan seret label nama ruangan ke ruangan yang sesuai`,"it-IT":`Per favore trascina l'etichetta del nome della stanza nella stanza corrispondente`,"ja-JP":`部屋の名前ラベルを対応部屋にドラッグしてください`,"ko-KR":`방 이름 태그를 해당 방으로 드래그하십시오`,"ms-MY":`Sila seret label nama bilik ke bilik yang sepadan`,"nl-NL":`Sleep het kamernaam-label naar de juiste kamer`,"pl-PL":`Proszę przeciągnąć etykietę nazwy pokoju do odpowiedniego pokoju`,"pt-PT":`Por favor, arraste o rótulo do nome do quarto para o quarto correspondente`,"sr-Cyrl":`Молимо вас да превучете ознаку имена просторије у одговарајућу просторију`,"vi-VN":`Vui lòng kéo nhãn tên phòng vào phòng tương ứng`,"zh-CN":`请把房间名称标签拖拽到对应房间中`,"zh-TW":`請將房間名稱標籤拖拽到對應的房間中`},"存在 {{0}} 个虚拟墙作为外墙的情况":{"de-DE":[`Es gibt {{0}} virtuelle Wand als Außenwand`,`Es gibt {{0}} virtuelle Wände als Außenwände`],"en-US":[`There is {{0}} virtual wall as external wall`,`There are {{0}} virtual walls as external walls`],"es-ES":[`Hay {{0}} pared virtual como pared externa`,`Hay {{0}} paredes virtuales como paredes externas`],"fr-FR":[`Il y a {{0}} mur virtuel en tant que mur extérieur`,`Il y a {{0}} murs virtuels en tant que murs extérieurs`],"id-ID":[`Ada {{0}} dinding virtual sebagai dinding eksternal`,`Ada {{0}} dinding virtual sebagai dinding eksternal`],"it-IT":[`Ci sono {{0}} parete virtuale come parete esterna`,`Ci sono {{0}} pareti virtuali come pareti esterne`],"ja-JP":[`外壁として {{0}} の仮想壁があります`,`外壁として {{0}} の仮想壁があります`],"ko-KR":[`외벽으로 {{0}} 가상 벽이 있습니다`,`외벽으로 {{0}} 가상 벽들이 있습니다`],"ms-MY":[`Terdapat {{0}} dinding maya sebagai dinding luar`,`Terdapat {{0}} dinding maya sebagai dinding luar`],"nl-NL":[`Er is {{0}} virtuele muur als buitenmuur`,`Er zijn {{0}} virtuele muren als buitenmuren`],"pl-PL":[`Istnieje {{0}} ściana wirtualna jako ściana zewnętrzna`,`Istnieje {{0}} ściany wirtualne jako ściany zewnętrzne`],"pt-PT":[`Há {{0}} parede virtual como parede externa`,`Há {{0}} paredes virtuais como paredes externas`],"sr-Cyrl":[`Постоји {{0}} виртуелни зид као спољашњи зид`,`Постоји {{0}} виртуелних зидова као спољашњи зидови`],"vi-VN":[`Có {{0}} tường ảo làm thành tường bên ngoài`,`Có {{0}} tường ảo làm thành tường bên ngoài`],"zh-CN":[`有 {{0}} 面虚拟墙作为外墙`,`有 {{0}} 面虚拟墙作为外墙`],"zh-TW":[`存在 {{0}} 個虛擬牆作為外牆的情況`,`存在 {{0}} 個虛擬牆作為外牆的情況`]},外墙不能是虚拟墙:{"de-DE":`Virtuelle Wände können keine virtuellen Wände sein`,"en-US":`Virtual walls cannot be virtual walls`,"es-ES":`Las paredes virtuales no pueden ser paredes virtuales`,"fr-FR":`Les murs virtuels ne peuvent pas être des murs virtuels`,"id-ID":`Dinding virtual tidak dapat menjadi dinding virtual`,"it-IT":`Le pareti virtuali non possono essere pareti virtuali`,"ja-JP":`仮想壁が外壁としてはいけませんでした`,"ko-KR":`외벽은 가상 벽이 될 수 없습니다`,"ms-MY":`Dinding maya tidak boleh menjadi dinding maya`,"nl-NL":`Een muur kan geen virtuele muur zijn`,"pl-PL":`Ściany wirtualne nie mogą być ścianami wirtualnymi`,"pt-PT":`Paredes virtuais não podem ser paredes virtuais`,"sr-Cyrl":`Виртуелни зидови не могу бити виртуелни зидови`,"vi-VN":`Tường ảo không thể là tường ảo`,"zh-CN":`外墙不能是虚拟墙`,"zh-TW":`外牆不能是虛擬牆`},"{{0}} 个房间名称重复":{"de-DE":`Es gibt {{0}} doppelte Raumnamen`,"en-US":`There are {{0}} duplicate room names`,"es-ES":`Hay {{0}} nombres de habitaciones duplicados`,"fr-FR":`Il y a {{0}} noms de chambres en double`,"id-ID":`Ada {{0}} nama ruangan yang duplikat`,"it-IT":`Ci sono {{0}} nomi di stanze duplicati`,"ja-JP":`{{0}}個の部屋名が重複しています`,"ko-KR":`중복된 방 이름이 {{0}}개 있습니다`,"ms-MY":`Terdapat {{0}} nama bilik yang berulang`,"nl-NL":`Er zijn {{0}} dubbele kamernamen`,"pl-PL":`Istnieje {{0}} zduplikowanych nazw pokoi`,"pt-PT":`Existem {{0}} nomes de quartos duplicados`,"sr-Cyrl":`Постоје {{0}} дупликати назива просторија`,"vi-VN":`Có {{0}} tên phòng trùng lặp`,"zh-CN":`{{0}} 个房间名称重复`,"zh-TW":`{{0}} 個房間名稱重複`},"请为 {{0}} 修改类型或序号或别名":{"de-DE":`Bitte ändern Sie den Typ oder die Seriennummer oder den Alias für {{0}}`,"en-US":`Please modify the type or serial number or alias for {{0}}`,"es-ES":`Por favor, modifique el tipo o el número de serie o el alias para {{0}}`,"fr-FR":`Veuillez modifier le type, le numéro de série ou l'alias pour {{0}}`,"id-ID":`Silakan ubah tipe atau nomor seri atau alias untuk {{0}}`,"it-IT":`Si prega di modificare il tipo o il numero di serie o l'alias per {{0}}`,"ja-JP":`{{0}}のタイプ、シリアル番号、またはエイリアスを変更してください`,"ko-KR":`{{0}}의 종류, 번호 또는 별칭을 수정하십시오`,"ms-MY":`Sila ubah jenis atau nombor siri atau alias untuk {{0}}`,"nl-NL":`Bewerk het type, serienummer of alias van {{0}}`,"pl-PL":`Proszę zmodyfikować typ lub numer seryjny lub alias dla {{0}}`,"pt-PT":`Por favor, modifique o tipo ou o número de série ou o alias para {{0}}`,"sr-Cyrl":`Молимо измените тип или серијски број или алијас за {{0}}`,"vi-VN":`Vui lòng sửa đổi loại hoặc số serial hoặc bí danh cho {{0}}`,"zh-CN":`请为 {{0}} 修改类型或序号或别名`,"zh-TW":`請為 {{0}} 修改類型或序號或別名`},'{{0}} 个房间类型为"其他"':{"de-DE":`{{0}} Raumtypen sind "andere"`,"en-US":`{{0}} room types are "other"`,"es-ES":`Los tipos de habitación de {{0}} son "otros"`,"fr-FR":`Les types de chambre de {{0}} sont "autres"`,"id-ID":`Jenis ruangan {{0}} adalah "lainnya"`,"it-IT":`{{0}} tipi di stanza sono "altro"`,"ja-JP":`{{0}}個の部屋タイプは"その他"です`,"ko-KR":`{{0}} 객실 타입은"기타"`,"ms-MY":`Jenis bilik {{0}} adalah "lain-lain"`,"nl-NL":`{{0}} kamertypes zijn "overige"`,"pl-PL":`Typy pokoi {{0}} to "inne"`,"pt-PT":`Os tipos de quarto de {{0}} são "outros"`,"sr-Cyrl":`Типови просторија {{0}} су "други"`,"vi-VN":`Có {{0}} loại phòng là "khác"`,"zh-CN":`{{0}} 个房间类型为"其他"`,"zh-TW":`{{0}} 個房間類型為"其他"`},'该房源所属业务线不允许房间类型为"其他"':{"de-DE":`Die Geschäftslinie der Quelle erlaubt den Raumtyp nicht als "andere"`,"en-US":`The business line of the source does not allow the room type to be "other"`,"es-ES":`La línea de negocio de la fuente no permite que el tipo de habitación sea "otro"`,"fr-FR":`La ligne de métier de la source n'autorise pas le type de chambre à être "autre"`,"id-ID":`Lini bisnis sumber tidak mengizinkan jenis ruangan menjadi "lainnya"`,"it-IT":`La linea di business della fonte non consente che il tipo di stanza sia "altro"`,"ja-JP":`この不動産源の所属業務線は部屋のタイプが「その他」であることを禁止しています`,"ko-KR":`이 주택 공급원이 속한 업무 라인에서는 방 유형을 "기타" 로 허용하지 않습니다`,"ms-MY":`Garis perniagaan sumber tidak membenarkan jenis bilik menjadi "lain-lain"`,"nl-NL":`De bedrijfslijn van deze accommodatie staat het kamertype niet toe als "Andere"`,"pl-PL":`Linia biznesowa źródła nie zezwala na typ pokoju "inne"`,"pt-PT":`A linha de negócios da fonte não permite que o tipo de quarto seja "outro"`,"sr-Cyrl":`Пословна линија извора не дозвољава да тип просторије буде „друго“`,"vi-VN":`Dòng kinh doanh của nguồn không cho phép loại phòng là "khác"`,"zh-CN":`该房源所属业务线不允许房间类型为"其他"`,"zh-TW":`該房源所屬業務線不允許房間類型為"其他"`},室厅厨卫不齐全:{"de-DE":`Unvollständige Raumtypen`,"en-US":`Incomplete room types`,"es-ES":`Tipos de habitación incompletos`,"fr-FR":`Types de chambre incomplets`,"id-ID":`Jenis ruangan tidak lengkap`,"it-IT":`Tipi di stanza incompleti`,"ja-JP":`不完全な部屋タイプ`,"ko-KR":`룸 과 욕실 이 미비 하다`,"ms-MY":`Jenis bilik tidak lengkap`,"nl-NL":`Onvolledige keuken`,"pl-PL":`Niekompletne typy pokoi`,"pt-PT":`Tipos de quarto incompletos`,"sr-Cyrl":`Непотпуни типови просторија`,"vi-VN":`Loại phòng không đầy đủ`,"zh-CN":`室厅厨卫不齐全`,"zh-TW":`室廳廚衛不齊全`},请为相应功能间设置房间类型或房间辅功能:{"de-DE":`Bitte setzen Sie den Raumtyp oder die Raumhilfsfunktion für den entsprechenden Funktionsraum`,"en-US":`Please set room type or room auxiliary function for corresponding function room`,"es-ES":`Por favor, establezca el tipo de habitación o la función auxiliar de la habitación para la sala de funciones correspondiente`,"fr-FR":`Veuillez définir le type de chambre ou la fonction auxiliaire de la chambre pour la salle de fonction correspondante`,"id-ID":`Silakan atur jenis ruangan atau fungsi tambahan ruangan untuk ruangan fungsi yang sesuai`,"it-IT":`Si prega di impostare il tipo di stanza o la funzione ausiliaria della stanza per la stanza di funzione corrispondente`,"ja-JP":`機能室には部屋のタイプや部屋の補助機能を設定してください`,"ko-KR":`해당 기능 간의 공간 유형 또는 공간 보조 기능을 설정하십시오`,"ms-MY":`Sila tetapkan jenis bilik atau fungsi tambahan bilik untuk bilik fungsi yang sepadan`,"nl-NL":`Stel het kamertype of de extra kamer in voor de kamer`,"pl-PL":`Proszę ustawić typ pokoju lub funkcję pomocniczą pokoju dla odpowiadającego pokoju funkcjonalnego`,"pt-PT":`Por favor, defina o tipo de quarto ou a função auxiliar do quarto para o quarto de função correspondente`,"sr-Cyrl":`Молимо подесите тип просторије или помоћну функцију просторије за одговарајућу функционалну просторију`,"vi-VN":`Vui lòng thiết lập loại phòng hoặc chức năng phụ trợ của phòng cho phòng chức năng tương ứng`,"zh-CN":`请为相应功能间设置房间类型或房间辅功能`,"zh-TW":`請為相應功能間設置房間類型或房間輔功能`},"{{0}} 个卧室没有窗户":{"de-DE":[`Es gibt ein Schlafzimmer ohne Fenster`,`Es gibt {{0}} Schlafzimmer ohne Fenster`],"en-US":[`There is a bedroom has no window`,`There are {{0}} bedrooms have no window`],"es-ES":[`Hay un dormitorio que no tiene ventana`,`Hay {{0}} dormitorios que no tienen ventana`],"fr-FR":[`Il y a une chambre sans fenêtre`,`Il y a {{0}} chambres sans fenêtre`],"id-ID":[`Ada satu kamar tidur yang tidak memiliki jendela`,`Ada {{0}} kamar tidur yang tidak memiliki jendela`],"it-IT":[`C'è una camera da letto senza finestra`,`Ci sono {{0}} camere da letto senza finestra`],"ja-JP":[`窓のない寝室があります`,`窓のない寝室が {{0}} 部屋あります`],"ko-KR":[`창문이 없는 침실이 있습니다`,`{{0}} 창문이 없는 침실들이 있습니다`],"ms-MY":[`Terdapat sebuah bilik tidur tiada tingkap`,`Terdapat {{0}} bilik tidur tiada tingkap`],"nl-NL":[`Er is een slaapkamer zonder raam`,`Er zijn {{0}} slaapkamers zonder raam`],"pl-PL":[`Jest sypialnia bez okna`,`Jest {{0}} sypialni bez okna`],"pt-PT":[`Há um quarto que não tem janela`,`Há {{0}} quartos que não têm janela`],"sr-Cyrl":[`Постоји спаваћа соба без прозора`,`Постоји {{0}} спаваћих соба без прозора`],"vi-VN":[`Có một phòng ngủ không có cửa sổ`,`Có {{0}} phòng ngủ không có cửa sổ`],"zh-CN":[`有一间卧室没有窗户`,`有 {{0}} 间卧室没有窗户`],"zh-TW":[`有一個臥室沒有窗戶`,`有 {{0}} 個臥室沒有窗戶`]},是不是忘记绘制了呢:{"de-DE":`Haben Sie vergessen zu zeichnen`,"en-US":`Did you forget to draw`,"es-ES":`¿Olvidaste dibujar?`,"fr-FR":`Avez-vous oublié de dessiner`,"id-ID":`Apakah Anda lupa menggambar`,"it-IT":`Hai dimenticato di disegnare`,"ja-JP":`描き忘れましたか`,"ko-KR":`그리는 걸 깜빡했네`,"ms-MY":`Adakah anda terlupa untuk melukis`,"nl-NL":`Ben je vergeten te tekenen`,"pl-PL":`Czy zapomniałeś narysować`,"pt-PT":`Esqueceu-se de desenhar`,"sr-Cyrl":`Да ли сте заборавили да нацртате`,"vi-VN":`Bạn có quên vẽ không`,"zh-CN":`是不是忘记绘制了呢`,"zh-TW":`是不是忘記繪製了呢`},"{{0}} 个房间没有门":{"de-DE":[`Es gibt einen Raum ohne Tür`,`Es gibt {{0}} Räume ohne Tür`],"en-US":[`There is a room has no door`,`There are {{0}} rooms have no door`],"es-ES":[`Hay una habitación que no tiene puerta`,`Hay {{0}} habitaciones que no tienen puerta`],"fr-FR":[`Il y a une pièce sans porte`,`Il y a {{0}} pièces sans porte`],"id-ID":[`Ada ruangan yang tidak memiliki pintu`,`Ada {{0}} ruangan tanpa pintu`],"it-IT":[`C'è una stanza senza porta`,`Ci sono {{0}} stanze senza porta`],"ja-JP":[`ドアのない部屋があります`,`ドアのない部屋が {{0}} 部屋あります`],"ko-KR":[`문이 없는 방이 있습니다`,`{{0}} 문이 없는 방들이 있습니다`],"ms-MY":[`Terdapat sebuah bilik tiada pintu`,`Terdapat {{0}} bilik tiada pintu`],"nl-NL":[`Er is een kamer zonder deur`,`Er zijn {{0}} kamers zonder deur`],"pl-PL":[`Jest pokój bez drzwi`,`Jest {{0}} pokoi bez drzwi`],"pt-PT":[`Há um quarto que não tem porta`,`Há {{0}} quartos que não têm porta`],"sr-Cyrl":[`Постоји просторија која нема врата`,`Постоји {{0}} соба без врата`],"vi-VN":[`Có một phòng không có cửa`,`Có {{0}} phòng không có cửa`],"zh-CN":[`有一间房间没有门`,`有 {{0}} 间房间没有门`],"zh-TW":[`有一個房間沒有門`,`有 {{0}} 個房間沒有門`]},没有实体门的话可以放置垭口哦:{"de-DE":`Wenn keine physische Tür vorhanden ist, können Sie den Durchgang platzieren`,"en-US":`If there is no physical door, you can place the pass`,"es-ES":`Si no hay una puerta física, puedes colocar el pase`,"fr-FR":`S'il n'y a pas de porte physique, vous pouvez placer le passage`,"id-ID":`Jika tidak ada pintu fisik, Anda dapat meletakkan lorong`,"it-IT":`Se non c'è una porta fisica, puoi posizionare il pass`,"ja-JP":`本体ドアがないなら、パスに置いてもいいですよ`,"ko-KR":`실제 문이 없으면 산골짜기를 놓을 수 있어요`,"ms-MY":`Jika tiada pintu fizikal, anda boleh meletakkan laluan`,"nl-NL":`Als er geen fysieke deur is, kun je een poot plaatsen`,"pl-PL":`Jeśli nie ma fizycznych drzwi, możesz umieścić przejście`,"pt-PT":`Se não houver porta física, pode colocar o passe`,"sr-Cyrl":`Ако нема физичких врата, можете поставити пролаз`,"vi-VN":`Nếu không có cửa vật lý, bạn có thể đặt qua`,"zh-CN":`没有实体门的话可以放置垭口哦`,"zh-TW":`如果沒有實體門的話可以放置垭口哦`},"{{0}} 个房间没有家具":{"de-DE":[`Es gibt einen Raum ohne Möbel`,`Es gibt {{0}} Räume ohne Möbel`],"en-US":[`There is a room has no furniture`,`There are {{0}} rooms have no furniture`],"es-ES":[`Hay una habitación que no tiene muebles`,`Hay {{0}} habitaciones que no tienen muebles`],"fr-FR":[`Il y a une chambre sans mobilier`,`Il y a {{0}} chambres sans mobilier`],"id-ID":[`Ada sebuah ruangan tanpa furnitur`,`Ada {{0}} ruangan tanpa perabotan`],"it-IT":[`C'è una stanza senza mobili`,`Ci sono {{0}} stanze senza mobili`],"ja-JP":[`家具のない部屋があります`,`家具のない部屋が {{0}} 部屋あります`],"ko-KR":[`가구가 없는 방이 있습니다`,`{{0}} 가구가 없는 방들이 있습니다`],"ms-MY":[`Terdapat sebuah bilik tiada perabot`,`Terdapat {{0}} bilik tiada perabot`],"nl-NL":[`Er is een kamer zonder meubels`,`Er zijn {{0}} kamers zonder meubels`],"pl-PL":[`Jest pokój bez mebli`,`Jest {{0}} pokoi bez mebli`],"pt-PT":[`Há um quarto que não tem mobília`,`Há {{0}} quartos que não têm mobília`],"sr-Cyrl":[`Постоји соба без намештаја`,`Постоји {{0}} соба без намештаја`],"vi-VN":[`Có một phòng không có đồ nội thất`,`Có {{0}} phòng không có đồ nội thất`],"zh-CN":[`有一间房间没有家具`,`有 {{0}} 间房间没有家具`],"zh-TW":[`有一個房間沒有家具`,`有 {{0}} 個房間沒有家具`]},住房类型的空间摆放家具可以提高审核通过率:{"de-DE":`Möbel im Wohnungsraum können die Genehmigungsrate verbessern`,"en-US":`Housing type space furniture can improve the approval rate`,"es-ES":`El mobiliario del espacio del tipo de vivienda puede mejorar la tasa de aprobación`,"fr-FR":`Les meubles de type logement peuvent améliorer le taux d'approbation`,"id-ID":`Furnitur ruang tipe hunian dapat meningkatkan tingkat persetujuan`,"it-IT":`I mobili dello spazio di tipo abitativo possono migliorare il tasso di approvazione`,"ja-JP":`住宅タイプの空間に家具を置くと審査の通過率が高くなります`,"ko-KR":`주택 유형의 공간에 가구를 배치하면 심사 통과율을 높일 수 있다`,"ms-MY":`Perabot ruang jenis rumah boleh meningkatkan kadar kelulusan`,"nl-NL":`Het plaatsen van meubels in de ruimte voor huisvestingstypen kan het auditpercentage verbeteren`,"pl-PL":`Meble w przestrzeni typu mieszkalnego mogą poprawić wskaźnik zatwierdzenia`,"pt-PT":`O mobiliário do espaço do tipo de habitação pode melhorar a taxa de aprovação`,"sr-Cyrl":`Намештај у простору типа становања може побољшати стопу одобрења`,"vi-VN":`Đồ nội thất không gian loại nhà ở có thể cải thiện tỷ lệ phê duyệt`,"zh-CN":`住房类型的空间摆放家具可以提高审核通过率`,"zh-TW":`住房類型的空間放置家具可以提高審核通過率`},没有任何家具:{"de-DE":`Es gibt keine Möbel`,"en-US":`There is no furniture`,"es-ES":`No hay ningún mueble`,"fr-FR":`Il n'y a aucun meuble`,"id-ID":`Tidak ada furnitur`,"it-IT":`Non ci sono mobili`,"ja-JP":`家具は何もありません`,"ko-KR":`아무런 가구도 없다`,"ms-MY":`Tiada perabot`,"nl-NL":`Geen meubels`,"pl-PL":`Nie ma żadnych mebli`,"pt-PT":`Não há mobília`,"sr-Cyrl":`Нема намештаја`,"vi-VN":`Không có đồ nội thất nào`,"zh-CN":`没有任何家具`,"zh-TW":`沒有任何家具`},请为核心房间添加相应家具:{"de-DE":`Bitte fügen Sie Möbel zum Hauptzimmer hinzu`,"en-US":`Please add furniture to the main room`,"es-ES":`Por favor, añade muebles a la habitación principal`,"fr-FR":`Veuillez ajouter des meubles à la pièce principale`,"id-ID":`Harap tambahkan furnitur ke ruang utama`,"it-IT":`Si prega di aggiungere mobili alla stanza principale`,"ja-JP":`重要ルームに家具を追加してください`,"ko-KR":`코어 룸에 적절한 가구를 추가하십시오`,"ms-MY":`Sila tambah perabot ke bilik utama`,"nl-NL":`Voeg de juiste meubels toe aan de kernkamer`,"pl-PL":`Proszę dodać meble do głównego pokoju`,"pt-PT":`Por favor, adicione mobília ao quarto principal`,"sr-Cyrl":`Молимо додајте намештај у главну собу`,"vi-VN":`Vui lòng thêm đồ nội thất vào phòng chính`,"zh-CN":`请为核心房间添加相应家具`,"zh-TW":`請為核心房間添加相應家具`},"{{0}} 个家具不在房间内":{"de-DE":[`ein Möbelstück ist nicht im Raum`,`{{0}} Möbelstücke sind nicht im Raum`],"en-US":[`a piece of furniture is not in the room`,`{{0}} pieces of furniture are not in the room`],"es-ES":[`un mueble no está en la habitación`,`{{0}} muebles no están en la habitación`],"fr-FR":[`un meuble n'est pas dans la pièce`,`{{0}} meubles ne sont pas dans la pièce`],"id-ID":[`sebuah furnitur tidak ada di ruangan`,`{{0}} buah furnitur tidak ada di ruangan`],"it-IT":[`un pezzo di mobili non è nella stanza`,`{{0}} pezzi di mobili non sono nella stanza`],"ja-JP":[`家具が部屋にありません`,`{{0}} 個の家具が部屋にありません`],"ko-KR":[`가구 한 점이 방에 없습니다`,`{{0}} 가구들이 방에 없습니다`],"ms-MY":[`sebuah perabot tidak berada dalam bilik`,`{{0}} perabot tidak berada di dalam bilik`],"nl-NL":[`Een meubelstuk is niet in de kamer`,`{{0}} meubelstukken zijn niet in de kamer`],"pl-PL":[`jeden mebel nie jest w pokoju`,`{{0}} mebli nie ma w pokoju`],"pt-PT":[`um móvel não está no quarto`,`{{0}} móveis não estão no quarto`],"sr-Cyrl":[`комад намештаја није у просторији`,`{{0}} комада намештаја није у просторији`],"vi-VN":[`một món đồ nội thất không ở trong phòng`,`{{0}} món đồ nội thất không ở trong phòng`],"zh-CN":[`一件家具不在房间内`,`{{0}} 件家具不在房间内`],"zh-TW":[`一件家具不在房間內`,`{{0}} 個家具不在房間內`]},请将家具拖拽到相应的房间中:{"de-DE":`Bitte ziehen Sie die Möbel in den entsprechenden Raum`,"en-US":`Please drag the furniture to the corresponding room`,"es-ES":`Por favor, arrastra los muebles a la habitación correspondiente`,"fr-FR":`Veuillez faire glisser les meubles dans la pièce correspondante`,"id-ID":`Silakan seret furnitur ke ruangan yang sesuai`,"it-IT":`Si prega di trascinare i mobili nella stanza corrispondente`,"ja-JP":`家具を該当の部屋に引っ張ってください`,"ko-KR":`가구를 해당 방으로 드래그하십시오`,"ms-MY":`Sila seret perabot ke bilik yang sepadan`,"nl-NL":`Sleep het meubilair naar de juiste kamer`,"pl-PL":`Proszę przeciągnąć meble do odpowiedniego pokoju`,"pt-PT":`Por favor, arraste a mobília para o quarto correspondente`,"sr-Cyrl":`Молимо вас да превучете намештај у одговарајућу просторију`,"vi-VN":`Vui lòng kéo đồ nội thất vào phòng tương ứng`,"zh-CN":`请将家具拖拽到相应的房间中`,"zh-TW":`請將家具拖拽到相應的房間中`},"主层高必须大于{{0}}":{"de-DE":`Die Höhe des Hauptgeschosses muss größer sein als {{0}}`,"en-US":`The height of main floor must be greater than {{0}}`,"es-ES":`La altura del piso principal debe ser mayor que {{0}}`,"fr-FR":`La hauteur de l'étage principal doit être supérieure à {{0}}`,"id-ID":`Tinggi lantai utama harus lebih besar dari {{0}}`,"it-IT":`L'altezza del piano principale deve essere maggiore di {{0}}`,"ja-JP":`メイン層の高さは{{0}}以上でなければなりません`,"ko-KR":`본층의 높이는 {{0}}보다 높아야 합니다`,"ms-MY":`Ketinggian lantai utama mesti lebih tinggi daripada {{0}}`,"nl-NL":`De hoogte van de hoofdverdieping dient meer te zijn dan {{0}}`,"pl-PL":`Wysokość głównego piętra musi być większa niż {{0}}`,"pt-PT":`A altura do piso principal deve ser maior que {{0}}`,"sr-Cyrl":`Висина главног спрата мора бити већа од {{0}}`,"vi-VN":`Chiều cao của tầng chính phải lớn hơn {{0}}`,"zh-CN":`主层高必须大于{{0}}`,"zh-TW":`主層高必須大於{{0}}`},请重新设置主层高:{"de-DE":`Bitte setzen Sie die Höhe des Hauptgeschosses zurück`,"en-US":`Please reset the height of the main floor`,"es-ES":`Por favor, restablezca la altura del piso principal`,"fr-FR":`Veuillez réinitialiser la hauteur de l'étage principal`,"id-ID":`Silakan atur ulang tinggi lantai utama`,"it-IT":`Si prega di reimpostare l'altezza del piano principale`,"ja-JP":`メイン層の高さを再設定してください`,"ko-KR":`주 계층 높이를 재설정하십시오`,"ms-MY":`Sila tetapkan semula ketinggian lantai utama`,"nl-NL":`Stel de hoofdhoogte opnieuw in`,"pl-PL":`Proszę ponownie ustawić wysokość głównego piętra`,"pt-PT":`Por favor, redefina a altura do piso principal`,"sr-Cyrl":`Молимо вас да ресетујете висину главног спрата`,"vi-VN":`Vui lòng đặt lại chiều cao của tầng chính`,"zh-CN":`请重新设置主层高`,"zh-TW":`請重新設置主層高`},主层高必须大于辅层高:{"de-DE":`Die Höhe des Hauptgeschosses muss größer sein als die des Nebengeschosses`,"en-US":`The height of the main floor must be greater than that of the auxiliary floor`,"es-ES":`La altura del piso principal debe ser mayor que la del piso auxiliar`,"fr-FR":`La hauteur de l'étage principal doit être supérieure à celle de l'étage auxiliaire`,"id-ID":`Ketinggian lantai utama harus lebih besar daripada lantai tambahan`,"it-IT":`L'altezza del piano principale deve essere maggiore di quella del piano ausiliario`,"ja-JP":`メイン層の高さはサブ層の高さより大きくなければなりません`,"ko-KR":`주층 높이는 반드시 부층 높이보다 커야 한다`,"ms-MY":`Ketinggian lantai utama mesti lebih tinggi daripada lantai tambahan`,"nl-NL":`Hoogste hoogte moet groter zijn dan secundaire hoogte`,"pl-PL":`Wysokość głównego piętra musi być większa niż wysokość pomocniczego piętra`,"pt-PT":`A altura do piso principal deve ser maior do que a do piso auxiliar`,"sr-Cyrl":`Висина главног спрата мора бити већа од висине помоћног спрата`,"vi-VN":`Chiều cao của tầng chính phải lớn hơn của tầng phụ`,"zh-CN":`主层高必须大于辅层高`,"zh-TW":`主層高必須大於副層高`},请重新设置主辅层高:{"de-DE":`Bitte setzen Sie die Höhe des Haupt- und Nebengeschosses zurück`,"en-US":`Please reset the height of main and auxiliary floors`,"es-ES":`Por favor, restablezca la altura de los pisos principal y auxiliar`,"fr-FR":`Veuillez réinitialiser la hauteur des étages principal et auxiliaire`,"id-ID":`Silakan atur ulang tinggi lantai utama dan tambahan`,"it-IT":`Si prega di reimpostare l'altezza dei piani principale e ausiliario`,"ja-JP":`メインレイヤーの高さを再設定してください`,"ko-KR":`주 보조 계층 높이를 재설정하십시오`,"ms-MY":`Sila tetapkan semula ketinggian lantai utama dan lantai tambahan`,"nl-NL":`Stel het hoofdniveau opnieuw in`,"pl-PL":`Proszę ponownie ustawić wysokość głównego i pomocniczego piętra`,"pt-PT":`Por favor, redefina a altura dos pisos principal e auxiliar`,"sr-Cyrl":`Молимо вас да ресетујете висину главног и помоћног спрата`,"vi-VN":`Vui lòng đặt lại chiều cao của tầng chính và tầng phụ`,"zh-CN":`请重新设置主辅层高`,"zh-TW":`請重新設置主副層高`},"{{0}}个功能间序号有误":{"de-DE":`{{0}} Raumnummer falsch`,"en-US":`{{0}} room number incorrect`,"es-ES":`{{0}} número de habitación incorrecto`,"fr-FR":`{{0}} numéro de chambre incorrect`,"id-ID":`{{0}} nomor kamar tidak benar`,"it-IT":`{{0}} numero di stanza errato`,"ja-JP":`{{0}} 機能間シリアル番号に誤りがある`,"ko-KR":`{{0}} 방 번호가 정확하지 않습니다`,"ms-MY":`{{0}} nombor bilik tidak betul`,"nl-NL":`{{0}} kamernummer onjuist`,"pl-PL":`{{0}} numer pokoju nieprawidłowy`,"pt-PT":`{{0}} número de sala incorreto`,"sr-Cyrl":`Број собе {{0}} је нетачан`,"vi-VN":`{{0}} số phòng không chính xác`,"zh-CN":`{{0}}个功能间序号有误`,"zh-TW":`{{0}}個功能間序號有誤`},"请修改功能间序号,不可出现重复或跳跃":{"de-DE":`Bitte ändern Sie die Seriennummer zwischen den Funktionen, keine Wiederholung oder Sprung ist erlaubt`,"en-US":`Please modify the serial number between the functions, no repetition or jump is allowed`,"es-ES":`Por favor, modifica el número de serie entre las funciones, no se permite repetición o salto`,"fr-FR":`Veuillez modifier le numéro de série entre les fonctions, aucune répétition ou saut n'est autorisé`,"id-ID":`Silakan ubah nomor seri di antara fungsi, tidak boleh ada pengulangan atau lompatan`,"it-IT":`Si prega di modificare il numero di serie tra le funzioni, non è consentita la ripetizione o il salto`,"ja-JP":`機能間番号を変更してください。重複やジャンプはできません`,"ko-KR":`반복 또는 점프가 발생하지 않도록 기능 간 일련 번호를 수정하십시오`,"ms-MY":`Sila ubah nombor siri antara fungsi, tiada pengulangan atau loncatan dibenarkan`,"nl-NL":`Wijzig het serienummer tussen functies zodat er geen herhalingen of sprongen voorkomen`,"pl-PL":`Proszę zmodyfikować numer seryjny między funkcjami, nie wolno powtarzać ani skakać`,"pt-PT":`Por favor, modifique o número de série entre as funções, não é permitida a repetição ou salto`,"sr-Cyrl":`Молимо вас да измените серијски број између функција, без понављања или прескакања`,"vi-VN":`Vui lòng sửa số seri giữa các chức năng, không được phép lặp lại hoặc nhảy`,"zh-CN":`请修改功能间序号,不可出现重复或跳跃`,"zh-TW":`請修改功能間序號,不可出現重複或跳躍`},"若有楼梯出现,不得标注为平层":{"de-DE":`Wenn Treppen auftauchen, dürfen sie nicht als ebener Boden markiert werden`,"en-US":`If stairs appear, they shall not be marked as flat floor`,"es-ES":`Si aparecen escaleras, no deben marcarse como piso plano`,"fr-FR":`Si des escaliers apparaissent, ils ne doivent pas être marqués comme sol plat`,"id-ID":`Jika tangga muncul, mereka tidak boleh ditandai sebagai lantai datar`,"it-IT":`Se compaiono le scale, non devono essere contrassegnate come piano piatto`,"ja-JP":`階段があれば、平階と表示してはいけません`,"ko-KR":`계단이 나타나면 평층으로 표시할 수 없다`,"ms-MY":`Jika tangga muncul, ia tidak boleh ditandakan sebagai lantai rata`,"nl-NL":`Als er een trap verschijnt, mag het niet worden gemarkeerd als een vlakke verdieping`,"pl-PL":`Jeśli pojawią się schody, nie wolno ich oznaczać jako płaski podłoga`,"pt-PT":`Se aparecerem escadas, elas não devem ser marcadas como piso plano`,"sr-Cyrl":`Ако се појаве степенице, неће бити означене као раван под`,"vi-VN":`Nếu có cầu thang xuất hiện, chúng không được đánh dấu là sàn phẳng`,"zh-CN":`若有楼梯出现,不得标注为平层`,"zh-TW":`若有樓梯出現,不得標注為平層`},请重新设置楼层结构:{"de-DE":`Bitte setzen Sie die Fußbodenstruktur zurück`,"en-US":`Please reset the floor structure`,"es-ES":`Por favor, restablezca la estructura del piso`,"fr-FR":`Veuillez réinitialiser la structure du sol`,"id-ID":`Silakan atur ulang struktur lantai`,"it-IT":`Si prega di reimpostare la struttura del pavimento`,"ja-JP":`フロア構造を再設置してください`,"ko-KR":`층 구조를 재설정하세요`,"ms-MY":`Sila tetapkan semula struktur lantai`,"nl-NL":`Gelieve de vloerstructuur opnieuw in te stellen`,"pl-PL":`Proszę ponownie ustawić strukturę podłogi`,"pt-PT":`Por favor, redefina a estrutura do piso`,"sr-Cyrl":`Молимо ресетујте структуру пода`,"vi-VN":`Vui lòng đặt lại cấu trúc sàn`,"zh-CN":`请重新设置楼层结构`,"zh-TW":`請重新設置樓層結構`},查看:{"de-DE":`Sicht`,"en-US":`View`,"es-ES":`Ver`,"fr-FR":`Affichage`,"id-ID":`Tampilan`,"it-IT":`Visualizza`,"ja-JP":`表示`,"ko-KR":`보기`,"ms-MY":`Paparan`,"nl-NL":`Bekijk`,"pl-PL":`Widok`,"pt-PT":`Visualizar`,"sr-Cyrl":`Поглед`,"vi-VN":`Xem`,"zh-CN":`查看`,"zh-TW":`查看`},智能检测结果:{"de-DE":`Intelligente Erkennung`,"en-US":`Intelligent detection`,"es-ES":`Detección inteligente`,"fr-FR":`Détection intelligente`,"id-ID":`Deteksi cerdas`,"it-IT":`Risultato del rilevamento intelligente`,"ja-JP":`知能検査結果`,"ko-KR":`지능형 검사 결과`,"ms-MY":`Pengesanan pintar`,"nl-NL":`Slimme testresultaten`,"pl-PL":`Wykrywanie inteligentne`,"pt-PT":`Detecção inteligente`,"sr-Cyrl":`Интелигентно откривање`,"vi-VN":`Phát hiện thông minh`,"zh-CN":`智能检测结果`,"zh-TW":`智能檢測結果`},请输入搜索内容:{"de-DE":`Bitte geben Sie den Suchinhalt ein`,"en-US":`Please enter the search content`,"es-ES":`Por favor, ingrese el contenido de búsqueda`,"fr-FR":`Veuillez saisir le contenu de la recherche`,"id-ID":`Silakan masukkan konten pencarian`,"it-IT":`Si prega di inserire il contenuto della ricerca`,"ja-JP":`検索内容を入力してください`,"ko-KR":`검색 내용을 입력하십시오`,"ms-MY":`Sila masukkan kandungan carian`,"nl-NL":`Voer uw zoekopdracht in`,"pl-PL":`Proszę wprowadzić treść wyszukiwania`,"pt-PT":`Por favor, insira o conteúdo da pesquisa`,"sr-Cyrl":`Молимо унесите садржај претраге`,"vi-VN":`Vui lòng nhập nội dung tìm kiếm`,"zh-CN":`请输入搜索内容`,"zh-TW":`請輸入搜尋內容`},取消:{"de-DE":`Abbrechen`,"en-US":`Cancel`,"es-ES":`Cancelar`,"fr-FR":`Annuler`,"id-ID":`Batal`,"it-IT":`Annulla`,"ja-JP":`キャンセル`,"ko-KR":`취소`,"ms-MY":`Batal`,"nl-NL":`Annuleren`,"pl-PL":`Anuluj`,"pt-PT":`Cancelar`,"sr-Cyrl":`Откажи`,"vi-VN":`Hủy`,"zh-CN":`取消`,"zh-TW":`取消`},楼梯:{"de-DE":`Treppe`,"en-US":`STAIRCASE`,"es-ES":`Escalera`,"fr-FR":`Escalier`,"id-ID":`Tangga`,"it-IT":`Scala`,"ja-JP":`階段`,"ko-KR":`계단`,"ms-MY":`Tangga`,"nl-NL":`Trap`,"pl-PL":`Schody`,"pt-PT":`Escada`,"sr-Cyrl":`Степенице`,"vi-VN":`Cầu thang`,"zh-CN":`楼梯`,"zh-TW":`樓梯`},环形楼梯:{"de-DE":`Wendeltreppe`,"en-US":`Spiral Staircase`,"es-ES":`Escalera circular`,"fr-FR":`Escalier circulaire`,"id-ID":`Tangga Spiral`,"it-IT":`Scala circolare`,"ja-JP":`環状階段`,"ko-KR":`환상계단`,"ms-MY":`Tangga bulat`,"nl-NL":`Ringtrap`,"pl-PL":`Kręte schody`,"pt-PT":`Escada circular`,"sr-Cyrl":`Кружне степенице`,"vi-VN":`Cầu thang tròn`,"zh-CN":`环形楼梯`,"zh-TW":`環形樓梯`},客厅:{"de-DE":`Salon`,"en-US":`LIVING ROOM`,"es-ES":`Estancia`,"fr-FR":`Salon`,"id-ID":`Ruang Tamu`,"it-IT":`Salotto`,"ja-JP":`リビング`,"ko-KR":`거실`,"ms-MY":`Ruang Tamu`,"nl-NL":`woonkamer`,"pl-PL":`Salon`,"pt-PT":`Sala de estar`,"sr-Cyrl":`Дневна соба`,"vi-VN":`Phòng khách`,"zh-CN":`客厅`,"zh-TW":`客廳`},卧室:{"de-DE":`Bett`,"en-US":`BEDROOM`,"es-ES":`Cama`,"fr-FR":`Lit`,"id-ID":`Dipan`,"it-IT":`Letto`,"ja-JP":`寝室`,"ko-KR":`침실`,"ms-MY":`Katil`,"nl-NL":`Bed`,"pl-PL":`Łóżko`,"pt-PT":`Quarto`,"sr-Cyrl":`Кревет`,"vi-VN":`Giường`,"zh-CN":`卧室`,"zh-TW":`臥室`},厨房:{"de-DE":`Küche`,"en-US":`KITCHEN`,"es-ES":`Cocina`,"fr-FR":`Cuisine`,"id-ID":`Dapur`,"it-IT":`Cucina`,"ja-JP":`キッチン`,"ko-KR":`부엌`,"ms-MY":`Dapur`,"nl-NL":`Keuken`,"pl-PL":`Kuchnia`,"pt-PT":`Cozinha`,"sr-Cyrl":`Кухиња`,"vi-VN":`Nhà bếp`,"zh-CN":`厨房`,"zh-TW":`廚房`},卫生间:{"de-DE":`Bad`,"en-US":`BATHROOM`,"es-ES":`Baño`,"fr-FR":`Bain`,"id-ID":`Mandi`,"it-IT":`Balneazione`,"ja-JP":`トイレ`,"ko-KR":`화장실`,"ms-MY":`Mandi`,"nl-NL":`Baden`,"pl-PL":`Kapiel`,"pt-PT":`Banho`,"sr-Cyrl":`Бања`,"vi-VN":`Nhà vệ sinh`,"zh-CN":`卫生间`,"zh-TW":`衛生間`},书房:{"de-DE":`Studierraum`,"en-US":`STUDY`,"es-ES":`Estudio`,"fr-FR":`Salle d’étude`,"id-ID":`Ruang Studi`,"it-IT":`Sala studio`,"ja-JP":`学習室`,"ko-KR":`서재`,"ms-MY":`Bilik Belajar`,"nl-NL":`Bibliotheek`,"pl-PL":`Sala do nauki`,"pt-PT":`Sala de estudo`,"sr-Cyrl":`радна соба`,"vi-VN":`Phòng học`,"zh-CN":`书房`,"zh-TW":`書房`},储物间:{"de-DE":`Speicher`,"en-US":`STORAGE`,"es-ES":`Almacenamiento`,"fr-FR":`Stockage`,"id-ID":`Penyimpanan`,"it-IT":`Conservazione`,"ja-JP":`物置場`,"ko-KR":`저장실`,"ms-MY":`Penyimpanan`,"nl-NL":`Opslagruimte`,"pl-PL":`Przechowywanie`,"pt-PT":`Armazenamento`,"sr-Cyrl":`Складиште`,"vi-VN":`Lưu trữ`,"zh-CN":`储物间`,"zh-TW":`儲物間`},装饰类:{"de-DE":`Dekoration`,"en-US":`Decoration`,"es-ES":`Decoración`,"fr-FR":`Décoration`,"id-ID":`Dekorasi`,"it-IT":`Decorazione`,"ja-JP":`装飾類`,"ko-KR":`장식류`,"ms-MY":`Hiasan`,"nl-NL":`Decoratie`,"pl-PL":`Dekoracja`,"pt-PT":`Decoração`,"sr-Cyrl":`Декорација`,"vi-VN":`Trang trí`,"zh-CN":`装饰类`,"zh-TW":`裝飾類`},自动摆放物件:{"de-DE":`Automatische Dinge`,"en-US":`Automatic things`,"es-ES":`Cosas automáticas`,"fr-FR":`Choses automatiques`,"id-ID":`Hal-hal otomatis`,"it-IT":`Cose automatiche`,"ja-JP":`自動的なもの`,"ko-KR":`자동화된 것들`,"ms-MY":`Perkara automatik`,"nl-NL":`Automatische dingen`,"pl-PL":`Automatyczne rzeczy`,"pt-PT":`Coisas automáticas`,"sr-Cyrl":`Аутоматске ствари`,"vi-VN":`Những thứ tự động`,"zh-CN":`自动摆放物件`,"zh-TW":`自動擺放物件`},门:{"de-DE":`Türen`,"en-US":`Doors`,"es-ES":`Puertas`,"fr-FR":`Portes`,"id-ID":`Pintu`,"it-IT":`Porte`,"ja-JP":`ドア`,"ko-KR":`문`,"ms-MY":`Pintu`,"nl-NL":`Deuren`,"pl-PL":`Drzwi`,"pt-PT":`Portas`,"sr-Cyrl":`Врата`,"vi-VN":`Cửa`,"zh-CN":`门`,"zh-TW":`門`},窗:{"de-DE":`Fenster`,"en-US":`Windows`,"es-ES":`Ventanas`,"fr-FR":`Fenêtres`,"id-ID":`Jendela`,"it-IT":`Finestre`,"ja-JP":`窓`,"ko-KR":`창문`,"ms-MY":`Tingkap`,"nl-NL":`ramen`,"pl-PL":`Okna`,"pt-PT":`Janelas`,"sr-Cyrl":`Прозори`,"vi-VN":`Cửa sổ`,"zh-CN":`窗`,"zh-TW":`窗戶`},门联窗:{"de-DE":`Tür mit Fenster`,"en-US":`Door with window`,"es-ES":`Puerta con ventana`,"fr-FR":`Porte avec fenêtre`,"id-ID":`Pintu dengan jendela`,"it-IT":`Porta con finestra`,"ja-JP":`ゲート窓`,"ko-KR":`문고리 창문`,"ms-MY":`Pintu dengan tingkap`,"nl-NL":`Deur met raam`,"pl-PL":`Drzwi z oknem`,"pt-PT":`Porta com janela`,"sr-Cyrl":`Врата са прозором`,"vi-VN":`Cửa có cửa sổ`,"zh-CN":`门联窗`,"zh-TW":`門聯窗`},画墙:{"de-DE":`Wand zeichnen`,"en-US":`Draw wall`,"es-ES":`Dibujar pared`,"fr-FR":`Dessiner un mur`,"id-ID":`Gambar dinding`,"it-IT":`Disegnare parete`,"ja-JP":`壁を描く`,"ko-KR":`벽을 그리다`,"ms-MY":`Lukis dinding`,"nl-NL":`Wand schilderen`,"pl-PL":`Narysować ścianę`,"pt-PT":`Desenhar parede`,"sr-Cyrl":`Цртање зида`,"vi-VN":`Vẽ tường`,"zh-CN":`画墙`,"zh-TW":`畫牆`},墙:{"de-DE":`Wände`,"en-US":`Walls`,"es-ES":`Paredes`,"fr-FR":`Murs`,"id-ID":`Dinding`,"it-IT":`Muri`,"ja-JP":`壁`,"ko-KR":`벽`,"ms-MY":`Dinding`,"nl-NL":`De muur`,"pl-PL":`Ściany`,"pt-PT":`Paredes`,"sr-Cyrl":`Зидови`,"vi-VN":`Tường`,"zh-CN":`墙`,"zh-TW":`牆`},梁:{"de-DE":`Balken`,"en-US":`Beam`,"es-ES":`Viga`,"fr-FR":`Poutre`,"id-ID":`Balok`,"it-IT":`Trave`,"ja-JP":`棟木`,"ko-KR":`빔`,"ms-MY":`Rasuk`,"nl-NL":`balken`,"pl-PL":`Belka`,"pt-PT":`Viga`,"sr-Cyrl":`Греда`,"vi-VN":`Cột`,"zh-CN":`梁`,"zh-TW":`梁`},构建:{"de-DE":`Konstruktionen`,"en-US":`Constructs`,"es-ES":`Construye`,"fr-FR":`Édifices`,"id-ID":`Konstruksi`,"it-IT":`Manufatti`,"ja-JP":`構造部`,"ko-KR":`구축`,"ms-MY":`Pembinaan`,"nl-NL":`Bouwen`,"pl-PL":`Konstrukcje`,"pt-PT":`Constrói`,"sr-Cyrl":`Конструкције`,"vi-VN":`Xây dựng`,"zh-CN":`构建`,"zh-TW":`構建`},柱子:{"de-DE":`Säule`,"en-US":`Column`,"es-ES":`Columna`,"fr-FR":`Colonne`,"id-ID":`Kolom`,"it-IT":`Colonna`,"ja-JP":`柱`,"ko-KR":`기둥`,"ms-MY":`Tiang`,"nl-NL":`Kolom`,"pl-PL":`Kolumna`,"pt-PT":`Coluna`,"sr-Cyrl":`Стуб`,"vi-VN":`Cột`,"zh-CN":`柱子`,"zh-TW":`柱子`},烟道:{"de-DE":`Abzug`,"en-US":`Flue`,"es-ES":`Chimenea`,"fr-FR":`Tuyau de fumée`,"id-ID":`Jalur asap`,"it-IT":`Canna fumaria`,"ja-JP":`煙道`,"ko-KR":`연도`,"ms-MY":`Cerobong`,"nl-NL":`Roekbaan`,"pl-PL":`Komin`,"pt-PT":`Chaminé`,"sr-Cyrl":`Оџак`,"vi-VN":`Ống khói`,"zh-CN":`烟道`,"zh-TW":`煙道`},下水:{"de-DE":`Abfluss`,"en-US":`Drain`,"es-ES":`Drenaje`,"fr-FR":`Déversoir`,"id-ID":`Drainase`,"it-IT":`Scarico`,"ja-JP":`排水口`,"ko-KR":`하수`,"ms-MY":`Saliran`,"nl-NL":`Afvoer`,"pl-PL":`Odpływ`,"pt-PT":`Dreno`,"sr-Cyrl":`Одвод`,"vi-VN":`Tiêu hao`,"zh-CN":`下水`,"zh-TW":`下水`},画房间:{"de-DE":`Raum zeichnen`,"en-US":`Draw room`,"es-ES":`Dibujar habitación`,"fr-FR":`Dessiner une pièce`,"id-ID":`Gambar ruangan`,"it-IT":`Disegnare stanza`,"ja-JP":`部屋を描く`,"ko-KR":`방을 그리다`,"ms-MY":`Lukis bilik`,"nl-NL":`Kamer schilderen`,"pl-PL":`Narysować pokój`,"pt-PT":`Desenhar quarto`,"sr-Cyrl":`Цртање просторије`,"vi-VN":`Vẽ phòng`,"zh-CN":`画房间`,"zh-TW":`畫房間`},绘制户型:{"de-DE":`Grundriss zeichnen`,"en-US":`Draw floor plan`,"es-ES":`Dibujar plano de planta`,"fr-FR":`Dessiner un plan d'étage`,"id-ID":`Gambar denah lantai`,"it-IT":`Disegnare la pianta`,"ja-JP":`間取り図を描く`,"ko-KR":`도면 유형`,"ms-MY":`Lukis pelan lantai`,"nl-NL":`Tekenertype`,"pl-PL":`Narysować plan piętra`,"pt-PT":`Desenhar planta baixa`,"sr-Cyrl":`Цртање плана пода`,"vi-VN":`Vẽ bản vẽ tầng`,"zh-CN":`绘制户型`,"zh-TW":`繪製戶型`},添加物件:{"de-DE":`Möbel hinzufügen`,"en-US":`Furnitures`,"es-ES":`Añadir muebles`,"fr-FR":`Ajouter des meubles`,"id-ID":`Perabotan`,"it-IT":`Aggiungere mobili`,"ja-JP":`かぐ`,"ko-KR":`개체 추가`,"ms-MY":`Perabot`,"nl-NL":`Object toevoegen`,"pl-PL":`Dodaj meble`,"pt-PT":`Adicionar mobília`,"sr-Cyrl":`Намештај`,"vi-VN":`Thêm đồ đạc`,"zh-CN":`添加物件`,"zh-TW":`添加物件`},墙内线绘制:{"de-DE":`Innenlinie`,"en-US":`Inner line`,"es-ES":`línea interior`,"fr-FR":`ligne intérieure`,"id-ID":`Garis dalam`,"it-IT":`linea interna`,"ja-JP":`内側線を描く`,"ko-KR":`벽 내선 그리기`,"ms-MY":`Garis dalam`,"nl-NL":`Binnenmuren tekenen`,"pl-PL":`linia wewnętrzna`,"pt-PT":`linha interior`,"sr-Cyrl":`Унутрашња линија`,"vi-VN":`đường nội thất`,"zh-CN":`墙内线绘制`,"zh-TW":`牆內線繪製`},墙中线绘制:{"de-DE":`Mittellinie`,"en-US":`Center line`,"es-ES":`línea central`,"fr-FR":`ligne centrale`,"id-ID":`Garis tengah`,"it-IT":`linea centrale`,"ja-JP":`中心線を描く`,"ko-KR":`벽 중간선 그리기`,"ms-MY":`Garis tengah`,"nl-NL":`Midden muur tekenen`,"pl-PL":`linia środkowa`,"pt-PT":`linha central`,"sr-Cyrl":`Централна линија`,"vi-VN":`đường trung tâm`,"zh-CN":`墙中线绘制`,"zh-TW":`牆中線繪製`},自动墙厚:{"de-DE":`Automatische Dicke`,"en-US":`Automatic thickness`,"es-ES":`Grosor automático`,"fr-FR":`Épaisseur automatique`,"id-ID":`Ketebalan otomatis`,"it-IT":`Spessore automatico`,"ja-JP":`自動厚さ`,"ko-KR":`자동 벽 두께`,"ms-MY":`Ketebalan automatik`,"nl-NL":`Automatische wanddikte`,"pl-PL":`Automatyczna grubość`,"pt-PT":`Espessura automática`,"sr-Cyrl":`Аутоматска дебљина`,"vi-VN":`Độ dày tự động`,"zh-CN":`自动墙厚`,"zh-TW":`自動牆厚`},输入墙厚:{"de-DE":`Dicke einstellen`,"en-US":`set thickness`,"es-ES":`configurar el grosor`,"fr-FR":`définir l'épaisseur`,"id-ID":`atur ketebalan`,"it-IT":`imposta lo spessore`,"ja-JP":`厚さ設定`,"ko-KR":`입력 벽 두께`,"ms-MY":`tetapkan ketebalan`,"nl-NL":`Wanddikte invoeren`,"pl-PL":`ustawić grubość`,"pt-PT":`definir a espessura`,"sr-Cyrl":`постави дебљину`,"vi-VN":`đặt độ dày`,"zh-CN":`输入墙厚`,"zh-TW":`設置厚度`},完成:{"de-DE":`Fertig`,"en-US":`Done`,"es-ES":`Hecho`,"fr-FR":`Terminé`,"id-ID":`Selesai`,"it-IT":`Fatto`,"ja-JP":`完了`,"ko-KR":`완료`,"ms-MY":`Selesai`,"nl-NL":`Voltooid`,"pl-PL":`Gotowe`,"pt-PT":`Concluído`,"sr-Cyrl":`Готово`,"vi-VN":`Hoàn thành`,"zh-CN":`完成`,"zh-TW":`完成`},继续绘制:{"de-DE":`Weiter zeichnen`,"en-US":`Continue drawing`,"es-ES":`Continuar dibujando`,"fr-FR":`Continuer le dessin`,"id-ID":`Lanjutkan menggambar`,"it-IT":`Continua a disegnare`,"ja-JP":`描画を続ける`,"ko-KR":`계속 그리기`,"ms-MY":`Teruskan melukis`,"nl-NL":`Blijf tekenen`,"pl-PL":`Kontynuuj rysowanie`,"pt-PT":`Continuar desenho`,"sr-Cyrl":`Наставите са цртањем`,"vi-VN":`Tiếp tục vẽ`,"zh-CN":`继续绘制`,"zh-TW":`繼續繪製`},完成绘制:{"de-DE":`Zeichnen beenden`,"en-US":`Finish drawing`,"es-ES":`Finalizar dibujo`,"fr-FR":`Terminer le dessin`,"id-ID":`Selesaikan menggambar`,"it-IT":`Termina il disegno`,"ja-JP":`描画完了`,"ko-KR":`드로잉 완료`,"ms-MY":`Selesaikan lukisan`,"nl-NL":`Tekening voltooid`,"pl-PL":`Zakończ rysowanie`,"pt-PT":`Terminar desenho`,"sr-Cyrl":`Заврши цртање`,"vi-VN":`Hoàn thành việc vẽ`,"zh-CN":`完成绘制`,"zh-TW":`完成繪製`},"JSON 内容错误,请检查。":{"de-DE":`JSON-Inhaltfehler, bitte überprüfen.`,"en-US":`JSON content error, please check.`,"es-ES":`Error de contenido JSON, por favor verifique.`,"fr-FR":`Erreur de contenu JSON, veuillez vérifier.`,"id-ID":`Kesalahan konten JSON, harap periksa.`,"it-IT":`Errore di contenuto JSON, per favore controlla.`,"ja-JP":`JSONの内容が間違っています。確認してください。`,"ko-KR":`JSON 컨텐트가 잘못되었습니다. 확인하십시오.`,"ms-MY":`Ralat kandungan JSON, sila semak.`,"nl-NL":`JSON-fouten, controleer alstublieft.`,"pl-PL":`Błąd zawartości JSON, proszę sprawdzić.`,"pt-PT":`Erro no conteúdo JSON, por favor verifique.`,"sr-Cyrl":`Грешка у JSON садржају, молимо проверите.`,"vi-VN":`Lỗi nội dung JSON, vui lòng kiểm tra.`,"zh-CN":`JSON 内容错误,请检查。`,"zh-TW":`JSON 內容錯誤,請檢查。`},"JSON 格式错误,请检查。":{"de-DE":`JSON-Formatfehler, bitte überprüfen.`,"en-US":`JSON format error, please check.`,"es-ES":`Error de formato JSON, por favor verifique.`,"fr-FR":`Erreur de format JSON, veuillez vérifier.`,"id-ID":`Kesalahan format JSON, harap periksa.`,"it-IT":`Errore di formato JSON, per favore controlla.`,"ja-JP":`JSONフォーマットが間違っています。確認してください。`,"ko-KR":`JSON 형식이 잘못되었습니다. 확인하십시오.`,"ms-MY":`Ralat format JSON, sila semak.`,"nl-NL":`JSON is onjuist, controleer alstublieft.`,"pl-PL":`Błąd formatu JSON, proszę sprawdzić.`,"pt-PT":`Erro de formato JSON, por favor verifique.`,"sr-Cyrl":`Грешка у JSON формату, молимо проверите.`,"vi-VN":`Lỗi định dạng JSON, vui lòng kiểm tra.`,"zh-CN":`JSON 格式错误,请检查。`,"zh-TW":`JSON 格式錯誤,請檢查。`},"转化发生一些意外,注意下面错误描述":{"de-DE":`Bei der Konvertierung sind einige Unfälle passiert. Achte auf die Fehlerbeschreibung unten`,"en-US":`Some accidents occurred in the conversion. Pay attention to the error description below`,"es-ES":`Se produjeron algunos accidentes en la conversión. Presta atención a la descripción del error a continuación`,"fr-FR":`Quelques accidents se sont produits lors de la conversion. Faites attention à la description de l'erreur ci-dessous`,"id-ID":`Beberapa kecelakaan terjadi dalam konversi. Perhatikan deskripsi kesalahan di bawah`,"it-IT":`Si sono verificati alcuni incidenti nella conversione. Presta attenzione alla descrizione dell'errore qui sotto`,"ja-JP":`いくつかの予期しないことが発生しました。以下のエラー説明に注意してください`,"ko-KR":`전환에 약간의 의외의 사고가 발생했으니, 아래의 잘못된 설명에 주의하시오`,"ms-MY":`Beberapa kemalangan berlaku semasa penukaran. Perhatikan penerangan ralat di bawah`,"nl-NL":`Er is een aantal ongelukken gebeurd bij de conversie, let op de onderstaande foutbeschrijving`,"pl-PL":`W konwersji wystąpiły pewne wypadki. Zwróć uwagę na opis błędu poniżej`,"pt-PT":`Ocorreram alguns acidentes na conversão. Preste atenção à descrição do erro abaixo`,"sr-Cyrl":`Дошло је до неких проблема у конверзији. Обратите пажњу на опис грешке испод`,"vi-VN":`Đã xảy ra một số tai nạn trong quá trình chuyển đổi. Hãy chú ý đến mô tả lỗi dưới đây`,"zh-CN":`转化发生一些意外,注意下面错误描述`,"zh-TW":`轉換過程中發生了一些意外。請注意下面的錯誤描述`},加载hll:{"de-DE":`HLL laden`,"en-US":`Load HLL`,"es-ES":`Cargar HLL`,"fr-FR":`Charger HLL`,"id-ID":`Beban HLL`,"it-IT":`Carica HLL`,"ja-JP":`hllをロード`,"ko-KR":`hll 로드`,"ms-MY":`Muatkan HLL`,"nl-NL":`HLL laden`,"pl-PL":`Ładuj HLL`,"pt-PT":`Carregar HLL`,"sr-Cyrl":`Оптерећење HLL`,"vi-VN":`Tải HLL`,"zh-CN":`加载hll`,"zh-TW":`載入HLL`},JSON格式化:{"de-DE":`JSON-Formatierung`,"en-US":`JSON formatting`,"es-ES":`Formateo JSON`,"fr-FR":`Formatage JSON`,"id-ID":`Format JSON`,"it-IT":`Formattazione JSON`,"ja-JP":`JSONフォーマット中`,"ko-KR":`JSON 포맷`,"ms-MY":`Pemformatan JSON`,"nl-NL":`JSON opmaak`,"pl-PL":`Formatowanie JSON`,"pt-PT":`Formatação JSON`,"sr-Cyrl":`JSON форматирање`,"vi-VN":`Định dạng JSON`,"zh-CN":`JSON格式化`,"zh-TW":`JSON格式化`},复制到剪贴板:{"de-DE":`Kopiert in die zwischenablage`,"en-US":`copy to clipboard`,"es-ES":`copiar al portapapeles`,"fr-FR":`copier dans le presse-papiers`,"id-ID":`salin ke papan klip`,"it-IT":`copia negli appunti`,"ja-JP":`クリップボードにコピー`,"ko-KR":`클립보드에 복사`,"ms-MY":`salin ke papan klip`,"nl-NL":`Kopieer naar klembord`,"pl-PL":`skopiuj do schowka`,"pt-PT":`copiar para a área de transferência`,"sr-Cyrl":`копирај у клипборд`,"vi-VN":`sao chép vào bảng ghi`,"zh-CN":`复制到剪贴板`,"zh-TW":`複製到剪貼板`},加载矢量数据:{"de-DE":`Vektordaten laden`,"en-US":`Load vector data`,"es-ES":`Cargar datos vectoriales`,"fr-FR":`Charger des données vectorielles`,"id-ID":`Muat data vektor`,"it-IT":`Carica dati vettoriali`,"ja-JP":`ベクトルデータをロード`,"ko-KR":`벡터 데이터 로드`,"ms-MY":`Muatkan data vektor`,"nl-NL":`Vectorgegevens laden`,"pl-PL":`Ładuj dane wektorowe`,"pt-PT":`Carregar dados vetoriais`,"sr-Cyrl":`Учитај векторске податке`,"vi-VN":`Tải dữ liệu vector`,"zh-CN":`加载矢量数据`,"zh-TW":`載入向量數據`},分间名称:{"de-DE":`Raumname`,"en-US":`Room name`,"es-ES":`Nombre de la habitación`,"fr-FR":`Nom de la pièce`,"id-ID":`Nama ruangan`,"it-IT":`Nome della stanza`,"ja-JP":`ルーム名`,"ko-KR":`세그먼트 이름`,"ms-MY":`Nama bilik`,"nl-NL":`Naam van het interval`,"pl-PL":`Nazwa pokoju`,"pt-PT":`Nome do quarto`,"sr-Cyrl":`Назив просторије`,"vi-VN":`Tên phòng`,"zh-CN":`分间名称`,"zh-TW":`分間名稱`},别名:{"de-DE":`Alias`,"en-US":`Name`,"es-ES":`Alias`,"fr-FR":`Alias`,"id-ID":`Nama`,"it-IT":`Soprannome`,"ja-JP":`エイリアス`,"ko-KR":`별칭`,"ms-MY":`Nama`,"nl-NL":`Bijnaam`,"pl-PL":`Przezwisko`,"pt-PT":`Apelido`,"sr-Cyrl":`Назив`,"vi-VN":`Bí danh`,"zh-CN":`别名`,"zh-TW":`別名`},请输入别名:{"de-DE":`Bitte Alias eingeben`,"en-US":`Please enter alias`,"es-ES":`Por favor ingrese un alias`,"fr-FR":`Veuillez entrer un alias`,"id-ID":`Silakan masukkan alias`,"it-IT":`Si prega di inserire un alias`,"ja-JP":`エイリアスを入力してください`,"ko-KR":`별칭을 입력하십시오`,"ms-MY":`Sila masukkan alias`,"nl-NL":`Voer een alias in`,"pl-PL":`Proszę podać alias`,"pt-PT":`Por favor, insira um apelido`,"sr-Cyrl":`Молимо унесите псеудоним`,"vi-VN":`Vui lòng nhập bí danh`,"zh-CN":`请输入别名`,"zh-TW":`請輸入別名`},内外翻转:{"de-DE":`Ein/Aus`,"en-US":`In/Out`,"es-ES":`Entrada/Salida`,"fr-FR":`Entrée/Sortie`,"id-ID":`In/Out`,"it-IT":`Entrata/Uscita`,"ja-JP":`内外反転`,"ko-KR":`입/출`,"ms-MY":`Masuk/Keluar`,"nl-NL":`In/Uit`,"pl-PL":`Wejście/Wyjście`,"pt-PT":`Entrada/Saída`,"sr-Cyrl":`Улаз/Излаз`,"vi-VN":`Trong và ngoài`,"zh-CN":`内外翻转`,"zh-TW":`內外翻轉`},左右翻转:{"de-DE":`Horiz drehen`,"en-US":`Horiz flip`,"es-ES":`Horiz voltear`,"fr-FR":`Horiz retour`,"id-ID":`Horiz balik`,"it-IT":`Horiz capovolgi`,"ja-JP":`左右反転`,"ko-KR":`수평뒤집`,"ms-MY":`Horiz balik`,"nl-NL":`Horiz spiegel`,"pl-PL":`Horiz obrót`,"pt-PT":`Horiz virar`,"sr-Cyrl":`Horiz okret`,"vi-VN":`Trái và phải`,"zh-CN":`左右翻转`,"zh-TW":`左右翻轉`},删除:{"de-DE":`Löschen`,"en-US":`Delete`,"es-ES":`Borrar`,"fr-FR":`Supprimer`,"id-ID":`Hapus`,"it-IT":`Elimina`,"ja-JP":`削除`,"ko-KR":`삭제`,"ms-MY":`Padam`,"nl-NL":`Verwijder`,"pl-PL":`Usuń`,"pt-PT":`Excluir`,"sr-Cyrl":`Обриши`,"vi-VN":`Xóa`,"zh-CN":`删除`,"zh-TW":`刪除`},添加门窗:{"de-DE":`Tür/fenster hinzufügen`,"en-US":`Add doors/windows`,"es-ES":`Añadir puertas/ventanas`,"fr-FR":`Ajouter des portes/fenêtres`,"id-ID":`Tambah pintu/jendela`,"it-IT":`Aggiungi porte/finestre`,"ja-JP":`ドア/窓を追加`,"ko-KR":`문/창문 추가`,"ms-MY":`Tambah pintu/tingkap`,"nl-NL":`Voeg deuren/ramen toe`,"pl-PL":`Dodaj drzwi/okna`,"pt-PT":`Adicionar portas/janelas`,"sr-Cyrl":`Додајте врата/прозоре`,"vi-VN":`Thêm cửa và cửa sổ`,"zh-CN":`添加门窗`,"zh-TW":`添加門窗`},替换:{"de-DE":`ersetzen`,"en-US":`Replace`,"es-ES":`reemplazar`,"fr-FR":`remplacer`,"id-ID":`Ganti`,"it-IT":`sostituire`,"ja-JP":`置換`,"ko-KR":`대체`,"ms-MY":`Gantikan`,"nl-NL":`Vervangen`,"pl-PL":`zastąpić`,"pt-PT":`substituir`,"sr-Cyrl":`Замени`,"vi-VN":`thay thế`,"zh-CN":`替换`,"zh-TW":`替換`},复制:{"de-DE":`Kopiert`,"en-US":`Copy`,"es-ES":`copiar`,"fr-FR":`copier`,"id-ID":`Salin`,"it-IT":`copia`,"ja-JP":`コピー`,"ko-KR":`복제`,"ms-MY":`Salin`,"nl-NL":`Kopieer`,"pl-PL":`kopiuj`,"pt-PT":`copiar`,"sr-Cyrl":`Копирај`,"vi-VN":`chép`,"zh-CN":`复制`,"zh-TW":`複製`},撑满墙面:{"de-DE":`Auffüllen`,"en-US":`Fill up`,"es-ES":`Llenar`,"fr-FR":`Remplir`,"id-ID":`Penuh`,"it-IT":`Riempi`,"ja-JP":`満たす`,"ko-KR":`채우다`,"ms-MY":`Isi`,"nl-NL":`Vullen`,"pl-PL":`Napełnij`,"pt-PT":`Encher`,"sr-Cyrl":`Пуно`,"vi-VN":`Đầy đủ`,"zh-CN":`撑满`,"zh-TW":`撑满`},功能间:{"de-DE":`Zimmer`,"en-US":`Room`,"es-ES":`Sala`,"fr-FR":`Chambre`,"id-ID":`Ruangan`,"it-IT":`Stanza`,"ja-JP":`ルーム`,"ko-KR":`기능 간`,"ms-MY":`Bilik`,"nl-NL":`Functie kamer`,"pl-PL":`Pokój`,"pt-PT":`Sala`,"sr-Cyrl":`Соба`,"vi-VN":`Phòng`,"zh-CN":`功能间`,"zh-TW":`功能間`},类型:{"de-DE":`Typ`,"en-US":`Type`,"es-ES":`Tipo`,"fr-FR":`Type`,"id-ID":`Jenis`,"it-IT":`Tipo`,"ja-JP":`タイプ`,"ko-KR":`유형`,"ms-MY":`Jenis`,"nl-NL":`Type`,"pl-PL":`Typ`,"pt-PT":`Tipo`,"sr-Cyrl":`Тип`,"vi-VN":`Loại`,"zh-CN":`类型`,"zh-TW":`類型`},序号:{"de-DE":`Nein.`,"en-US":`No.`,"es-ES":`No.`,"fr-FR":`Non.`,"id-ID":`Tidak.`,"it-IT":`No.`,"ja-JP":`番号`,"ko-KR":`아니.`,"ms-MY":`Tidak.`,"nl-NL":`Nee.`,"pl-PL":`Nie.`,"pt-PT":`Não.`,"sr-Cyrl":`Не.`,"vi-VN":`Số serial`,"zh-CN":`序号`,"zh-TW":`序號`},面积:{"de-DE":`das Maß der Fläche`,"en-US":`Area`,"es-ES":`la medida del área`,"fr-FR":`la mesure de la superficie`,"id-ID":`Area`,"it-IT":`la misura dell'area`,"ja-JP":`面積`,"ko-KR":`면적`,"ms-MY":`Kawasan`,"nl-NL":`Oppervlakte`,"pl-PL":`pomiar powierzchni`,"pt-PT":`a medida da área`,"sr-Cyrl":`Површина`,"vi-VN":`đo lường diện tích`,"zh-CN":`面积`,"zh-TW":`面積`},主层高:{"de-DE":`Höhe der Hauptetage`,"en-US":`Main floor height`,"es-ES":`Altura del piso principal`,"fr-FR":`Hauteur de l'étage principal`,"id-ID":`Tinggi lantai utama`,"it-IT":`Altezza del piano principale`,"ja-JP":`メイン層の高さ`,"ko-KR":`주층 높이`,"ms-MY":`Ketinggian lantai utama`,"nl-NL":`Hoogste verdieping`,"pl-PL":`Wysokość głównego piętra`,"pt-PT":`Altura do piso principal`,"sr-Cyrl":`Главна висина пода`,"vi-VN":`Chiều cao tầng chính`,"zh-CN":`主层高`,"zh-TW":`主層高度`},文字标记位置:{"de-DE":`Textposition`,"en-US":`Text location`,"es-ES":`Ubicación del texto`,"fr-FR":`Emplacement du texte`,"id-ID":`Lokasi teks`,"it-IT":`Posizione del testo`,"ja-JP":`テキストの位置`,"ko-KR":`텍스트 태그 위치`,"ms-MY":`Lokasi teks`,"nl-NL":`Tekstmarkeringspositie`,"pl-PL":`Położenie tekstu`,"pt-PT":`Localização do texto`,"sr-Cyrl":`Локација текста`,"vi-VN":`Vị trí văn bản`,"zh-CN":`文字标记位置`,"zh-TW":`文字標記位置`},"坐标 X":{"de-DE":`X`,"en-US":`X`,"es-ES":`X`,"fr-FR":`X`,"id-ID":`X`,"it-IT":`X`,"ja-JP":`座標X`,"ko-KR":`X`,"ms-MY":`X`,"nl-NL":`X`,"pl-PL":`X`,"pt-PT":`X`,"sr-Cyrl":`X`,"vi-VN":`X`,"zh-CN":`坐标 X`,"zh-TW":`X座標`},"坐标 Y":{"de-DE":`Y`,"en-US":`Y`,"es-ES":`Y`,"fr-FR":`Y`,"id-ID":`Y`,"it-IT":`Y`,"ja-JP":`座標Y`,"ko-KR":`Y`,"ms-MY":`Y`,"nl-NL":`Y`,"pl-PL":`Y`,"pt-PT":`Y`,"sr-Cyrl":`Y`,"vi-VN":`Y`,"zh-CN":`坐标 Y`,"zh-TW":`Y座標`},文字显示:{"de-DE":`Textanzeige`,"en-US":`Text display`,"es-ES":`Visualización del texto`,"fr-FR":`Affichage du texte`,"id-ID":`Tampilan teks`,"it-IT":`Visualizzazione del testo`,"ja-JP":`テキストの表示`,"ko-KR":`문자 표시`,"ms-MY":`Paparan teks`,"nl-NL":`Tekst weergeven`,"pl-PL":`Wyświetlanie tekstu`,"pt-PT":`Exibição de texto`,"sr-Cyrl":`Приказ текста`,"vi-VN":`Hiển thị văn bản`,"zh-CN":`文字显示`,"zh-TW":`文字顯示`},隐藏名称:{"de-DE":`Versteckter Text`,"en-US":`Hidden text`,"es-ES":`Texto oculto`,"fr-FR":`Texte caché`,"id-ID":`Teks tersembunyi`,"it-IT":`Testo nascosto`,"ja-JP":`テキストを隠す`,"ko-KR":`이름 숨기기`,"ms-MY":`Teks tersembunyi`,"nl-NL":`Naam verbergen`,"pl-PL":`Ukryty tekst`,"pt-PT":`Texto oculto`,"sr-Cyrl":`Скривени текст`,"vi-VN":`Văn bản ẩn`,"zh-CN":`隐藏名称`,"zh-TW":`隱藏名稱`},隐藏面积:{"de-DE":`Versteckte Fläche`,"en-US":`Hidden area`,"es-ES":`Área oculta`,"fr-FR":`Zone cachée`,"id-ID":`Area tersembunyi`,"it-IT":`Area nascosta`,"ja-JP":`面積を隠す`,"ko-KR":`영역 숨기기`,"ms-MY":`Kawasan tersembunyi`,"nl-NL":`Verborgen gebied`,"pl-PL":`Ukryty obszar`,"pt-PT":`Área oculta`,"sr-Cyrl":`Скривена област`,"vi-VN":`Diện tích ẩn`,"zh-CN":`隐藏面积`,"zh-TW":`隱藏面積`},隐藏长宽:{"de-DE":`Länge/Breite ausblenden`,"en-US":`Hide length/width`,"es-ES":`Longitud/anchura`,"fr-FR":`Cacher longueur largeur`,"id-ID":`Sembunyikan panjang/lebar`,"it-IT":`Nascondi lunghezza/larghezza`,"ja-JP":`長隠す/幅`,"ko-KR":`숨길 길이/너비`,"ms-MY":`Sembunyikan panjang/lebar`,"nl-NL":`Verberg lengte/breedte`,"pl-PL":`Ukryj długość/szerokość`,"pt-PT":`Ocultar comprimento/largura`,"sr-Cyrl":`Сакриј дужину/ширину`,"vi-VN":`Ẩn chiều dài và chiều rộng`,"zh-CN":`隐藏长宽`,"zh-TW":`隐藏长宽`},简单模式:{"de-DE":`Einfacher Modus`,"en-US":`Simple mode`,"es-ES":`Modo simple`,"fr-FR":`Mode simple`,"id-ID":`Mode sederhana`,"it-IT":`Modalità semplice`,"ja-JP":`シンプルモード`,"ko-KR":`단순 모드`,"ms-MY":`Mod ringkas`,"nl-NL":`Eenvoudige modus`,"pl-PL":`Tryb prosty`,"pt-PT":`Modo simples`,"sr-Cyrl":`Једноставан режим`,"vi-VN":`Chế độ đơn giản`,"zh-CN":`简单模式`,"zh-TW":`簡單模式`},使用简称:{"de-DE":`Abkürzung verwenden`,"en-US":`Use abbreviation`,"es-ES":`Usar abreviatura`,"fr-FR":`Utiliser l'abréviation`,"id-ID":`Gunakan singkatan`,"it-IT":`Usa l'abbreviazione`,"ja-JP":`略称を使う`,"ko-KR":`약칭 사용`,"ms-MY":`Gunakan singkatan`,"nl-NL":`Gebruik een korte naam`,"pl-PL":`Użyj skrótu`,"pt-PT":`Usar abreviação`,"sr-Cyrl":`Користите скраћеницу`,"vi-VN":`Sử dụng viết tắt`,"zh-CN":`使用简称`,"zh-TW":`使用簡稱`},房间辅功能:{"de-DE":`Zusätzliche Funktion`,"en-US":`Extra function`,"es-ES":`Función adicional`,"fr-FR":`Fonction supplémentaire`,"id-ID":`Fungsi tambahan`,"it-IT":`Funzione extra`,"ja-JP":`追加機能`,"ko-KR":`공간 보조 기능`,"ms-MY":`Fungsi tambahan`,"nl-NL":`Kameraanvullende functies`,"pl-PL":`Dodatkowa funkcja`,"pt-PT":`Função extra`,"sr-Cyrl":`Додатна функција`,"vi-VN":`Chức năng phụ`,"zh-CN":`房间辅功能`,"zh-TW":`房間輔功能`},显示拓图:{"de-DE":`Reiben`,"en-US":`Original map`,"es-ES":`Frotamiento`,"fr-FR":`Frottage`,"id-ID":`Peta asli`,"it-IT":`Sfregamento`,"ja-JP":`拓図`,"ko-KR":`토폴로지 표시`,"ms-MY":`Peta asal`,"nl-NL":`Toon topografie`,"pl-PL":`Pocieranie`,"pt-PT":`Esfregando`,"sr-Cyrl":`Оригинална карта`,"vi-VN":`Chà`,"zh-CN":`显示拓图`,"zh-TW":`顯示拓圖`},显示全景点位:{"de-DE":`Punkt`,"en-US":`Point`,"es-ES":`Punto`,"fr-FR":`Point`,"id-ID":`Titik`,"it-IT":`Punto`,"ja-JP":`ポイント`,"ko-KR":`파노라마 포인트 표시`,"ms-MY":`Titik`,"nl-NL":`Toon een panorama`,"pl-PL":`Punkt`,"pt-PT":`Ponto`,"sr-Cyrl":`Тачка`,"vi-VN":`Điểm`,"zh-CN":`显示全景点位`,"zh-TW":`顯示全景點`},显示墙体透明:{"de-DE":`Transparent`,"en-US":`Transparent wall`,"es-ES":`Transparente`,"fr-FR":`Transparent`,"id-ID":`Dinding transparan`,"it-IT":`Trasparente`,"ja-JP":`壁の透明性`,"ko-KR":`벽 투명도 표시`,"ms-MY":`Dinding lutsinar`,"nl-NL":`Wandtransparantie weergeven`,"pl-PL":`Przezroczysty`,"pt-PT":`Transparente`,"sr-Cyrl":`Провидан зид`,"vi-VN":`Trong suốt`,"zh-CN":`显示墙体透明`,"zh-TW":`顯示牆體透明`},显示承重墙:{"de-DE":`Tragende Wände`,"en-US":`Load-bear`,"es-ES":`Paredes de carga`,"fr-FR":`Murs porteurs`,"id-ID":`Beban struktur`,"it-IT":`Muri portanti`,"ja-JP":`荷重壁`,"ko-KR":`하중벽 표시`,"ms-MY":`Tanggung beban`,"nl-NL":`Draagmuren weergeven`,"pl-PL":`Ściany nośne`,"pt-PT":`Paredes de suporte`,"sr-Cyrl":`Носећи`,"vi-VN":`Tường chịu tải`,"zh-CN":`显示承重墙`,"zh-TW":`顯示承重牆`},显示区域标记:{"de-DE":`Bereichsmarkierung`,"en-US":`Area marker`,"es-ES":`Marcador de área`,"fr-FR":`Marqueur de zone`,"id-ID":`Penanda area`,"it-IT":`Indicatore di area`,"ja-JP":`エリアマーク`,"ko-KR":`영역 태그 표시`,"ms-MY":`Penanda kawasan`,"nl-NL":`Regiomarkering tonen`,"pl-PL":`Wskaźnik obszaru`,"pt-PT":`Marcador de área`,"sr-Cyrl":`Ознака површине`,"vi-VN":`Đánh dấu khu vực`,"zh-CN":`显示区域标记`,"zh-TW":`顯示區域標記`},显示门窗:{"de-DE":`Türen/Fenster`,"en-US":`Doors/Windows`,"es-ES":`Puertas/Ventanas`,"fr-FR":`Portes/Fenêtres`,"id-ID":`Pintu/Jendela`,"it-IT":`Porte/Finestre`,"ja-JP":`ドアと窓`,"ko-KR":`문과 창문을 표시하다`,"ms-MY":`Pintu/Tingkap`,"nl-NL":`Deuren en ramen weergeven`,"pl-PL":`Drzwi/Okna`,"pt-PT":`Portas/Janelas`,"sr-Cyrl":`Врата/Прозори`,"vi-VN":`Cửa cửa/sổ`,"zh-CN":`显示门窗`,"zh-TW":`顯示門窗`},显示地板:{"de-DE":`Boden`,"en-US":`Floor`,"es-ES":`Piso`,"fr-FR":`Sol`,"id-ID":`Lantai`,"it-IT":`Livello`,"ja-JP":`床`,"ko-KR":`바닥 표시`,"ms-MY":`Lantai`,"nl-NL":`Vloer`,"pl-PL":`Podłoga`,"pt-PT":`Piso`,"sr-Cyrl":`Под`,"vi-VN":`Sàn`,"zh-CN":`显示地板`,"zh-TW":`顯示地板`},显示物件:{"de-DE":`Möbel`,"en-US":`Objects`,"es-ES":`Muebles`,"fr-FR":`Meubles`,"id-ID":`Objek`,"it-IT":`Mobili`,"ja-JP":`家具`,"ko-KR":`개체 표시`,"ms-MY":`Objek`,"nl-NL":`Objecten weergeven`,"pl-PL":`Meble`,"pt-PT":`Mobília`,"sr-Cyrl":`Објекти`,"vi-VN":`Đồ đạc`,"zh-CN":`显示物件`,"zh-TW":`顯示物件`},显示网格线:{"de-DE":`Raster`,"en-US":`Grid`,"es-ES":`Rejilla`,"fr-FR":`Grille`,"id-ID":`Kisi-kisi`,"it-IT":`Griglia`,"ja-JP":`グリッド線`,"ko-KR":`메쉬 선 표시`,"ms-MY":`Grid`,"nl-NL":`Rasterlijnen weergeven`,"pl-PL":`Siatka`,"pt-PT":`Grade`,"sr-Cyrl":`Мрежа`,"vi-VN":`Lưới`,"zh-CN":`显示网格线`,"zh-TW":`顯示網格線`},显示入户门标记:{"de-DE":`Eingangstürmarkierung anzeigen`,"en-US":`Entrance door tag`,"es-ES":`Mostrar etiqueta de puerta de entrada`,"fr-FR":`Afficher l'étiquette de la porte d'entrée`,"id-ID":`Tag pintu masuk`,"it-IT":`Mostra etichetta porta d'ingresso`,"ja-JP":`エントリゲートマーカーを表示`,"ko-KR":`출입문 표시`,"ms-MY":`Tag pintu masuk`,"nl-NL":`Ingangsdeurmarket weergeven`,"pl-PL":`Wyświetl etykietę drzwi wejściowych`,"pt-PT":`Exibir etiqueta da porta de entrada`,"sr-Cyrl":`Ознака улазних врата`,"vi-VN":`Hiển thị nhãn cửa vào`,"zh-CN":`显示入户门标记`,"zh-TW":`顯示入戶門標記`},连接点推算:{"de-DE":`Verbindungspunkt`,"en-US":`Center length`,"es-ES":`Punto de conexión`,"fr-FR":`Point de connexion`,"id-ID":`Panjang tengah`,"it-IT":`Punto di connessione`,"ja-JP":`接続点の推定`,"ko-KR":`연결점 추산`,"ms-MY":`Panjang tengah`,"nl-NL":`Verbindingspunt berekening`,"pl-PL":`Punkt połączenia`,"pt-PT":`Ponto de conexão`,"sr-Cyrl":`Дужина центра`,"vi-VN":`Điểm kết nối`,"zh-CN":`连接点推算`,"zh-TW":`連接點推算`},外墙内部长度:{"de-DE":`Externe Länge`,"en-US":`Inner length`,"es-ES":`Longitud externa`,"fr-FR":`Longueur externe`,"id-ID":`Panjang dalam`,"it-IT":`Lunghezza esterna`,"ja-JP":`外壁内側の長さ`,"ko-KR":`외벽 내부 길이`,"ms-MY":`Panjang dalam`,"nl-NL":`Binnenste lengte van de buitenwand`,"pl-PL":`Długość zewnętrzna`,"pt-PT":`Comprimento externo`,"sr-Cyrl":`Унутрашња дужина`,"vi-VN":`Chiều dài ngoài`,"zh-CN":`外墙内部长度`,"zh-TW":`外牆內部長度`},标尺类型:{"de-DE":`Typ`,"en-US":`Ruler type`,"es-ES":`Tipo`,"fr-FR":`Type`,"id-ID":`Jenis penggaris`,"it-IT":`Tipo`,"ja-JP":`種類`,"ko-KR":`눈금자 유형`,"ms-MY":`Jenis pembaris`,"nl-NL":`Type regelaar`,"pl-PL":`Typ`,"pt-PT":`Tipo`,"sr-Cyrl":`Тип лењира`,"vi-VN":`Loại`,"zh-CN":`标尺类型`,"zh-TW":`標尺類型`},结构:{"de-DE":`Struktur`,"en-US":`Structure`,"es-ES":`Estructura`,"fr-FR":`Structure`,"id-ID":`Struktur`,"it-IT":`Struttura`,"ja-JP":`構造`,"ko-KR":`구조`,"ms-MY":`Struktur`,"nl-NL":`Structuur`,"pl-PL":`Struktura`,"pt-PT":`Estrutura`,"sr-Cyrl":`Структура`,"vi-VN":`Cấu trúc`,"zh-CN":`结构`,"zh-TW":`結構`},辅层高:{"de-DE":`Höhe der Nebenetage`,"en-US":`Auxiliary floor height`,"es-ES":`Altura del piso secundario`,"fr-FR":`Hauteur de l'étage secondaire`,"id-ID":`Tinggi lantai tambahan`,"it-IT":`Altezza del piano secondario`,"ja-JP":`補助層の高さ`,"ko-KR":`부층고`,"ms-MY":`Ketinggian lantai tambahan`,"nl-NL":`Aanvullende hoogte`,"pl-PL":`Wysokość drugiego piętra`,"pt-PT":`Altura do piso secundário`,"sr-Cyrl":`Помоћна висина пода`,"vi-VN":`Chiều cao tầng phụ`,"zh-CN":`辅层高`,"zh-TW":`輔助層高度`},描述:{"de-DE":`Beschreiben`,"en-US":`Describe`,"es-ES":`Describir`,"fr-FR":`Décrire`,"id-ID":`Deskripsikan`,"it-IT":`Descrivere`,"ja-JP":`説明`,"ko-KR":`설명`,"ms-MY":`Huraikan`,"nl-NL":`Beschrijving`,"pl-PL":`Opisać`,"pt-PT":`Descrever`,"sr-Cyrl":`Описати`,"vi-VN":`Mô tả`,"zh-CN":`描述`,"zh-TW":`描述`},描述标签:{"de-DE":`Beschreibungstag`,"en-US":`description tag`,"es-ES":`etiqueta de descripción`,"fr-FR":`Description étiquette`,"id-ID":`tag deskripsi`,"it-IT":`tag di descrizione`,"ja-JP":`説明タグ`,"ko-KR":`설명 태그`,"ms-MY":`tag penerangan`,"nl-NL":`beschrijvingstag`,"pl-PL":`tag opisu`,"pt-PT":`etiqueta de descrição`,"sr-Cyrl":`описни таг`,"vi-VN":`Nhãn mô tả`,"zh-CN":`描述标签`,"zh-TW":`描述標籤`},楼层结构设置:{"de-DE":`Geschossstruktur`,"en-US":`Floor structure`,"es-ES":`Estructura del piso`,"fr-FR":`Structure du sol`,"id-ID":`Struktur lantai`,"it-IT":`Struttura del pavimento`,"ja-JP":`フロアの構造`,"ko-KR":`층구조 설정`,"ms-MY":`Struktur lantai`,"nl-NL":`Vloerconstructie`,"pl-PL":`Struktura piętra`,"pt-PT":`Estrutura do piso`,"sr-Cyrl":`Структура пода`,"vi-VN":`Cấu trúc tầng`,"zh-CN":`楼层结构设置`,"zh-TW":`樓層結構設置`},楼层设置:{"de-DE":`Geschosseinstellung`,"en-US":`Floor setting`,"es-ES":`Configuración del piso`,"fr-FR":`Réglage du sol`,"id-ID":`Pengaturan lantai`,"it-IT":`Impostazione del pavimento`,"ja-JP":`フロアの設置`,"ko-KR":`층설치`,"ms-MY":`Tetapan lantai`,"nl-NL":`Vloerinstellingen`,"pl-PL":`Ustawienie piętra`,"pt-PT":`Configuração do piso`,"sr-Cyrl":`Подешавање пода`,"vi-VN":`Cài đặt tầng`,"zh-CN":`楼层设置`,"zh-TW":`樓層設置`},标尺设置:{"de-DE":`Lineal`,"en-US":`Ruler`,"es-ES":`Regla`,"fr-FR":`Règle`,"id-ID":`Penggaris`,"it-IT":`Righello`,"ja-JP":`ルーラー`,"ko-KR":`눈금자 설정`,"ms-MY":`Pembaris`,"nl-NL":`Instellingen voor de regelaar`,"pl-PL":`Linijka`,"pt-PT":`Régua`,"sr-Cyrl":`Лењир`,"vi-VN":`Thước đo`,"zh-CN":`标尺设置`,"zh-TW":`標尺設置`},显示控制:{"de-DE":`Anzeigesteuerung`,"en-US":`Display control`,"es-ES":`control de visualización`,"fr-FR":`contrôle d'affichage`,"id-ID":`Kontrol tampilan`,"it-IT":`controllo di visualizzazione`,"ja-JP":`コントロールを表示`,"ko-KR":`디스플레이 제어`,"ms-MY":`Kawalan paparan`,"nl-NL":`Controle weergeven`,"pl-PL":`kontrola wyświetlania`,"pt-PT":`controlo de visualização`,"sr-Cyrl":`Контрола приказа`,"vi-VN":`điều khiển hiển thị`,"zh-CN":`显示控制`,"zh-TW":`顯示控制`},物件宽:{"de-DE":`Breite`,"en-US":`Width`,"es-ES":`Ancho`,"fr-FR":`Largeur`,"id-ID":`Lebar`,"it-IT":`Larghezza`,"ja-JP":`家具の幅`,"ko-KR":`물건이 넓다`,"ms-MY":`Lebar`,"nl-NL":`Objectbreedte`,"pl-PL":`Szerokość`,"pt-PT":`Largura`,"sr-Cyrl":`Ширина`,"vi-VN":`Chiều rộng`,"zh-CN":`物件宽`,"zh-TW":`物件寬`},物件长:{"de-DE":`Länge`,"en-US":`Length`,"es-ES":`Longitud`,"fr-FR":`Longueur`,"id-ID":`Panjang`,"it-IT":`Lunghezza`,"ja-JP":`家具の長さ`,"ko-KR":`개체 길이`,"ms-MY":`Panjang`,"nl-NL":`Lengte van het object`,"pl-PL":`Długość`,"pt-PT":`Comprimento`,"sr-Cyrl":`Дужина`,"vi-VN":`Chiều dài`,"zh-CN":`物件长`,"zh-TW":`物件長`},物件高:{"de-DE":`Höhe`,"en-US":`Height`,"es-ES":`Altura`,"fr-FR":`Hauteur`,"id-ID":`Tinggi`,"it-IT":`Altezza`,"ja-JP":`家具の高さ`,"ko-KR":`물건이 높다`,"ms-MY":`Ketinggian`,"nl-NL":`Object hoog`,"pl-PL":`Wysokość`,"pt-PT":`Altura`,"sr-Cyrl":`Висина`,"vi-VN":`Chiều cao`,"zh-CN":`物件高`,"zh-TW":`物件高`},角度范围:{"de-DE":`Winkelbereich`,"en-US":`Angle range`,"es-ES":`Rango de ángulo`,"fr-FR":`Plage d'angle`,"id-ID":`Rentang sudut`,"it-IT":`Intervallo di angolo`,"ja-JP":`角度範囲`,"ko-KR":`각도 범위`,"ms-MY":`Julat sudut`,"nl-NL":`Hoekbereik`,"pl-PL":`Zakres kąta`,"pt-PT":`Intervalo de ângulo`,"sr-Cyrl":`Опсег угла`,"vi-VN":`Phạm vi góc`,"zh-CN":`角度范围`,"zh-TW":`角度範圍`},旋转角度:{"de-DE":`Drehung`,"en-US":`Rotation`,"es-ES":`Rotación`,"fr-FR":`Pivotement`,"id-ID":`Rotasi`,"it-IT":`Rotazione`,"ja-JP":`回転角度`,"ko-KR":`회전 각도`,"ms-MY":`Putaran`,"nl-NL":`Rotatiehoek`,"pl-PL":`Obrót`,"pt-PT":`Rotação`,"sr-Cyrl":`Ротација`,"vi-VN":`Xoay`,"zh-CN":`旋转角度`,"zh-TW":`旋轉角度`},度:{"de-DE":`°`,"en-US":`°`,"es-ES":`°`,"fr-FR":`°`,"id-ID":`°`,"it-IT":`°`,"ja-JP":`度`,"ko-KR":`°`,"ms-MY":`°`,"nl-NL":`°`,"pl-PL":`°`,"pt-PT":`°`,"sr-Cyrl":`°`,"vi-VN":`°`,"zh-CN":`度`,"zh-TW":`度`},笔录用名:{"de-DE":`Aufzeichnungsnamen`,"en-US":`comment`,"es-ES":`Nombre de la transcripción`,"fr-FR":`Nom de la transcription`,"id-ID":`komentar`,"it-IT":`Nome della registrazione`,"ja-JP":`コメント`,"ko-KR":`기록 이름`,"ms-MY":`komen`,"nl-NL":`Gebruiksnaam`,"pl-PL":`Nazwa zapisu`,"pt-PT":`Nome da gravação`,"sr-Cyrl":`коментар`,"vi-VN":`Ghi tên`,"zh-CN":`笔录用名`,"zh-TW":`笔录用名`},位置锁定:{"de-DE":`Positionsverriegelung`,"en-US":`Position lock`,"es-ES":`Bloqueo de posición`,"fr-FR":`Verrouillage de position`,"id-ID":`Kunci posisi`,"it-IT":`Blocco della posizione`,"ja-JP":`位置ロック`,"ko-KR":`위치 잠금`,"ms-MY":`Kunci kedudukan`,"nl-NL":`Locatie vergrendelen`,"pl-PL":`Blokada pozycji`,"pt-PT":`Bloqueio de posição`,"sr-Cyrl":`Закључавање позиције`,"vi-VN":`Khóa vị trí`,"zh-CN":`位置锁定`,"zh-TW":`位置鎖定`},锁定长宽比:{"de-DE":`Verhältnissperre`,"en-US":`Ratio Lock`,"es-ES":`Bloqueo de relación`,"fr-FR":`Verrouillage du rapport`,"id-ID":`Kunci Rasio`,"it-IT":`Blocco del rapporto`,"ja-JP":`レシオロック`,"ko-KR":`가로세로 비율 잠금`,"ms-MY":`Kunci Nisbah`,"nl-NL":`Verhouding vergrendelen`,"pl-PL":`Blokada proporcji`,"pt-PT":`Bloqueio de proporção`,"sr-Cyrl":`Закључавање односа`,"vi-VN":`Khóa tỷ lệ`,"zh-CN":`锁定长宽比`,"zh-TW":`鎖定長寬比`},变形:{"de-DE":`Verformen`,"en-US":`Deform`,"es-ES":`Deformar`,"fr-FR":`Déformer`,"id-ID":`Deform`,"it-IT":`Deformare`,"ja-JP":`変形`,"ko-KR":`변형`,"ms-MY":`Ubah bentuk`,"nl-NL":`Vervormen`,"pl-PL":`Zdeformować`,"pt-PT":`Deformar`,"sr-Cyrl":`Деформисати`,"vi-VN":`Lật và xoay`,"zh-CN":`变形`,"zh-TW":`變形`},上下翻转:{"de-DE":`Vert drehen`,"en-US":`Vert flip`,"es-ES":`Dar vuelta`,"fr-FR":`Vert retour`,"id-ID":`Vert balik`,"it-IT":`Su e giù`,"ja-JP":`上下反転`,"ko-KR":`수직뒤집`,"ms-MY":`Vert balik`,"nl-NL":`Vert spiegel`,"pl-PL":`Góra i dół`,"pt-PT":`Vert virar`,"sr-Cyrl":`Vert okret`,"vi-VN":`Lên & Xuống`,"zh-CN":`上下翻转`,"zh-TW":`上下翻轉`},层级:{"de-DE":`Stufe`,"en-US":`Level`,"es-ES":`Nivel`,"fr-FR":`Niveau`,"id-ID":`Tingkat`,"it-IT":`Livello`,"ja-JP":`レベル`,"ko-KR":`레벨`,"ms-MY":`Tahap`,"nl-NL":`Niveau`,"pl-PL":`Poziom`,"pt-PT":`Nível`,"sr-Cyrl":`Ниво`,"vi-VN":`Phân cấp`,"zh-CN":`层级`,"zh-TW":`层级`},置于底层:{"de-DE":`Mit dem rückflug`,"en-US":`Send to Back`,"es-ES":`Enviar al fondo`,"fr-FR":`Mettre à l'arrière`,"id-ID":`Kirim ke Belakang`,"it-IT":`Porta in Secondo Piano`,"ja-JP":`下へ移動`,"ko-KR":`밑바닥에 놓다`,"ms-MY":`Hantar ke Belakang`,"nl-NL":`Op de ondergrond`,"pl-PL":`Na dole`,"pt-PT":`Enviar para Trás`,"sr-Cyrl":`Пошаљи у позадину`,"vi-VN":`Đặt đáy`,"zh-CN":`置于底层`,"zh-TW":`置于底层`},置于顶层:{"de-DE":`Fingerspitze`,"en-US":`pin to top`,"es-ES":`Fijar en la parte superior`,"fr-FR":`Pin vers le haut`,"id-ID":`Pin ke atas`,"it-IT":`fissa in alto`,"ja-JP":`最上位へ移動`,"ko-KR":`맨 위에 고정`,"ms-MY":`Semat ke atas`,"nl-NL":`Aan de bovenkant vastzetten`,"pl-PL":`przypnij na górę`,"pt-PT":`fixar no topo`,"sr-Cyrl":`закачи на врх`,"vi-VN":`Đặt trên cùng`,"zh-CN":`置于顶层`,"zh-TW":`置于顶层`},可见长1:{"de-DE":`Sichtbare Länge 1`,"en-US":`Visible length 1`,"es-ES":`Longitud visible 1`,"fr-FR":`Longueur visible 1`,"id-ID":`Panjang terlihat 1`,"it-IT":`Lunghezza visibile 1`,"ja-JP":`表示長1`,"ko-KR":`가시 길이 1`,"ms-MY":`Panjang kelihatan 1`,"nl-NL":`zichtbare lengte 1`,"pl-PL":`Widoczna długość 1`,"pt-PT":`Comprimento visível 1`,"sr-Cyrl":`Видљива дужина 1`,"vi-VN":`Chiều dài hiển thị 1`,"zh-CN":`可见长1`,"zh-TW":`可見長1`},可见长2:{"de-DE":`Sichtbare Länge 2`,"en-US":`Visible length 2`,"es-ES":`Longitud visible 2`,"fr-FR":`Longueur visible 2`,"id-ID":`Panjang terlihat 2`,"it-IT":`Lunghezza visibile 2`,"ja-JP":`可視長2`,"ko-KR":`가시 길이 2`,"ms-MY":`Panjang kelihatan 2`,"nl-NL":`zichtbare lengte 2`,"pl-PL":`Widoczna długość 2`,"pt-PT":`Comprimento visível 2`,"sr-Cyrl":`Видљива дужина 2`,"vi-VN":`Chiều dài hiển thị 2`,"zh-CN":`可见长2`,"zh-TW":`可見長2`},上边长:{"de-DE":`Obere Basis`,"en-US":`Upper base`,"es-ES":`Base superior`,"fr-FR":`Base supérieure`,"id-ID":`Basis atas`,"it-IT":`Base superiore`,"ja-JP":`上の長さ`,"ko-KR":`위쪽 길이`,"ms-MY":`Asas atas`,"nl-NL":`Boven lang`,"pl-PL":`Górna podstawa`,"pt-PT":`Base superior`,"sr-Cyrl":`Горња база`,"vi-VN":`Đáy trên`,"zh-CN":`上边长`,"zh-TW":`上邊長`},下边长:{"de-DE":`Untere Basis`,"en-US":`Lower base`,"es-ES":`Base inferior`,"fr-FR":`Base inférieure`,"id-ID":`Dasar bawah`,"it-IT":`Base inferiore`,"ja-JP":`下の長さ`,"ko-KR":`아래쪽 길이`,"ms-MY":`Asas bawah`,"nl-NL":`Lange onderkant`,"pl-PL":`Dolna podstawa`,"pt-PT":`Base inferior`,"sr-Cyrl":`Доња база`,"vi-VN":`Đáy dưới`,"zh-CN":`下边长`,"zh-TW":`下邊長`},左边长:{"de-DE":`Linke Basis`,"en-US":`Left base`,"es-ES":`Base izquierda`,"fr-FR":`Base gauche`,"id-ID":`Basis kiri`,"it-IT":`Base sinistra`,"ja-JP":`左の長さ`,"ko-KR":`왼쪽 길이`,"ms-MY":`Asas kiri`,"nl-NL":`Lange links`,"pl-PL":`Lewa podstawa`,"pt-PT":`Base esquerda`,"sr-Cyrl":`Лева база`,"vi-VN":`Đáy trái`,"zh-CN":`左边长`,"zh-TW":`左邊長`},右边长:{"de-DE":`Rechte Basis`,"en-US":`Right base`,"es-ES":`Base derecha`,"fr-FR":`Base droite`,"id-ID":`Dasar kanan`,"it-IT":`Base destra`,"ja-JP":`右の長さ`,"ko-KR":`오른쪽 길이`,"ms-MY":`Asas kanan`,"nl-NL":`Lang rechts`,"pl-PL":`Prawa podstawa`,"pt-PT":`Base direita`,"sr-Cyrl":`Десна база`,"vi-VN":`Đáy phải`,"zh-CN":`右边长`,"zh-TW":`右邊長`},自动:{"de-DE":`Automatisch`,"en-US":`Automatic`,"es-ES":`Automático`,"fr-FR":`Automatique`,"id-ID":`Otomatis`,"it-IT":`Automatico`,"ja-JP":`自動`,"ko-KR":`자동`,"ms-MY":`Automatik`,"nl-NL":`Automatisch`,"pl-PL":`Automatyczny`,"pt-PT":`Automático`,"sr-Cyrl":`Аутоматски`,"vi-VN":`Tự động`,"zh-CN":`自动`,"zh-TW":`自動`},人工:{"de-DE":`Manuell`,"en-US":`Manual`,"es-ES":`Manual`,"fr-FR":`Notice`,"id-ID":`Manual`,"it-IT":`Manuale`,"ja-JP":`マニュアル`,"ko-KR":`인공`,"ms-MY":`Manual`,"nl-NL":`Kunstmatige`,"pl-PL":`Manualny`,"pt-PT":`Manual`,"sr-Cyrl":`Ручно`,"vi-VN":`Thủ công`,"zh-CN":`人工`,"zh-TW":`人工`},外墙:{"de-DE":`Außen`,"en-US":`Outer Wall`,"es-ES":`Muro exterior`,"fr-FR":`Mur extérieur`,"id-ID":`Dinding Luar`,"it-IT":`Muro esterno`,"ja-JP":`外壁`,"ko-KR":`외벽`,"ms-MY":`Dinding Luar`,"nl-NL":`Buitenmuur`,"pl-PL":`Zewnętrzna ściana`,"pt-PT":`Parede Exterior`,"sr-Cyrl":`Спољашњи зид`,"vi-VN":`Tường ngoài`,"zh-CN":`外墙`,"zh-TW":`外牆`},内墙:{"de-DE":`Innenwand`,"en-US":`Inner Wall`,"es-ES":`Pared interior`,"fr-FR":`Mur intérieur`,"id-ID":`Dinding Dalam`,"it-IT":`Muro interno`,"ja-JP":`内壁`,"ko-KR":`내벽`,"ms-MY":`Dinding Dalam`,"nl-NL":`Binnenmuur`,"pl-PL":`Wewnętrzna ściana`,"pt-PT":`Parede Interna`,"sr-Cyrl":`Унутрашњи зид`,"vi-VN":`Tường nội`,"zh-CN":`内墙`,"zh-TW":`內牆`},墙体偏移:{"de-DE":`Wandversatz`,"en-US":`Wall offset`,"es-ES":`Desplazamiento de la pared`,"fr-FR":`Décalage du mur`,"id-ID":`Offset dinding`,"it-IT":`Scostamento della parete`,"ja-JP":`壁のオフセット`,"ko-KR":`벽 오프셋`,"ms-MY":`Pelepasan dinding`,"nl-NL":`Wandverschuiving`,"pl-PL":`Przesunięcie ściany`,"pt-PT":`Deslocamento da parede`,"sr-Cyrl":`Офсет зида`,"vi-VN":`Độ lệch tường`,"zh-CN":`墙体偏移`,"zh-TW":`墙体偏移`},夹角:{"de-DE":`Winkel`,"en-US":`Angle`,"es-ES":`Ángulo`,"fr-FR":`Angle`,"id-ID":`Sudut`,"it-IT":`Angolo`,"ja-JP":`夾角`,"ko-KR":`협각`,"ms-MY":`Sudut`,"nl-NL":`Hook`,"pl-PL":`Kąt`,"pt-PT":`Ângulo`,"sr-Cyrl":`Угао`,"vi-VN":`Góc`,"zh-CN":`夹角`,"zh-TW":`角度`},墙面:{"de-DE":`Metope`,"en-US":`Wall`,"es-ES":`metope`,"fr-FR":`Métape`,"id-ID":`Dinding`,"it-IT":`Metope`,"ja-JP":`壁面`,"ko-KR":`벽면`,"ms-MY":`Dinding`,"nl-NL":`De muur`,"pl-PL":`Metopa`,"pt-PT":`metope`,"sr-Cyrl":`Зид`,"vi-VN":`mặt tiền`,"zh-CN":`墙面`,"zh-TW":`牆面`},长:{"de-DE":`Länge`,"en-US":`Length`,"es-ES":`Longitud`,"fr-FR":`Longueur`,"id-ID":`Panjang`,"it-IT":`Lunghezza`,"ja-JP":`長さ`,"ko-KR":`길다`,"ms-MY":`Panjang`,"nl-NL":`Lange`,"pl-PL":`Długość`,"pt-PT":`Comprimento`,"sr-Cyrl":`Дужина`,"vi-VN":`Chiều dài`,"zh-CN":`长`,"zh-TW":`長`},显示偏转:{"de-DE":`Anzeigeabweichung`,"en-US":`Deflection`,"es-ES":`Desviación de visualización`,"fr-FR":`Affichage de la déviation`,"id-ID":`Defleksi`,"it-IT":`Visualizzazione deflessione`,"ja-JP":`偏向を表示`,"ko-KR":`편향 표시`,"ms-MY":`Lenturan`,"nl-NL":`Afwijking weergeven`,"pl-PL":`Wyświetlanie odchylenia`,"pt-PT":`Desvio de visualização`,"sr-Cyrl":`Дефлекција`,"vi-VN":`Hiển thị nghiêng`,"zh-CN":`显示偏转`,"zh-TW":`顯示偏轉`},墙厚类型:{"de-DE":`Dicke Typ`,"en-US":`Thickness type`,"es-ES":`Tipo de espesor`,"fr-FR":`Type d'épaisseur`,"id-ID":`Jenis ketebalan`,"it-IT":`Tipo di spessore`,"ja-JP":`厚さタイプ`,"ko-KR":`벽 두께 유형`,"ms-MY":`Jenis ketebalan`,"nl-NL":`Type muurdikte`,"pl-PL":`Typ grubości`,"pt-PT":`Tipo de espessura`,"sr-Cyrl":`Тип дебљине`,"vi-VN":`Loại độ dày`,"zh-CN":`墙厚类型`,"zh-TW":`牆厚類型`},墙厚设置:{"de-DE":`Dicke einstellen`,"en-US":`Thickness`,"es-ES":`Espesor`,"fr-FR":`Épaisseur`,"id-ID":`Ketebalan`,"it-IT":`Spessore`,"ja-JP":`厚さ設定`,"ko-KR":`벽 두께 설정`,"ms-MY":`Ketebalan`,"nl-NL":`Wanddikte instellingen`,"pl-PL":`Grubość`,"pt-PT":`Espessura`,"sr-Cyrl":`Дебљина`,"vi-VN":`Độ dày`,"zh-CN":`墙厚设置`,"zh-TW":`牆厚設定`},属性:{"de-DE":`Attribut`,"en-US":`Attribute`,"es-ES":`atributo`,"fr-FR":`attribut`,"id-ID":`Atribut`,"it-IT":`attributo`,"ja-JP":`属性`,"ko-KR":`속성`,"ms-MY":`Atribut`,"nl-NL":`Eigenschappen`,"pl-PL":`atrybut`,"pt-PT":`atributo`,"sr-Cyrl":`Атрибут`,"vi-VN":`thuộc tính`,"zh-CN":`属性`,"zh-TW":`屬性`},承重墙:{"de-DE":`Tragende Wand`,"en-US":`Bearing wall`,"es-ES":`Pared de carga`,"fr-FR":`Mur porteur`,"id-ID":`Dinding penahan`,"it-IT":`Muro portante`,"ja-JP":`荷重壁`,"ko-KR":`하중벽`,"ms-MY":`Dinding galas`,"nl-NL":`Draagmuur`,"pl-PL":`Ściana nośna`,"pt-PT":`Parede de suporte`,"sr-Cyrl":`Носећи зид`,"vi-VN":`Tường chịu lực`,"zh-CN":`承重墙`,"zh-TW":`承重牆`},弧形墙面:{"de-DE":`Gewölbte Wand`,"en-US":`Curved wall`,"es-ES":`Pared curva`,"fr-FR":`Mur courbé`,"id-ID":`Dinding melengkung`,"it-IT":`Muro curvo`,"ja-JP":`円弧壁`,"ko-KR":`호형 벽면`,"ms-MY":`Dinding melengkung`,"nl-NL":`gebogen muur`,"pl-PL":`Ściana zakrzywiona`,"pt-PT":`Parede curva`,"sr-Cyrl":`Закривљени зид`,"vi-VN":`Tường cong`,"zh-CN":`弧形墙面`,"zh-TW":`弧形牆面`},圆弧高度:{"zh-CN":`圆弧高度`,"zh-TW":`圓弧高度`,"en-US":`Arc height`,"ja-JP":`弧の高さ`,"ko-KR":`호의 높이`,"de-DE":`Bogenhöhe`,"nl-NL":`Booghoogte`,"pl-PL":`Wysokość łuku`,"pt-PT":`Altura do Arco`,"es-ES":`Altura del Arco`,"fr-FR":`Hauteur de l'arc`,"it-IT":`Altezza dell'arco`,"id-ID":`Tinggi Busur`,"ms-MY":`Tinggi Lengkok`,"sr-Cyrl":`Висина лука`,"vi-VN":`Chiều cao cung`},反向:{"de-DE":`umgekehrt`,"en-US":`Reverse`,"es-ES":`inverso`,"fr-FR":`invers`,"id-ID":`Balik`,"it-IT":`inverso`,"ja-JP":`リバース`,"ko-KR":`역방향`,"ms-MY":`Terbalik`,"nl-NL":`Omgekeerd`,"pl-PL":`odwróć`,"pt-PT":`reverso`,"sr-Cyrl":`Обрни`,"vi-VN":`đảo ngược`,"zh-CN":`反向`,"zh-TW":`反向`},连接点:{"de-DE":`Kreuzung`,"en-US":`Junction`,"es-ES":`Cruce`,"fr-FR":`Jonction`,"id-ID":`Persimpangan`,"it-IT":`Incrocio`,"ja-JP":`接続点`,"ko-KR":`교차로`,"ms-MY":`Persimpangan`,"nl-NL":`Kruispunt`,"pl-PL":`Skrzyżowanie`,"pt-PT":`Juncção`,"sr-Cyrl":`Чворишта`,"vi-VN":`Điểm kết nối`,"zh-CN":`连接点`,"zh-TW":`連接點`},入户门:{"de-DE":`Eingang`,"en-US":`Entrance`,"es-ES":`Entrada`,"fr-FR":`Entrée`,"id-ID":`Pintu masuk`,"it-IT":`Entrata`,"ja-JP":`入り口`,"ko-KR":`입주문`,"ms-MY":`Pintu masuk`,"nl-NL":`Ingang`,"pl-PL":`Wejście`,"pt-PT":`Entrada`,"sr-Cyrl":`Улаз`,"vi-VN":`Lối vào`,"zh-CN":`入户门`,"zh-TW":`入戶門`},非入户门:{"de-DE":`NICHT Eingang`,"en-US":`NOT Entrance`,"es-ES":`NO Entrada`,"fr-FR":`PAS Entrée`,"id-ID":`BUKAN Pintu Masuk`,"it-IT":`NON Entrata`,"ja-JP":`入り口じゃない`,"ko-KR":`비입호문`,"ms-MY":`BUKAN Pintu masuk`,"nl-NL":`Niet-ingangsdeur`,"pl-PL":`NIE Wejście`,"pt-PT":`Sem Entrada`,"sr-Cyrl":`НИЈЕ Улаз`,"vi-VN":`KHÔNG Lối vào`,"zh-CN":`非入户门`,"zh-TW":`非入戶門`},设置高度:{"de-DE":`Höhe einstellen`,"en-US":`Height`,"es-ES":`Altura`,"fr-FR":`Hauteur`,"id-ID":`Tinggi`,"it-IT":`Altezza`,"ja-JP":`高さ`,"ko-KR":`높이 설정`,"ms-MY":`Ketinggian`,"nl-NL":`Hoogte instellen`,"pl-PL":`Wysokość`,"pt-PT":`Altura`,"sr-Cyrl":`Висина`,"vi-VN":`Chiều cao`,"zh-CN":`设置高度`,"zh-TW":`設置高度`},无高度:{"de-DE":`Keine Höhe`,"en-US":`No height`,"es-ES":`Sin altura`,"fr-FR":`Pas de hauteur`,"id-ID":`Tidak ada tinggi`,"it-IT":`Nessuna altezza`,"ja-JP":`高さなし`,"ko-KR":`높이 없음`,"ms-MY":`Tiada ketinggian`,"nl-NL":`Geen hoogte`,"pl-PL":`Brak wysokości`,"pt-PT":`Sem altura`,"sr-Cyrl":`Нема висине`,"vi-VN":`Không chiều cao`,"zh-CN":`无高度`,"zh-TW":`無高度`},设置距地高度:{"de-DE":`Höhe vom Boden einstellen`,"en-US":`Set Height from Ground`,"es-ES":`Establecer altura desde el suelo`,"fr-FR":`Régler la hauteur du sol`,"id-ID":`Atur tinggi dari tanah`,"it-IT":`Imposta Altezza da Terra`,"ja-JP":`地面からの高さを設定`,"ko-KR":`거리 높이 설정`,"ms-MY":`Tetapkan Ketinggian dari Tanah`,"nl-NL":`Afstandshoogte instellen`,"pl-PL":`Ustaw wysokość od ziemi`,"pt-PT":`Definir altura do solo`,"sr-Cyrl":`Постави висину од земље`,"vi-VN":`Đặt chiều cao từ mặt đất`,"zh-CN":`设置距地高度`,"zh-TW":`設置距地高度`},无距地高度:{"de-DE":`Keine Höhe vom Boden`,"en-US":`No the height from the ground`,"es-ES":`Sin altura desde el suelo`,"fr-FR":`Pas de hauteur depuis le sol`,"id-ID":`Tidak ada tinggi dari tanah`,"it-IT":`Nessuna altezza dal suolo`,"ja-JP":`地面からの高さがない`,"ko-KR":`비거리 높이`,"ms-MY":`Tiada ketinggian dari tanah`,"nl-NL":`Hoogte zonder afstand`,"pl-PL":`Brak wysokości od ziemi`,"pt-PT":`Sem altura a partir do chão`,"sr-Cyrl":`Не висина од земље`,"vi-VN":`Không chiều cao từ mặt đất`,"zh-CN":`无距地高度`,"zh-TW":`無距地高度`},门附属物:{"de-DE":`Tür- und Fenstereinstellung`,"en-US":`Door & Window setting`,"es-ES":`Configuración de puertas y ventanas`,"fr-FR":`Réglage de la porte et de la fenêtre`,"id-ID":`Pengaturan Pintu & Jendela`,"it-IT":`Impostazione porta e finestra`,"ja-JP":`ドアと窓設定`,"ko-KR":`문부속물`,"ms-MY":`Tetapan Pintu & Tingkap`,"nl-NL":`Deur accessoires`,"pl-PL":`Ustawienia drzwi i okna`,"pt-PT":`Configuração de portas e janelas`,"sr-Cyrl":`Подешавање врата и прозора`,"vi-VN":`Cài đặt cửa và cửa sổ`,"zh-CN":`门附属物`,"zh-TW":`門和窗設置`},宽度:{"de-DE":`Breite`,"en-US":`Width`,"es-ES":`Ancho`,"fr-FR":`Largeur`,"id-ID":`Lebar`,"it-IT":`Larghezza`,"ja-JP":`幅`,"ko-KR":`너비`,"ms-MY":`Lebar`,"nl-NL":`Breedte`,"pl-PL":`Szerokość`,"pt-PT":`Largura`,"sr-Cyrl":`Ширина`,"vi-VN":`Chiều rộng`,"zh-CN":`宽度`,"zh-TW":`寬度`},门宽度:{"de-DE":`Türbreite`,"en-US":`Door width`,"es-ES":`Ancho de puerta`,"fr-FR":`Largeur de porte`,"id-ID":`Lebar pintu`,"it-IT":`Larghezza della porta`,"ja-JP":`ドアの幅`,"ko-KR":`문폭`,"ms-MY":`Lebar pintu`,"nl-NL":`Deurbreedte`,"pl-PL":`Szerokość drzwi`,"pt-PT":`Largura da porta`,"sr-Cyrl":`Ширина врата`,"vi-VN":`Chiều rộng cửa`,"zh-CN":`门宽度`,"zh-TW":`門寬度`},距连接点:{"de-DE":`Ab Kreuzung`,"en-US":`From junction`,"es-ES":`Desde el cruce`,"fr-FR":`De la jonction`,"id-ID":`Dari titik koneksi`,"it-IT":`Dall'incrocio`,"ja-JP":`接続点から`,"ko-KR":`교차로에서`,"ms-MY":`Dari persimpangan`,"nl-NL":`Vanaf kruising`,"pl-PL":`Z skrzyżowania`,"pt-PT":`Da junção`,"sr-Cyrl":`Од раскрснице`,"vi-VN":`Từ điểm kết nối`,"zh-CN":`距连接点`,"zh-TW":`距離連接點`},入户门角:{"de-DE":`Eingangstürwinkel`,"en-US":`Entrance door angle`,"es-ES":`Ángulo de la puerta de entrada`,"fr-FR":`Angle de la porte d'entrée`,"id-ID":`Sudut pintu masuk`,"it-IT":`Angolo della porta d'ingresso`,"ja-JP":`入り口の角度`,"ko-KR":`문구석에 들어가다`,"ms-MY":`Sudut pintu masuk`,"nl-NL":`Ingangshoek`,"pl-PL":`Kąt drzwi wejściowych`,"pt-PT":`Ângulo da porta de entrada`,"sr-Cyrl":`Угао улазних врата`,"vi-VN":`Góc cửa vào`,"zh-CN":`入户门角`,"zh-TW":`入戶門角`},高度类型:{"de-DE":`Höhetyp`,"en-US":`Height type`,"es-ES":`Tipo de altura`,"fr-FR":`Type de hauteur`,"id-ID":`Jenis ketinggian`,"it-IT":`Tipo di altezza`,"ja-JP":`高さタイプ`,"ko-KR":`높이 유형`,"ms-MY":`Jenis ketinggian`,"nl-NL":`Hoogte Type`,"pl-PL":`Typ wysokości`,"pt-PT":`Tipo de altura`,"sr-Cyrl":`Тип висине`,"vi-VN":`Loại chiều cao`,"zh-CN":`高度类型`,"zh-TW":`高度類型`},高度设置:{"de-DE":`Höhe einstellen`,"en-US":`Height`,"es-ES":`Altura`,"fr-FR":`Hauteur`,"id-ID":`Tinggi`,"it-IT":`Altezza`,"ja-JP":`高さ`,"ko-KR":`높이 설정`,"ms-MY":`Ketinggian`,"nl-NL":`Hoogteinstellingen`,"pl-PL":`Wysokość`,"pt-PT":`Altura`,"sr-Cyrl":`Висина`,"vi-VN":`Chiều cao`,"zh-CN":`高度设置`,"zh-TW":`高度設定`},窗高设置:{"de-DE":`Fensterhöhe`,"en-US":`Window height`,"es-ES":`Altura de la ventana`,"fr-FR":`Hauteur de la fenêtre`,"id-ID":`Tinggi jendela`,"it-IT":`Altezza della finestra`,"ja-JP":`窓の高さの設定`,"ko-KR":`창 높이 설정`,"ms-MY":`Ketinggian tingkap`,"nl-NL":`instellingen voor vensterhoogte`,"pl-PL":`Wysokość okna`,"pt-PT":`Altura da janela`,"sr-Cyrl":`Висина прозора`,"vi-VN":`Chiều cao của cửa sổ`,"zh-CN":`窗高设置`,"zh-TW":`窗高設置`},距地类型:{"de-DE":`Höhetyp vom Boden`,"en-US":`Ground distance type`,"es-ES":`Tipo de altura desde el suelo`,"fr-FR":`Type de hauteur depuis le sol`,"id-ID":`Jenis jarak ke tanah`,"it-IT":`Tipo di altezza dal suolo`,"ja-JP":`地面からの高さの種類`,"ko-KR":`여백 유형`,"ms-MY":`Jenis jarak dari tanah`,"nl-NL":`Type afstand`,"pl-PL":`Typ wysokości od ziemi`,"pt-PT":`Tipo de altura a partir do chão`,"sr-Cyrl":`Тип удаљености од земље`,"vi-VN":`Loại chiều cao từ mặt đất`,"zh-CN":`距地类型`,"zh-TW":`距地類型`},距地高度:{"de-DE":`Höhe vom Boden`,"en-US":`Height from Ground`,"es-ES":`Altura del suelo`,"fr-FR":`Hauteur du sol`,"id-ID":`Tinggi dari Tanah`,"it-IT":`Altezza dal suolo`,"ja-JP":`地上からの高さ`,"ko-KR":`거리 높이`,"ms-MY":`Ketinggian dari Tanah`,"nl-NL":`Afstand hoogte`,"pl-PL":`Wysokość od ziemi`,"pt-PT":`Altura do solo`,"sr-Cyrl":`Висина од земље`,"vi-VN":`Chiều cao từ mặt đất`,"zh-CN":`距地高度`,"zh-TW":`距地高度`},不参与统计:{"de-DE":`Nicht an Statistiken teilnehmen`,"en-US":`Not participating in Statistics`,"es-ES":`No participa en Estadísticas`,"fr-FR":`Ne participe pas aux statistiques`,"id-ID":`Tidak berpartisipasi dalam Statistik`,"it-IT":`Non partecipare alle statistiche`,"ja-JP":`統計しない`,"ko-KR":`통계에 참여하지 않음`,"ms-MY":`Tidak mengambil bahagian dalam Statistik`,"nl-NL":`Geen deelname aan statistieken`,"pl-PL":`Nie uczestniczy w statystykach`,"pt-PT":`Não participa em Estatísticas`,"sr-Cyrl":`Не учествује у статистици`,"vi-VN":`Không tham gia trong Thống kê`,"zh-CN":`不参与统计`,"zh-TW":`不參與統計`},顶点锁定:{"de-DE":`Vertex-Sperre`,"en-US":`Vertex locking`,"es-ES":`Bloqueo de vértices`,"fr-FR":`Vertex verrouillage`,"id-ID":`Penguncian simpul`,"it-IT":`Blocco vertice`,"ja-JP":`頂点ロック`,"ko-KR":`교점 잠금`,"ms-MY":`Penguncian bucu`,"nl-NL":`Topvergrendeling`,"pl-PL":`Blokada wierzchołka`,"pt-PT":`Bloqueio de vértices`,"sr-Cyrl":`Закључавање темена`,"vi-VN":`Khóa đỉnh`,"zh-CN":`顶点锁定`,"zh-TW":`頂點鎖定`},体现到上标尺:{"de-DE":`Auf oberem Lineal anzeigen`,"en-US":`Show on Top Ruler`,"es-ES":`Mostrar en la regla superior`,"fr-FR":`Afficher sur la règle supérieure`,"id-ID":`Tampilkan di penguasa atas`,"it-IT":`Riflesso nella scala superiore`,"ja-JP":`上のルーラーに反映`,"ko-KR":`위 눈금자에 구현`,"ms-MY":`Tunjukkan pada Pembaris Atas`,"nl-NL":`Vertoond in de bovenkant`,"pl-PL":`Pokaż na górnej linijce`,"pt-PT":`Mostrar na régua superior`,"sr-Cyrl":`Прикажи на горњем лењиру`,"vi-VN":`Phản ánh trong thang trên`,"zh-CN":`体现到上标尺`,"zh-TW":`體現到上標尺`},体现到右标尺:{"de-DE":`Auf rechter Lineal anzeigen`,"en-US":`Show on Right Ruler`,"es-ES":`Mostrar en la regla derecha`,"fr-FR":`Reflet sur la règle de droite`,"id-ID":`Cerminkan ke penggaris kanan`,"it-IT":`Mostra sul Righello Destro`,"ja-JP":`右ルーラーに反映`,"ko-KR":`오른쪽 눈금에 표시`,"ms-MY":`Tunjukkan pada Pembaris Kanan`,"nl-NL":`Vertoond in de rechterlijst`,"pl-PL":`Odbicie w prawej skali`,"pt-PT":`Mostrar na régua direita`,"sr-Cyrl":`Прикажи на десном лењиру`,"vi-VN":`Phản ánh vào thước vuông phải`,"zh-CN":`体现到右标尺`,"zh-TW":`體現到右標尺`},体现到下标尺:{"de-DE":`Auf unterem Lineal anzeigen`,"en-US":`Show on Lower Ruler`,"es-ES":`Mostrar en la regla inferior`,"fr-FR":`Refleté dans l'échelle inférieure`,"id-ID":`Tercermin pada skala bawah`,"it-IT":`Mostra sul righello inferiore`,"ja-JP":`下のルーラーに反映`,"ko-KR":`아래 눈금자로 표시`,"ms-MY":`Tunjukkan pada Pembaris Bawah`,"nl-NL":`Vertoon in onderstaande regel`,"pl-PL":`Odbicie w dolnej skali`,"pt-PT":`Mostrar na Régua Inferior`,"sr-Cyrl":`Одражено у доњој скали`,"vi-VN":`Phản ánh trong thang dưới`,"zh-CN":`体现到下标尺`,"zh-TW":`體現到下標尺`},体现到左标尺:{"de-DE":`Reflektiert im linken Maßstab`,"en-US":`Show on Left Ruler`,"es-ES":`Mostrar en la regla izquierda`,"fr-FR":`Reflet dans la règle de gauche`,"id-ID":`Tercermin di penggaris kiri`,"it-IT":`Mostra sul righello sinistro`,"ja-JP":`左ルーラーに反映`,"ko-KR":`왼쪽 눈금자로 표시`,"ms-MY":`Tunjukkan pada Pembaris Kiri`,"nl-NL":`Toon op Linker Liniaal`,"pl-PL":`Odbicie w lewej skali`,"pt-PT":`Mostrar na régua esquerda`,"sr-Cyrl":`Одражено на левом лењиру`,"vi-VN":`Phản ánh vào thước vuông trái`,"zh-CN":`体现到左标尺`,"zh-TW":`體現到左標尺`},请选择调整后的画布大小:{"de-DE":`Bitte passen Sie die Leinwandgröße an`,"en-US":`Please adjust canvas size`,"es-ES":`Por favor ajusta el tamaño del lienzo`,"fr-FR":`Veuillez ajuster la taille du canevas`,"id-ID":`Harap sesuaikan ukuran kanvas`,"it-IT":`Si prega di regolare le dimensioni della tela`,"ja-JP":`調整したキャンバスのサイズを選んでください`,"ko-KR":`조정된 캔버스 크기를 선택하십시오`,"ms-MY":`Sila laraskan saiz kanvas`,"nl-NL":`Selecteer een aangepaste doeksgrootte`,"pl-PL":`Proszę dostosować rozmiar płótna`,"pt-PT":`Por favor, ajuste o tamanho do canvas`,"sr-Cyrl":`Молимо прилагодите величину платна`,"vi-VN":`Vui lòng điều chỉnh kích thước bảng vẽ`,"zh-CN":`请选择调整后的画布大小`,"zh-TW":`請選擇調整後的畫布大小`},放大:{"de-DE":`Hineinzoomen`,"en-US":`Zoom in`,"es-ES":`Acercar`,"fr-FR":`Zoomer`,"id-ID":`Perbesar`,"it-IT":`Ingrandisci`,"ja-JP":`拡大`,"ko-KR":`확대`,"ms-MY":`Zum masuk`,"nl-NL":`Vergroot`,"pl-PL":`Powiększ`,"pt-PT":`Aumentar`,"sr-Cyrl":`Увећајте`,"vi-VN":`Phóng to`,"zh-CN":`放大`,"zh-TW":`放大`},缩小:{"de-DE":`Verkleinern`,"en-US":`Zoom out`,"es-ES":`Reducir`,"fr-FR":`Dézoomer`,"id-ID":`Perkecil`,"it-IT":`Zoom indietro`,"ja-JP":`縮小`,"ko-KR":`축소`,"ms-MY":`Zum keluar`,"nl-NL":`Verminderen`,"pl-PL":`Pomniejszyć`,"pt-PT":`Diminuir`,"sr-Cyrl":`Умањи`,"vi-VN":`Thu nhỏ`,"zh-CN":`缩小`,"zh-TW":`縮小`},自动入户门朝向:{"de-DE":`Ausrichtung der Eingangstür`,"en-US":`Orientation of entrance door`,"es-ES":`Orientación de la puerta de entrada`,"fr-FR":`Orientation de la porte d'entrée`,"id-ID":`Orientasi pintu masuk`,"it-IT":`Orientamento della porta d'ingresso`,"ja-JP":`入戸ドアの向き`,"ko-KR":`자동입호문 방향`,"ms-MY":`Orientasi pintu masuk`,"nl-NL":`Automatische ingang richting`,"pl-PL":`Orientacja drzwi wejściowych`,"pt-PT":`Orientação da porta de entrada`,"sr-Cyrl":`Оријентација улазних врата`,"vi-VN":`Hướng của cửa vào`,"zh-CN":`自动入户门朝向`,"zh-TW":`自動入戶門朝向`},确定:{"de-DE":`Fertig`,"en-US":`Done`,"es-ES":`Hecho`,"fr-FR":`Terminé`,"id-ID":`Selesai`,"it-IT":`Fatto`,"ja-JP":`完了`,"ko-KR":`확인`,"ms-MY":`Selesai`,"nl-NL":`Goed`,"pl-PL":`Gotowe`,"pt-PT":`Concluído`,"sr-Cyrl":`Готово`,"vi-VN":`Hoàn thành`,"zh-CN":`确定`,"zh-TW":`完成`},设置画布大小:{"de-DE":`Leinwandgröße festlegen`,"en-US":`Set canvas size`,"es-ES":`Establecer tamaño del lienzo`,"fr-FR":`Définir la taille du canevas`,"id-ID":`Atur ukuran kanvas`,"it-IT":`Imposta le dimensioni della tela`,"ja-JP":`キャンバスのサイズを設定`,"ko-KR":`캔버스 크기 설정`,"ms-MY":`Tetapkan saiz kanvas`,"nl-NL":`Kleedgrootte instellen`,"pl-PL":`Ustaw rozmiar płótna`,"pt-PT":`Definir tamanho do canvas`,"sr-Cyrl":`Поставите величину платна`,"vi-VN":`Đặt kích thước bảng vẽ`,"zh-CN":`设置画布大小`,"zh-TW":`設置畫布大小`},水平镜像:{"de-DE":`Horiz drehen`,"en-US":`Horiz flip`,"es-ES":`Horiz voltear`,"fr-FR":`Horiz retour`,"id-ID":`Horiz balik`,"it-IT":`Horiz capovolgi`,"ja-JP":`左右鏡像`,"ko-KR":`수평뒤집`,"ms-MY":`Horiz balik`,"nl-NL":`Horiz spiegel`,"pl-PL":`Horiz obrót`,"pt-PT":`Horiz virar`,"sr-Cyrl":`Horiz okret`,"vi-VN":`Gương ngang`,"zh-CN":`水平镜像`,"zh-TW":`水平鏡像`},垂直镜像:{"de-DE":`Vert drehen`,"en-US":`Vert flip`,"es-ES":`Dar vuelta`,"fr-FR":`Vert retour`,"id-ID":`Vert balik`,"it-IT":`Su e giù`,"ja-JP":`垂直鏡像`,"ko-KR":`수직뒤집`,"ms-MY":`Vert balik`,"nl-NL":`Vert spiegel`,"pl-PL":`Vert obrót`,"pt-PT":`Vert virar`,"sr-Cyrl":`Vert okret`,"vi-VN":`Gương đứng`,"zh-CN":`垂直镜像`,"zh-TW":`垂直鏡像`},旋转:{"de-DE":`drehen`,"en-US":`Rotate`,"es-ES":`rotar`,"fr-FR":`Tourner`,"id-ID":`Putar`,"it-IT":`Rotea`,"ja-JP":`回転`,"ko-KR":`회전`,"ms-MY":`Putar`,"nl-NL":`Roteer`,"pl-PL":`obrócić`,"pt-PT":`Girar`,"sr-Cyrl":`Обрни`,"vi-VN":`xoay`,"zh-CN":`旋转`,"zh-TW":`旋轉`},清空门:{"de-DE":`Alle Türen entfernen`,"en-US":`Remove all doors`,"es-ES":`Eliminar todas las puertas`,"fr-FR":`Supprimer toutes les portes`,"id-ID":`Hapus semua pintu`,"it-IT":`Rimuovi tutte le porte`,"ja-JP":`すべてのドアを削除する`,"ko-KR":`문을 비우다`,"ms-MY":`Buang semua pintu`,"nl-NL":`Maak de deur leeg`,"pl-PL":`Usuń wszystkie drzwi`,"pt-PT":`Remover todas as portas`,"sr-Cyrl":`Уклоните сва врата`,"vi-VN":`Xóa tất cả các cửa`,"zh-CN":`清空门`,"zh-TW":`清空門`},清空窗:{"de-DE":`Alle Fenster entfernen`,"en-US":`Remove all windows`,"es-ES":`Eliminar todas las ventanas`,"fr-FR":`Supprimer toutes les fenêtres`,"id-ID":`Hapus semua jendela`,"it-IT":`Rimuovi tutte le finestre`,"ja-JP":`すべての窓を削除する`,"ko-KR":`창문을 비우다`,"ms-MY":`Buang semua tingkap`,"nl-NL":`Het venster leeg maken`,"pl-PL":`Usuń wszystkie okna`,"pt-PT":`Remover todas as janelas`,"sr-Cyrl":`Уклони све прозоре`,"vi-VN":`Xóa tất cả cửa sổ`,"zh-CN":`清空窗`,"zh-TW":`清空窗`},复制并新建:{"de-DE":`Duplizieren`,"en-US":`Duplicate`,"es-ES":`Duplicar`,"fr-FR":`Dupliquer`,"id-ID":`Duplikat`,"it-IT":`Duplica e crea nuovo`,"ja-JP":`コピー`,"ko-KR":`복사 및 새로 만들기`,"ms-MY":`Gandakan`,"nl-NL":`Kopieer en maak nieuw`,"pl-PL":`Duplikuj i utwórz nowy`,"pt-PT":`Duplicar`,"sr-Cyrl":`Дупликат`,"vi-VN":`Sao chép và tạo mới`,"zh-CN":`复制并新建`,"zh-TW":`複製並新建`},重命名:{"de-DE":`Umbenennen`,"en-US":`rename`,"es-ES":`renombrar`,"fr-FR":`renommer`,"id-ID":`ganti nama`,"it-IT":`rinominare`,"ja-JP":`名前変更`,"ko-KR":`이름 바꾸기`,"ms-MY":`namakan semula`,"nl-NL":`Hernoemen`,"pl-PL":`zmień nazwę`,"pt-PT":`renomear`,"sr-Cyrl":`преименуј`,"vi-VN":`đổi tên`,"zh-CN":`重命名`,"zh-TW":`重命名`},"你确定要删除楼层图{{0}}吗?":{"de-DE":`Sind Sie sicher, dass Sie das {{0}} löschen möchten?`,"en-US":`Are you sure you want to delete the {{0}}?`,"es-ES":`¿Estás seguro de que quieres eliminar el {{0}}?`,"fr-FR":`Êtes-vous sûr de vouloir supprimer le {{0}} ?`,"id-ID":`Apakah Anda yakin ingin menghapus {{0}}?`,"it-IT":`Sei sicuro di voler eliminare il {{0}}?`,"ja-JP":`{{0}}の間取り図を削除してもよろしいですか?`,"ko-KR":`{{0}}을 제거하시겠습니까?`,"ms-MY":`Adakah anda pasti mahu memadamkan {{0}}?`,"nl-NL":`Weet je zeker dat je {{0}} wilt wissen?`,"pl-PL":`Czy na pewno chcesz usunąć {{0}}?`,"pt-PT":`Tem certeza de que deseja excluir o {{0}}?`,"sr-Cyrl":`Да ли сте сигурни да желите да обришете {{0}}?`,"vi-VN":`Bạn có chắc chắn muốn xóa {{0}} không?`,"zh-CN":`你确定要删除楼层图{{0}}吗?`,"zh-TW":`您確定要刪除{{0}}嗎?`},"注意: 删除操作不能还原":{"de-DE":`Hinweis: Löschung kann nicht rückgängig gemacht werden`,"en-US":`Note: deletion cannot be restored`,"es-ES":`Nota: la eliminación no se puede deshacer`,"fr-FR":`Remarque : la suppression ne peut pas être annulée`,"id-ID":`Catatan: penghapusan tidak dapat dipulihkan`,"it-IT":`Nota: l'eliminazione non può essere annullata`,"ja-JP":`注意:削除操作は元に戻りません`,"ko-KR":`참고 삭제 작업은 복원할 수 없습니다`,"ms-MY":`Nota: pemadaman tidak boleh dipulihkan`,"nl-NL":`Opmerking: verwijdering kan niet worden hersteld`,"pl-PL":`Uwaga: usunięcie nie może być cofnięte`,"pt-PT":`Nota: a exclusão não pode ser desfeita`,"sr-Cyrl":`Напомена: брисање се не може вратити`,"vi-VN":`Chú ý: việc xóa không thể khôi phục`,"zh-CN":`注意: 删除操作不能还原`,"zh-TW":`注意:刪除操作無法還原`},向前:{"de-DE":`vorwärts`,"en-US":`forward`,"es-ES":`hacia adelante`,"fr-FR":`avancer`,"id-ID":`maju`,"it-IT":`avanti`,"ja-JP":`前へ`,"ko-KR":`앞으로`,"ms-MY":`ke hadapan`,"nl-NL":`Vooruit`,"pl-PL":`naprzód`,"pt-PT":`para a frente`,"sr-Cyrl":`напред`,"vi-VN":`về phía trước`,"zh-CN":`向前`,"zh-TW":`向前`},最前:{"de-DE":`Zuerst`,"en-US":`First`,"es-ES":`Primero`,"fr-FR":`Premier`,"id-ID":`Pertama`,"it-IT":`Primo`,"ja-JP":`一番前`,"ko-KR":`맨 앞`,"ms-MY":`Pertama`,"nl-NL":`Eerste`,"pl-PL":`Pierwszy`,"pt-PT":`Primeiro`,"sr-Cyrl":`Прво`,"vi-VN":`Đầu tiên`,"zh-CN":`最前`,"zh-TW":`最前`},向后:{"de-DE":`rückwärts`,"en-US":`backward`,"es-ES":`hacia atrás`,"fr-FR":`reculer`,"id-ID":`mundur`,"it-IT":`indietro`,"ja-JP":`後ろへ`,"ko-KR":`뒤로`,"ms-MY":`ke belakang`,"nl-NL":`Achteruit`,"pl-PL":`do tyłu`,"pt-PT":`para trás`,"sr-Cyrl":`унатраг`,"vi-VN":`về phía sau`,"zh-CN":`向后`,"zh-TW":`向後`},最后:{"de-DE":`zuletzt`,"en-US":`last`,"es-ES":`último`,"fr-FR":`dernier`,"id-ID":`terakhir`,"it-IT":`ultimo`,"ja-JP":`最後に`,"ko-KR":`마지막`,"ms-MY":`terakhir`,"nl-NL":`Eindelijk`,"pl-PL":`ostatni`,"pt-PT":`último`,"sr-Cyrl":`последњи`,"vi-VN":`cuối cùng`,"zh-CN":`最后`,"zh-TW":`最後`},新建楼层:{"de-DE":`Neue Etage`,"en-US":`New floor`,"es-ES":`Nuevo piso`,"fr-FR":`Nouvel étage`,"id-ID":`Lantai baru`,"it-IT":`Nuovo piano`,"ja-JP":`新しいフロア`,"ko-KR":`신축층`,"ms-MY":`Lantai baharu`,"nl-NL":`Nieuwe verdieping`,"pl-PL":`Nowy piętro`,"pt-PT":`Novo andar`,"sr-Cyrl":`Нови спрат`,"vi-VN":`Tầng mới`,"zh-CN":`新建楼层`,"zh-TW":`新建樓層`},保存:{"de-DE":`Speichern`,"en-US":`Save`,"es-ES":`Guardar`,"fr-FR":`Enregistrer`,"id-ID":`Simpan`,"it-IT":`Salva`,"ja-JP":`セーブ`,"ko-KR":`저장`,"ms-MY":`Simpan`,"nl-NL":`Bewaar`,"pl-PL":`Zapisz`,"pt-PT":`Salvar`,"sr-Cyrl":`Сачувај`,"vi-VN":`Lưu`,"zh-CN":`保存`,"zh-TW":`保存`},选择:{"de-DE":`Auswahl`,"en-US":`choice`,"es-ES":`elección`,"fr-FR":`choix`,"id-ID":`pilihan`,"it-IT":`scelta`,"ja-JP":`選択`,"ko-KR":`선택`,"ms-MY":`pilihan`,"nl-NL":`Selectie`,"pl-PL":`wybór`,"pt-PT":`escolha`,"sr-Cyrl":`избор`,"vi-VN":`lựa chọn`,"zh-CN":`选择`,"zh-TW":`選擇`},单位:{"de-DE":`Einheit`,"en-US":`Unit`,"es-ES":`unidad`,"fr-FR":`unité`,"id-ID":`Unit`,"it-IT":`unità`,"ja-JP":`単位`,"ko-KR":`단위`,"ms-MY":`Unit`,"nl-NL":`eenheid`,"pl-PL":`jednostka`,"pt-PT":`unidade`,"sr-Cyrl":`Јединица`,"vi-VN":`đơn vị`,"zh-CN":`单位`,"zh-TW":`單位`},墙面模型对比:{"de-DE":`Wandmodellvergleich`,"en-US":`Wall model comparison`,"es-ES":`Comparación de modelos de pared`,"fr-FR":`Comparaison des modèles de mur`,"id-ID":`Perbandingan model dinding`,"it-IT":`Confronto tra modelli di parete`,"ja-JP":`壁面モデルの対比`,"ko-KR":`벽면 모형 비교`,"ms-MY":`Perbandingan model dinding`,"nl-NL":`Vergelijking van muurmodellen`,"pl-PL":`Porównanie modeli ścian`,"pt-PT":`Comparação de modelos de parede`,"sr-Cyrl":`Поређење модела зида`,"vi-VN":`So sánh mô hình tường`,"zh-CN":`墙面模型对比`,"zh-TW":`牆面模型對比`},移动户型图:{"de-DE":`Grundriss verschieben`,"en-US":`Move floorplan`,"es-ES":`Mover el plano de la planta`,"fr-FR":`Déplacer le plan d'étage`,"id-ID":`Pindahkan denah lantai`,"it-IT":`Sposta il piano`,"ja-JP":`間取り図を移動する`,"ko-KR":`평형도 이동`,"ms-MY":`Pindahkan pelan lantai`,"nl-NL":`Mobiel huis kaart`,"pl-PL":`Przesuń plan piętra`,"pt-PT":`Mover o plano de piso`,"sr-Cyrl":`Померање плана спрата`,"vi-VN":`Di chuyển bản vẽ tầng`,"zh-CN":`移动户型图`,"zh-TW":`移動戶型圖`},分段点删除:{"de-DE":`Segmentpunkt löschen`,"en-US":`Waypoint delete`,"es-ES":`Eliminar punto de segmentación`,"fr-FR":`Supprimer le point de segmentation`,"id-ID":`Hapus titik arah`,"it-IT":`Elimina il punto di segmentazione`,"ja-JP":`セグメントの削除`,"ko-KR":`세그먼트 삭제`,"ms-MY":`Padam titik laluan`,"nl-NL":`Paragraaf verwijderen`,"pl-PL":`Usuń punkt segmentacji`,"pt-PT":`Excluir ponto de segmentação`,"sr-Cyrl":`Обришите тачку путање`,"vi-VN":`Xóa điểm phân đoạn`,"zh-CN":`分段点删除`,"zh-TW":`分段點刪除`},多选删除:{"de-DE":`Mehrere auswählen und löschen`,"en-US":`Multi-delete`,"es-ES":`Eliminar selección múltiple`,"fr-FR":`Supprimer la sélection multiple`,"id-ID":`Hapus banyak`,"it-IT":`Elimina selezione multipla`,"ja-JP":`複数削除`,"ko-KR":`다중 선택 제거`,"ms-MY":`Padam berbilang`,"nl-NL":`Meerdere opties verwijderen`,"pl-PL":`Usuń wielokrotne zaznaczenie`,"pt-PT":`Excluir seleção múltipla`,"sr-Cyrl":`Вишеструко брисање`,"vi-VN":`Xóa nhiều lựa chọn`,"zh-CN":`多选删除`,"zh-TW":`多選刪除`},清空:{"de-DE":`Löschen`,"en-US":`Clear`,"es-ES":`Limpiar`,"fr-FR":`Effacer`,"id-ID":`Bersihkan`,"it-IT":`Pulisci`,"ja-JP":`クリア`,"ko-KR":`비우기`,"ms-MY":`Kosongkan`,"nl-NL":`Leeg maken`,"pl-PL":`Wyczyść`,"pt-PT":`Limpar`,"sr-Cyrl":`Очисти`,"vi-VN":`Xóa`,"zh-CN":`清空`,"zh-TW":`清空`},撤销:{"de-DE":`Rückgängig machen`,"en-US":`Undo`,"es-ES":`Deshacer`,"fr-FR":`Annuler`,"id-ID":`Batalkan`,"it-IT":`Annulla`,"ja-JP":`取り消す`,"ko-KR":`취소`,"ms-MY":`Buat asal`,"nl-NL":`intrekken`,"pl-PL":`Cofnij`,"pt-PT":`Desfazer`,"sr-Cyrl":`Поништи`,"vi-VN":`Hoàn tác`,"zh-CN":`撤销`,"zh-TW":`撤銷`},重做:{"de-DE":`Wiederholen`,"en-US":`Redo`,"es-ES":`Rehacer`,"fr-FR":`Refaire`,"id-ID":`Ulangi`,"it-IT":`Rifai`,"ja-JP":`やり直す`,"ko-KR":`다시 실행`,"ms-MY":`Buat semula`,"nl-NL":`Herdoen`,"pl-PL":`Przywróć`,"pt-PT":`Refazer`,"sr-Cyrl":`Понови`,"vi-VN":`Làm lại`,"zh-CN":`重做`,"zh-TW":`重做`},预览:{"de-DE":`Vorschau`,"en-US":`Preview`,"es-ES":`Vista previa`,"fr-FR":`Aperçu`,"id-ID":`Pratinjau`,"it-IT":`Anteprima`,"ja-JP":`プレビュー`,"ko-KR":`미리 보기`,"ms-MY":`Pratonton`,"nl-NL":`Voorbeeld`,"pl-PL":`Podgląd`,"pt-PT":`Pré-visualização`,"sr-Cyrl":`Преглед`,"vi-VN":`Xem trước`,"zh-CN":`预览`,"zh-TW":`預覽`},户型图保存成功:{"de-DE":`Grundriss erfolgreich gespeichert`,"en-US":`floor plan saved successfully`,"es-ES":`Plano de planta guardado con éxito`,"fr-FR":`Plan d'étage enregistré avec succès`,"id-ID":`Denah lantai berhasil disimpan`,"it-IT":`Piano della casa salvato con successo`,"ja-JP":`間取り図の保存に成功しました`,"ko-KR":`평형도 저장 성공`,"ms-MY":`Pelan lantai berjaya disimpan`,"nl-NL":`Huisdiagram succesvol opgeslagen`,"pl-PL":`Plan piętra pomyślnie zapisany`,"pt-PT":`Plano de chão salvo com sucesso`,"sr-Cyrl":`план спрата успешно сачуван`,"vi-VN":`Lưu sơ đồ tầng thành công`,"zh-CN":`户型图保存成功`,"zh-TW":`户型图保存成功`},"墙面模型对比失败,2018年8月8日前上传的模型不支持墙面模型对比功能":{"de-DE":`Vergleich des Wandmodells fehlgeschlagen. Modelle, die vor dem 8. August 2018 hochgeladen wurden, unterstützen die Wandmodellvergleichsfunktion nicht`,"en-US":`Wall model comparison failed. Models uploaded before August 8, 2018 do not support wall model comparison function`,"es-ES":`Falló la comparación del modelo de pared. Los modelos subidos antes del 8 de agosto de 2018 no admiten la función de comparación de modelos de pared`,"fr-FR":`La comparaison du modèle de mur a échoué. Les modèles téléchargés avant le 8 août 2018 ne prennent pas en charge la fonction de comparaison de modèles de mur`,"id-ID":`Perbandingan model dinding gagal. Model yang diunggah sebelum 8 Agustus 2018 tidak mendukung fungsi perbandingan model dinding`,"it-IT":`Confronto del modello di parete non riuscito. I modelli caricati prima dell'8 agosto 2018 non supportano la funzione di confronto del modello di parete`,"ja-JP":`壁面モデルの比較に失敗しました。2018年8月8日までにアップロードしたモデルは壁面モデルのコントラスト機能をサポートしていません`,"ko-KR":`벽면 모형 대비 실패, 2018년 8월 8일 이전에 업로드된 모형은 벽면 모형 대비 기능을 지원하지 않음`,"ms-MY":`Perbandingan model dinding gagal. Model yang dimuat naik sebelum 8 Ogos 2018 tidak menyokong fungsi perbandingan model dinding`,"nl-NL":`Vergelijking van muurmodellen mislukt, modellen die vóór 8 augustus 2018 zijn geüpload, ondersteunen de vergelijking van muurmodellen niet`,"pl-PL":`Porównanie modelu ściany nie powiodło się. Modele przesłane przed 8 sierpnia 2018 r. nie obsługują funkcji porównywania modelu ściany`,"pt-PT":`Falha na comparação do modelo de parede. Os modelos carregados antes de 8 de agosto de 2018 não suportam a função de comparação de modelos de parede`,"sr-Cyrl":`Поређење модела зидова није успело. Модели отпремљени пре 8. августа 2018. не подржавају функцију поређења модела зидова`,"vi-VN":`So sánh mô hình tường thất bại. Các mô hình được tải lên trước ngày 8 tháng 8 năm 2018 không hỗ trợ chức năng so sánh mô hình tường`,"zh-CN":`墙面模型对比失败,2018年8月8日前上传的模型不支持墙面模型对比功能`,"zh-TW":`牆面模型對比失敗,2018年8月8日前上傳的模型不支援牆面模型對比功能`},暖气主管:{"de-DE":`Heizkörper`,"en-US":`Radiator`,"es-ES":`Radiador`,"fr-FR":`Radiateur`,"id-ID":`Radiator`,"it-IT":`Radiatore`,"ja-JP":`暖房幹線`,"ko-KR":`라디에이터`,"ms-MY":`Radiator`,"nl-NL":`Radiator`,"pl-PL":`Grzejnik`,"pt-PT":`Radiador`,"sr-Cyrl":`Радијатор`,"vi-VN":`Bộ tản nhiệt`,"zh-CN":`暖气主管`,"zh-TW":`暖氣管道`},文本:{"de-DE":`Text`,"en-US":`Text`,"es-ES":`Texto`,"fr-FR":`Texte`,"id-ID":`Teks`,"it-IT":`Testo`,"ja-JP":`文章`,"ko-KR":`텍스트`,"ms-MY":`Teks`,"nl-NL":`Tekst`,"pl-PL":`Tekst`,"pt-PT":`Texto`,"sr-Cyrl":`Текст`,"vi-VN":`Chữ`,"zh-CN":`文本`,"zh-TW":`文字`},标注:{"de-DE":`Markierungen`,"en-US":`Marks`,"es-ES":`Marcas`,"fr-FR":`Des marques`,"id-ID":`Tanda`,"it-IT":`Segni`,"ja-JP":`マーク`,"ko-KR":`마크업`,"ms-MY":`Tanda`,"nl-NL":`Markeren`,"pl-PL":`Ocena`,"pt-PT":`Marcas`,"sr-Cyrl":`Ознаке`,"vi-VN":`đánh dấu`,"zh-CN":`标注`,"zh-TW":`標記`},"按住shift绘制斜线,按住alt/option取消吸附":{"de-DE":`Halten Sie shift gedrückt, um eine Schräglinie zu zeichnen, halten Sie alt/option gedrückt, um die Adsorption abzuheben`,"en-US":`Hold down shift to draw a diagonal line, hold down alt/opt to cancel adsorption`,"es-ES":`Presione Shift para dibujar una diagonal, presione alt / opción para cancelar la adsorción`,"fr-FR":`Maintenez Shift enfoncé pour dessiner la barre oblique et maintenez ALT / option enfoncée pour annuler l'adsorption`,"id-ID":`Tahan shift untuk menggambar garis diagonal, tahan alt/opt untuk membatalkan adsorpsi`,"it-IT":`Tieni premuto shift per disegnare la linea inclinata, tene premuto alt/option per annullare l'assorbimento`,"ja-JP":`shiftを押したまま斜線を描き、alt/optionを押したまま吸着を解除します`,"ko-KR":`shift 키를 누른 채 사선을 그리고 alt/option 키를 누른 채 흡착 해제`,"ms-MY":`Tekan dan tahan shift untuk melukis garis serong, tekan dan tahan alt/opt untuk membatalkan penyerapan`,"nl-NL":`Houd shift ingedrukt om de schuiflijn te tekenen, houd alt/option ingedrukt om de adsorptie te ontbinden`,"pl-PL":`Przytrzymaj nacisk shift, aby narysować linię pochylową, przytrzymaj nacisk alt/option, aby anulować adsorpcję`,"pt-PT":`Mantenha pressionado shift para desenhar a linha inclinada, mantenha pressionado alt/option para desabsorbir`,"sr-Cyrl":`Држите shift да нацртате дијагоналну линију, држите alt/opt да откажете апсорпцију`,"vi-VN":`Nhấn Shift để vẽ dấu gạch chéo và giữ Alt/Option để hủy hấp phụ`,"zh-CN":`按住shift绘制斜线,按住alt/option取消吸附`,"zh-TW":`按住shift绘制斜线,按住alt/option取消吸附`},开放厨房:{"de-DE":`Offene Küche`,"en-US":`OPEN KITCHEN`,"es-ES":`Cocina abierta`,"fr-FR":`Cuisine ouverte`,"id-ID":`Dapur terbuka`,"it-IT":`Cucina aperta`,"ja-JP":`オープンキッチン`,"ko-KR":`오픈 키친`,"ms-MY":`Dapur terbuka`,"nl-NL":`Open keuken`,"pl-PL":`Otwarta kuchnia`,"pt-PT":`Cozinha aberta`,"sr-Cyrl":`Отворена кухиња`,"vi-VN":`Bếp mở`,"zh-CN":`开放厨房`,"zh-TW":`開放式廚房`},长宽:{"de-DE":`Größe`,"en-US":`Size`,"es-ES":`Tamaño`,"fr-FR":`Taille`,"id-ID":`Ukuran`,"it-IT":`Dimensione`,"ja-JP":`サイズ`,"ko-KR":`가로폭`,"ms-MY":`Saiz`,"nl-NL":`Lengte en breedte`,"pl-PL":`Rozmiar`,"pt-PT":`Tamanho`,"sr-Cyrl":`Величина`,"vi-VN":`Kích thước`,"zh-CN":`长宽`,"zh-TW":`尺寸`},横向:{"de-DE":`Horizontal`,"en-US":`Horizontal`,"es-ES":`Horizontal`,"fr-FR":`Horizontal`,"id-ID":`Horizontal`,"it-IT":`Orizzontale`,"ja-JP":`横向き`,"ko-KR":`수평`,"ms-MY":`Mendatar`,"nl-NL":`Horizontaal`,"pl-PL":`Poziomy`,"pt-PT":`Horizontal`,"sr-Cyrl":`Хоризонтално`,"vi-VN":`Ngang`,"zh-CN":`横向`,"zh-TW":`橫向`},纵向:{"de-DE":`Vertikal`,"en-US":`Vertical`,"es-ES":`Verde`,"fr-FR":`Vertical`,"id-ID":`Vertikal`,"it-IT":`Verticale`,"ja-JP":`縦向き`,"ko-KR":`세로`,"ms-MY":`Menegak`,"nl-NL":`Verticaal`,"pl-PL":`Pionowy`,"pt-PT":`Vertical`,"sr-Cyrl":`Вертикално`,"vi-VN":`Thẳng đứng`,"zh-CN":`纵向`,"zh-TW":`縱向`},文字缩放:{"de-DE":`Textskalierung`,"en-US":`Text zoom`,"es-ES":`Zoom de texto`,"fr-FR":`Zoom de texte`,"id-ID":`Perbesar teks`,"it-IT":`Scala del testo`,"ja-JP":`文字のスケール`,"ko-KR":`문자 크기 조절`,"ms-MY":`Zum teks`,"nl-NL":`Tekstschaal`,"pl-PL":`Skalowanie tekstu`,"pt-PT":`Dimensionamento do texto`,"sr-Cyrl":`Зум текста`,"vi-VN":`Thu phóng văn bản`,"zh-CN":`文字缩放`,"zh-TW":`文字缩放`},自动长度:{"de-DE":`Automatische Länge`,"en-US":`Automatic length`,"es-ES":`Longitud automática`,"fr-FR":`Longueur automatique`,"id-ID":`Panjang otomatis`,"it-IT":`Lunghezza automatica`,"ja-JP":`自動サイズ`,"ko-KR":`자동 길이`,"ms-MY":`Panjang automatik`,"nl-NL":`Automatische lengte`,"pl-PL":`Automatyczna długość`,"pt-PT":`Comprimento automático`,"sr-Cyrl":`Аутоматска дужина`,"vi-VN":`Chiều dài tự động`,"zh-CN":`自动长度`,"zh-TW":`自動長度`},固定长度:{"de-DE":`Feste Länge`,"en-US":`Fixed length`,"es-ES":`Longitud fija`,"fr-FR":`Longueur fixe`,"id-ID":`Panjang tetap`,"it-IT":`Lunghezza fissa`,"ja-JP":`固定長さ`,"ko-KR":`고정 길이`,"ms-MY":`Panjang tetap`,"nl-NL":`Vaste lengte`,"pl-PL":`Stała długość`,"pt-PT":`Comprimento fixo`,"sr-Cyrl":`Фиксна дужина`,"vi-VN":`Chiều dài cố định`,"zh-CN":`固定长度`,"zh-TW":`固定長度`},长度:{"de-DE":`Länge`,"en-US":`Length`,"es-ES":`Longitud`,"fr-FR":`Longueur`,"id-ID":`Panjang`,"it-IT":`Lunghezza`,"ja-JP":`長さ`,"ko-KR":`길이`,"ms-MY":`Panjang`,"nl-NL":`Lengte`,"pl-PL":`Długość`,"pt-PT":`Comprimento`,"sr-Cyrl":`Дужина`,"vi-VN":`Độ dài`,"zh-CN":`长度`,"zh-TW":`長度`},宽:{"de-DE":`breit`,"en-US":`wide`,"es-ES":`ancho`,"fr-FR":`large`,"id-ID":`lebar`,"it-IT":`ampio`,"ja-JP":`幅`,"ko-KR":`폭`,"ms-MY":`lebar`,"nl-NL":`Breed`,"pl-PL":`szeroki`,"pt-PT":`largo`,"sr-Cyrl":`широко`,"vi-VN":`rộng`,"zh-CN":`宽`,"zh-TW":`寬`},其他:{"de-DE":`Andere`,"en-US":`OTHER`,"es-ES":`Otro`,"fr-FR":`Autre`,"id-ID":`Lainnya`,"it-IT":`Altro`,"ja-JP":`その他`,"ko-KR":`기타`,"ms-MY":`Lain-lain`,"nl-NL":`Overige`,"pl-PL":`Inne`,"pt-PT":`Outro`,"sr-Cyrl":`Остало`,"vi-VN":`Khác`,"zh-CN":`其他`,"zh-TW":`其他`},删除所有窗:{"de-DE":`Alle Fenster löschen`,"en-US":`Delete all windows`,"es-ES":`Eliminar todas las ventanas`,"fr-FR":`Supprimer toutes les fenêtres`,"id-ID":`Hapus semua jendela`,"it-IT":`Elimina tutte le finestre`,"ja-JP":`すべてのウィンドウを削除`,"ko-KR":`모든 창 삭제`,"ms-MY":`Padam semua tingkap`,"nl-NL":`Alle vensters verwijderen`,"pl-PL":`Usuń wszystkie okna`,"pt-PT":`Apagar todas as janelas`,"sr-Cyrl":`Избришите све прозоре`,"vi-VN":`Xóa tất cả cửa sổ`,"zh-CN":`删除所有窗`,"zh-TW":`刪除所有窗戶`},删除所有门:{"de-DE":`Alle Türen löschen`,"en-US":`Delete all doors`,"es-ES":`Eliminar todas las puertas`,"fr-FR":`Supprimer toutes les portes`,"id-ID":`Hapus semua pintu`,"it-IT":`Elimina tutte le porte`,"ja-JP":`すべてのドアを削除`,"ko-KR":`모든 문 삭제`,"ms-MY":`Padam semua pintu`,"nl-NL":`Verwijder alle deuren`,"pl-PL":`Usuń wszystkie drzwi`,"pt-PT":`Apagar todas as portas`,"sr-Cyrl":`Обриши сва врата`,"vi-VN":`Xóa tất cả cửa`,"zh-CN":`删除所有门`,"zh-TW":`刪除所有門`},墙长:{"de-DE":`Wandlänge`,"en-US":`Wall length`,"es-ES":`Longitud de la pared`,"fr-FR":`Longueur du mur`,"id-ID":`Panjang dinding`,"it-IT":`Lunghezza del muro`,"ja-JP":`壁の長さ`,"ko-KR":`벽 길이`,"ms-MY":`Panjang dinding`,"nl-NL":`Wandlengte`,"pl-PL":`Długość ściany`,"pt-PT":`Comprimento da parede`,"sr-Cyrl":`Дужина зида`,"vi-VN":`Độ dài của tường`,"zh-CN":`墙长`,"zh-TW":`牆長`},矩形:{"de-DE":`Rechteck`,"en-US":`rectangle`,"es-ES":`rectángulo`,"fr-FR":`rectangle`,"id-ID":`persegi panjang`,"it-IT":`rettangolo`,"ja-JP":`長方形`,"ko-KR":`직사각형`,"ms-MY":`segi empat`,"nl-NL":`rechthoekig`,"pl-PL":`prostokąt`,"pt-PT":`retângulo`,"sr-Cyrl":`правоугаоник`,"vi-VN":`hình chữ nhật`,"zh-CN":`矩形`,"zh-TW":`矩形`},L形:{"de-DE":`L-förmig`,"en-US":`L-shaped`,"es-ES":`en forma de L`,"fr-FR":`en forme de L`,"id-ID":`Berbentuk L`,"it-IT":`a forma di L`,"ja-JP":`L字`,"ko-KR":`L형`,"ms-MY":`Berbentuk L`,"nl-NL":`L-vorm`,"pl-PL":`w kształcie litery L`,"pt-PT":`em forma de L`,"sr-Cyrl":`L-облик`,"vi-VN":`hình chữ L`,"zh-CN":`L形`,"zh-TW":`L形`},组合墙面:{"de-DE":`Verbundene Wand`,"en-US":`Composite wall`,"es-ES":`Pared compuesta`,"fr-FR":`Mur composite`,"id-ID":`Dinding komposit`,"it-IT":`Muro composito`,"ja-JP":`組み合わせ壁`,"ko-KR":`조합 벽면`,"ms-MY":`Dinding komposit`,"nl-NL":`Combineerde muren`,"pl-PL":`Ściana kompozytowa`,"pt-PT":`Parede composta`,"sr-Cyrl":`Сложени зид`,"vi-VN":`Tường ghép`,"zh-CN":`组合墙面`,"zh-TW":`複合牆`},墙面形状:{"de-DE":`Wandform`,"en-US":`Wall shape`,"es-ES":`Forma de la pared`,"fr-FR":`Forme du mur`,"id-ID":`Bentuk dinding`,"it-IT":`Forma del muro`,"ja-JP":`壁面の形状`,"ko-KR":`벽면 모양`,"ms-MY":`Bentuk dinding`,"nl-NL":`Muurvorm`,"pl-PL":`Kształt ściany`,"pt-PT":`Forma da parede`,"sr-Cyrl":`Облик зида`,"vi-VN":`Hình dạng của tường`,"zh-CN":`墙面形状`,"zh-TW":`牆形狀`},"按住alt/option取消吸附墙体":{"de-DE":`Alt/Option gedrückt halten`,"en-US":`Press and hold alt/opt to cancel the adsorption wall`,"es-ES":`Presione alt / opción para cancelar la pared de adsorción`,"fr-FR":`Maintenez la touche Alt / option enfoncée pour annuler l'adsorption du mur`,"id-ID":`Tekan dan tahan alt/opt untuk membatalkan dinding adsorpsi`,"it-IT":`Alt/Option per cancellare il parete`,"ja-JP":`alt/optionを押したまま壁の吸着を解除`,"ko-KR":`alt/option 키를 누른 채 벽체 흡착 해제`,"ms-MY":`Tekan dan tahan alt/opt untuk membatalkan dinding penyerapan`,"nl-NL":`Alt/Option ingedrukt om de wand te ontbinden`,"pl-PL":`Przytrzymaj alt/option, aby odwrócić ścianę`,"pt-PT":`Mantenha pressionada alt/option para desligar a parede`,"sr-Cyrl":`Притисните и држите алт/опт да откажете пријањање на зид`,"vi-VN":`Nhấn và giữ Alt/Option để hủy hấp phụ tường`,"zh-CN":`按住alt/option取消吸附墙体`,"zh-TW":`按住alt/option取消吸附墙体`},文本锁定:{"de-DE":`Textsperre`,"en-US":`Text lock`,"es-ES":`Bloqueo de texto`,"fr-FR":`Verrouillage du texte`,"id-ID":`Kunci teks`,"it-IT":`Blocco del testo`,"ja-JP":`文章ロック`,"ko-KR":`텍스트 잠금`,"ms-MY":`Kunci teks`,"nl-NL":`Tekstvergrendeling`,"pl-PL":`Blokada tekstu`,"pt-PT":`Bloqueio de texto`,"sr-Cyrl":`Закључавање текста`,"vi-VN":`Khóa văn bản`,"zh-CN":`文本锁定`,"zh-TW":`文字鎖定`},缩放:{"de-DE":`Zoom`,"en-US":`Zoom`,"es-ES":`Zoom`,"fr-FR":`Zoom`,"id-ID":`Perbesar`,"it-IT":`zoom`,"ja-JP":`ズーム`,"ko-KR":`줌`,"ms-MY":`Zum`,"nl-NL":`Skalen`,"pl-PL":`powiększenie`,"pt-PT":`Escalar`,"sr-Cyrl":`Зум`,"vi-VN":`Phóng to`,"zh-CN":`缩放`,"zh-TW":`缩放`},字体颜色:{"de-DE":`Schriftfarbe`,"en-US":`Font color`,"es-ES":`Color de la fuente`,"fr-FR":`Couleur de police`,"id-ID":`Warna font`,"it-IT":`Colore carattere`,"ja-JP":`フォント色`,"ko-KR":`글꼴 색상`,"ms-MY":`Warna fon`,"nl-NL":`Kleur van het lettertype`,"pl-PL":`Kolor czcionki`,"pt-PT":`Cor da fonte`,"sr-Cyrl":`Боја фонта`,"vi-VN":`Màu phông`,"zh-CN":`字体颜色`,"zh-TW":`字体颜色`},边框:{"de-DE":`Rahmen`,"en-US":`Frame`,"es-ES":`Borde`,"fr-FR":`La frontière`,"id-ID":`Bingkai`,"it-IT":`cornice`,"ja-JP":`枠線`,"ko-KR":`테두리`,"ms-MY":`Bingkai`,"nl-NL":`Grenzen`,"pl-PL":`ramka`,"pt-PT":`Fronteira`,"sr-Cyrl":`Оквир`,"vi-VN":`Viền`,"zh-CN":`边框`,"zh-TW":`边框`},无边框:{"de-DE":`keine Grenze`,"en-US":`No border`,"es-ES":`Sin Fronteras`,"fr-FR":`Sans frontière`,"id-ID":`Tanpa batas`,"it-IT":`nessuna frontiera`,"ja-JP":`縁なし`,"ko-KR":`경계 없음`,"ms-MY":`Tiada sempadan`,"nl-NL":`Geen grenzen`,"pl-PL":`brak granicy`,"pt-PT":`Sem borda`,"sr-Cyrl":`Без ивице`,"vi-VN":`Không viền`,"zh-CN":`无边框`,"zh-TW":`无边框`},圆边框:{"de-DE":`Runder Rand`,"en-US":`Round border`,"es-ES":`Borde redondo`,"fr-FR":`Bordure ronde`,"id-ID":`Batasan bulat`,"it-IT":`Bordo rotondo`,"ja-JP":`丸ボーダー`,"ko-KR":`원 테두리`,"ms-MY":`Sempadan bulat`,"nl-NL":`Ronde rand`,"pl-PL":`Okrągła granica`,"pt-PT":`Borda redonda`,"sr-Cyrl":`Округла ивица`,"vi-VN":`Viền tròn`,"zh-CN":`圆边框`,"zh-TW":`圆边框`},字体大小:{"de-DE":`Schriftgröße`,"en-US":`Font size`,"es-ES":`Tamaño de fuente`,"fr-FR":`Taille de police`,"id-ID":`Ukuran font`,"it-IT":`Dimensione del font`,"ja-JP":`フォントサイズ`,"ko-KR":`글꼴 크기`,"ms-MY":`Saiz fon`,"nl-NL":`Lettergrootte`,"pl-PL":`Rozmiar czcionki`,"pt-PT":`Tamanho da fonte`,"sr-Cyrl":`Величина фонта`,"vi-VN":`Cỡ chữ`,"zh-CN":`字体大小`,"zh-TW":`字體大小`},文本内容:{"de-DE":`Textinhalt`,"en-US":`Text Content`,"es-ES":`Contenido del texto`,"fr-FR":`Contenu du texte`,"id-ID":`Konten Teks`,"it-IT":`Contenuto del testo`,"ja-JP":`文章の内容`,"ko-KR":`텍스트 내용`,"ms-MY":`Kandungan teks`,"nl-NL":`Tekstinhoud`,"pl-PL":`Treść tekstowa`,"pt-PT":`Conteúdo de texto`,"sr-Cyrl":`Садржај текста`,"vi-VN":`Nội dung văn bản`,"zh-CN":`文本`,"zh-TW":`文字內容`},备注:{"de-DE":`Bemerkungen`,"en-US":`Notes`,"es-ES":`Nota`,"fr-FR":`Remarques`,"id-ID":`Catatan`,"it-IT":`Osservazioni`,"ja-JP":`コメント`,"ko-KR":`설명`,"ms-MY":`Nota`,"nl-NL":`Opmerkingen`,"pl-PL":`Uwagi`,"pt-PT":`Observações`,"sr-Cyrl":`Белешке`,"vi-VN":`Ghi chú`,"zh-CN":`备注`,"zh-TW":`备注`},单开门:{"de-DE":`Einzeltür`,"en-US":`Single`,"es-ES":`Sola`,"fr-FR":`Simple`,"id-ID":`Tunggal`,"it-IT":`Singolo`,"ja-JP":`一枚扉`,"ko-KR":`단문`,"ms-MY":`Tunggal`,"nl-NL":`Uniek`,"pl-PL":`Samotne`,"pt-PT":`Único`,"sr-Cyrl":`Један`,"vi-VN":`Cửa đơn`,"zh-CN":`单开门`,"zh-TW":`單開門`},推拉门:{"de-DE":`Schieben`,"en-US":`Sliding`,"es-ES":`Corredera`,"fr-FR":`Coulissant`,"id-ID":`Geser`,"it-IT":`Scorrevole`,"ja-JP":`スライド`,"ko-KR":`미닫이`,"ms-MY":`Geser`,"nl-NL":`Schuivend`,"pl-PL":`Przesuwne`,"pt-PT":`Deslizante`,"sr-Cyrl":`Клизни`,"vi-VN":`Cửa trượt`,"zh-CN":`推拉门`,"zh-TW":`推拉門`},双开门:{"de-DE":`Doppelt`,"en-US":`Double`,"es-ES":`Doble`,"fr-FR":`Double`,"id-ID":`Ganda`,"it-IT":`Doppio`,"ja-JP":`両開き`,"ko-KR":`쌍문`,"ms-MY":`Berkembar`,"nl-NL":`Dubbel`,"pl-PL":`Podwójne`,"pt-PT":`Dupla`,"sr-Cyrl":`Дупло`,"vi-VN":`Cửa đôi`,"zh-CN":`双开门`,"zh-TW":`雙開門`},子母门:{"de-DE":`Ungleiches Doppel`,"en-US":`Unequal double`,"es-ES":`Doble Desigual`,"fr-FR":`Double Inégale`,"id-ID":`Dua tidak sama`,"it-IT":`Doppia Disuguale`,"ja-JP":`親子ドア`,"ko-KR":`자모문`,"ms-MY":`Berkembar tidak sama`,"nl-NL":`Kinderdeur`,"pl-PL":`Nierówne podwójne`,"pt-PT":`Dupla desigual`,"sr-Cyrl":`Неједнака дупла`,"vi-VN":`Cửa đôi không đều`,"zh-CN":`子母门`,"zh-TW":`親子門`},电梯门:{"de-DE":`Aufzug`,"en-US":`Elevator`,"es-ES":`Ascensor`,"fr-FR":`Ascenseur`,"id-ID":`Lift`,"it-IT":`Ascensore`,"ja-JP":`エレベーター`,"ko-KR":`승강기 문`,"ms-MY":`Lif`,"nl-NL":`Liftdeur`,"pl-PL":`Winda`,"pt-PT":`Elevador`,"sr-Cyrl":`Лифт`,"vi-VN":`Thang máy`,"zh-CN":`电梯门`,"zh-TW":`電梯門`},普通窗:{"de-DE":`Fenster`,"en-US":`General`,"es-ES":`Ventana`,"fr-FR":`Fenêtre`,"id-ID":`Umum`,"it-IT":`Finestra`,"ja-JP":`窓`,"ko-KR":`일반 창`,"ms-MY":`Am`,"nl-NL":`Standaard`,"pl-PL":`Okno`,"pt-PT":`Janela`,"sr-Cyrl":`Опште`,"vi-VN":`Cửa sổ`,"zh-CN":`普通窗`,"zh-TW":`普通窗`},弧形窗:{"de-DE":`Gebogenes Fenster`,"en-US":`Curved window`,"es-ES":`Ventana curva`,"fr-FR":`Fenêtre courbée`,"id-ID":`Jendela melengkung`,"it-IT":`Finestra curva`,"ja-JP":`アーチ型の窓`,"ko-KR":`호형창`,"ms-MY":`Tingkap melengkung`,"nl-NL":`gebogen venster`,"pl-PL":`Łukowate okno`,"pt-PT":`Janela curva`,"sr-Cyrl":`Закривљени прозор`,"vi-VN":`Cửa sổ cong`,"zh-CN":`弧形窗`,"zh-TW":`弧形窗`},普通飘窗:{"de-DE":`Erkerfenster`,"en-US":`Bay Window`,"es-ES":`Ventana mirador`,"fr-FR":`Fenêtre en Baie`,"id-ID":`Jendela Bay`,"it-IT":`Finestra a bovindo`,"ja-JP":`出窓`,"ko-KR":`일반 창문`,"ms-MY":`Tingkap Bay`,"nl-NL":`Erkerraam`,"pl-PL":`Okno wykuszowe`,"pt-PT":`Janela Bay`,"sr-Cyrl":`Бај прозор`,"vi-VN":`Cửa sổ lồi`,"zh-CN":`普通飘窗`,"zh-TW":`普通飄窗`},落地窗:{"de-DE":`Französisches Fenster`,"en-US":`French Window`,"es-ES":`Ventana francesa`,"fr-FR":`Fenêtre française`,"id-ID":`Jendela pranci`,"it-IT":`Finestra francese`,"ja-JP":`フレンチウィンドウ`,"ko-KR":`프랑스 창`,"ms-MY":`Tingkap Perancis`,"nl-NL":`Frans raam`,"pl-PL":`Okna francuskie`,"pt-PT":`Janela francesa`,"sr-Cyrl":`Француски`,"vi-VN":`Cửa sổ pháp`,"zh-CN":`落地窗`,"zh-TW":`落地窗`},落地窗1:{"de-DE":`Französische Fenster 1`,"en-US":`French windows 1`,"es-ES":`Ventanas francesas 1`,"fr-FR":`Fenêtres françaises 1`,"id-ID":`Jendela Prancis 1`,"it-IT":`Finestre francesi 1`,"ja-JP":`フランス風の窓1`,"ko-KR":`낙지창 1`,"ms-MY":`Tingkap Perancis 1`,"nl-NL":`Ruizen1`,"pl-PL":`Okna francuskie 1`,"pt-PT":`Janelas francesas 1`,"sr-Cyrl":`Француски прозори 1`,"vi-VN":`Cửa sổ kiểu Pháp 1`,"zh-CN":`落地窗1`,"zh-TW":`落地窗1`},落地窗2:{"de-DE":`Französische Fenster 2`,"en-US":`French windows 2`,"es-ES":`Ventanas francesas 2`,"fr-FR":`Fenêtres françaises 2`,"id-ID":`Jendela Prancis 2`,"it-IT":`Finestre francesi 2`,"ja-JP":`フランス風の窓2`,"ko-KR":`낙지창2`,"ms-MY":`Tingkap Perancis 2`,"nl-NL":`Vloervenster2`,"pl-PL":`Okna francuskie 2`,"pt-PT":`Janelas francesas 2`,"sr-Cyrl":`Француски прозори 2`,"vi-VN":`Cửa sổ kiểu Pháp 2`,"zh-CN":`落地窗2`,"zh-TW":`落地窗2`},落地飘窗:{"de-DE":`Du bist runtergefallen`,"en-US":`French bay window`,"es-ES":`Ventanal estilo francés`,"fr-FR":`Fenêtre en baie française`,"id-ID":`Jendela bay Prancis`,"it-IT":`Vetrata alla francese`,"ja-JP":`フランス風の出窓`,"ko-KR":`낙하산 창문`,"ms-MY":`Tingkap bay Perancis`,"nl-NL":`Franse vensterpartij`,"pl-PL":`Francuski wykusz okienny`,"pt-PT":`Janela francesa ampla`,"sr-Cyrl":`Француски еркер прозор`,"vi-VN":`Cửa sổ bay kiểu Pháp`,"zh-CN":`落地飘窗`,"zh-TW":`落地飄窗`},落地拐角窗:{"de-DE":`Französisches Eckfenster`,"en-US":`French corner window`,"es-ES":`Ventana de esquina francesa`,"fr-FR":`Fenêtre d'angle française`,"id-ID":`Jendela sudut Prancis`,"it-IT":`Finestra d'angolo francese`,"ja-JP":`フランス風コーナーウィンドウ`,"ko-KR":`착지 코너 창`,"ms-MY":`Tingkap sudut Perancis`,"nl-NL":`Roof hoek raam`,"pl-PL":`Okno narożne francuskie`,"pt-PT":`Janela de canto francesa`,"sr-Cyrl":`Француски угаони прозор`,"vi-VN":`Cửa sổ góc kiểu Pháp`,"zh-CN":`落地拐角窗`,"zh-TW":`落地拐角窗`},阳台:{"de-DE":`Balkon`,"en-US":`BALCONY`,"es-ES":`balcón`,"fr-FR":`balcon`,"id-ID":`Balkon`,"it-IT":`balcone`,"ja-JP":`バルコニー`,"ko-KR":`베란다`,"ms-MY":`Balkoni`,"nl-NL":`het balkon`,"pl-PL":`balkon`,"pt-PT":`varanda`,"sr-Cyrl":`Балкон`,"vi-VN":`ban công`,"zh-CN":`阳台`,"zh-TW":`陽台`},弧形带窗阳台:{"de-DE":`Gebogener Balkon mit Fenster`,"en-US":`Curved balcony with window`,"es-ES":`Balcón curvo con ventana`,"fr-FR":`Balcon courbe avec fenêtre`,"id-ID":`Balkon melengkung dengan jendela`,"it-IT":`Balcone curvo con finestra`,"ja-JP":`アーチ型の窓付きバルコニー`,"ko-KR":`호형대 창베란다`,"ms-MY":`Balkoni melengkung dengan tingkap`,"nl-NL":`Balkon met gebogen raam`,"pl-PL":`Łukowy balkon z oknem`,"pt-PT":`Varanda curva com janela`,"sr-Cyrl":`Закривљени балкон са прозором`,"vi-VN":`Ban công cong với cửa sổ`,"zh-CN":`弧形带窗阳台`,"zh-TW":`弧形帶窗陽台`},弧形无窗阳台:{"de-DE":`Gebogener Balkon ohne Fenster`,"en-US":`Curved windowless balcony`,"es-ES":`Balcón curvo sin ventana`,"fr-FR":`Balcon courbe sans fenêtre`,"id-ID":`Balkon melengkung tanpa jendela`,"it-IT":`Balcone curvo senza finestra`,"ja-JP":`アーチ型のバルコニー`,"ko-KR":`호형 창문 없는 베란다`,"ms-MY":`Balkoni melengkung tanpa tingkap`,"nl-NL":`Balkon zonder ramen`,"pl-PL":`Łukowy balkon bez okna`,"pt-PT":`Varanda curva sem janela`,"sr-Cyrl":`Закривљени балкон без прозора`,"vi-VN":`Ban công cong không có cửa sổ`,"zh-CN":`弧形无窗阳台`,"zh-TW":`弧形無窗陽台`},垭口:{"de-DE":`Pass`,"en-US":`Pass`,"es-ES":`Pasar`,"fr-FR":`Passe`,"id-ID":`Lewati`,"it-IT":`Passo`,"ja-JP":`パス`,"ko-KR":`통과`,"ms-MY":`Laluan`,"nl-NL":`Toegang`,"pl-PL":`Wejście`,"pt-PT":`Passagem`,"sr-Cyrl":`Пропусти`,"vi-VN":`Lối đi`,"zh-CN":`垭口`,"zh-TW":`垭口`},普通单面飘窗:{"de-DE":`Einzelne Bucht`,"en-US":`Single bay`,"es-ES":`Bahía individual`,"fr-FR":`Module unique`,"id-ID":`Satu ruang`,"it-IT":`Unità singola`,"ja-JP":`片側の出窓`,"ko-KR":`일반 단면 창문`,"ms-MY":`Teluk tunggal`,"nl-NL":`Enkel baai`,"pl-PL":`Pojedynczy moduł`,"pt-PT":`Espaço único`,"sr-Cyrl":`Једна област`,"vi-VN":`Cửa sổ bay đơn`,"zh-CN":`普通单面飘窗`,"zh-TW":`普通單面飄窗`},落地单面飘窗:{"de-DE":`Einseitiges Fenster`,"en-US":`French single`,"es-ES":`Unidad francesa individual`,"fr-FR":`Célibataire français`,"id-ID":`Prancis tunggal`,"it-IT":`Finestra unilaterale`,"ja-JP":`フランス風片側出窓`,"ko-KR":`착지 단면 창문`,"ms-MY":`Perancis tunggal`,"nl-NL":`Enijzijdig zwevende raam`,"pl-PL":`Francuski pojedynczy`,"pt-PT":`Janela francesa de uma folha`,"sr-Cyrl":`Француски један`,"vi-VN":`Cửa sổ đơn kiểu Pháp`,"zh-CN":`落地单面飘窗`,"zh-TW":`落地单面飘窗`},折叠门:{"de-DE":`Falten`,"en-US":`Folding`,"es-ES":`Plegable`,"fr-FR":`Pliage`,"id-ID":`Melipat`,"it-IT":`Piegatura`,"ja-JP":`折れ`,"ko-KR":`접는 문`,"ms-MY":`Lipat`,"nl-NL":`Vouwen`,"pl-PL":`Składanie`,"pt-PT":`Dobragem`,"sr-Cyrl":`Преклапање`,"vi-VN":`Cửa xếp`,"zh-CN":`折叠门`,"zh-TW":`摺疊門`},弧形垭口:{"de-DE":`Bogenblick`,"en-US":`Arc-shaped pass`,"es-ES":`Paso curvo`,"fr-FR":`La bouche en arc`,"id-ID":`Lorong berbentuk lengkung`,"it-IT":`Bocca curva`,"ja-JP":`アーチ形オリフィス`,"ko-KR":`호형호구`,"ms-MY":`Laluan berbentuk lengkung`,"nl-NL":`gebogen bocht`,"pl-PL":`Zakrzywione otwory`,"pt-PT":`Boca curva`,"sr-Cyrl":`Лукобрани пролаз`,"vi-VN":`Cổng cong`,"zh-CN":`弧形垭口`,"zh-TW":`弧形垭口`},卷帘门:{"de-DE":`Rolltür`,"en-US":`Shutter`,"es-ES":`Cierre`,"fr-FR":`Volet`,"id-ID":`Penutup`,"it-IT":`Serranda`,"ja-JP":`シャッター`,"ko-KR":`셔터`,"ms-MY":`Penutup`,"nl-NL":`Lamellen`,"pl-PL":`Zasłona`,"pt-PT":`Obturador`,"sr-Cyrl":`Ролетна`,"vi-VN":`Cửa chắn`,"zh-CN":`卷帘门`,"zh-TW":`卷帘门`},双层门:{"de-DE":`Zwei türen`,"en-US":`double door`,"es-ES":`Puerta doble`,"fr-FR":`porte double`,"id-ID":`pintu dua`,"it-IT":`Porta doppia`,"ja-JP":`二重扉`,"ko-KR":`이중 문`,"ms-MY":`pintu berganda`,"nl-NL":`Dubbele deur`,"pl-PL":`Podwójne drzwi`,"pt-PT":`Porta dupla`,"sr-Cyrl":`дупла врата`,"vi-VN":`Cửa đôi`,"zh-CN":`双层门`,"zh-TW":`双层门`},户型外墙缺少门:{"de-DE":`Außenwand fehlt Tür`,"en-US":`The exterior wall of the apartment lacks doors`,"es-ES":`Falta de puertas en la pared exterior del apartamento`,"fr-FR":`Manque de portes sur le mur extérieur`,"id-ID":`Dinding luar apartemen tidak memiliki pintu`,"it-IT":`Mancano porte alle pareti esterne`,"ja-JP":`戸型外壁にドアが欠けている`,"ko-KR":`평형 외벽에 문이 부족하다`,"ms-MY":`Dinding luar apartmen tiada pintu`,"nl-NL":`Buiten muur ontbreken deuren`,"pl-PL":`Brak drzwi na zewnętrznej ścianie`,"pt-PT":`Paredes externas faltam portas`,"sr-Cyrl":`Спољни зид стана нема врата`,"vi-VN":`Tường nhà thiếu cửa`,"zh-CN":`户型外墙缺少门`,"zh-TW":`户型外墙缺少门`},创建墙面物件:{"de-DE":`Erstellen von Wandobjekten`,"en-US":`Creating wall objects`,"es-ES":`Creando objetos de pared`,"fr-FR":`Création d'objets muraux`,"id-ID":`Membuat objek dinding`,"it-IT":`Creazione di oggetti murali`,"ja-JP":`壁面物件の作成`,"ko-KR":`벽 객체 만들기`,"ms-MY":`Mencipta objek dinding`,"nl-NL":`Wandobjecten maken`,"pl-PL":`Tworzenie obiektów ściany`,"pt-PT":`Criando objetos de parede`,"sr-Cyrl":`Креирање зидних објеката`,"vi-VN":`Tạo đối tượng tường`,"zh-CN":`创建墙面物件`,"zh-TW":`建立牆面物件`},点击墙线添加门:{"de-DE":`Klicken Sie auf die Wandlinie, um eine Tür hinzuzufügen`,"en-US":`Click on the wall line to add a door`,"es-ES":`Haga clic en la línea de la pared para agregar la puerta`,"fr-FR":`Cliquez sur la ligne murale pour ajouter une porte`,"id-ID":`Klik pada garis dinding untuk menambahkan pintu`,"it-IT":`Clicca sul muro per aggiungere la porta`,"ja-JP":`壁線をクリックしてドアを追加`,"ko-KR":`벽선을 클릭하여 문 추가`,"ms-MY":`Klik pada garisan dinding untuk menambah pintu`,"nl-NL":`Klik op muurlijn om deur toe te voegen`,"pl-PL":`Kliknij na ścianę, aby dodać drzwi`,"pt-PT":`Clique na linha da parede para adicionar a porta`,"sr-Cyrl":`Кликните на линију зида да додате врата`,"vi-VN":`Nhấp vào dòng tường để thêm cửa`,"zh-CN":`点击墙线添加门`,"zh-TW":`点击墙线添加门`},退出添加:{"de-DE":`Hinzufügen beenden`,"en-US":`Exit Add`,"es-ES":`Salir para agregar`,"fr-FR":`Quitter l'ajout`,"id-ID":`Keluar Tambah`,"it-IT":`Chiudi di aggiungere`,"ja-JP":`追加を終了`,"ko-KR":`추가 종료`,"ms-MY":`Keluar Tambah`,"nl-NL":`Toevoegen afsluiten`,"pl-PL":`Zakończ dodawanie`,"pt-PT":`Sair da adição`,"sr-Cyrl":`Излаз Додај`,"vi-VN":`Thoát Thêm`,"zh-CN":`退出添加`,"zh-TW":`退出添加`},添加门:{"de-DE":`Tür hinzufügen`,"en-US":`Door`,"es-ES":`Agregar puerta`,"fr-FR":`Ajouter une porte`,"id-ID":`Pintu`,"it-IT":`Aggiungi porta`,"ja-JP":`ドア`,"ko-KR":`문 추가`,"ms-MY":`Pintu`,"nl-NL":`Deur toevoegen`,"pl-PL":`Dodaj drzwi`,"pt-PT":`Adicionar porta`,"sr-Cyrl":`Врата`,"vi-VN":`Thêm cửa`,"zh-CN":`添加门`,"zh-TW":`添加門`},物证痕迹:{"de-DE":`Physische Beweisspuren`,"en-US":`Physical evidence traces`,"es-ES":`Rastros de evidencia física`,"fr-FR":`Traces de preuves matérielles`,"id-ID":`Jejak bukti fisik`,"it-IT":`Tracce di prove fisiche`,"ja-JP":`物的証拠の痕跡`,"ko-KR":`물증 흔적`,"ms-MY":`Jejak bukti fizikal`,"nl-NL":`Materiaal bewijs`,"pl-PL":`Ślady fizyczne`,"pt-PT":`Vestígios físicos`,"sr-Cyrl":`Трагови физичких доказа`,"vi-VN":`Dấu vết vật chứng`,"zh-CN":`物证痕迹`,"zh-TW":`物证痕迹`},自定义:{"de-DE":`kundenspezifisch`,"en-US":`Custom`,"es-ES":`Personalizado`,"fr-FR":`Personnalisation`,"id-ID":`Kustom`,"it-IT":`personalizzato`,"ja-JP":`独自設定`,"ko-KR":`사용자 지정`,"ms-MY":`Tersuai`,"nl-NL":`Aangepast`,"pl-PL":`niestandardowe`,"pt-PT":`Personalizado`,"sr-Cyrl":`Прилагођено`,"vi-VN":`Tùy chỉnh`,"zh-CN":`自定义`,"zh-TW":`自定义`},日常用品:{"de-DE":`Alltagsgeräte`,"en-US":`Daily supplies`,"es-ES":`Necesidades diarias`,"fr-FR":`Objets du quotidien`,"id-ID":`Perlengkapan harian`,"it-IT":`Prodotti quotidiani`,"ja-JP":`日常用品`,"ko-KR":`일상용품`,"ms-MY":`Bekalan harian`,"nl-NL":`Dagelijkse benodigdheden`,"pl-PL":`Artykuły codzienne`,"pt-PT":`Produtos diários`,"sr-Cyrl":`Дневне потрепштине`,"vi-VN":`Hàng ngày`,"zh-CN":`日常用品`,"zh-TW":`日常用品`},点击画布添加物件:{"de-DE":`Klicken Sie auf die Leinwand, um ein Objekt hinzuzufügen`,"en-US":`Click on the canvas to add objects`,"es-ES":`Haga clic en el lienzo para agregar objetos`,"fr-FR":`Cliquez sur Canvas pour ajouter des objets`,"id-ID":`Klik pada kanvas untuk menambahkan objek`,"it-IT":`Clicca sulla tela per aggiungere oggetti`,"ja-JP":`キャンバスをクリックしてアイテムを追加`,"ko-KR":`캔버스를 클릭하여 오브젝트 추가`,"ms-MY":`Klik pada kanvas untuk menambah objek`,"nl-NL":`Klik op het doek om een object toe te voegen`,"pl-PL":`Kliknij na płótno, aby dodać przedmiot`,"pt-PT":`Clique na tela para adicionar um objeto`,"sr-Cyrl":`Кликните на платно да додате објекте`,"vi-VN":`Nhấp vào Canvas để thêm đối tượng`,"zh-CN":`点击画布添加物件`,"zh-TW":`点击画布添加物件`},选择物件:{"de-DE":`Auswahlobjekte`,"en-US":`Select furnitures`,"es-ES":`Seleccionar objetos`,"fr-FR":`Choisir un objet`,"id-ID":`Pilih furnitur`,"it-IT":`Oggetti di selezione`,"ja-JP":`アイテムの選択`,"ko-KR":`객체 선택`,"ms-MY":`Pilih perabot`,"nl-NL":`Kies een object`,"pl-PL":`Zaznaczenie obiektów`,"pt-PT":`Objectos de Selecção`,"sr-Cyrl":`Изаберите намештај`,"vi-VN":`Chọn đối tượng`,"zh-CN":`选择物件`,"zh-TW":`选择物件`},退出绘制:{"de-DE":`Zeichnung beenden`,"en-US":`Exit drawing`,"es-ES":`Salir del dibujo`,"fr-FR":`Quitter le dessin`,"id-ID":`Keluar menggambar`,"it-IT":`Esci dal disegno`,"ja-JP":`描画を終了`,"ko-KR":`드로잉 종료`,"ms-MY":`Keluar melukis`,"nl-NL":`Tekening afsluiten`,"pl-PL":`Zakończ rysowanie`,"pt-PT":`Sair do desenho`,"sr-Cyrl":`Излаз из цртежа`,"vi-VN":`Thoát Vẽ`,"zh-CN":`退出绘制`,"zh-TW":`退出绘制`},绘制墙:{"de-DE":`Wand zeichnen`,"en-US":`Wall`,"es-ES":`Dibuja la pared`,"fr-FR":`Dessiner le mur`,"id-ID":`Dinding`,"it-IT":`Disegnare pareti`,"ja-JP":`かべ`,"ko-KR":`벽을 그리다`,"ms-MY":`Dinding`,"nl-NL":`Wanden tekenen`,"pl-PL":`Maluj ściany`,"pt-PT":`Desenhar paredes`,"sr-Cyrl":`Зид`,"vi-VN":`Vẽ tường`,"zh-CN":`绘制墙`,"zh-TW":`绘制墙`},点击放置文本:{"de-DE":`Klicken, um Text zu platzieren`,"en-US":`Click to place text`,"es-ES":`Haga clic para colocar el texto`,"fr-FR":`Cliquez sur placer le texte`,"id-ID":`Klik untuk menempatkan teks`,"it-IT":`Clicca per inserire il testo`,"ja-JP":`クリックしてテキストを配置`,"ko-KR":`클릭하여 텍스트 배치`,"ms-MY":`Klik untuk meletakkan teks`,"nl-NL":`Klik om tekst te plaatsen`,"pl-PL":`Kliknij aby umieścić tekst`,"pt-PT":`Clique para colocar o texto`,"sr-Cyrl":`Кликните да поставите текст`,"vi-VN":`Click vào Place Text`,"zh-CN":`点击放置文本`,"zh-TW":`点击放置文本`},添加文本:{"de-DE":`Text hinzufügen`,"en-US":`Text`,"es-ES":`Añadir texto`,"fr-FR":`Ajouter du texte`,"id-ID":`Teks`,"it-IT":`Aggiungi testo`,"ja-JP":`もじ`,"ko-KR":`텍스트 추가`,"ms-MY":`Teks`,"nl-NL":`Tekst toevoegen`,"pl-PL":`Dodaj tekst`,"pt-PT":`Adicionar texto`,"sr-Cyrl":`Текст`,"vi-VN":`Thêm văn bản`,"zh-CN":`添加文本`,"zh-TW":`添加文本`},点击墙线添加窗:{"de-DE":`Klicken Sie auf die Wandlinie, um ein Fenster hinzuzufügen`,"en-US":`Click on the wall line to add a window`,"es-ES":`Haga clic en la línea de la pared para agregar la ventana`,"fr-FR":`Cliquez sur la ligne murale pour ajouter une fenêtre`,"id-ID":`Klik pada garis dinding untuk menambahkan jendela`,"it-IT":`Clicca sulla linea del muro per aggiungere una finestra`,"ja-JP":`壁線をクリックして窓を追加`,"ko-KR":`벽 선을 클릭하여 창 추가`,"ms-MY":`Klik pada garisan dinding untuk menambah tingkap`,"nl-NL":`Klik op de muurlijn om een venster toe te voegen`,"pl-PL":`Kliknij ścianę, aby dodać okno`,"pt-PT":`Clique na linha da parede para adicionar a janela`,"sr-Cyrl":`Кликните на линију зида да додате прозор`,"vi-VN":`Nhấp vào dòng tường để thêm cửa sổ`,"zh-CN":`点击墙线添加窗`,"zh-TW":`点击墙线添加窗`},添加窗:{"de-DE":`Fenster hinzufügen`,"en-US":`Window`,"es-ES":`Agregar ventana`,"fr-FR":`Ajouter une fenêtre`,"id-ID":`Jendela`,"it-IT":`Aggiungi finestra`,"ja-JP":`まど`,"ko-KR":`창 추가`,"ms-MY":`Tingkap`,"nl-NL":`Een venster invoegen`,"pl-PL":`Dodaj okno`,"pt-PT":`Adicionar janela`,"sr-Cyrl":`Прозор`,"vi-VN":`Thêm cửa sổ`,"zh-CN":`添加窗`,"zh-TW":`添加窗戶`},请设置入户门:{"de-DE":`Bitte setzen Sie die Eingangstür`,"en-US":`Please set the entrance door`,"es-ES":`Por favor configure la puerta de entrada`,"fr-FR":`Veuillez configurer la porte d'entrée`,"id-ID":`Silakan atur pintu masuk`,"it-IT":`Si prega di impostare la porta d'ingresso`,"ja-JP":`入戸ゲートを設置してください`,"ko-KR":`입주문을 설치해 주십시오`,"ms-MY":`Sila tetapkan pintu masuk`,"nl-NL":`Stel de ingang in`,"pl-PL":`Proszę ustawić drzwi wejściowe`,"pt-PT":`Por favor, defina a porta de entrada`,"sr-Cyrl":`Молимо поставите улазна врата`,"vi-VN":`Vui lòng thiết lập cửa vào`,"zh-CN":`请设置入户门`,"zh-TW":`請設置入戶門`},平面图编辑:{"de-DE":`Grafikbearbeitung`,"en-US":`Floor plan editing`,"es-ES":`Edición de planos`,"fr-FR":`Plan Modifier`,"id-ID":`Pengeditan denah lantai`,"it-IT":`Modifica grafica`,"ja-JP":`平面図の編集`,"ko-KR":`평면도 편집`,"ms-MY":`Penyuntingan pelan lantai`,"nl-NL":`Grafiek bewerken`,"pl-PL":`Edycja wykresów`,"pt-PT":`Editor de Planos`,"sr-Cyrl":`Уређивање плана спрата`,"vi-VN":`Chỉnh sửa sơ đồ tầng`,"zh-CN":`平面图编辑`,"zh-TW":`平面图编辑`},拖拽光标绘制墙线:{"de-DE":`Ziehen Sie den Cursor, um Wandlinien zu zeichnen`,"en-US":`Drag and drop the cursor to draw the wall line`,"es-ES":`Arrastre el cursor para dibujar la línea de la pared`,"fr-FR":`Faites glisser le curseur pour dessiner une ligne de mur`,"id-ID":`Seret dan jatuhkan kursor untuk menggambar garis dinding`,"it-IT":`Trascina il cursore per disegnare le linee del muro`,"ja-JP":`カーソルをドラッグして壁線を描画する`,"ko-KR":`커서를 드래그하여 벽 선 그리기`,"ms-MY":`Seret dan lepaskan kursor untuk melukis garis dinding`,"nl-NL":`Sleep cursor om muurlijnen te tekenen`,"pl-PL":`Przeciągnij kursor do rysowania linii ściennych`,"pt-PT":`Arraste o cursor para desenhar linhas de parede`,"sr-Cyrl":`Превуците и отпустите курсор да нацртате линију зида`,"vi-VN":`Con trỏ kéo Vẽ đường tường`,"zh-CN":`拖拽光标绘制墙线`,"zh-TW":`拖拽光标绘制墙线`},长按屏幕拖拽选择起点:{"de-DE":`Ziehen Sie den Bildschirm lang und wählen Sie den Startpunkt`,"en-US":`Long press and drag the screen to start`,"es-ES":`Presione la pantalla durante mucho tiempo y arrastre para seleccionar el punto de partida.`,"fr-FR":`Appuyez longuement sur l'écran pour faire glisser pour sélectionner le point de départ`,"id-ID":`Tekan lama dan seret layar untuk memulai`,"it-IT":`Premere e trascinare lo schermo per selezionare il punto di partenza`,"ja-JP":`画面を長押ししてドラッグして始点を選択`,"ko-KR":`화면 드래그를 길게 눌러 시작 점 선택`,"ms-MY":`Tekan lama dan seret skrin untuk memulakan`,"nl-NL":`Sleep met een lange druk op het scherm om het startpunt te selecteren`,"pl-PL":`Przeciągnij na ekranie i wybierz punkt początkowy`,"pt-PT":`Pressione a tela e arraste para selecionar o ponto de início`,"sr-Cyrl":`Дуг притисак и превуците екран за почетак`,"vi-VN":`Kéo dài màn hình để chọn điểm bắt đầu`,"zh-CN":`长按屏幕拖拽选择起点`,"zh-TW":`长按屏幕拖拽选择起点`},旋转朝向:{"de-DE":`Drehorientierung`,"en-US":`Rotation orientation`,"es-ES":`Orientación de rotación`,"fr-FR":`Orientation de rotation`,"id-ID":`Orientasi rotasi`,"it-IT":`Orientamento di rotazione`,"ja-JP":`向きを回転`,"ko-KR":`회전 방향`,"ms-MY":`Orientasi putaran`,"nl-NL":`Roteer richting`,"pl-PL":`Orientacja obrotu`,"pt-PT":`Orientação de rotação`,"sr-Cyrl":`Оријентација ротације`,"vi-VN":`Hướng xoay`,"zh-CN":`旋转朝向`,"zh-TW":`旋轉朝向`},旋转平面图:{"de-DE":`Diagramm drehen`,"en-US":`Rotate the floor plan`,"es-ES":`Plano de rotación`,"fr-FR":`Plan de rotation`,"id-ID":`Putar denah lantai`,"it-IT":`Ruotare il piano`,"ja-JP":`回転平面図`,"ko-KR":`회전 평면도`,"ms-MY":`Putar pelan lantai`,"nl-NL":`Draai het diagram`,"pl-PL":`Obróć wykres płaszczyzny`,"pt-PT":`Rodar o plano`,"sr-Cyrl":`Окрените план спрата`,"vi-VN":`Sơ đồ tầng xoay`,"zh-CN":`旋转平面图`,"zh-TW":`旋转平面图`},工具箱:{"de-DE":`Werkzeugkasten`,"en-US":`Tools`,"es-ES":`Caja de herramientas`,"fr-FR":`Boîte à outils`,"id-ID":`Alat`,"it-IT":`Scatola degli strumenti`,"ja-JP":`ツールボックス`,"ko-KR":`도구상자`,"ms-MY":`Alat`,"nl-NL":`Gereedschapskast`,"pl-PL":`Skrzynka narzędzi`,"pt-PT":`Caixa de ferramentas`,"sr-Cyrl":`Алатке`,"vi-VN":`Hộp công cụ`,"zh-CN":`工具箱`,"zh-TW":`工具箱`},朝向设置:{"de-DE":`Richtungseinstellungen`,"en-US":`Orientation setting`,"es-ES":`Configuración de orientación`,"fr-FR":`Vers les réglages`,"id-ID":`Pengaturan orientasi`,"it-IT":`Impostazioni orientate`,"ja-JP":`方向設定`,"ko-KR":`방향 설정`,"ms-MY":`Tetapan orientasi`,"nl-NL":`Richting instellen`,"pl-PL":`Ustawienia kierunkowe`,"pt-PT":`Configurações orientacionais`,"sr-Cyrl":`Подешавање оријентације`,"vi-VN":`Hướng tới thiết lập`,"zh-CN":`朝向设置`,"zh-TW":`朝向设置`},底图参考:{"de-DE":`Unterkarte Referenz`,"en-US":`Base map reference`,"es-ES":`Referencia del mapa base`,"fr-FR":`Référence de la carte de base`,"id-ID":`Referensi peta dasar`,"it-IT":`Riferimento al fondo`,"ja-JP":`アンダーレイリファレンス`,"ko-KR":`언더레이 참조`,"ms-MY":`Rujukan peta asas`,"nl-NL":`Onderkaartreferentie`,"pl-PL":`Podstawowe odniesienia`,"pt-PT":`Referência do mapa`,"sr-Cyrl":`Референца основне карте`,"vi-VN":`Tham chiếu lớp lót`,"zh-CN":`底图参考`,"zh-TW":`底图参考`},底图已展示:{"de-DE":`Unterkarte angezeigt`,"en-US":`The base map has been displayed`,"es-ES":`El mapa inferior se ha mostrado`,"fr-FR":`La carte de base a été montrée`,"id-ID":`Peta dasar telah ditampilkan`,"it-IT":`Il fondo è stato mostrato`,"ja-JP":`下図が表示されました`,"ko-KR":`언더레이가 표시됩니다`,"ms-MY":`Peta asas telah dipaparkan`,"nl-NL":`De onderkaart is weergegeven`,"pl-PL":`Pokazano mapę`,"pt-PT":`O mapa inferior foi mostrado`,"sr-Cyrl":`Основна мапа је приказана`,"vi-VN":`Các lớp lót được hiển thị`,"zh-CN":`底图已展示`,"zh-TW":`底图已展示`},底图已隐藏:{"de-DE":`Unterkarte ist versteckt`,"en-US":`The base image is hidden`,"es-ES":`La imagen inferior está oculta`,"fr-FR":`La carte de base est cachée`,"id-ID":`Gambar dasar disembunyikan`,"it-IT":`La mappa è nascosta`,"ja-JP":`アンダーレイが非表示になっています`,"ko-KR":`언더레이가 숨겨졌습니다`,"ms-MY":`Imej asas disembunyikan`,"nl-NL":`De kaart is verborgen`,"pl-PL":`Mapa jest ukryta`,"pt-PT":`O mapa está oculto`,"sr-Cyrl":`Основна слика је скривена`,"vi-VN":`Lớp lót bị ẩn`,"zh-CN":`底图已隐藏`,"zh-TW":`底图已隐藏`},自动吸附:{"de-DE":`Automatische Absorption`,"en-US":`Automatic adsorption`,"es-ES":`Adsorción automática`,"fr-FR":`Adsorption automatique`,"id-ID":`Adsorpsi otomatis`,"it-IT":`Assorbimento automatico`,"ja-JP":`じどうきゅうちゃく`,"ko-KR":`자동 흡착`,"ms-MY":`Penyerapan automatik`,"nl-NL":`Automatische adsorptie`,"pl-PL":`Automatyczna adsorpcja`,"pt-PT":`Adsorção automática`,"sr-Cyrl":`Аутоматска адсорпција`,"vi-VN":`Tự động hấp phụ`,"zh-CN":`自动吸附`,"zh-TW":`自动吸附`},物件自动转向:{"de-DE":`Objekt automatisch drehen`,"en-US":`Automatic rotation of objects`,"es-ES":`Dirección automática del objeto`,"fr-FR":`Rotation automatique des objets`,"id-ID":`Rotasi otomatis objek`,"it-IT":`Rotazione automatica degli oggetti`,"ja-JP":`物件の自動操舵`,"ko-KR":`오브젝트 자동 회전`,"ms-MY":`Putaran automatik objek`,"nl-NL":`Object automatisch draaien`,"pl-PL":`Automatyczne kierowanie obiektów`,"pt-PT":`Rotação automática do objeto`,"sr-Cyrl":`Аутоматска ротација објеката`,"vi-VN":`Đối tượng tự động lái`,"zh-CN":`物件自动转向`,"zh-TW":`物件自动转向`},"不能超过{{0}}个字":{"de-DE":`Darf {{0}} Zeichen nicht überschreiten`,"en-US":`Cannot exceed {{0}} characters`,"es-ES":`No puede exceder de {{0}} caracteres`,"fr-FR":`Ne peut pas dépasser {{0}} caractères`,"id-ID":`Tidak boleh melebihi {{0}} karakter`,"it-IT":`Non può superare {{0}} caratteri`,"ja-JP":`{{0}}文字を超えることはできません`,"ko-KR":`{{0}}자 이하로 입력하세요`,"ms-MY":`Tidak boleh melebihi {{0}} aksara`,"nl-NL":`Mag niet meer dan {{0}} tekens bevatten`,"pl-PL":`Nie może przekraczać {{0}} znaków`,"pt-PT":`Não pode exceder {{0}} caracteres`,"sr-Cyrl":`Не може прећи {{0}} слова`,"vi-VN":`Không được vượt quá {{0}} ký tự`,"zh-CN":`不能超过{{0}}个字`,"zh-TW":`不可超過{{0}}個字`},名称:{"de-DE":`Name`,"en-US":`name`,"es-ES":`Nombre`,"fr-FR":`Le nom`,"id-ID":`nama`,"it-IT":`Nome`,"ja-JP":`の名前をあげる`,"ko-KR":`이름`,"ms-MY":`nama`,"nl-NL":`Naam`,"pl-PL":`Nazwa`,"pt-PT":`Nome`,"sr-Cyrl":`име`,"vi-VN":`Tên`,"zh-CN":`名称`,"zh-TW":`名称`},别名将代替类型展示在分间内:{"de-DE":`Der Alias wird anstelle des Typs in Spalten angezeigt`,"en-US":`The name replaces the partition type`,"es-ES":`Otros nombres se mostrarán en la Sala en lugar del tipo`,"fr-FR":`Le nom sera affiché à la place du type dans le compartiment`,"id-ID":`Nama menggantikan jenis partisi`,"it-IT":`L'alias verrà visualizzato in intervalli al posto del tipo`,"ja-JP":`別名は別のタイプの代わりに区分内に表示されます`,"ko-KR":`별칭은 유형 대신 분할 내에 표시됩니다`,"ms-MY":`Nama menggantikan jenis partition`,"nl-NL":`Alias wordt in plaats van type weergegeven in spaces`,"pl-PL":`Alias zamiast typu zostanie wyświetlony w spacjach`,"pt-PT":`O alias será exibido no intervalo em vez do tipo`,"sr-Cyrl":`Име замењује тип преграде`,"vi-VN":`Bí danh sẽ được hiển thị thay cho loại trong ngăn`,"zh-CN":`别名将代替类型展示在分间内`,"zh-TW":`别名将代替类型展示在分间内`},正交锁定已开启:{"de-DE":`Ortogonale Sperrung aktiviert`,"en-US":`Orthogonal lock enabled`,"es-ES":`Bloqueo ortogonal abierto`,"fr-FR":`Le verrouillage Orthogonal est activé`,"id-ID":`Kunci ortogonal diaktifkan`,"it-IT":`Bloccaggio ortogonale attivo`,"ja-JP":`直交ロックがオン`,"ko-KR":`직교 잠금 켜짐`,"ms-MY":`Kunci ortogonal diaktifkan`,"nl-NL":`Ortogonale vergrendeling is ingeschakeld`,"pl-PL":`Blokowanie prostokątne włączone`,"pt-PT":`Bloqueamento ortogonal está aberto`,"sr-Cyrl":`Омогућено ортогонално закључавање`,"vi-VN":`Khóa trực giao được bật`,"zh-CN":`正交锁定已开启`,"zh-TW":`正交锁定已开启`},正交锁定已关闭:{"de-DE":`Ortogonale Sperrung geschlossen`,"en-US":`Orthogonal lock is turned off`,"es-ES":`Bloqueo ortogonal cerrado`,"fr-FR":`Le verrouillage Orthogonal est fermé`,"id-ID":`Kunci ortogonal dimatikan`,"it-IT":`Bloccaggio ortogonale chiuso`,"ja-JP":`直交ロックがオフです`,"ko-KR":`직교 잠금 해제됨`,"ms-MY":`Kunci ortogonal dimatikan`,"nl-NL":`Ortogonale vergrendeling gesloten`,"pl-PL":`Blokowanie prostokątne zamknięte`,"pt-PT":`Bloqueio ortogonal fechado`,"sr-Cyrl":`Ортогонална брава је искључена`,"vi-VN":`Khóa trực giao đã đóng`,"zh-CN":`正交锁定已关闭`,"zh-TW":`正交锁定已关闭`},正交:{"de-DE":`Ortogonal`,"en-US":`Ortho`,"es-ES":`Ortonormal`,"fr-FR":`Orthogonale`,"id-ID":`Orto`,"it-IT":`ortogonale`,"ja-JP":`直交`,"ko-KR":`직교`,"ms-MY":`Orto`,"nl-NL":`rechthoekig`,"pl-PL":`Prawokoło`,"pt-PT":`ortogonal`,"sr-Cyrl":`Орто`,"vi-VN":`Trực giao`,"zh-CN":`正交`,"zh-TW":`正交`},"请输入{{0}}范围内数值":{"de-DE":`Bitte geben Sie einen Wert im Bereich von {{0}} ein`,"en-US":`Please enter a value within the range of {{0}}`,"es-ES":`Por favor, introduce un valor dentro del rango de {{0}}`,"fr-FR":`Veuillez entrer une valeur dans la plage de {{0}}`,"id-ID":`Harap masukkan nilai dalam rentang {{0}}`,"it-IT":`Si prega di inserire un valore compreso nell'intervallo di {{0}}`,"ja-JP":`{{0}}の範囲内の値を入力してください`,"ko-KR":`{{0}} 범위 내의 값을 입력하세요`,"ms-MY":`Sila masukkan nilai dalam julat {{0}}`,"nl-NL":`Voer een waarde in binnen het bereik van {{0}}`,"pl-PL":`Proszę wprowadzić wartość w zakresie {{0}}`,"pt-PT":`Por favor, insira um valor dentro do intervalo de {{0}}`,"sr-Cyrl":`Молимо унесите вредност у опсегу {{0}}`,"vi-VN":`Vui lòng nhập một giá trị trong phạm vi {{0}}`,"zh-CN":`请输入{{0}}范围内数值`,"zh-TW":`請輸入在{{0}}範圍內的值`},"不可小于{{0}}":{"de-DE":`Darf nicht weniger als {{0}} sein`,"en-US":`Cannot be less than {{0}}`,"es-ES":`No puede ser inferior a {{0}}`,"fr-FR":`Ne peut pas être inférieur à {{0}}`,"id-ID":`Tidak boleh kurang dari {{0}}`,"it-IT":`Non può essere inferiore a {{0}}`,"ja-JP":`{{0}}未満にはできません`,"ko-KR":`{{0}} 이하일 수 없음`,"ms-MY":`Tidak boleh kurang daripada {{0}}`,"nl-NL":`Kan niet minder zijn dan {{0}}`,"pl-PL":`Nie może być mniejsze niż {{0}}`,"pt-PT":`Não pode ser inferior a {{0}}`,"sr-Cyrl":`Не може бити мање од {{0}}`,"vi-VN":`Không thể nhỏ hơn {{0}}`,"zh-CN":`不可小于{{0}}`,"zh-TW":`不可小于{{0}}`},"不可大于{{0}}":{"de-DE":`Darf nicht größer als {{0}} sein`,"en-US":`Cannot be greater than {{0}}`,"es-ES":`No puede ser mayor que {{0}}`,"fr-FR":`Ne peut pas être supérieur à {{0}}`,"id-ID":`Tidak boleh lebih besar dari {{0}}`,"it-IT":`Non può essere maggiore di {{0}}`,"ja-JP":`{{0}}より大きくすることはできません`,"ko-KR":`{{0}}보다 클 수 없음`,"ms-MY":`Tidak boleh lebih besar daripada {{0}}`,"nl-NL":`Kan niet groter zijn dan {{0}}`,"pl-PL":`Nie może być większe niż {{0}}`,"pt-PT":`Não pode ser maior que {{0}}`,"sr-Cyrl":`Не може бити веће од {{0}}`,"vi-VN":`Không thể lớn hơn {{0}}`,"zh-CN":`不可大于{{0}}`,"zh-TW":`不可大于{{0}}`},置顶:{"de-DE":`oben setzen`,"en-US":`Top`,"es-ES":`En la parte superior`,"fr-FR":`Mettre en haut`,"id-ID":`Atas`,"it-IT":`Metti in alto`,"ja-JP":`の頂部をおおう`,"ko-KR":`상단`,"ms-MY":`Atas`,"nl-NL":`Boven zetten`,"pl-PL":`Wystaw na górę`,"pt-PT":`Topo`,"sr-Cyrl":`Врх`,"vi-VN":`Đặt đỉnh`,"zh-CN":`置顶`,"zh-TW":`置顶`},置底:{"de-DE":`Boden setzen`,"en-US":`Bottom`,"es-ES":`Poner el Fondo`,"fr-FR":`Mise en bas`,"id-ID":`Bawah`,"it-IT":`Mettere in fondo`,"ja-JP":`ボトムセット`,"ko-KR":`밑바닥`,"ms-MY":`Bawah`,"nl-NL":`Onder`,"pl-PL":`Podstaw`,"pt-PT":`Fundo`,"sr-Cyrl":`Дно`,"vi-VN":`Đặt đáy`,"zh-CN":`置底`,"zh-TW":`置底`},尺寸:{"de-DE":`Größe`,"en-US":`Size`,"es-ES":`Tamaño`,"fr-FR":`Dimensions`,"id-ID":`Ukuran`,"it-IT":`Dimensioni`,"ja-JP":`寸法すんぽう`,"ko-KR":`치수`,"ms-MY":`Saiz`,"nl-NL":`Afmetingen`,"pl-PL":`Rozmiary`,"pt-PT":`Dimensões`,"sr-Cyrl":`Величина`,"vi-VN":`Kích thước`,"zh-CN":`尺寸`,"zh-TW":`尺寸`},代替物件名称用于平面图展示:{"de-DE":`Stelle des Objektnamens für die Diagrammandesignation`,"en-US":`Replace the names for display`,"es-ES":`Reemplazar el nombre del objeto para la exhibición de planos`,"fr-FR":`Au lieu du nom de l'objet pour l'affichage du plan d'étage`,"id-ID":`Ganti nama untuk tampilan`,"it-IT":`Sostituire il nome dell'oggetto per la visualizzazione del piano`,"ja-JP":`代替物件名平面図表示用`,"ko-KR":`플랫 드로잉 전시에 객체 이름 대체`,"ms-MY":`Gantikan nama untuk paparan`,"nl-NL":`Gebruik de naam van het object in plaats van de grafische weergave`,"pl-PL":`Zamiast nazw obiektów używanych w wyświetlaniu wykresów płaskich`,"pt-PT":`Substituir o nome do objeto para a visualização do plano`,"sr-Cyrl":`Замените називе за приказ`,"vi-VN":`Thay thế tên đối tượng để hiển thị kế hoạch sàn`,"zh-CN":`代替物件名称用于平面图展示`,"zh-TW":`代替物件名称用于平面图展示`},代替物件名称用于生成AI笔录:{"de-DE":`Erzeugung von AI-Protokollen anstelle von Objektnamen`,"en-US":`Substitute object names for generating AI transcripts`,"es-ES":`Reemplazar el nombre del objeto para generar transcripciones de Ia`,"fr-FR":`À la place des noms d'objets pour générer des transcriptions ai`,"id-ID":`Ganti nama objek untuk menghasilkan transkrip AI`,"it-IT":`Sostituire il nome dell'oggetto per generare le annotazioni AI`,"ja-JP":`代替物件名はAI記録を生成するために使用される`,"ko-KR":`개체 이름 대신 AI 기록 생성`,"ms-MY":`Gantikan nama objek untuk menjana transkrip AI`,"nl-NL":`In plaats van objectnamen voor het genereren van AI-notaties`,"pl-PL":`Zamiast nazw obiektów używanych do generowania notatek AI`,"pt-PT":`Em vez de nomes de objetos para gerar anotações de IA`,"sr-Cyrl":`Замена имена објеката за генерисање АИ транскрипата`,"vi-VN":`Thay thế tên đối tượng để tạo bản ghi AI`,"zh-CN":`代替物件名称用于生成AI笔录`,"zh-TW":`代替物件名称用于生成AI笔录`},已被设置为入户门:{"de-DE":`Als Eingangstür eingestellt`,"en-US":`It has been set as the entrance door`,"es-ES":`Se ha establecido como puerta de entrada`,"fr-FR":`A été mis en place comme porte d'entrée`,"id-ID":`Telah diatur sebagai pintu masuk`,"it-IT":`È stato impostato come porta di ingresso`,"ja-JP":`入戸ゲートとして設定されています`,"ko-KR":`출입문으로 설정됨`,"ms-MY":`Ia telah ditetapkan sebagai pintu masuk`,"nl-NL":`Is ingesteld als ingang`,"pl-PL":`Zostało ustawione jako drzwi wejściowe`,"pt-PT":`Já foi definido como porta de entrada`,"sr-Cyrl":`Постављена је као улазна врата`,"vi-VN":`Đã được đặt làm cửa vào nhà`,"zh-CN":`已被设置为入户门`,"zh-TW":`已被设置为入户门`},对称:{"de-DE":`symmetrisch`,"en-US":`Sym`,"es-ES":`simétrico`,"fr-FR":`symétrique`,"id-ID":`Sim`,"it-IT":`simmetrico`,"ja-JP":`左右`,"ko-KR":`대칭`,"ms-MY":`Sim`,"nl-NL":`symmetrie`,"pl-PL":`symetryczny`,"pt-PT":`simétrico`,"sr-Cyrl":`Сим`,"vi-VN":`đối xứng`,"zh-CN":`对称`,"zh-TW":`對稱`},翻转:{"de-DE":`Umdrehen`,"en-US":`Flip`,"es-ES":`Voltear`,"fr-FR":`Retourner`,"id-ID":`Balik`,"it-IT":`Capovolgere`,"ja-JP":`反転`,"ko-KR":`뒤집기`,"ms-MY":`Terbalik`,"nl-NL":`Omdraaien`,"pl-PL":`Przewrócić`,"pt-PT":`Virar`,"sr-Cyrl":`Окрени`,"vi-VN":`Lật`,"zh-CN":`翻转`,"zh-TW":`翻轉`},入户门设置确认:{"de-DE":`Bestätigung der Einstellung der Eingangstür`,"en-US":`Confirmation of entrance door setting`,"es-ES":`Confirmación de configuración de puerta de entrada`,"fr-FR":`Confirmation du réglage de la porte d'entrée`,"id-ID":`Konfirmasi pengaturan pintu masuk`,"it-IT":`Conferma dell'impostazione della porta d'ingresso`,"ja-JP":`入戸ゲート設定確認`,"ko-KR":`입주문 설치 확인`,"ms-MY":`Pengesahan tetapan pintu masuk`,"nl-NL":`Ingangsdeur instellingen bevestiging`,"pl-PL":`Potwierdzenie ustawienia drzwi wejściowych`,"pt-PT":`Confirmação da configuração da porta de entrada`,"sr-Cyrl":`Потврда подешавања улазних врата`,"vi-VN":`Xác nhận cài đặt cửa vào`,"zh-CN":`入户门设置确认`,"zh-TW":`入戶門設置確認`},"若设置此门为入户门,之前的入户门信息将会更改,同时需要重新设置朝向。":{"de-DE":`Wenn diese Tür als Eingangstür eingestellt ist, werden die vorherigen Informationen zur Eingangstür geändert und die Ausrichtung muss neu eingestellt werden.`,"en-US":`If this door is set as an entry door, the previous entry door information will be changed and the orientation needs to be reset.`,"es-ES":`Si esta puerta se establece como puerta de entrada, la información anterior de la puerta de entrada se cambiará y será necesario restablecer la orientación.`,"fr-FR":`Si cette porte est définie comme porte d'entrée, les informations précédentes sur la porte d'entrée seront modifiées et l'orientation devra être réinitialisée.`,"id-ID":`Jika pintu ini diatur sebagai pintu masuk, informasi pintu masuk sebelumnya akan diubah dan orientasi perlu diatur ulang.`,"it-IT":`Se questa porta è impostata come porta d'ingresso, le informazioni precedenti sulla porta d'ingresso verranno modificate e sarà necessario reimpostare l'orientamento.`,"ja-JP":`このゲートをエントリゲートとして設定すると、以前のエントリゲート情報が変更され、向きを再設定する必要があります。`,"ko-KR":`이 문을 출입문으로 설정하면 이전 출입문 정보가 변경되고 방향 재설정이 필요합니다.`,"ms-MY":`Jika pintu ini ditetapkan sebagai pintu masuk, maklumat pintu masuk sebelumnya akan diubah dan orientasi perlu ditetapkan semula.`,"nl-NL":`Als deze deur wordt ingesteld als een ingangsdeur, worden de voorgaande ingangsdeur-informatie gewijzigd en moet de richting opnieuw worden ingesteld.`,"pl-PL":`Jeśli ta drzwi zostaną ustawione jako drzwi wejściowe, informacje o poprzednich drzwiach wejściowych zostaną zmienione, a orientacja będzie musiała zostać ponownie ustawiona.`,"pt-PT":`Se esta porta for definida como porta de entrada, a informação anterior da porta de entrada será alterada e a orientação precisará ser redefinida.`,"sr-Cyrl":`Ако су ова врата постављена као улазна врата, информације о претходним улазним вратима ће бити промењене и оријентација ће морати да се ресетује.`,"vi-VN":`Nếu cửa này được đặt làm cửa vào, thông tin cửa vào trước đó sẽ được thay đổi và hướng cần được thiết lập lại.`,"zh-CN":`若设置此门为入户门,之前的入户门信息将会更改,同时需要重新设置朝向。`,"zh-TW":`如果設置此門為入戶門,先前的入戶門信息將會更改,同時需要重新設置朝向。`},无框:{"de-DE":`Ohne Rahmen`,"en-US":`No frame`,"es-ES":`Sin marco`,"fr-FR":`Sans boîte`,"id-ID":`Tanpa bingkai`,"it-IT":`Senza cornice`,"ja-JP":`枠なし`,"ko-KR":`상자 없음`,"ms-MY":`Tiada bingkai`,"nl-NL":`Geen raam`,"pl-PL":`Bez ramki`,"pt-PT":`Sem quadro`,"sr-Cyrl":`Без оквира`,"vi-VN":`Không có khung`,"zh-CN":`无框`,"zh-TW":`无框`},颜色:{"de-DE":`Farbe`,"en-US":`Colour`,"es-ES":`Color`,"fr-FR":`Couleur`,"id-ID":`Warna`,"it-IT":`Colore`,"ja-JP":`カラー`,"ko-KR":`색상`,"ms-MY":`Warna`,"nl-NL":`Kleur`,"pl-PL":`Kolor`,"pt-PT":`cor`,"sr-Cyrl":`Боја`,"vi-VN":`Màu sắc`,"zh-CN":`颜色`,"zh-TW":`颜色`},点击此处编辑备注:{"de-DE":`Klicken Sie hier, um den Kommentar zu bearbeiten`,"en-US":`Click here to edit the note`,"es-ES":`Haga clic aquí para editar las Notas`,"fr-FR":`Cliquez ici pour modifier les notes`,"id-ID":`Klik di sini untuk mengedit catatan`,"it-IT":`Clicca qui per modificare i commenti`,"ja-JP":`コメントを編集するにはここをクリックしてください`,"ko-KR":`메모를 편집하려면 여기를 클릭하십시오`,"ms-MY":`Klik di sini untuk mengedit nota`,"nl-NL":`Klik hier om opmerkingen te bewerken`,"pl-PL":`Kliknij tutaj, aby edytować komentarze`,"pt-PT":`Clique aqui para editar o comentário`,"sr-Cyrl":`Кликните овде да уредите белешку`,"vi-VN":`Nhấn vào đây để chỉnh sửa các ghi chú`,"zh-CN":`点击此处编辑备注`,"zh-TW":`点击此处编辑备注`},默认文本:{"de-DE":`Standardtext`,"en-US":`Text`,"es-ES":`Texto predeterminado`,"fr-FR":`Texte par défaut`,"id-ID":`Teks`,"it-IT":`Testo predefinito`,"ja-JP":`テキスト`,"ko-KR":`기본 텍스트`,"ms-MY":`Teks`,"nl-NL":`Standaardtekst`,"pl-PL":`Domyślny tekst`,"pt-PT":`Texto padrão`,"sr-Cyrl":`Текст`,"vi-VN":`Văn bản mặc định`,"zh-CN":`默认文本`,"zh-TW":`默认文本`},平层:{"de-DE":`Einstöckiges Haus`,"en-US":`Single-level house`,"es-ES":`Casa de una sola planta`,"fr-FR":`Maison de plain-pied`,"id-ID":`Rumah satu tingkat`,"it-IT":`Casa su un unico livello`,"ja-JP":`平屋`,"ko-KR":`평층`,"ms-MY":`Rumah satu tingkat`,"nl-NL":`Vlak`,"pl-PL":`Dom jednopoziomowy`,"pt-PT":`Casa de um nível`,"sr-Cyrl":`Кућа на једном нивоу`,"vi-VN":`Ngôi nhà đơn cấp`,"zh-CN":`平层`,"zh-TW":`平層`},跃层:{"de-DE":`Thermokline`,"en-US":`Duplex floor`,"es-ES":`Termoclina`,"fr-FR":`Thermocline`,"id-ID":`Lantai duplex`,"it-IT":`Termoclina`,"ja-JP":`躍進層`,"ko-KR":`약층`,"ms-MY":`Tingkat dua`,"nl-NL":`sprongen`,"pl-PL":`Termoklina`,"pt-PT":`Termoclina`,"sr-Cyrl":`Дуплекс спрат`,"vi-VN":`Vùng nhiệt độ`,"zh-CN":`跃层`,"zh-TW":`溫度梯度`},复式:{"de-DE":`Verbund`,"en-US":`Compound`,"es-ES":`Compuesto`,"fr-FR":`Composé`,"id-ID":`Kompleks`,"it-IT":`Composto`,"ja-JP":`複式`,"ko-KR":`복식`,"ms-MY":`Kompaun`,"nl-NL":`Duplicaat`,"pl-PL":`Związek`,"pt-PT":`Composto`,"sr-Cyrl":`Комплекс`,"vi-VN":`Hợp chất`,"zh-CN":`复式`,"zh-TW":`複合`},错层:{"de-DE":`Versetzter Boden`,"en-US":`Split-level`,"es-ES":`Suelo escalonado`,"fr-FR":`Plancher échelonné`,"id-ID":`Bertingkat`,"it-IT":`Pavimento sfalsato`,"ja-JP":`層が外れる`,"ko-KR":`오층`,"ms-MY":`Bertingkat`,"nl-NL":`Verkeerde laag`,"pl-PL":`Schody sterczące`,"pt-PT":`Piso escalonado`,"sr-Cyrl":`Двослојни`,"vi-VN":`Sàn bậc thang`,"zh-CN":`错层`,"zh-TW":`錯層`},Loft:{"de-DE":`Dachboden`,"en-US":`Loft`,"es-ES":`Desván`,"fr-FR":`Grenier`,"id-ID":`Loteng`,"it-IT":`Soffitta`,"ja-JP":`ロフト`,"ko-KR":`로프트`,"ms-MY":`Loteng`,"nl-NL":`Zolder`,"pl-PL":`Strych`,"pt-PT":`Sótão`,"sr-Cyrl":`Поткровље`,"vi-VN":`Gác lửng`,"zh-CN":`Loft`,"zh-TW":`閣樓`},斜角楼顶:{"de-DE":`Schräges Dach`,"en-US":`Angled roof`,"es-ES":`Tejado inclinado`,"fr-FR":`Toit en pente`,"id-ID":`Atap miring`,"it-IT":`Tetto inclinato`,"ja-JP":`傾斜屋根`,"ko-KR":`사각 옥상`,"ms-MY":`Bumbung condong`,"nl-NL":`Hoek dak`,"pl-PL":`Połacie pochyłe`,"pt-PT":`Telhado inclinado`,"sr-Cyrl":`Коси кров`,"vi-VN":`Mái nhà nghiêng`,"zh-CN":`斜角楼顶`,"zh-TW":`傾斜屋頂`},顶层露台:{"de-DE":`Obere Terrasse`,"en-US":`Top terrace`,"es-ES":`Terraza superior`,"fr-FR":`Terrasse supérieure`,"id-ID":`Teras atas`,"it-IT":`Terrazza superiore`,"ja-JP":`トップテラス`,"ko-KR":`최상층 테라스`,"ms-MY":`Teres atas`,"nl-NL":`Terras op de bovenste verdieping`,"pl-PL":`Górny taras`,"pt-PT":`Terraço superior`,"sr-Cyrl":`Горња тераса`,"vi-VN":`Sân thượng trên cùng`,"zh-CN":`顶层露台`,"zh-TW":`頂層露台`},"车-2":{"de-DE":`Auto-2`,"en-US":`Car-2`,"es-ES":`Coche-2`,"fr-FR":`Voiture-2`,"id-ID":`Mobil-2`,"it-IT":`Auto-2`,"ja-JP":`車-2`,"ko-KR":`차-2`,"ms-MY":`Kereta-2`,"nl-NL":`De auto-2`,"pl-PL":`Samochód-2`,"pt-PT":`Carro-2`,"sr-Cyrl":`Ауто-2`,"vi-VN":`Xe hơi-2`,"zh-CN":`车-2`,"zh-TW":`車-2`},"车-1":{"de-DE":`Auto-1`,"en-US":`Car-1`,"es-ES":`Coche-1`,"fr-FR":`Voiture-1`,"id-ID":`Mobil-1`,"it-IT":`Auto-1`,"ja-JP":`車-1`,"ko-KR":`차-1`,"ms-MY":`Kereta-1`,"nl-NL":`De auto-1`,"pl-PL":`Samochód-1`,"pt-PT":`Carro-1`,"sr-Cyrl":`Ауто-1`,"vi-VN":`Xe hơi-1`,"zh-CN":`车-1`,"zh-TW":`車-1`},"中厨-1":{"de-DE":`Küche-1`,"en-US":`Kitchen-1`,"es-ES":`Cocina-1`,"fr-FR":`Cuisine-1`,"id-ID":`Dapur-1`,"it-IT":`Cucina-1`,"ja-JP":`キッチン-1`,"ko-KR":`중요리-1`,"ms-MY":`Dapur-1`,"nl-NL":`Keuken - 1`,"pl-PL":`Kuchnia-1`,"pt-PT":`Cozinha-1`,"sr-Cyrl":`Кухиња-1`,"vi-VN":`Nhà bếp-1`,"zh-CN":`中厨-1`,"zh-TW":`廚房-1`},"8人餐桌":{"de-DE":`Tisch für 8 Personen`,"en-US":`8 person table`,"es-ES":`Mesa para 8 personas`,"fr-FR":`Table pour 8 personnes`,"id-ID":`Meja untuk 8 orang`,"it-IT":`Tavolo per 8 persone`,"ja-JP":`8人のテーブル`,"ko-KR":`8인용 식탁`,"ms-MY":`Meja 8 orang`,"nl-NL":`Tafel voor 8 personen`,"pl-PL":`Stół dla 8 osób`,"pt-PT":`Mesa para 8 pessoas`,"sr-Cyrl":`Сто за осам особа`,"vi-VN":`Bàn cho 8 người`,"zh-CN":`8人餐桌`,"zh-TW":`8人餐桌`},"衣柜-1":{"de-DE":`Schrank-1`,"en-US":`Wardrobe-1`,"es-ES":`Armario-1`,"fr-FR":`Armoire-1`,"id-ID":`Lemari-1`,"it-IT":`Armadio-1`,"ja-JP":`衣装棚-1`,"ko-KR":`옷장-1`,"ms-MY":`Almari-1`,"nl-NL":`Kast- 1`,"pl-PL":`Szafa-1`,"pt-PT":`Guarda-roupa-1`,"sr-Cyrl":`Ормар-1`,"vi-VN":`Tủ quần áo-1`,"zh-CN":`衣柜-1`,"zh-TW":`衣櫃-1`},"浴缸-2":{"de-DE":`Badewanne-2`,"en-US":`Bathtub-2`,"es-ES":`Baño-2`,"fr-FR":`Baignoire-2`,"id-ID":`Bak Mandi-2`,"it-IT":`Vasca da bagno-2`,"ja-JP":`バスタブ-2`,"ko-KR":`욕조-2`,"ms-MY":`Tab mandi-2`,"nl-NL":`Bad-2`,"pl-PL":`Wanna-2`,"pt-PT":`Banheira-2`,"sr-Cyrl":`Када-2`,"vi-VN":`Bồn tắm-2`,"zh-CN":`浴缸-2`,"zh-TW":`浴缸-2`},"衣柜-3":{"de-DE":`Schrank-3`,"en-US":`Wardrobe-3`,"es-ES":`Armario-3`,"fr-FR":`Armoire-3`,"id-ID":`Lemari-3`,"it-IT":`Armadio-3`,"ja-JP":`衣装棚-3`,"ko-KR":`옷장-3`,"ms-MY":`Almari-3`,"nl-NL":`Kast- 3`,"pl-PL":`Szafa-3`,"pt-PT":`Guarda-roupa-3`,"sr-Cyrl":`Ормар-3`,"vi-VN":`Tủ quần áo-3`,"zh-CN":`衣柜-3`,"zh-TW":`衣櫃-3`},"植物-4":{"de-DE":`Pflanze-4`,"en-US":`Plant-4`,"es-ES":`Planta-4`,"fr-FR":`Plante-4`,"id-ID":`Tanaman-4`,"it-IT":`Pianta-4`,"ja-JP":`植物-4`,"ko-KR":`식물-4`,"ms-MY":`Tumbuhan-4`,"nl-NL":`Planten - 4`,"pl-PL":`Roślina-4`,"pt-PT":`Planta-4`,"sr-Cyrl":`Биљка-4`,"vi-VN":`Cây-4`,"zh-CN":`植物-4`,"zh-TW":`植物-4`},"植物-1":{"de-DE":`Pflanze-1`,"en-US":`Plant-1`,"es-ES":`Planta-1`,"fr-FR":`Plante-1`,"id-ID":`Tanaman-1`,"it-IT":`Pianta-1`,"ja-JP":`植物-1`,"ko-KR":`식물-1`,"ms-MY":`Tumbuhan-1`,"nl-NL":`Planten - 1`,"pl-PL":`Roślina-1`,"pt-PT":`Planta-1`,"sr-Cyrl":`Биљка-1`,"vi-VN":`Cây-1`,"zh-CN":`植物-1`,"zh-TW":`植物-1`},"植物-6":{"de-DE":`Pflanze-6`,"en-US":`Plant-6`,"es-ES":`Planta-6`,"fr-FR":`Plante-6`,"id-ID":`Tanaman-6`,"it-IT":`Pianta-6`,"ja-JP":`植物-6`,"ko-KR":`식물-6`,"ms-MY":`Tumbuhan-6`,"nl-NL":`Planten - 6`,"pl-PL":`Roślina-6`,"pt-PT":`Planta-6`,"sr-Cyrl":`Биљка-6`,"vi-VN":`Cây-6`,"zh-CN":`植物-6`,"zh-TW":`植物-6`},"书桌-1":{"de-DE":`Schreibtisch-1`,"en-US":`Desk-1`,"es-ES":`Escritorio-1`,"fr-FR":`Bureau-1`,"id-ID":`Meja-1`,"it-IT":`Scrivania-1`,"ja-JP":`机-1`,"ko-KR":`책상-1`,"ms-MY":`Meja-1`,"nl-NL":`Bureau - 1`,"pl-PL":`Biurko-1`,"pt-PT":`Mesa de escritório-1`,"sr-Cyrl":`Сто-1`,"vi-VN":`Bàn làm việc-1`,"zh-CN":`书桌-1`,"zh-TW":`書桌-1`},"瓶艺-1":{"de-DE":`Flaschenkunst-1`,"en-US":`Bottle ART-1`,"es-ES":`Arte de botella-1`,"fr-FR":`Art de la bouteille-1`,"id-ID":`Botol ART-1`,"it-IT":`Arte della bottiglia-1`,"ja-JP":`ボトルアート-1`,"ko-KR":`병예-1`,"ms-MY":`Seni Botol-1`,"nl-NL":`Flessen - 1`,"pl-PL":`Sztuka butelkowa-1`,"pt-PT":`Arte de garrafa-1`,"sr-Cyrl":`Флаша АРТ-1`,"vi-VN":`Nghệ thuật chai-1`,"zh-CN":`瓶艺-1`,"zh-TW":`瓶藝-1`},"衣柜-2":{"de-DE":`Schrank-2`,"en-US":`Wardrobe-2`,"es-ES":`Armario-2`,"fr-FR":`Armoire-2`,"id-ID":`Lemari-2`,"it-IT":`Armadio-2`,"ja-JP":`衣装棚-2`,"ko-KR":`옷장-2`,"ms-MY":`Almari-2`,"nl-NL":`Kast- 2`,"pl-PL":`Szafa-2`,"pt-PT":`Guarda-roupa-2`,"sr-Cyrl":`Ормар-2`,"vi-VN":`Tủ quần áo-2`,"zh-CN":`衣柜-2`,"zh-TW":`衣櫃-2`},"植物-2":{"de-DE":`Pflanze-2`,"en-US":`Plant-2`,"es-ES":`Planta-2`,"fr-FR":`Plante-2`,"id-ID":`Tanaman-2`,"it-IT":`Pianta-2`,"ja-JP":`植物-2`,"ko-KR":`식물-2`,"ms-MY":`Tumbuhan-2`,"nl-NL":`Planten - 2`,"pl-PL":`Roślina-2`,"pt-PT":`Planta-2`,"sr-Cyrl":`Биљка-2`,"vi-VN":`Cây-2`,"zh-CN":`植物-2`,"zh-TW":`植物-2`},"西厨-1":{"de-DE":`Küche-3`,"en-US":`Kitchen-3`,"es-ES":`cocina-3`,"fr-FR":`cuisine-3`,"id-ID":`Dapur-3`,"it-IT":`cucina-3`,"ja-JP":`西洋キッチン-1`,"ko-KR":`셰프-1`,"ms-MY":`Dapur-3`,"nl-NL":`Keuken - 1`,"pl-PL":`kuchnia-3`,"pt-PT":`cozinha-3`,"sr-Cyrl":`Кухиња-3`,"vi-VN":`bếp-3`,"zh-CN":`西厨-1`,"zh-TW":`西廚-1`},"西厨-2":{"de-DE":`Küche-4`,"en-US":`Kitchen-4`,"es-ES":`cocina-4`,"fr-FR":`cuisine-4`,"id-ID":`Dapur-4`,"it-IT":`cucina-4`,"ja-JP":`西洋キッチン-2`,"ko-KR":`셰프-2`,"ms-MY":`Dapur-4`,"nl-NL":`Keuken 4`,"pl-PL":`kuchnia-4`,"pt-PT":`cozinha-4`,"sr-Cyrl":`Кухиња-4`,"vi-VN":`bếp-4`,"zh-CN":`西厨-2`,"zh-TW":`西廚-2`},"浴缸-1":{"de-DE":`Badewanne-1`,"en-US":`Bathtub-1`,"es-ES":`Baño-1`,"fr-FR":`Baignoire-1`,"id-ID":`Bak mandi-1`,"it-IT":`Vasca da bagno-1`,"ja-JP":`バスタブ-1`,"ko-KR":`욕조-1`,"ms-MY":`Tab mandi-1`,"nl-NL":`Bad-1`,"pl-PL":`Wanna-1`,"pt-PT":`Banheira-1`,"sr-Cyrl":`Када-1`,"vi-VN":`Bồn tắm-1`,"zh-CN":`浴缸-1`,"zh-TW":`浴缸-1`},"植物-3":{"de-DE":`Pflanze-3`,"en-US":`Plant-3`,"es-ES":`Planta-3`,"fr-FR":`Plante-3`,"id-ID":`Tanaman-3`,"it-IT":`Pianta-3`,"ja-JP":`植物-3`,"ko-KR":`식물-3`,"ms-MY":`Tumbuhan-3`,"nl-NL":`Planten - 3`,"pl-PL":`Roślina-3`,"pt-PT":`Planta-3`,"sr-Cyrl":`Биљка-3`,"vi-VN":`Cây-3`,"zh-CN":`植物-3`,"zh-TW":`植物-3`},"书桌-2":{"de-DE":`Schreibtisch-2`,"en-US":`Desk-2`,"es-ES":`Escritorio-2`,"fr-FR":`Bureau-2`,"id-ID":`Meja-2`,"it-IT":`Scrivania-2`,"ja-JP":`机-2`,"ko-KR":`책상-2`,"ms-MY":`Meja-2`,"nl-NL":`Bureau - 2`,"pl-PL":`Biurko-2`,"pt-PT":`Mesa de escritório-2`,"sr-Cyrl":`Сто-2`,"vi-VN":`Bàn làm việc-2`,"zh-CN":`书桌-2`,"zh-TW":`書桌-2`},吧台:{"de-DE":`Bartheke`,"en-US":`Bar counter`,"es-ES":`barra`,"fr-FR":`comptoir de bar`,"id-ID":`Meja bar`,"it-IT":`bancone del bar`,"ja-JP":`カウンター`,"ko-KR":`바`,"ms-MY":`Kaunter bar`,"nl-NL":`De bar`,"pl-PL":`bar`,"pt-PT":`barra`,"sr-Cyrl":`Шанк`,"vi-VN":`quầy bar`,"zh-CN":`吧台`,"zh-TW":`吧檯`},"书柜-短":{"de-DE":`Bücherregal - kurz`,"en-US":`Bookcase - short`,"es-ES":`Librero - corto`,"fr-FR":`Étagère à livres - courte`,"id-ID":`Rak buku - pendek`,"it-IT":`Libreria - corta`,"ja-JP":`本棚-短い`,"ko-KR":`책장 - 짧은`,"ms-MY":`Rak buku - pendek`,"nl-NL":`Boekenkast - Kort`,"pl-PL":`Regał na książki - krótki`,"pt-PT":`Estante de livros - curto`,"sr-Cyrl":`Књижара - кратка`,"vi-VN":`Tủ sách - ngắn`,"zh-CN":`书柜-短`,"zh-TW":`書櫃-短`},"鞋柜-长":{"de-DE":`Schuhschrank-lang`,"en-US":`Shoe cabinet-long`,"es-ES":`Zapatero-largo`,"fr-FR":`Meuble à chaussures-long`,"id-ID":`Lemari sepatu-panjang`,"it-IT":`Scarpiera-lunga`,"ja-JP":`靴箱-長尺`,"ko-KR":`신발장-긴`,"ms-MY":`Kabinet kasut-panjang`,"nl-NL":`Schoenkast-lang`,"pl-PL":`Szafka na buty-długa`,"pt-PT":`Sapateira-longa`,"sr-Cyrl":`Орман за обућу-дуг`,"vi-VN":`Tủ giày - dài`,"zh-CN":`鞋柜-长`,"zh-TW":`鞋櫃-長`},"鞋柜-短":{"de-DE":`Schuhschrank-kurz`,"en-US":`Shoe cabinet-short`,"es-ES":`Zapatero-corto`,"fr-FR":`Meuble à chaussures-court`,"id-ID":`Lemari sepatu-pendek`,"it-IT":`Scarpiera-corta`,"ja-JP":`靴箱-短い`,"ko-KR":`신발장-짧아`,"ms-MY":`Kabinet kasut-pendek`,"nl-NL":`Schoenkast-Kort`,"pl-PL":`Szafka na buty-krótka`,"pt-PT":`Sapateira-curta`,"sr-Cyrl":`Орман за обућу-кратак`,"vi-VN":`Tủ giày - ngắn`,"zh-CN":`鞋柜-短`,"zh-TW":`鞋櫃-短`},"中厨-2":{"de-DE":`Küche - 2`,"en-US":`Kitchen - 2`,"es-ES":`Cocina - 2`,"fr-FR":`Cuisine - 2`,"id-ID":`Dapur - 2`,"it-IT":`Cucina - 2`,"ja-JP":`キッチン-2`,"ko-KR":`중요리-2`,"ms-MY":`Dapur - 2`,"nl-NL":`Keuken - 2`,"pl-PL":`Kuchnia - 2`,"pt-PT":`Cozinha - 2`,"sr-Cyrl":`Кухиња - 2`,"vi-VN":`Nhà bếp - 2`,"zh-CN":`中厨-2`,"zh-TW":`中廚-2`},椅子:{"de-DE":`Stuhl`,"en-US":`chair`,"es-ES":`silla`,"fr-FR":`chaise`,"id-ID":`kursi`,"it-IT":`sedia`,"ja-JP":`いす`,"ko-KR":`의자`,"ms-MY":`Kerusi`,"nl-NL":`Stoelen`,"pl-PL":`krzesło`,"pt-PT":`cadeira`,"sr-Cyrl":`Столица`,"vi-VN":`ghế`,"zh-CN":`椅子`,"zh-TW":`椅子`},秋千:{"de-DE":`Schaukel`,"en-US":`Swing`,"es-ES":`columpio`,"fr-FR":`balançoire`,"id-ID":`Ayunan`,"it-IT":`altalena`,"ja-JP":`ぶらんこ`,"ko-KR":`그네`,"ms-MY":`Buaian`,"nl-NL":`Schakelaar`,"pl-PL":`huśtawka`,"pt-PT":`balanço`,"sr-Cyrl":`Љуљашка`,"vi-VN":`xích đu`,"zh-CN":`秋千`,"zh-TW":`秋千`},茶几:{"de-DE":`Teetisch`,"en-US":`Tea table`,"es-ES":`mesa de té`,"fr-FR":`table basse`,"id-ID":`Meja teh`,"it-IT":`tavolino da tè`,"ja-JP":`茶托`,"ko-KR":`찻상`,"ms-MY":`Meja teh`,"nl-NL":`theetafel`,"pl-PL":`stolik kawowy`,"pt-PT":`mesa de chá`,"sr-Cyrl":`Чајни сто`,"vi-VN":`bàn trà`,"zh-CN":`茶几`,"zh-TW":`茶几`},庭院:{"de-DE":`Hof`,"en-US":`YARD`,"es-ES":`Patio`,"fr-FR":`Jardin`,"id-ID":`Teras`,"it-IT":`Cortile`,"ja-JP":`庭`,"ko-KR":`정원`,"ms-MY":`Laman`,"nl-NL":`Tuin`,"pl-PL":`Taras`,"pt-PT":`Pátio`,"sr-Cyrl":`Тераса`,"vi-VN":`Sân`,"zh-CN":`庭院`,"zh-TW":`庭院`},躺椅:{"de-DE":`Liegestuhl`,"en-US":`Deck chair`,"es-ES":`silla de cubierta`,"fr-FR":`chaise longue`,"id-ID":`Kursi dek`,"it-IT":`sedia sdraio`,"ja-JP":`寝椅子`,"ko-KR":`벤치`,"ms-MY":`Kerusi dek`,"nl-NL":`Ligstoelen`,"pl-PL":`leżak`,"pt-PT":`cadeira de convés`,"sr-Cyrl":`Лежаљка`,"vi-VN":`ghế tắm nắng`,"zh-CN":`躺椅`,"zh-TW":`躺椅`},钢琴:{"de-DE":`Klavier`,"en-US":`Piano`,"es-ES":`piano`,"fr-FR":`piano`,"id-ID":`Pianoforte`,"it-IT":`pianoforte`,"ja-JP":`ピアノ`,"ko-KR":`피아노`,"ms-MY":`Piano`,"nl-NL":`De piano`,"pl-PL":`pianino`,"pt-PT":`piano`,"sr-Cyrl":`Клавир`,"vi-VN":`đàn piano`,"zh-CN":`钢琴`,"zh-TW":`鋼琴`},音响:{"de-DE":`Klang`,"en-US":`Sound`,"es-ES":`sonido`,"fr-FR":`son`,"id-ID":`Suara`,"it-IT":`suono`,"ja-JP":`サウンドスピーカー`,"ko-KR":`음향`,"ms-MY":`Bunyi`,"nl-NL":`Geluid`,"pl-PL":`dźwięk`,"pt-PT":`som`,"sr-Cyrl":`Звук`,"vi-VN":`âm thanh`,"zh-CN":`音响`,"zh-TW":`音響`},马桶:{"de-DE":`Spültoilette`,"en-US":`Flush toilet`,"es-ES":`Inodoro con descarga`,"fr-FR":`toilettes à chasse d'eau`,"id-ID":`Toilet siram`,"it-IT":`WC a sciacquone`,"ja-JP":`水洗式便所`,"ko-KR":`변기`,"ms-MY":`Tandas pam`,"nl-NL":`Toiletjes`,"pl-PL":`spłuczka toaletowa`,"pt-PT":`Sanita com descarga`,"sr-Cyrl":`ВЦ шоља`,"vi-VN":`Bồn cầu xả`,"zh-CN":`马桶`,"zh-TW":`馬桶`},"植物-5":{"de-DE":`Pflanze-5`,"en-US":`Plant-5`,"es-ES":`Planta-5`,"fr-FR":`Plante-5`,"id-ID":`Tanaman-5`,"it-IT":`Pianta-5`,"ja-JP":`植物-5`,"ko-KR":`식물-5`,"ms-MY":`Tumbuhan-5`,"nl-NL":`Planten - 5`,"pl-PL":`Roślina-5`,"pt-PT":`Planta-5`,"sr-Cyrl":`Биљка-5`,"vi-VN":`Cây-5`,"zh-CN":`植物-5`,"zh-TW":`植物-5`},"书柜-长":{"de-DE":`Bücherregal - lang`,"en-US":`Bookcase - long`,"es-ES":`Librero - largo`,"fr-FR":`Étagère à livres - longue`,"id-ID":`Rak buku - panjang`,"it-IT":`Libreria - lunga`,"ja-JP":`本棚-ロング`,"ko-KR":`책장-장`,"ms-MY":`Rak buku - panjang`,"nl-NL":`Boekenkast - Lange`,"pl-PL":`Regał na książki - długi`,"pt-PT":`Estante de livros - longo`,"sr-Cyrl":`Дугачка полица за књиге`,"vi-VN":`Tủ sách - dài`,"zh-CN":`书柜-长`,"zh-TW":`書櫃-長`},"燃气灶-1":{"de-DE":`Gasherd - 1`,"en-US":`Gas stove - 1`,"es-ES":`Cocina de gas - 1`,"fr-FR":`Cuisinière à gaz - 1`,"id-ID":`Kompor gas - 1`,"it-IT":`Fornello a gas - 1`,"ja-JP":`ガスレンジ-1`,"ko-KR":`가스레인지-1`,"ms-MY":`Dapur gas - 1`,"nl-NL":`Gaskachel-1`,"pl-PL":`Kuchenka gazowa - 1`,"pt-PT":`Fogão a gás - 1`,"sr-Cyrl":`Гасни шпорет - 1`,"vi-VN":`Bếp ga - 1`,"zh-CN":`燃气灶-1`,"zh-TW":`瓦斯爐-1`},"洗脸池-单":{"de-DE":`Waschbecken - Einzel`,"en-US":`Wash basin - Single`,"es-ES":`Lavamanos - Único`,"fr-FR":`Lavabo - Simple`,"id-ID":`Wastafel - Tunggal`,"it-IT":`Lavabo - Singolo`,"ja-JP":`洗面台-単`,"ko-KR":`세면대 - 싱글`,"ms-MY":`Besin basuh - Tunggal`,"nl-NL":`Wasbak - Enkel`,"pl-PL":`Umywalka - Jedna`,"pt-PT":`Lavatório - Único`,"sr-Cyrl":`Умиваоник - Један`,"vi-VN":`Bồn rửa mặt - Đơn`,"zh-CN":`洗脸池-单`,"zh-TW":`洗臉池-單`},"洗手池-单":{"de-DE":`Waschbecken - Einzel`,"en-US":`Sink - Single`,"es-ES":`Fregadero - Individual`,"fr-FR":`Évier - Simple`,"id-ID":`Bak cuci - Tunggal`,"it-IT":`Lavello - Singolo`,"ja-JP":`手洗い-単`,"ko-KR":`화장실 - 싱글`,"ms-MY":`Sinki - Tunggal`,"nl-NL":`Wasbad - enkelvoudig`,"pl-PL":`Zlew - Pojedynczy`,"pt-PT":`Pia - Individual`,"sr-Cyrl":`Судопера - Једна`,"vi-VN":`Bồn rửa - Đơn`,"zh-CN":`洗手池-单`,"zh-TW":`洗手台-單`},"双人床-4":{"de-DE":`Doppelbett-4`,"en-US":`Double bed-4`,"es-ES":`Cama doble-4`,"fr-FR":`Lit double-4`,"id-ID":`Kasur ganda-4`,"it-IT":`Letto doppio-4`,"ja-JP":`ダブルベッド-4`,"ko-KR":`더블침대-4`,"ms-MY":`Katil double-4`,"nl-NL":`Tweepersoonsbed-4`,"pl-PL":`Łóżko podwójne-4`,"pt-PT":`Cama dupla-4`,"sr-Cyrl":`Брачни кревет-4`,"vi-VN":`Giường đôi-4`,"zh-CN":`双人床-4`,"zh-TW":`雙人床-4`},"电视柜-短":{"de-DE":`TV-Schrank - kurz`,"en-US":`TV cabinet - short`,"es-ES":`Mueble de TV - corto`,"fr-FR":`Meuble TV - court`,"id-ID":`Rak TV - pendek`,"it-IT":`Mobile TV - corto`,"ja-JP":`テレビ台 - ショート`,"ko-KR":`TV장 - 짧은`,"ms-MY":`Kabinet TV - pendek`,"nl-NL":`TV-kast - kort`,"pl-PL":`Szafka RTV - mała`,"pt-PT":`Móvel de TV - curto`,"sr-Cyrl":`ТВ орман - кратак`,"vi-VN":`Tủ TV - ngắn`,"zh-CN":`电视柜-短`,"zh-TW":`電視櫃-短`},"储物柜-1":{"de-DE":`Schließfach-1`,"en-US":`Locker-1`,"es-ES":`Taquilla-1`,"fr-FR":`Casier-1`,"id-ID":`Loker-1`,"it-IT":`Armadietto-1`,"ja-JP":`ロッカー-1`,"ko-KR":`캐비닛-1`,"ms-MY":`Loker-1`,"nl-NL":`Kasten - 1`,"pl-PL":`Szafka-1`,"pt-PT":`Armário-1`,"sr-Cyrl":`Ормарић-1`,"vi-VN":`Tủ-1`,"zh-CN":`储物柜-1`,"zh-TW":`儲物櫃-1`},"双人床-3":{"de-DE":`Doppelbett-3`,"en-US":`Double bed-3`,"es-ES":`Cama doble-3`,"fr-FR":`Lit double-3`,"id-ID":`Kasur ganda-3`,"it-IT":`Letto doppio-3`,"ja-JP":`ダブルベッド-3`,"ko-KR":`더블침대-3`,"ms-MY":`Katil double-3`,"nl-NL":`Tweepersoonsbed-3`,"pl-PL":`Łóżko podwójne-3`,"pt-PT":`Cama dupla-3`,"sr-Cyrl":`Брачни кревет-3`,"vi-VN":`Giường đôi-3`,"zh-CN":`双人床-3`,"zh-TW":`雙人床-3`},"双人床-2":{"de-DE":`Doppelbett-2`,"en-US":`Double bed-2`,"es-ES":`Cama doble-2`,"fr-FR":`Lit double-2`,"id-ID":`Kasur ganda-2`,"it-IT":`Letto doppio-2`,"ja-JP":`ダブルベッド-2`,"ko-KR":`더블침대-2`,"ms-MY":`Katil double-2`,"nl-NL":`Tweepersoonsbed-2`,"pl-PL":`Łóżko podwójne-2`,"pt-PT":`Cama dupla-2`,"sr-Cyrl":`Брачни кревет-2`,"vi-VN":`Giường đôi-2`,"zh-CN":`双人床-2`,"zh-TW":`雙人床-2`},"洗手池-双":{"de-DE":`Waschbecken - Doppel`,"en-US":`Sink - Double`,"es-ES":`Fregadero - Doble`,"fr-FR":`Évier - Double`,"id-ID":`Bak cuci - Ganda`,"it-IT":`Lavello - Doppio`,"ja-JP":`手洗い-ダブル`,"ko-KR":`화장실 - 듀얼`,"ms-MY":`Sinki - Kembar`,"nl-NL":`Wasbad - tweepersoons`,"pl-PL":`Zlew - Podwójny`,"pt-PT":`Pia - Dupla`,"sr-Cyrl":`Судопера - Дупла`,"vi-VN":`Bồn rửa - Đôi`,"zh-CN":`洗手池-双`,"zh-TW":`洗手台-雙`},"洗脸池-双":{"de-DE":`Waschbecken - Doppel`,"en-US":`Wash basin - Double`,"es-ES":`Lavamanos - Doble`,"fr-FR":`Lavabo - Double`,"id-ID":`Wastafel - Ganda`,"it-IT":`Lavabo - Doppio`,"ja-JP":`洗面台-ダブル`,"ko-KR":`세면대 - 더블`,"ms-MY":`Basin cuci - Double`,"nl-NL":`Wasbak - Dubbel`,"pl-PL":`Umywalka - Podwójna`,"pt-PT":`Lavatório - Duplo`,"sr-Cyrl":`Умиваоник - Дупли`,"vi-VN":`Bồn rửa mặt - Đôi`,"zh-CN":`洗脸池-双`,"zh-TW":`洗臉池-雙`},"双人床(无床头柜)-1":{"de-DE":`Doppelbett ohne Tisch-1`,"en-US":`Double bed no table-1`,"es-ES":`Cama doble sin mesa-1`,"fr-FR":`Lit double sans table-1`,"id-ID":`Kasur ganda tanpa meja - 1`,"it-IT":`Letto doppio senza tavolo-1`,"ja-JP":`ダブルベッドテーブルなし-1`,"ko-KR":`더블 침대 (협탁 없음)-1`,"ms-MY":`Katil double tanpa meja-1`,"nl-NL":`Tweepersoonsbed zonder tafel-1`,"pl-PL":`Podwójne łóżko bez stołu-1`,"pt-PT":`Cama dupla sem mesa-1`,"sr-Cyrl":`Брачни кревет без стола-1`,"vi-VN":`Giường đôi không bàn-1`,"zh-CN":`双人床(无床头柜)-1`,"zh-TW":`雙人床(無床頭櫃)-1`},"电视柜-长":{"de-DE":`TV-Schrank - lang`,"en-US":`TV cabinet - long`,"es-ES":`Mueble de TV - largo`,"fr-FR":`Meuble TV - long`,"id-ID":`Rak TV - panjang`,"it-IT":`Mobile TV - lungo`,"ja-JP":`テレビ台 - ロング`,"ko-KR":`TV장 - 긴`,"ms-MY":`Kabinet TV - panjang`,"nl-NL":`TV-kast - Lange`,"pl-PL":`Szafka RTV - długa`,"pt-PT":`Móvel de TV - longo`,"sr-Cyrl":`ТВ ормарић - дугачак`,"vi-VN":`Tủ TV - dài`,"zh-CN":`电视柜-长`,"zh-TW":`電視櫃-長`},洽谈桌组合:{"de-DE":`Besprechungstisch-Set`,"en-US":`Meeting Table Set`,"es-ES":`Mesa de reunión`,"fr-FR":`Ensemble de table de réunion`,"id-ID":`Mengatur tabel`,"it-IT":`Set da tavolo riunioni`,"ja-JP":`会議用テーブルセット`,"ko-KR":`회의 테이블 세트`,"ms-MY":`Set Meja Mesyuarat`,"nl-NL":`Vergadertafelset`,"pl-PL":`Zestaw stołów konferencyjnych`,"pt-PT":`Conjunto de Mesa de Reunião`,"sr-Cyrl":`Сет за конференцијски сто`,"vi-VN":`Bộ bàn họp`,"zh-CN":`洽谈桌组合`,"zh-TW":`洽談桌組合`},哑铃架:{"de-DE":`Hantelständer`,"en-US":`Dumbbell rack`,"es-ES":`Soporte para mancuernas`,"fr-FR":`Rack d'haltères`,"id-ID":`Rak dumbbell`,"it-IT":`Rack per manubri`,"ja-JP":`ダンベル?スタンド`,"ko-KR":`아령틀`,"ms-MY":`Rak dumbbell`,"nl-NL":`Hangel houder`,"pl-PL":`Stojak na hantle`,"pt-PT":`Suporte para halteres`,"sr-Cyrl":`Сталак за тегове`,"vi-VN":`Giá đựng tạ`,"zh-CN":`哑铃架`,"zh-TW":`啞鈴架`},"沙发组合-1":{"de-DE":`Sofaset-1`,"en-US":`Sofa set-1`,"es-ES":`Set de sofás-1`,"fr-FR":`Ensemble de sofas-1`,"id-ID":`Set sofa-1`,"it-IT":`Divano set-1`,"ja-JP":`ソファセット-1`,"ko-KR":`소파 세트-1`,"ms-MY":`Set sofa-1`,"nl-NL":`Zitmeubelset - 1`,"pl-PL":`Zestaw sof-1`,"pt-PT":`Conjunto de sofás-1`,"sr-Cyrl":`Софа сет-1`,"vi-VN":`Bộ sofa-1`,"zh-CN":`沙发组合-1`,"zh-TW":`沙發組合-1`},"游泳池-2":{"de-DE":`Schwimmbad-2`,"en-US":`Swimming pool-2`,"es-ES":`Piscina-2`,"fr-FR":`Piscine-2`,"id-ID":`Kolam renang-2`,"it-IT":`Piscina-2`,"ja-JP":`プール-2`,"ko-KR":`수영장-2`,"ms-MY":`Kolam renang-2`,"nl-NL":`Zwembad - 2`,"pl-PL":`Basen-2`,"pt-PT":`Piscina-2`,"sr-Cyrl":`Базен-2`,"vi-VN":`Hồ bơi-2`,"zh-CN":`游泳池-2`,"zh-TW":`游泳池-2`},美人榻:{"de-DE":`Schönheitssofa`,"en-US":`Beauty couch`,"es-ES":`Sofá de belleza`,"fr-FR":`Canapé de beauté`,"id-ID":`Kasur kecantikan`,"it-IT":`Divano di bellezza`,"ja-JP":`美しい寝床`,"ko-KR":`미인상`,"ms-MY":`Kerusi kecantikan`,"nl-NL":`Schoonheidsbed`,"pl-PL":`Sofa piękności`,"pt-PT":`Sofá de beleza`,"sr-Cyrl":`Кревет за лепоту`,"vi-VN":`Ghế sofa đẹp`,"zh-CN":`美人榻`,"zh-TW":`美人榻`},"单人床(无床头柜)":{"de-DE":`Einzelbett`,"en-US":`Single bed`,"es-ES":`Cama individual`,"fr-FR":`Lit simple`,"id-ID":`Tempat tidur tunggal`,"it-IT":`Letto singolo`,"ja-JP":`シングルベッド`,"ko-KR":`싱글 침대 (협탁 없음)`,"ms-MY":`Katil single`,"nl-NL":`Eenpersoonsbed`,"pl-PL":`Łóżko pojedyncze`,"pt-PT":`Cama de solteiro`,"sr-Cyrl":`Једнокреветни кревет`,"vi-VN":`Giường đơn`,"zh-CN":`单人床(无床头柜)`,"zh-TW":`單人床(無床頭櫃)`},"沙发组合-2":{"de-DE":`Sofaset-2`,"en-US":`Sofa set-2`,"es-ES":`Set de sofás-2`,"fr-FR":`Ensemble de sofas-2`,"id-ID":`Set sofa-2`,"it-IT":`Divano set-2`,"ja-JP":`ソファセット-2`,"ko-KR":`소파 세트-2`,"ms-MY":`Set sofa-2`,"nl-NL":`Zitmeubelset-2`,"pl-PL":`Zestaw sof-2`,"pt-PT":`Conjunto de sofás-2`,"sr-Cyrl":`Софа сет-2`,"vi-VN":`Bộ sofa-2`,"zh-CN":`沙发组合-2`,"zh-TW":`沙發組合-2`},跑步机:{"de-DE":`Laufband`,"en-US":`Treadmill`,"es-ES":`Cinta de correr`,"fr-FR":`Tapis de course`,"id-ID":`Alat lari`,"it-IT":`Tapis roulant`,"ja-JP":`ランニングマシン`,"ko-KR":`러닝머신`,"ms-MY":`Alat larian`,"nl-NL":`Loopbaan`,"pl-PL":`Bieżnia`,"pt-PT":`Esteira`,"sr-Cyrl":`Трака за трчање`,"vi-VN":`Máy chạy bộ`,"zh-CN":`跑步机`,"zh-TW":`跑步機`},"储物柜-3":{"de-DE":`Schließfach-3`,"en-US":`Locker-3`,"es-ES":`Taquilla-3`,"fr-FR":`Casier-3`,"id-ID":`Loker-3`,"it-IT":`Armadietto-3`,"ja-JP":`ロッカー-3`,"ko-KR":`사물함 - 3`,"ms-MY":`Loker-3`,"nl-NL":`Kasten - 3`,"pl-PL":`Szafka-3`,"pt-PT":`Armário-3`,"sr-Cyrl":`Ормарић-3`,"vi-VN":`Tủ-3`,"zh-CN":`储物柜-3`,"zh-TW":`儲物櫃-3`},"洗菜池-1":{"de-DE":`Küchenspüle - 1`,"en-US":`Sink-1`,"es-ES":`Fregadero de cocina - 1`,"fr-FR":`Évier de cuisine - 1`,"id-ID":`Wastafel-1`,"it-IT":`Lavello della cucina - 1`,"ja-JP":`野菜洗い場-1`,"ko-KR":`세채지-1`,"ms-MY":`Sink-1`,"nl-NL":`Wastafel - 1`,"pl-PL":`Zlew kuchenny - 1`,"pt-PT":`Pia de cozinha - 1`,"sr-Cyrl":`Судопера-1`,"vi-VN":`Bồn rửa rau - 1`,"zh-CN":`洗菜池-1`,"zh-TW":`洗菜池-1`},"组合沙发-4":{"de-DE":`Sofaset-4`,"en-US":`Sofa set-4`,"es-ES":`Set de sofás-4`,"fr-FR":`Ensemble de sofas-4`,"id-ID":`Set sofa-4`,"it-IT":`Divano set-4`,"ja-JP":`ソファセット-4`,"ko-KR":`소파 세트-4`,"ms-MY":`Set sofa-4`,"nl-NL":`Zitmeubelset-4`,"pl-PL":`Zestaw sof-4`,"pt-PT":`Conjunto de sofás-4`,"sr-Cyrl":`Софа сет-4`,"vi-VN":`Bộ sofa-4`,"zh-CN":`沙发组合-4`,"zh-TW":`組合沙發-4`},台球桌:{"de-DE":`Billardtisch`,"en-US":`Pool table`,"es-ES":`mesa de billar`,"fr-FR":`table de billard`,"id-ID":`Meja biliar`,"it-IT":`tavolo da biliardo`,"ja-JP":`ビリヤード台`,"ko-KR":`당구대`,"ms-MY":`Meja pool`,"nl-NL":`Billardtafel`,"pl-PL":`stół bilardowy`,"pt-PT":`mesa de bilhar`,"sr-Cyrl":`Сто за билијар`,"vi-VN":`bàn bi-a`,"zh-CN":`台球桌`,"zh-TW":`台球桌`},"置物台-1":{"de-DE":`Regal-1`,"en-US":`Shelf-1`,"es-ES":`Estantería-1`,"fr-FR":`Étagère-1`,"id-ID":`Rak-1`,"it-IT":`Scaffale-1`,"ja-JP":`物置台-1`,"ko-KR":`치물대-1`,"ms-MY":`Rak-1`,"nl-NL":`Voorraad - 1`,"pl-PL":`Półka-1`,"pt-PT":`Prateleira-1`,"sr-Cyrl":`Полица-1`,"vi-VN":`Kệ-1`,"zh-CN":`置物台-1`,"zh-TW":`置物台-1`},"储物柜-2":{"de-DE":`Schließfach-2`,"en-US":`Locker-2`,"es-ES":`Taquilla-2`,"fr-FR":`Casier-2`,"id-ID":`Loker-2`,"it-IT":`Armadietto-2`,"ja-JP":`ロッカー-2`,"ko-KR":`사물함-2`,"ms-MY":`Loker-2`,"nl-NL":`Kasten - 2`,"pl-PL":`Szafka-2`,"pt-PT":`Armário-2`,"sr-Cyrl":`Ормарић-2`,"vi-VN":`Tủ-2`,"zh-CN":`储物柜-2`,"zh-TW":`儲物櫃-2`},户外桌椅:{"de-DE":`Outdoor-Tische & Stühle`,"en-US":`Outdoor Tables & Chairs`,"es-ES":`Mesas y sillas de exterior`,"fr-FR":`Tables et chaises d'extérieur`,"id-ID":`Meja & Kursi Luar Ruangan`,"it-IT":`Tavoli e Sedie da Esterno`,"ja-JP":`屋外のテーブルと椅子`,"ko-KR":`야외 탁자와 의자`,"ms-MY":`Meja dan kerusi luar`,"nl-NL":`Buiten Tafels & Stoelen`,"pl-PL":`Stoły i krzesła ogrodowe`,"pt-PT":`Mesas e Cadeiras de Exterior`,"sr-Cyrl":`Баштенски столови и столице`,"vi-VN":`Bàn ghế ngoài trời`,"zh-CN":`户外桌椅`,"zh-TW":`戶外桌椅`},"洗衣机-1":{"de-DE":`Waschmaschine - 1`,"en-US":`Washing machine - 1`,"es-ES":`Lavadora - 1`,"fr-FR":`Machine à laver - 1`,"id-ID":`Mesin cuci - 1`,"it-IT":`Lavatrice - 1`,"ja-JP":`洗濯機-1`,"ko-KR":`세탁기-1`,"ms-MY":`Mesin basuh - 1`,"nl-NL":`Wasmachine - 1`,"pl-PL":`Pralka - 1`,"pt-PT":`Máquina de lavar roupa - 1`,"sr-Cyrl":`Машина за прање веша - 1`,"vi-VN":`Máy giặt - 1`,"zh-CN":`洗衣机-1`,"zh-TW":`洗衣機-1`},"双人床-1":{"de-DE":`Doppelbett-1`,"en-US":`Double bed-1`,"es-ES":`Cama doble-1`,"fr-FR":`Lit double-1`,"id-ID":`Kasur ganda-1`,"it-IT":`Letto doppio-1`,"ja-JP":`ダブルベッド-1`,"ko-KR":`더블침대-1`,"ms-MY":`Katil double-1`,"nl-NL":`Tweepersoonsbed-1`,"pl-PL":`Łóżko podwójne-1`,"pt-PT":`Cama dupla-1`,"sr-Cyrl":`Брачни кревет-1`,"vi-VN":`Giường đôi-1`,"zh-CN":`双人床-1`,"zh-TW":`雙人床-1`},六人餐桌:{"de-DE":`Tisch für 6 Personen`,"en-US":`6 person table`,"es-ES":`Mesa de 6 personas`,"fr-FR":`Table pour 6 personnes`,"id-ID":`Meja untuk 6 orang`,"it-IT":`Tavolo per 6 persone`,"ja-JP":`六人のテーブル`,"ko-KR":`식탁 6 인`,"ms-MY":`Meja 6 orang`,"nl-NL":`Tafel voor zes personen`,"pl-PL":`Stół dla 6 osób`,"pt-PT":`Mesa de 6 pessoas`,"sr-Cyrl":`Сто за 6 особа`,"vi-VN":`Bàn 6 người`,"zh-CN":`六人餐桌`,"zh-TW":`六人餐桌`},洽谈沙发椅:{"de-DE":`Sofastuhl`,"en-US":`Sofa chair`,"es-ES":`sillón sofá`,"fr-FR":`chaise de canapé`,"id-ID":`Kursi sofa`,"it-IT":`sedia da divano`,"ja-JP":`ソファチェア`,"ko-KR":`상담 소파 의자`,"ms-MY":`Kerusi sofa`,"nl-NL":`Slaapbank bespreken`,"pl-PL":`krzesło do kanapy`,"pt-PT":`cadeira de sofá`,"sr-Cyrl":`Фотеља`,"vi-VN":`ghế sofa`,"zh-CN":`洽谈沙发椅`,"zh-TW":`沙發椅`},三人沙发:{"de-DE":`Dreisitzer-Sofa`,"en-US":`Three-seat sofa`,"es-ES":`Sofá de tres plazas`,"fr-FR":`canapé trois places`,"id-ID":`Sofa tiga dudukan`,"it-IT":`divano a tre posti`,"ja-JP":`三人掛けソファ`,"ko-KR":`3인용 소파`,"ms-MY":`Sofa tiga tempat duduk`,"nl-NL":`Bank voor drie personen`,"pl-PL":`sofa trzyosobowa`,"pt-PT":`Sofá de três lugares`,"sr-Cyrl":`Тросед`,"vi-VN":`Ghế sofa ba chỗ`,"zh-CN":`三人沙发`,"zh-TW":`三人沙發`},会客桌:{"de-DE":`Empfangstisch`,"en-US":`Reception table`,"es-ES":`Mesa de recepción`,"fr-FR":`Table de réception`,"id-ID":`Meja resepsionis`,"it-IT":`Tavolo d'accoglienza`,"ja-JP":`受付テーブル`,"ko-KR":`면회 테이블`,"ms-MY":`Meja penerimaan`,"nl-NL":`Vergadertafel`,"pl-PL":`Stół recepcyjny`,"pt-PT":`Mesa de recepção`,"sr-Cyrl":`Пријемни сто`,"vi-VN":`Bàn tiếp đón`,"zh-CN":`会客桌`,"zh-TW":`會客桌`},健身机:{"de-DE":`Fitnessgerät`,"en-US":`Fitness machine`,"es-ES":`Equipo de fitness`,"fr-FR":`Appareil d'exercice`,"id-ID":`Mesin kebugaran`,"it-IT":`Macchina fitness`,"ja-JP":`フィットネスマシン`,"ko-KR":`헬스 머신`,"ms-MY":`Mesin kecergasan`,"nl-NL":`Fitnessmachines`,"pl-PL":`Maszyna do fitnessu`,"pt-PT":`Máquina de fitness`,"sr-Cyrl":`Фитнес машина`,"vi-VN":`Máy tập thể dục`,"zh-CN":`健身机`,"zh-TW":`健身機`},"沙发组合-3":{"de-DE":`Sofaset-3`,"en-US":`Sofa set-3`,"es-ES":`Set de sofás-3`,"fr-FR":`Ensemble de sofas-3`,"id-ID":`Set sofa-3`,"it-IT":`Divano set-3`,"ja-JP":`ソファセット-3`,"ko-KR":`소파 세트-3`,"ms-MY":`Set sofa-3`,"nl-NL":`Zitmeubelset-3`,"pl-PL":`Zestaw sof-3`,"pt-PT":`Conjunto de sofás-3`,"sr-Cyrl":`Софа сет-3`,"vi-VN":`Bộ sofa-3`,"zh-CN":`沙发组合-3`,"zh-TW":`沙發組合-3`},双开冰箱:{"de-DE":`Doppelkühlschrank`,"en-US":`Double refrigerator`,"es-ES":`Doble refrigerador`,"fr-FR":`Réfrigérateur double`,"id-ID":`Kulkas ganda`,"it-IT":`Frigo doppio`,"ja-JP":`二扉式冷蔵庫`,"ko-KR":`냉장고를 더블로 열다`,"ms-MY":`Peti sejuk double`,"nl-NL":`Dubbele koelkast`,"pl-PL":`Podwójna lodówka`,"pt-PT":`Frigorífico duplo`,"sr-Cyrl":`Дупли фрижидер`,"vi-VN":`Tủ lạnh kép`,"zh-CN":`双开冰箱`,"zh-TW":`雙開冰箱`},车库工具箱:{"de-DE":`Garagenwerkzeugkasten`,"en-US":`Garage toolbox`,"es-ES":`Herramientas de garaje`,"fr-FR":`Boîte à outils de garage`,"id-ID":`Kotak alat garasi`,"it-IT":`Cassetta degli attrezzi da garage`,"ja-JP":`ガレージキット`,"ko-KR":`차고 도구 상자`,"ms-MY":`Kotak alat garaj`,"nl-NL":`Garage gereedschapskist`,"pl-PL":`Skrzynka narzędziowa do garażu`,"pt-PT":`Caixa de ferramentas de garagem`,"sr-Cyrl":`Гаражни алат`,"vi-VN":`Hộp dụng cụ gara`,"zh-CN":`车库工具箱`,"zh-TW":`車庫工具箱`},"储物柜-4":{"de-DE":`Schließfach-4`,"en-US":`Locker-4`,"es-ES":`Taquilla-4`,"fr-FR":`Casier-4`,"id-ID":`Loker-4`,"it-IT":`Armadietto-4`,"ja-JP":`ロッカー-4`,"ko-KR":`사물함 - 4`,"ms-MY":`Loker-4`,"nl-NL":`Kasten - 4`,"pl-PL":`Szafka-4`,"pt-PT":`Armário-4`,"sr-Cyrl":`Ормарић-4`,"vi-VN":`Tủ-4`,"zh-CN":`储物柜-4`,"zh-TW":`儲物櫃-4`},临时餐台:{"de-DE":`Esstisch`,"en-US":`Dining table`,"es-ES":`mesa de comedor`,"fr-FR":`table à manger`,"id-ID":`Meja makan`,"it-IT":`tavolo da pranzo`,"ja-JP":`ダイニングテーブル`,"ko-KR":`임시 식대`,"ms-MY":`Meja makan`,"nl-NL":`Tijdelijk restaurant`,"pl-PL":`stół jadalny`,"pt-PT":`mesa de jantar`,"sr-Cyrl":`Трпезаријски сто`,"vi-VN":`bàn ăn`,"zh-CN":`临时餐台`,"zh-TW":`臨時餐台`},"置物台-2":{"de-DE":`Regal-2`,"en-US":`Shelf-2`,"es-ES":`Estantería-2`,"fr-FR":`Étagère-2`,"id-ID":`Rak-2`,"it-IT":`Scaffale-2`,"ja-JP":`物置台-2`,"ko-KR":`치물대-2`,"ms-MY":`Rak-2`,"nl-NL":`Voorraad - 2`,"pl-PL":`Półka-2`,"pt-PT":`Prateleira-2`,"sr-Cyrl":`Полица-2`,"vi-VN":`Kệ-2`,"zh-CN":`置物台-2`,"zh-TW":`置物台-2`},四人餐桌:{"de-DE":`Tisch für 4 Personen`,"en-US":`4 person table`,"es-ES":`Mesa de 4 personas`,"fr-FR":`Table pour 4 personnes`,"id-ID":`Meja untuk 4 orang`,"it-IT":`Tavolo per 4 persone`,"ja-JP":`四人のテーブル`,"ko-KR":`4인용 식탁`,"ms-MY":`Meja 4 orang`,"nl-NL":`Vierpersoonstafel`,"pl-PL":`Stół dla 4 osób`,"pt-PT":`Mesa de 4 pessoas`,"sr-Cyrl":`Сто за 4 особе`,"vi-VN":`Bàn 4 người`,"zh-CN":`四人餐桌`,"zh-TW":`四人餐桌`},洽谈桌:{"de-DE":`Verhandlungstisch`,"en-US":`Meeting table`,"es-ES":`Mesa de reuniones`,"fr-FR":`Table de réunion`,"id-ID":`Meja rapat`,"it-IT":`Tavolo da riunione`,"ja-JP":`商談テーブル`,"ko-KR":`상담 테이블`,"ms-MY":`Meja mesyuarat`,"nl-NL":`Vergadertafel`,"pl-PL":`stół negocjacyjny`,"pt-PT":`Mesa de reuniões`,"sr-Cyrl":`Састанак сто`,"vi-VN":`bàn đàm phán`,"zh-CN":`洽谈桌`,"zh-TW":`洽談桌`},"游泳池-1":{"de-DE":`Schwimmbad-1`,"en-US":`Swimming pool-1`,"es-ES":`piscina-1`,"fr-FR":`piscine-1`,"id-ID":`Kolam renang-1`,"it-IT":`piscina-1`,"ja-JP":`プール-1`,"ko-KR":`수영장-1`,"ms-MY":`Kolam renang-1`,"nl-NL":`Zwembad - 1`,"pl-PL":`basen-1`,"pt-PT":`piscina-1`,"sr-Cyrl":`Базен за пливање-1`,"vi-VN":`hồ bơi-1`,"zh-CN":`游泳池-1`,"zh-TW":`游泳池-1`},毛巾凳:{"de-DE":`Handtuchhocker`,"en-US":`Towel stool`,"es-ES":`Taburete de toallas`,"fr-FR":`tabouret de serviette`,"id-ID":`Bangku handuk`,"it-IT":`sgabello asciugamano`,"ja-JP":`タオルの腰掛け`,"ko-KR":`수건 걸상`,"ms-MY":`Bangku tuala`,"nl-NL":`Handdoeken stoel`,"pl-PL":`stołek ręcznikowy`,"pt-PT":`Banqueta de toalha`,"sr-Cyrl":`Столица за пешкире`,"vi-VN":`Ghế gấp khăn`,"zh-CN":`毛巾凳`,"zh-TW":`毛巾凳`},AC:{"de-DE":`Klimaanlage`,"en-US":`Air conditioner`,"es-ES":`aire acondicionado`,"fr-FR":`climatisation`,"id-ID":`Pendingin udara`,"it-IT":`condizionatore d'aria`,"ja-JP":`エアコン`,"ko-KR":`AC는`,"ms-MY":`Penyaman udara`,"nl-NL":`AC`,"pl-PL":`klimatyzator`,"pt-PT":`ar condicionado`,"sr-Cyrl":`Клима уређај`,"vi-VN":`máy điều hòa không khí`,"zh-CN":`AC`,"zh-TW":`空調`},二人餐桌:{"de-DE":`Tisch für 2 Personen`,"en-US":`2 person table`,"es-ES":`mesa de 2 personas`,"fr-FR":`table pour 2 personnes`,"id-ID":`Meja untuk 2 orang`,"it-IT":`tavolo per 2 persone`,"ja-JP":`2人のテーブル`,"ko-KR":`2인용 식탁`,"ms-MY":`Meja untuk 2 orang`,"nl-NL":`Twee-persoons tafel`,"pl-PL":`stół dla 2 osób`,"pt-PT":`mesa de 2 pessoas`,"sr-Cyrl":`Сто за две особе`,"vi-VN":`bàn 2 người`,"zh-CN":`二人餐桌`,"zh-TW":`二人餐桌`},"双人床(无床头柜)-2":{"de-DE":`Doppelbett ohne Tisch-2`,"en-US":`Double bed no table-2`,"es-ES":`Cama doble sin mesa-2`,"fr-FR":`Lit double sans table-2`,"id-ID":`Kasur ganda tanpa meja-2`,"it-IT":`Letto doppio senza tavolo-2`,"ja-JP":`ダブルベッドテーブルなし-2`,"ko-KR":`더블 침대(협탁 없음)-2`,"ms-MY":`Katil double tanpa meja-2`,"nl-NL":`Tweepersoonsbed zonder tafel-2`,"pl-PL":`Podwójne łóżko bez stołu-2`,"pt-PT":`Cama dupla sem mesa-2`,"sr-Cyrl":`Дупли кревет без стола-2`,"vi-VN":`Giường đôi không bàn-2`,"zh-CN":`双人床(无床头柜)-2`,"zh-TW":`雙人床無床頭櫃-2`},"双人床(无床头柜)-3":{"de-DE":`Doppelbett ohne Tisch-3`,"en-US":`Double bed no table-3`,"es-ES":`Cama doble sin mesa-3`,"fr-FR":`Lit double sans table-3`,"id-ID":`Kasur ganda tanpa meja-3`,"it-IT":`Letto doppio senza tavolo-3`,"ja-JP":`ダブルベッドテーブルなし-3`,"ko-KR":`더블 베드 (협탁 없음)-3`,"ms-MY":`Katil double tanpa meja-3`,"nl-NL":`Tweepersoonsbed zonder tafel-3`,"pl-PL":`Podwójne łóżko bez stołu-3`,"pt-PT":`Cama dupla sem mesa-3`,"sr-Cyrl":`Дупли кревет без стола-3`,"vi-VN":`Giường đôi không bàn-3`,"zh-CN":`双人床(无床头柜)-3`,"zh-TW":`雙人床無床頭櫃-3`},床头柜:{"de-DE":`Nachttisch`,"en-US":`bed side table`,"es-ES":`mesita de noche`,"fr-FR":`table de chevet`,"id-ID":`meja samping tempat tidur`,"it-IT":`comodino`,"ja-JP":`ベッドサイドテーブル`,"ko-KR":`협탁`,"ms-MY":`Meja sisi katil`,"nl-NL":`Bedenkast`,"pl-PL":`stolik nocny`,"pt-PT":`mesa de cabeceira`,"sr-Cyrl":`Сточић поред кревета`,"vi-VN":`bàn đầu giường`,"zh-CN":`床头柜`,"zh-TW":`床頭櫃`},单开门冰箱:{"de-DE":`Ein-Tür-Kühlschrank`,"en-US":`single door refrigerator`,"es-ES":`nevera de una puerta`,"fr-FR":`réfrigérateur à une porte`,"id-ID":`Kulkas pintu tunggal`,"it-IT":`frigorifero a porta singola`,"ja-JP":`単扉冷蔵庫`,"ko-KR":`단문 냉장고`,"ms-MY":`Peti sejuk pintu tunggal`,"nl-NL":`Eenpersoons koelkast`,"pl-PL":`lodówka jednodrzwiowa`,"pt-PT":`geladeira de porta única`,"sr-Cyrl":`Фрижидер са једним вратима`,"vi-VN":`tủ lạnh một cánh`,"zh-CN":`单开门冰箱`,"zh-TW":`單開門冰箱`},"沙发组合-5":{"de-DE":`Sofaset-5`,"en-US":`Sofa set-5`,"es-ES":`Set de sofás-5`,"fr-FR":`Ensemble de sofas-5`,"id-ID":`Set sofa-5`,"it-IT":`Divano set-5`,"ja-JP":`ソファセット-5`,"ko-KR":`소파 세트-5`,"ms-MY":`Set sofa-5`,"nl-NL":`Zitmeubelset-5`,"pl-PL":`Zestaw sof-5`,"pt-PT":`Conjunto de sofás-5`,"sr-Cyrl":`Софа сет-5`,"vi-VN":`bộ sofa-5`,"zh-CN":`沙发组合-5`,"zh-TW":`沙發組合-5`},"沙发组合-6":{"de-DE":`Sofaset-6`,"en-US":`Sofa set-6`,"es-ES":`Set de sofás-6`,"fr-FR":`Ensemble de sofas-6`,"id-ID":`Set sofa-6`,"it-IT":`Divano set-6`,"ja-JP":`ソファセット-6`,"ko-KR":`소파 세트-6`,"ms-MY":`Set sofa-6`,"nl-NL":`Zitmeubelset-6`,"pl-PL":`Zestaw sof-6`,"pt-PT":`Conjunto de sofás-6`,"sr-Cyrl":`Софа сет-6`,"vi-VN":`bộ sofa-6`,"zh-CN":`沙发组合-6`,"zh-TW":`沙發組合-6`},"四人餐桌-1":{"de-DE":`Tisch für 2 Personen - 1`,"en-US":`2 person table - 1`,"es-ES":`mesa de 2 personas - 1`,"fr-FR":`table pour 2 personnes - 1`,"id-ID":`Meja untuk 2 orang - 1`,"it-IT":`tavolo per 2 persone - 1`,"ja-JP":`2人のテーブル-1`,"ko-KR":`4인용 식탁-1`,"ms-MY":`Meja untuk 2 orang - 1`,"nl-NL":`Twee-persoons tafel-1`,"pl-PL":`stół dla 2 osób - 1`,"pt-PT":`mesa de 2 pessoas - 1`,"sr-Cyrl":`Сто за 2 особе - 1`,"vi-VN":`bàn 2 người - 1`,"zh-CN":`四人餐桌-1`,"zh-TW":`四人餐桌-1`},小单人沙发:{"de-DE":`Kleiner Sessel`,"en-US":`Small single sofa`,"es-ES":`Sillón Pequeño`,"fr-FR":`Petit Fauteuil`,"id-ID":`Sofa kecil tunggal`,"it-IT":`Poltroncina`,"ja-JP":`小型一人用ソファ`,"ko-KR":`작은 싱글 소파`,"ms-MY":`Sofa kecil tunggal`,"nl-NL":`Kleine fauteuil`,"pl-PL":`Mały Fotel`,"pt-PT":`Poltrona Pequena`,"sr-Cyrl":`Мали једносед`,"vi-VN":`Ghế sofa nhỏ`,"zh-CN":`小单人沙发`,"zh-TW":`小單人沙發`},小洗手池:{"de-DE":`Kleines Becken`,"en-US":`Small sink`,"es-ES":`Pequeño lavabo`,"fr-FR":`Petit évier`,"id-ID":`Wastafel kecil`,"it-IT":`Piccolo lavandino`,"ja-JP":`簡易手洗い`,"ko-KR":`작은 세면대`,"ms-MY":`Sinki kecil`,"nl-NL":`Klein handbad`,"pl-PL":`Mała umywalka`,"pt-PT":`Pequena pia`,"sr-Cyrl":`Мали умиваоник`,"vi-VN":`Bồn rửa nhỏ`,"zh-CN":`小洗手池`,"zh-TW":`小洗手池`},小厨:{"de-DE":`Kleine Küche`,"en-US":`Small kitchen`,"es-ES":`Pequeña cocina`,"fr-FR":`Petite cuisine`,"id-ID":`Dapur kecil`,"it-IT":`Piccola cucina`,"ja-JP":`簡易キッチン`,"ko-KR":`작은 요리사`,"ms-MY":`Dapur kecil`,"nl-NL":`Kleine keuken`,"pl-PL":`Mała kuchnia`,"pt-PT":`Pequena cozinha`,"sr-Cyrl":`Мала кухиња`,"vi-VN":`Nhà bếp nhỏ`,"zh-CN":`小厨`,"zh-TW":`小廚`},小衣柜:{"de-DE":`Kleiderschrank`,"en-US":`Small wardrobe`,"es-ES":`Pequeño armario`,"fr-FR":`Petite armoire`,"id-ID":`Lemari kecil`,"it-IT":`Piccola cabina armadio`,"ja-JP":`小型ワードローブ`,"ko-KR":`작은 옷장`,"ms-MY":`Almari kecil`,"nl-NL":`Kleine kast`,"pl-PL":`Mała szafa`,"pt-PT":`Pequeno guarda-roupa`,"sr-Cyrl":`Мали ормар`,"vi-VN":`Tủ quần áo nhỏ`,"zh-CN":`小衣柜`,"zh-TW":`小衣柜`},淋浴房:{"de-DE":`Dusche`,"en-US":`Shower room`,"es-ES":`Cuarto de ducha`,"fr-FR":`Salle de douche`,"id-ID":`Kamar mandi`,"it-IT":`Box doccia`,"ja-JP":`シャワー室`,"ko-KR":`샤워실`,"ms-MY":`Bilik mandi pancuran`,"nl-NL":`Douche kamer`,"pl-PL":`Kabina prysznicowa`,"pt-PT":`Quarto de banho`,"sr-Cyrl":`Купатило`,"vi-VN":`Phòng tắm`,"zh-CN":`淋浴房`,"zh-TW":`淋浴房`},"鞋柜-1":{"de-DE":`Schuhschrank-1`,"en-US":`Shoe cabinet-1`,"es-ES":`Armario de zapatos-1`,"fr-FR":`Chaussure cabinet-1`,"id-ID":`Lemari sepatu-1`,"it-IT":`Armadio per scarpe-1`,"ja-JP":`靴箱-1`,"ko-KR":`신발장-1`,"ms-MY":`Kabinet kasut-1`,"nl-NL":`Schoenenkast-1`,"pl-PL":`Szafka na buty-1`,"pt-PT":`Armário de sapatos-1`,"sr-Cyrl":`Ормар за ципеле-1`,"vi-VN":`Tủ giày - 1`,"zh-CN":`鞋柜-1`,"zh-TW":`鞋柜-1`},"鞋柜-2":{"de-DE":`Schuhschrank-2`,"en-US":`Shoe cabinet-2`,"es-ES":`Armario de zapatos-2`,"fr-FR":`Chaussure cabinet-2`,"id-ID":`Lemari sepatu-2`,"it-IT":`Armadio per scarpe-2`,"ja-JP":`靴箱-2`,"ko-KR":`신발장-2`,"ms-MY":`Kabinet kasut-2`,"nl-NL":`Schoenkast-2`,"pl-PL":`Szafka na buty-2`,"pt-PT":`Armário de sapatos-2`,"sr-Cyrl":`Ормар за ципеле-2`,"vi-VN":`Tủ giày - 2`,"zh-CN":`鞋柜-2`,"zh-TW":`鞋柜-2`},"鞋柜-3":{"de-DE":`Schuhschrank-3`,"en-US":`Shoe cabinet-3`,"es-ES":`Armario de zapatos-3`,"fr-FR":`Chaussure cabinet-3`,"id-ID":`Lemari sepatu-3`,"it-IT":`Armadio per scarpe-3`,"ja-JP":`靴箱-3`,"ko-KR":`신발장-3`,"ms-MY":`Kabinet kasut-3`,"nl-NL":`Schoenenkast-3`,"pl-PL":`Szafka na buty-3`,"pt-PT":`Armário de sapatos-3`,"sr-Cyrl":`Орман за ципеле-3`,"vi-VN":`Tủ giày - 3`,"zh-CN":`鞋柜-3`,"zh-TW":`鞋柜-3`},"电视柜-1":{"de-DE":`TV-Schrank - 1`,"en-US":`TV cabinet - 1`,"es-ES":`Mueble de TV - 1`,"fr-FR":`Meuble TV - 1`,"id-ID":`Rak TV - 1`,"it-IT":`Mobile TV - 1`,"ja-JP":`テレビ台 - 1`,"ko-KR":`TV장 -1`,"ms-MY":`Kabinet TV - 1`,"nl-NL":`TV-kast - 1`,"pl-PL":`Szafka RTV - 1`,"pt-PT":`Móvel de TV - 1`,"sr-Cyrl":`ТВ ормарић - 1`,"vi-VN":`Tủ TV - 1`,"zh-CN":`电视柜-1`,"zh-TW":`電視櫃-1`},"电视柜-2":{"de-DE":`TV-Schrank - 2`,"en-US":`TV cabinet - 2`,"es-ES":`Mueble de TV - 2`,"fr-FR":`Meuble TV - 2`,"id-ID":`Rak TV - 2`,"it-IT":`Mobile TV - 2`,"ja-JP":`テレビ台 - 2`,"ko-KR":`TV장 - 2`,"ms-MY":`Kabinet TV - 2`,"nl-NL":`TV-kast - 2`,"pl-PL":`Szafka RTV - 2`,"pt-PT":`Móvel de TV - 2`,"sr-Cyrl":`ТВ ормарић - 2`,"vi-VN":`Tủ TV - 2`,"zh-CN":`电视柜-2`,"zh-TW":`電視櫃-2`},"电视柜-3":{"de-DE":`TV-Schrank - 3`,"en-US":`TV cabinet - 3`,"es-ES":`Mueble de TV - 3`,"fr-FR":`Meuble TV - 3`,"id-ID":`Rak TV - 3`,"it-IT":`Mobile TV - 3`,"ja-JP":`テレビ台 - 3`,"ko-KR":`TV장 - 3`,"ms-MY":`Kabinet TV - 3`,"nl-NL":`TV-kast - 3`,"pl-PL":`Szafka RTV - 3`,"pt-PT":`Móvel de TV - 3`,"sr-Cyrl":`ТВ ормарић - 3`,"vi-VN":`Tủ TV - 3`,"zh-CN":`电视柜-3`,"zh-TW":`電視櫃-3`},"餐边柜-1":{"de-DE":`Kommode - 1`,"en-US":`Sideboard - 1`,"es-ES":`Aparador - 1`,"fr-FR":`Buffet - 1`,"id-ID":`Buffet - 1`,"it-IT":`Tavolino - 1`,"ja-JP":`サイドボード - 1`,"ko-KR":`찬장 - 1`,"ms-MY":`Kabinet sisi - 1`,"nl-NL":`Eetkast - 1`,"pl-PL":`Kredens - 1`,"pt-PT":`Aparador - 1`,"sr-Cyrl":`Комода - 1`,"vi-VN":`Tủ bên - 1`,"zh-CN":`餐边柜-1`,"zh-TW":`餐邊櫃-1`},"餐边柜-2":{"de-DE":`Kommode - 2`,"en-US":`Sideboard - 2`,"es-ES":`Aparador - 2`,"fr-FR":`Buffet - 2`,"id-ID":`Buffet - 2`,"it-IT":`Tavolino - 2`,"ja-JP":`サイドボード - 2`,"ko-KR":`찬장 - 2`,"ms-MY":`Kabinet sisi - 2`,"nl-NL":`Eetkast - 2`,"pl-PL":`Kredens - 2`,"pt-PT":`Aparador - 2`,"sr-Cyrl":`Комода - 2`,"vi-VN":`Tủ bên - 2`,"zh-CN":`餐边柜-2`,"zh-TW":`餐邊櫃-2`},"餐边柜-3":{"de-DE":`Kommode - 3`,"en-US":`Sideboard - 3`,"es-ES":`Aparador - 3`,"fr-FR":`Buffet - 3`,"id-ID":`Buffet - 3`,"it-IT":`Tavolino - 3`,"ja-JP":`サイドボード - 3`,"ko-KR":`찬장 - 3`,"ms-MY":`Kabinet sisi - 3`,"nl-NL":`Eetkast - 3`,"pl-PL":`Kredens - 3`,"pt-PT":`Aparador - 3`,"sr-Cyrl":`Комода - 3`,"vi-VN":`Tủ bên - 3`,"zh-CN":`餐边柜-3`,"zh-TW":`餐邊櫃-3`},"燃气灶-2":{"de-DE":`Gasherd - 2`,"en-US":`Gas stove - 2`,"es-ES":`Estufa de gas - 2`,"fr-FR":`Cuisinière à gaz - 2`,"id-ID":`Kompor gas - 2`,"it-IT":`Fornello a gas - 2`,"ja-JP":`ガスレンジ-2`,"ko-KR":`가스레인지-2`,"ms-MY":`Dapur gas - 2`,"nl-NL":`Gaskachel-2`,"pl-PL":`Kuchenka gazowa - 2`,"pt-PT":`Fogão a gás - 2`,"sr-Cyrl":`Гас шпорет - 2`,"vi-VN":`Bếp ga - 2`,"zh-CN":`燃气灶-2`,"zh-TW":`燃氣爐-2`},"洗菜池-2":{"de-DE":`Spülbecken - 2`,"en-US":`Sink-2`,"es-ES":`Fregadero de cocina - 2`,"fr-FR":`Évier de cuisine - 2`,"id-ID":`Wastafel-2`,"it-IT":`Lavello della cucina - 2`,"ja-JP":`野菜洗い場-2`,"ko-KR":`세채지-2`,"ms-MY":`Sinki-2`,"nl-NL":`Wastafel - 2`,"pl-PL":`Zlew kuchenny - 2`,"pt-PT":`Pia da cozinha - 2`,"sr-Cyrl":`Судопера-2`,"vi-VN":`Bồn rửa rau - 2`,"zh-CN":`洗菜池-2`,"zh-TW":`洗菜池-2`},"橱柜-1":{"de-DE":`Schrank - 1`,"en-US":`Cupboard - 1`,"es-ES":`Armario - 1`,"fr-FR":`Armoire - 1`,"id-ID":`Lemari - 1`,"it-IT":`Armadio - 1`,"ja-JP":`戸棚-1`,"ko-KR":`찬장-1`,"ms-MY":`Almari - 1`,"nl-NL":`Kasten - 1`,"pl-PL":`Szafka - 1`,"pt-PT":`Armário - 1`,"sr-Cyrl":`Ормар - 1`,"vi-VN":`Tủ - 1`,"zh-CN":`橱柜-1`,"zh-TW":`櫥櫃-1`},"橱柜-2":{"de-DE":`Schrank - 2`,"en-US":`Cupboard - 2`,"es-ES":`Armario - 2`,"fr-FR":`Armoire - 2`,"id-ID":`Lemari - 2`,"it-IT":`Armadio - 2`,"ja-JP":`戸棚-2`,"ko-KR":`찬장-2`,"ms-MY":`Almari - 2`,"nl-NL":`Kast - 2`,"pl-PL":`Szafka - 2`,"pt-PT":`Armário - 2`,"sr-Cyrl":`Ормар - 2`,"vi-VN":`Tủ - 2`,"zh-CN":`橱柜-2`,"zh-TW":`櫥櫃-2`},花洒:{"de-DE":`Duschkopf`,"en-US":`Shower head`,"es-ES":`Cabeza de ducha`,"fr-FR":`Pomme de douche`,"id-ID":`Kepala pancuran`,"it-IT":`Doccia`,"ja-JP":`シャワーヘッド`,"ko-KR":`꽃뿌리기`,"ms-MY":`Kepala pancuran`,"nl-NL":`Regen`,"pl-PL":`Głowica prysznicowa`,"pt-PT":`Chuveiro`,"sr-Cyrl":`Туш глава`,"vi-VN":`Vòi sen`,"zh-CN":`花洒`,"zh-TW":`淋浴花灑`},淋浴屏:{"de-DE":`Duschpaneel`,"en-US":`Shower panel`,"es-ES":`Panel de ducha`,"fr-FR":`Panneau de douche`,"id-ID":`Panel shower`,"it-IT":`Pannello doccia`,"ja-JP":`シャワースクリーン`,"ko-KR":`샤워 스크린`,"ms-MY":`Panel pancuran`,"nl-NL":`Douchescherm`,"pl-PL":`Płyta prysznicowa`,"pt-PT":`Painel de chuveiro`,"sr-Cyrl":`Панел за туширање`,"vi-VN":`Bảng vách tắm`,"zh-CN":`淋浴屏`,"zh-TW":`淋浴屏`},"洗衣机-2":{"de-DE":`Waschmaschine - 2`,"en-US":`Washing machine - 2`,"es-ES":`Lavadora - 2`,"fr-FR":`Machine à laver - 2`,"id-ID":`Mesin cuci - 2`,"it-IT":`Lavatrice - 2`,"ja-JP":`洗濯機-2`,"ko-KR":`세탁기-2`,"ms-MY":`Mesin basuh - 2`,"nl-NL":`Wasmachine - 2`,"pl-PL":`Pralka - 2`,"pt-PT":`Máquina de lavar roupa - 2`,"sr-Cyrl":`Машина за прање веша - 2`,"vi-VN":`Máy giặt - 2`,"zh-CN":`洗衣机-2`,"zh-TW":`洗衣機-2`},"双人床-5":{"de-DE":`Doppelbett-5`,"en-US":`Double bed-5`,"es-ES":`Cama doble-5`,"fr-FR":`Lit double-5`,"id-ID":`Kasur ganda-5`,"it-IT":`Letto doppio-5`,"ja-JP":`ダブルベッド-5`,"ko-KR":`더블침대-5`,"ms-MY":`Katil double-5`,"nl-NL":`Tweepersoonsbed-5`,"pl-PL":`Podwójne łóżko-5`,"pt-PT":`Cama dupla-5`,"sr-Cyrl":`Брачни кревет-5`,"vi-VN":`Giường đôi-5`,"zh-CN":`双人床-5`,"zh-TW":`雙人床-5`},"双人床-6":{"de-DE":`Doppelbett-6`,"en-US":`Double bed-6`,"es-ES":`Cama doble-6`,"fr-FR":`Lit double-6`,"id-ID":`Kasur ganda-6`,"it-IT":`Letto doppio-6`,"ja-JP":`ダブルベッド-6`,"ko-KR":`더블침대-6`,"ms-MY":`Katil double-6`,"nl-NL":`Tweepersoonsbed-6`,"pl-PL":`Podwójne łóżko-6`,"pt-PT":`Cama dupla-6`,"sr-Cyrl":`Брачни кревет-6`,"vi-VN":`Giường đôi-6`,"zh-CN":`双人床-6`,"zh-TW":`雙人床-6`},"双人床-7":{"de-DE":`Doppelbett-7`,"en-US":`Double bed-7`,"es-ES":`Cama doble-7`,"fr-FR":`Lit double-7`,"id-ID":`Kasur ganda-7`,"it-IT":`Letto doppio-7`,"ja-JP":`ダブルベッド-7`,"ko-KR":`더블침대-7`,"ms-MY":`Katil double-7`,"nl-NL":`Tweepersoonsbed-7`,"pl-PL":`Podwójne łóżko-7`,"pt-PT":`Cama dupla-7`,"sr-Cyrl":`Брачни кревет-7`,"vi-VN":`Giường đôi-7`,"zh-CN":`双人床-7`,"zh-TW":`雙人床-7`},"双人床-8":{"de-DE":`Doppelbett-8`,"en-US":`Double bed-8`,"es-ES":`Cama doble-8`,"fr-FR":`Lit double-8`,"id-ID":`Kasur ganda-8`,"it-IT":`Letto doppio-8`,"ja-JP":`ダブルベッド-8`,"ko-KR":`더블침대-8`,"ms-MY":`Katil double-8`,"nl-NL":`Tweepersoonsbed-8`,"pl-PL":`Podwójne łóżko-8`,"pt-PT":`Cama dupla-8`,"sr-Cyrl":`Брачни кревет-8`,"vi-VN":`Giường đôi-8`,"zh-CN":`双人床-8`,"zh-TW":`雙人床-8`},梳妆台:{"de-DE":`Frisiertisch`,"en-US":`Dressing table`,"es-ES":`Tocador`,"fr-FR":`Coiffeuse`,"id-ID":`Meja rias`,"it-IT":`Tavolo da toeletta`,"ja-JP":`ドレッシングテーブル`,"ko-KR":`화장대`,"ms-MY":`Meja solek`,"nl-NL":`Kleedplaats`,"pl-PL":`Toaletka`,"pt-PT":`Penteadeira`,"sr-Cyrl":`Тоалетни сточић`,"vi-VN":`Bàn trang điểm`,"zh-CN":`梳妆台`,"zh-TW":`梳妝台`},"儿童床-1":{"de-DE":`Kinderbett-1`,"en-US":`Children bed-1`,"es-ES":`Cama infantil-1`,"fr-FR":`Lit pour enfant-1`,"id-ID":`Tempat tidur anak-1`,"it-IT":`Letto per bambini-1`,"ja-JP":`子供用ベッド-1`,"ko-KR":`어린이 침대-1`,"ms-MY":`Katil kanak-kanak-1`,"nl-NL":`Kinderbedden - 1`,"pl-PL":`Łóżko dziecięce-1`,"pt-PT":`Cama infantil-1`,"sr-Cyrl":`Дечји кревет-1`,"vi-VN":`Giường trẻ em-1`,"zh-CN":`儿童床-1`,"zh-TW":`兒童床-1`},"儿童床-2":{"de-DE":`Kinderbett-2`,"en-US":`Children bed-2`,"es-ES":`Cama infantil-2`,"fr-FR":`Lit pour enfant-2`,"id-ID":`Tempat tidur anak-2`,"it-IT":`Letto per bambini-2`,"ja-JP":`子供用ベッド-2`,"ko-KR":`어린이 침대-2`,"ms-MY":`Katil kanak-kanak-2`,"nl-NL":`Kinderbedden - 2`,"pl-PL":`Łóżko dziecięce-2`,"pt-PT":`Cama infantil-2`,"sr-Cyrl":`Дечји кревет-2`,"vi-VN":`Giường trẻ em-2`,"zh-CN":`儿童床-2`,"zh-TW":`兒童床-2`},"儿童床-3":{"de-DE":`Kinderbett-3`,"en-US":`Children bed-3`,"es-ES":`Cama infantil-3`,"fr-FR":`Lit pour enfant-3`,"id-ID":`Tempat tidur anak-3`,"it-IT":`Letto per bambini-3`,"ja-JP":`子供用ベッド-3`,"ko-KR":`어린이 침대-3`,"ms-MY":`Katil kanak-kanak-3`,"nl-NL":`Kinderbedden - 3`,"pl-PL":`Łóżko dziecięce-3`,"pt-PT":`Cama infantil-3`,"sr-Cyrl":`Дечји кревет-3`,"vi-VN":`Giường trẻ em-3`,"zh-CN":`儿童床-3`,"zh-TW":`兒童床-3`},"儿童书桌-1":{"de-DE":`Kinder Schreibtisch-1`,"en-US":`Children desk-1`,"es-ES":`Escritorio infantil-1`,"fr-FR":`Bureau pour enfant-1`,"id-ID":`Meja anak-1`,"it-IT":`Scrivania per bambini-1`,"ja-JP":`子供用の机-1`,"ko-KR":`어린이 책상-1`,"ms-MY":`Meja kanak-kanak-1`,"nl-NL":`Kinderbureau - 1`,"pl-PL":`Biurko dziecięce-1`,"pt-PT":`Secretária infantil-1`,"sr-Cyrl":`Дечији сто - 1`,"vi-VN":`Bàn học trẻ em-1`,"zh-CN":`儿童书桌-1`,"zh-TW":`兒童書桌-1`},"儿童书桌-2":{"de-DE":`Kinder Schreibtisch-2`,"en-US":`Children desk-2`,"es-ES":`Escritorio infantil-2`,"fr-FR":`Bureau pour enfant-2`,"id-ID":`Meja anak-2`,"it-IT":`Scrivania per bambini-2`,"ja-JP":`子供用の机-2`,"ko-KR":`어린이 책상-2`,"ms-MY":`Meja kanak-kanak-2`,"nl-NL":`Kinderbureau - 2`,"pl-PL":`Biurko dziecięce-2`,"pt-PT":`Secretária infantil-2`,"sr-Cyrl":`Дечији сто-2`,"vi-VN":`Bàn học trẻ em-2`,"zh-CN":`儿童书桌-2`,"zh-TW":`兒童書桌-2`},"儿童书桌-3":{"de-DE":`Kinder Schreibtisch-3`,"en-US":`Children desk-3`,"es-ES":`Escritorio infantil-3`,"fr-FR":`Bureau pour enfant-3`,"id-ID":`Meja anak-3`,"it-IT":`Scrivania per bambini-3`,"ja-JP":`子供用の机-3`,"ko-KR":`어린이 책상-3`,"ms-MY":`Meja kanak-kanak-3`,"nl-NL":`Kinderbureau - 3`,"pl-PL":`Biurko dziecięce-3`,"pt-PT":`Secretária infantil-3`,"sr-Cyrl":`Дечији сто-3`,"vi-VN":`Bàn học trẻ em-3`,"zh-CN":`儿童书桌-3`,"zh-TW":`兒童書桌-3`},"儿童活动区域-1":{"de-DE":`Kinder Teppich-1`,"en-US":`Children carpet-1`,"es-ES":`Alfombra infantil-1`,"fr-FR":`Tapis pour enfant-1`,"id-ID":`Karpet anak-1`,"it-IT":`Tappeto per bambini-1`,"ja-JP":`子供用のカーペット-1`,"ko-KR":`어린이 활동 구역-1`,"ms-MY":`Permaidani kanak-kanak-1`,"nl-NL":`Activiteiten voor kinderen - 1`,"pl-PL":`Dywan dla dzieci-1`,"pt-PT":`Tapete infantil-1`,"sr-Cyrl":`Дечији тепих-1`,"vi-VN":`Thảm trẻ em-1`,"zh-CN":`儿童活动区域-1`,"zh-TW":`兒童活動區域-1`},"儿童活动区域-2":{"de-DE":`Kinder Teppich-2`,"en-US":`Children carpet-2`,"es-ES":`Alfombra infantil-2`,"fr-FR":`Tapis pour enfant-2`,"id-ID":`Karpet anak-2`,"it-IT":`Tappeto per bambini-2`,"ja-JP":`子供用のカーペット-2`,"ko-KR":`어린이 활동 구역-2`,"ms-MY":`Permaidani kanak-kanak-2`,"nl-NL":`Activiteiten voor kinderen - 2`,"pl-PL":`Dywan dla dzieci-2`,"pt-PT":`Tapete infantil-2`,"sr-Cyrl":`Дечији тепих-2`,"vi-VN":`Thảm trẻ em-2`,"zh-CN":`儿童活动区域-2`,"zh-TW":`兒童活動區域-2`},"儿童活动区域-3":{"de-DE":`Kinder Teppich-3`,"en-US":`Children carpet-3`,"es-ES":`Alfombra infantil-3`,"fr-FR":`Tapis pour enfant-3`,"id-ID":`Karpet anak-3`,"it-IT":`Tappeto per bambini-3`,"ja-JP":`子供用のカーペット-3`,"ko-KR":`어린이 활동 구역 -3`,"ms-MY":`Permaidani kanak-kanak-3`,"nl-NL":`Activiteiten voor kinderen - 3`,"pl-PL":`Dywan dla dzieci-3`,"pt-PT":`Tapete infantil-3`,"sr-Cyrl":`Дечији тепих-3`,"vi-VN":`Thảm trẻ em-3`,"zh-CN":`儿童活动区域-3`,"zh-TW":`兒童活動區域-3`},"茶榻组合-1":{"de-DE":`Teetisch-Set-1`,"en-US":`Tea table set-1`,"es-ES":`Mesa de té set-1`,"fr-FR":`Ensemble de table à thé-1`,"id-ID":`Meja teh set-1`,"it-IT":`Set da tavolino da tè-1`,"ja-JP":`ティーテーブルセット-1`,"ko-KR":`티베트 콤보-1`,"ms-MY":`Set meja teh-1`,"nl-NL":`Theetafelset-1`,"pl-PL":`Zestaw stolików do herbaty-1`,"pt-PT":`Conjunto de mesa de chá-1`,"sr-Cyrl":`Комплет за чајни сто-1`,"vi-VN":`Bộ bàn trà-1`,"zh-CN":`茶榻组合-1`,"zh-TW":`茶榻組合-1`},"茶榻组合-2":{"de-DE":`Teetisch-Set-2`,"en-US":`Tea table set-2`,"es-ES":`Mesa de té set 2`,"fr-FR":`Ensemble de table à thé-2`,"id-ID":`Meja teh set-2`,"it-IT":`Set da tavolino da tè-2`,"ja-JP":`ティーテーブルセット-2`,"ko-KR":`티베트 콤보-2`,"ms-MY":`Set meja teh-2`,"nl-NL":`Theetafel set-2`,"pl-PL":`Zestaw stolików do herbaty-2`,"pt-PT":`Conjunto de mesa de chá-2`,"sr-Cyrl":`Комплет чајног стола-2`,"vi-VN":`Bộ bàn trà-2`,"zh-CN":`茶榻组合-2`,"zh-TW":`茶榻組合-2`},"茶榻组合-3":{"de-DE":`Teetisch-Set-3`,"en-US":`Tea table set-3`,"es-ES":`Mesa de té set 3`,"fr-FR":`Ensemble de table à thé-3`,"id-ID":`Meja teh set-3`,"it-IT":`Set da tavolino da tè-3`,"ja-JP":`ティーテーブルセット-3`,"ko-KR":`티베트 콤보-3`,"ms-MY":`Set meja teh-3`,"nl-NL":`Theetafelset-3`,"pl-PL":`Zestaw stolików do herbaty - 3`,"pt-PT":`Conjunto de mesa de chá-3`,"sr-Cyrl":`Комплет чајног стола-3`,"vi-VN":`Bộ bàn trà - 3`,"zh-CN":`茶榻组合-3`,"zh-TW":`茶榻組合-3`},"儿童衣柜-1":{"de-DE":`Kinderkleiderschrank-1`,"en-US":`Children wardrobe - 1`,"es-ES":`Armario infantil-1`,"fr-FR":`Armoire pour enfants - 1`,"id-ID":`Lemari anak - 1`,"it-IT":`Armadio per bambini-1`,"ja-JP":`子供用収納-1`,"ko-KR":`어린이 옷장-1`,"ms-MY":`Almari kanak-kanak - 1`,"nl-NL":`Kinderkast - 1`,"pl-PL":`Szafa dziecięca-1`,"pt-PT":`Guarda-roupa infantil-1`,"sr-Cyrl":`Дечји ормар - 1`,"vi-VN":`Tủ quần áo trẻ em-1`,"zh-CN":`儿童衣柜-1`,"zh-TW":`兒童衣櫃-1`},"儿童衣柜-2":{"de-DE":`Kinderkleiderschrank-2`,"en-US":`Children wardrobe - 2`,"es-ES":`Armario infantil-2`,"fr-FR":`Armoire pour enfants - 2`,"id-ID":`Lemari anak - 2`,"it-IT":`Armadio per bambini-2`,"ja-JP":`子供用収納-2`,"ko-KR":`어린이 옷장-2`,"ms-MY":`Almari kanak-kanak - 2`,"nl-NL":`Kinderkast-2`,"pl-PL":`Szafa dziecięca-2`,"pt-PT":`Guarda-roupa infantil-2`,"sr-Cyrl":`Дечји ормар - 2`,"vi-VN":`Tủ quần áo trẻ em-2`,"zh-CN":`儿童衣柜-2`,"zh-TW":`兒童衣櫃-2`},"儿童衣柜-3":{"de-DE":`Kinderkleiderschrank-3`,"en-US":`Children wardrobe - 3`,"es-ES":`Armario infantil-3`,"fr-FR":`Armoire pour enfants - 3`,"id-ID":`Lemari anak - 3`,"it-IT":`Armadio per bambini-3`,"ja-JP":`子供用収納-3`,"ko-KR":`어린이 옷장 - 3`,"ms-MY":`Almari kanak-kanak - 3`,"nl-NL":`Kinderkast-3`,"pl-PL":`Szafa dziecięca-3`,"pt-PT":`Guarda-roupa infantil-3`,"sr-Cyrl":`Дечји ормар - 3`,"vi-VN":`Tủ quần áo trẻ em-3`,"zh-CN":`儿童衣柜-3`,"zh-TW":`兒童衣櫃-3`},"儿童书柜-1":{"de-DE":`Kinder Bücherregal-1`,"en-US":`Children bookcase - 1`,"es-ES":`Estantería infantil-1`,"fr-FR":`Bibliothèque pour enfant-1`,"id-ID":`Rak buku anak-anak - 1`,"it-IT":`Libreria per bambini-1`,"ja-JP":`子供用の本棚-1`,"ko-KR":`어린이 책장 - 1`,"ms-MY":`Rak buku kanak-kanak - 1`,"nl-NL":`Kinderboekenkast - 1`,"pl-PL":`Regał na książki dla dzieci-1`,"pt-PT":`Estante infantil-1`,"sr-Cyrl":`Дечија полица за књиге - 1`,"vi-VN":`Kệ sách trẻ em-1`,"zh-CN":`儿童书柜-1`,"zh-TW":`兒童書櫃-1`},"儿童书柜-2":{"de-DE":`Kinder Bücherregal-2`,"en-US":`Children bookcase - 2`,"es-ES":`Estantería infantil-2`,"fr-FR":`Bibliothèque pour enfant-2`,"id-ID":`Rak buku anak-anak - 2`,"it-IT":`Libreria per bambini-2`,"ja-JP":`子供用の本棚-2`,"ko-KR":`어린이 책장 - 2`,"ms-MY":`Rak buku kanak-kanak - 2`,"nl-NL":`Kinderboekenkast - 2`,"pl-PL":`Regał na książki dla dzieci-2`,"pt-PT":`Estante infantil-2`,"sr-Cyrl":`Дечија полица за књиге - 2`,"vi-VN":`Kệ sách trẻ em-2`,"zh-CN":`儿童书柜-2`,"zh-TW":`兒童書櫃-2`},折行双跑楼梯:{"de-DE":`Zweiläufige Treppe`,"en-US":`Dog-leg stairs`,"es-ES":`Escaleras para perros`,"fr-FR":`Escalier en colimaçon`,"id-ID":`Tangga Dog-leg`,"it-IT":`Scale a doppia rampa`,"ja-JP":`折り返し階段`,"ko-KR":`ㄱ자형 계단`,"ms-MY":`Tangga berbentuk L`,"nl-NL":`Dubbele trap`,"pl-PL":`Schody łamane`,"pt-PT":`Escada em Duas Rampas`,"sr-Cyrl":`Потковано степениште`,"vi-VN":`Cầu thang hình chữ L`,"zh-CN":`折行双跑楼梯`,"zh-TW":`折行雙跑樓梯`},平行双跑楼梯:{"de-DE":`Parallele Treppen`,"en-US":`Parallel Stairs`,"es-ES":`Escaleras Paralelas`,"fr-FR":`Escaliers parallèles`,"id-ID":`Tangga Paralel`,"it-IT":`Scale Parallele`,"ja-JP":`平行二重階段`,"ko-KR":`평행 계단`,"ms-MY":`Tangga Selari`,"nl-NL":`Parallelle trappen`,"pl-PL":`Równoległe schody`,"pt-PT":`Escadas Paralelas`,"sr-Cyrl":`Паралелне степенице`,"vi-VN":`Song song cầu thang`,"zh-CN":`平行双跑楼梯`,"zh-TW":`平行雙跑樓梯`},折行三跑楼梯:{"de-DE":`Dreiläufige Treppe`,"en-US":`Three-flight Stairs`,"es-ES":`Escalera de tres tramos`,"fr-FR":`Escalier à trois volées`,"id-ID":`Tangga Tiga Bidang`,"it-IT":`Scale a tre rampe`,"ja-JP":`三折れ階段`,"ko-KR":`삼층 계단`,"ms-MY":`Tangga Tiga Tingkat`,"nl-NL":`Drie-traps trap`,"pl-PL":`Schody trzypiętrowe`,"pt-PT":`Escadas de três lanços`,"sr-Cyrl":`Троструко степениште`,"vi-VN":`Cầu thang ba tầng`,"zh-CN":`折行三跑楼梯`,"zh-TW":`折行三跑樓梯`},手枪:{"de-DE":`Pistole`,"en-US":`Pistol`,"es-ES":`Pistola`,"fr-FR":`Pistolet`,"id-ID":`Pistol`,"it-IT":`Pistola`,"ja-JP":`拳銃`,"ko-KR":`권총`,"ms-MY":`Pistul`,"nl-NL":`Een pistool`,"pl-PL":`Pistolet`,"pt-PT":`Pistola`,"sr-Cyrl":`Пиштољ`,"vi-VN":`Súng lục`,"zh-CN":`手枪`,"zh-TW":`手槍`},血迹:{"de-DE":`Blutfleck`,"en-US":`Bloodstain`,"es-ES":`Mancha de sangre`,"fr-FR":`Tache de sang`,"id-ID":`Noda darah`,"it-IT":`Macchia di sangue`,"ja-JP":`血痕`,"ko-KR":`핏자국`,"ms-MY":`Tompok darah`,"nl-NL":`Bloedvlekken`,"pl-PL":`Plama krwi`,"pt-PT":`Mancha de sangue`,"sr-Cyrl":`Мрља од крви`,"vi-VN":`vết máu`,"zh-CN":`血迹`,"zh-TW":`血跡`},手印:{"de-DE":`Fingerabdruck`,"en-US":`Fingerprint`,"es-ES":`Huella dactilar`,"fr-FR":`Empreinte digitale`,"id-ID":`Sidik jari`,"it-IT":`Impronta digitale`,"ja-JP":`指紋`,"ko-KR":`손도장`,"ms-MY":`Cap jari`,"nl-NL":`Handafdrukken`,"pl-PL":`Odcisk palca`,"pt-PT":`Impressão digital`,"sr-Cyrl":`Отисак прста`,"vi-VN":`Dấu vân tay`,"zh-CN":`手印`,"zh-TW":`手印`},足迹:{"de-DE":`Fußabdruck`,"en-US":`Footprint`,"es-ES":`Huella`,"fr-FR":`Empreinte de pas`,"id-ID":`Jejak`,"it-IT":`Impronta del piede`,"ja-JP":`足跡`,"ko-KR":`발자국`,"ms-MY":`Jejak kaki`,"nl-NL":`Voetspoor`,"pl-PL":`Ślad stopy`,"pt-PT":`Pegada`,"sr-Cyrl":`Тлоцрт`,"vi-VN":`Dấu chân`,"zh-CN":`足迹`,"zh-TW":`足跡`},车轮轨迹:{"de-DE":`Reifenspuren`,"en-US":`Tire tracks`,"es-ES":`Huellas de neumáticos`,"fr-FR":`Traces de pneus`,"id-ID":`Jejak ban`,"it-IT":`Impronte delle gomme`,"ja-JP":`タイヤのトレース`,"ko-KR":`바퀴 궤적`,"ms-MY":`Jejak tayar`,"nl-NL":`Wielspoor`,"pl-PL":`Ślady opon`,"pt-PT":`Marcas de pneus`,"sr-Cyrl":`Трагови гума`,"vi-VN":`Dấu vết lốp xe`,"zh-CN":`车轮轨迹`,"zh-TW":`輪胎印跡`},弹头:{"de-DE":`Geschosskopf`,"en-US":`Bullet head`,"es-ES":`Cabeza de bala`,"fr-FR":`Tête de balle`,"id-ID":`Kepala peluru`,"it-IT":`Punta del proiettile`,"ja-JP":`弾丸の頭`,"ko-KR":`탄두`,"ms-MY":`Kepala peluru`,"nl-NL":`Sprangkop`,"pl-PL":`Głowica pocisku`,"pt-PT":`Cabeça de bala`,"sr-Cyrl":`Метак глава`,"vi-VN":`Đầu đạn`,"zh-CN":`弹头`,"zh-TW":`子彈頭`},弹壳:{"de-DE":`Hülsengehäuse`,"en-US":`Shell casing`,"es-ES":`Carcasa de bala`,"fr-FR":`Douille d'obus`,"id-ID":`Selongsong`,"it-IT":`Bossolo`,"ja-JP":`シェルケーシング`,"ko-KR":`탄피`,"ms-MY":`Sarung peluru`,"nl-NL":`Shell`,"pl-PL":`Łuska pocisku`,"pt-PT":`Invólucro da bala`,"sr-Cyrl":`Чаура`,"vi-VN":`Vỏ đạn`,"zh-CN":`弹壳`,"zh-TW":`彈殼`},除湿器:{"de-DE":`Entfeuchter`,"en-US":`Dehumidifier`,"es-ES":`Deshumidificador`,"fr-FR":`Déshumidificateur`,"id-ID":`penguraian`,"it-IT":`Desumidificatore`,"ja-JP":`除湿器`,"ko-KR":`제습기`,"ms-MY":`Penyahlembap`,"nl-NL":`Ontvochtiger`,"pl-PL":`Odwilgotniacz`,"pt-PT":`Desumidificador`,"sr-Cyrl":`Одвлаживач`,"vi-VN":`Máy hút ẩm`,"zh-CN":`除湿器`,"zh-TW":`除湿器`},吹风机:{"de-DE":`Haartrockner`,"en-US":`Air Blower`,"es-ES":`Secador de pelo`,"fr-FR":`Sèche - cheveux`,"id-ID":`Peniup udara`,"it-IT":`Asciugacapelli`,"ja-JP":`ドライヤー`,"ko-KR":`헤어드라이어`,"ms-MY":`Peniup udara`,"nl-NL":`Haardroger`,"pl-PL":`Suszarka do włosów`,"pt-PT":`Secador de cabelo`,"sr-Cyrl":`Дувач ваздуха`,"vi-VN":`Máy sấy tóc`,"zh-CN":`吹风机`,"zh-TW":`吹风机`},空气净化器:{"de-DE":`Luftreiniger`,"en-US":`Air Scrubber`,"es-ES":`Purificador de aire`,"fr-FR":`Purificateur d'air`,"id-ID":`Pembersih Udara`,"it-IT":`Purificatore d'aria`,"ja-JP":`くうきせいじょうき`,"ko-KR":`공기정화기`,"ms-MY":`Pembersih udara`,"nl-NL":`Luchtreiniger`,"pl-PL":`Oczyszczacze powietrza`,"pt-PT":`Purificador de ar`,"sr-Cyrl":`Прочишћивач ваздуха`,"vi-VN":`Máy lọc không khí`,"zh-CN":`空气净化器`,"zh-TW":`空气净化器`},冰柜:{"de-DE":`Gefrierschrank`,"en-US":`Freezer`,"es-ES":`Congelador`,"fr-FR":`Cabinet de glace`,"id-ID":`Pembeku`,"it-IT":`congelatore`,"ja-JP":`アイスボックス`,"ko-KR":`냉동고`,"ms-MY":`Peti sejuk beku`,"nl-NL":`Vrijster`,"pl-PL":`lodówka`,"pt-PT":`Congelador`,"sr-Cyrl":`Замрзивач`,"vi-VN":`Tủ lạnh`,"zh-CN":`冰柜`,"zh-TW":`冰柜`},架子:{"de-DE":`Regale`,"en-US":`Shelf`,"es-ES":`Estante`,"fr-FR":`étagères`,"id-ID":`Rak`,"it-IT":`scaffale`,"ja-JP":`棚`,"ko-KR":`선반`,"ms-MY":`Rak`,"nl-NL":`Rekken`,"pl-PL":`półki`,"pt-PT":`prateleiras`,"sr-Cyrl":`Полица`,"vi-VN":`Kệ`,"zh-CN":`架子`,"zh-TW":`架子`},杂物:{"de-DE":`Lebensmittel`,"en-US":`Sundries`,"es-ES":`Escombros`,"fr-FR":`Le fouillis`,"id-ID":`Barang-barang`,"it-IT":`Alimentari`,"ja-JP":`ざつぶつ`,"ko-KR":`잡동사니`,"ms-MY":`Barang-barang kecil`,"nl-NL":`Boodschappen`,"pl-PL":`Sprzęt spożywczy`,"pt-PT":`Alimentos`,"sr-Cyrl":`Ситнице`,"vi-VN":`Đồ lặt vặt`,"zh-CN":`杂物`,"zh-TW":`杂物`},L型沙发:{"de-DE":`L-Sofa`,"en-US":`L_sofa`,"es-ES":`Sofá en forma de l`,"fr-FR":`Canapé en l`,"id-ID":`Sofa_L`,"it-IT":`Divano tipo L`,"ja-JP":`L型ソファ`,"ko-KR":`L형 소파`,"ms-MY":`Sofa_L`,"nl-NL":`Type L bank`,"pl-PL":`Sofa typu L`,"pt-PT":`Sofá tipo L`,"sr-Cyrl":`L_софа`,"vi-VN":`Sofa loại L`,"zh-CN":`L型沙发`,"zh-TW":`L型沙发`},书桌3:{"de-DE":`Schreibtisch 3`,"en-US":`Desk - 3`,"es-ES":`Escritorio 3`,"fr-FR":`Bureau 3`,"id-ID":`Meja - 3`,"it-IT":`Scrivania 3`,"ja-JP":`机の3`,"ko-KR":`책상 3`,"ms-MY":`Meja - 3`,"nl-NL":`Bureau 3`,"pl-PL":`Biuro 3`,"pt-PT":`Escritório 3`,"sr-Cyrl":`Сто - 3`,"vi-VN":`Bàn 3`,"zh-CN":`书桌3`,"zh-TW":`书桌3`},"会议桌-1":{"de-DE":`Sitzungstisch-1`,"en-US":`Meeting table-1`,"es-ES":`Mesa de reuniones-1`,"fr-FR":`Réunion tableau-1`,"id-ID":`Meja rapat-1`,"it-IT":`Tavolo riunioni-1`,"ja-JP":`会議テーブル-1`,"ko-KR":`회의 테이블-1`,"ms-MY":`Meja mesyuarat-1`,"nl-NL":`Vergadertafel-1`,"pl-PL":`Stół konferencyjny-1`,"pt-PT":`Mesa de reunião-1`,"sr-Cyrl":`Састанак сто-1`,"vi-VN":`Bàn họp - 1`,"zh-CN":`会议桌-1`,"zh-TW":`会议桌-1`},衣架:{"de-DE":`Kleiderständer`,"en-US":`coat_hanger`,"es-ES":`Percha`,"fr-FR":`Cintres`,"id-ID":`gantungan_baju`,"it-IT":`Portaabiti`,"ja-JP":`ハンガー`,"ko-KR":`옷걸이`,"ms-MY":`Penyangkut kot`,"nl-NL":`Kledinghouder`,"pl-PL":`Uchwyt na ubrania`,"pt-PT":`Suporte para roupas`,"sr-Cyrl":`вешалица за капуте`,"vi-VN":`Quần áo Hanger`,"zh-CN":`衣架`,"zh-TW":`衣架`},上下铺:{"de-DE":`Hochbett`,"en-US":`Bunk bed`,"es-ES":`Cama litera`,"fr-FR":`Lit superposé`,"id-ID":`Ranjang tingkat`,"it-IT":`Letto a castello`,"ja-JP":`二層ベッド`,"ko-KR":`위아래`,"ms-MY":`Katil bertingkat`,"nl-NL":`Stapelbed`,"pl-PL":`Łóżko piętrowe`,"pt-PT":`Beliche`,"sr-Cyrl":`Спратни кревет`,"vi-VN":`Giường ngủ`,"zh-CN":`上下铺`,"zh-TW":`上下铺`},蹲坑:{"de-DE":`Knicken`,"en-US":`Squatting`,"es-ES":`En cuclillas`,"fr-FR":`La fosse accroupie`,"id-ID":`Jongkok`,"it-IT":`Squadrato`,"ja-JP":`しゃがみ込む`,"ko-KR":`웅크리고 앉다`,"ms-MY":`Mencangkung`,"nl-NL":`Plakken`,"pl-PL":`Słuchaj się`,"pt-PT":`Agachado`,"sr-Cyrl":`Чучањ`,"vi-VN":`Trang chủ`,"zh-CN":`蹲坑`,"zh-TW":`蹲坑`},男尸:{"de-DE":`Männliche Leiche`,"en-US":`male_corpse`,"es-ES":`Cadáver de hombre`,"fr-FR":`Corps d'homme`,"id-ID":`mayat_pria`,"it-IT":`Corpo di uomo`,"ja-JP":`男の死体`,"ko-KR":`남자 시체`,"ms-MY":`Mayat lelaki`,"nl-NL":`Mannelijk lijk`,"pl-PL":`Mężczyzna`,"pt-PT":`Corpo masculino`,"sr-Cyrl":`мушки_леш`,"vi-VN":`xác đàn ông`,"zh-CN":`男尸`,"zh-TW":`男尸`},女尸:{"de-DE":`Frauen Leichen`,"en-US":`female_corpse`,"es-ES":`Cadáver de mujer`,"fr-FR":`Corps de femme`,"id-ID":`mayat_perempuan`,"it-IT":`Corpo di donna`,"ja-JP":`女の死体`,"ko-KR":`여자 시체`,"ms-MY":`Mayat perempuan`,"nl-NL":`Vrouwlijk lijk`,"pl-PL":`Kobieta`,"pt-PT":`Corpo de mulher`,"sr-Cyrl":`женски леш`,"vi-VN":`nữ thi thể`,"zh-CN":`女尸`,"zh-TW":`女尸`},擦蹭状血迹:{"de-DE":`Blutflecken reiben`,"en-US":`rub-like_blood_stains`,"es-ES":`Limpiar la sangre en forma de frotar`,"fr-FR":`Frotter le sang`,"id-ID":`noda_darah_seperti_gosokan`,"it-IT":`Strofinare il sangue`,"ja-JP":`擦りむいた血痕`,"ko-KR":`문지르는 핏자국`,"ms-MY":`Kesan darah seperti gosokan`,"nl-NL":`Vrijf bloed`,"pl-PL":`Trzyć ślady krwi`,"pt-PT":`Esfregar manchas de sangue`,"sr-Cyrl":`мрље_крви_као_трљање`,"vi-VN":`Vết máu cọ xát`,"zh-CN":`擦蹭状血迹`,"zh-TW":`擦蹭状血迹`},擦拭物:{"de-DE":`Wischen`,"en-US":`wipes`,"es-ES":`Limpiaparabrisas`,"fr-FR":`Lingettes`,"id-ID":`lap`,"it-IT":`Pulizia`,"ja-JP":`ふきとり`,"ko-KR":`닦는 물건`,"ms-MY":`Tisu basah`,"nl-NL":`Veeg`,"pl-PL":`Wytarz`,"pt-PT":`Limpeza`,"sr-Cyrl":`марамице`,"vi-VN":`Khăn lau`,"zh-CN":`擦拭物`,"zh-TW":`擦拭物`},纸团:{"de-DE":`Papiergruppen`,"en-US":`Paper_ball`,"es-ES":`Masa de papel`,"fr-FR":`Groupe de papier`,"id-ID":`Bola_kertas`,"it-IT":`Gruppo di carta`,"ja-JP":`紙の塊`,"ko-KR":`종이 뭉치`,"ms-MY":`Bola kertas`,"nl-NL":`Papiergroep`,"pl-PL":`Grupa Papierowa`,"pt-PT":`Grupo de Papel`,"sr-Cyrl":`Папирна лопта`,"vi-VN":`Bột giấy`,"zh-CN":`纸团`,"zh-TW":`纸团`},未整理的被子:{"de-DE":`Unorganisierte Decken`,"en-US":`Messy quilt`,"es-ES":`Colcha sin ordenar`,"fr-FR":`Couette en pagaille`,"id-ID":`Selimut berantakan`,"it-IT":`Trapunta confusa`,"ja-JP":`未整理のふとん`,"ko-KR":`미정리 이불`,"ms-MY":`Selimut bersepah`,"nl-NL":`Ongeregeld deken`,"pl-PL":`Nieporządny koc`,"pt-PT":`Cobertor desalinhado`,"sr-Cyrl":`Неуредан покривач`,"vi-VN":`Chăn chưa hoàn thiện`,"zh-CN":`未整理的被子`,"zh-TW":`未整理的被子`},手机:{"de-DE":`Handy`,"en-US":`mobile_phone`,"es-ES":`Teléfono móvil`,"fr-FR":`Téléphone portable`,"id-ID":`telepon_seluler`,"it-IT":`Telefono cellulare`,"ja-JP":`携帯電話`,"ko-KR":`핸드폰`,"ms-MY":`telefon_bimbit`,"nl-NL":`Mobiele telefoon`,"pl-PL":`Telefon komórkowy`,"pt-PT":`Telefone móvel`,"sr-Cyrl":`мобилни_телефон`,"vi-VN":`Điện thoại`,"zh-CN":`手机`,"zh-TW":`手机`},菜刀:{"de-DE":`Küchenmesser`,"en-US":`kitchen_knife`,"es-ES":`Cuchillo de cocina`,"fr-FR":`Couteau de cuisine`,"id-ID":`pisau_dapur`,"it-IT":`Coltello da cucina`,"ja-JP":`包丁`,"ko-KR":`식칼`,"ms-MY":`pisau_dapur`,"nl-NL":`Keukenmes`,"pl-PL":`Noże kuchenne`,"pt-PT":`Faca de cozinha`,"sr-Cyrl":`кухињски_нож`,"vi-VN":`Dao phay`,"zh-CN":`菜刀`,"zh-TW":`菜刀`},圆形:{"de-DE":`Rund`,"en-US":`Circle`,"es-ES":`Circular`,"fr-FR":`Circulaire`,"id-ID":`Lingkaran`,"it-IT":`circolare`,"ja-JP":`円形`,"ko-KR":`원형`,"ms-MY":`Bulat`,"nl-NL":`Ronde`,"pl-PL":`Okołne`,"pt-PT":`redondo`,"sr-Cyrl":`Круг`,"vi-VN":`Vòng tròn`,"zh-CN":`圆形`,"zh-TW":`圆形`},三角形:{"de-DE":`Dreieck`,"en-US":`Triangle`,"es-ES":`Triángulo`,"fr-FR":`Le triangle`,"id-ID":`Segitiga`,"it-IT":`Triangolo`,"ja-JP":`三角形`,"ko-KR":`삼각형`,"ms-MY":`Segitiga`,"nl-NL":`Driehoek`,"pl-PL":`Trójkąt`,"pt-PT":`Triângulo`,"sr-Cyrl":`Троугао`,"vi-VN":`Tam giác`,"zh-CN":`三角形`,"zh-TW":`三角形`},五角星形:{"de-DE":`Fünfeckige Sterne`,"en-US":`Star`,"es-ES":`Estrella de cinco puntas`,"fr-FR":`étoile pentagonale`,"id-ID":`Bintang`,"it-IT":`Stella pentangolare`,"ja-JP":`ペンタゴン`,"ko-KR":`오각별`,"ms-MY":`Bintang`,"nl-NL":`Vijfhoekige ster`,"pl-PL":`Pięciokątna gwiazda`,"pt-PT":`Estrela pentágonal`,"sr-Cyrl":`Звезда`,"vi-VN":`Hình ngôi sao năm cánh`,"zh-CN":`五角星形`,"zh-TW":`五角星形`},尸体:{"de-DE":`Leiche`,"en-US":`Corpse`,"es-ES":`Cadáver`,"fr-FR":`Cadavre`,"id-ID":`Mayat`,"it-IT":`Cadavere`,"ja-JP":`死体`,"ko-KR":`시체`,"ms-MY":`Mayat`,"nl-NL":`Lichaam`,"pl-PL":`Trup`,"pt-PT":`Cadáver`,"sr-Cyrl":`Леш`,"vi-VN":`Xác chết`,"zh-CN":`尸体`,"zh-TW":`屍體`},自动识别:{"de-DE":`Automatisch`,"en-US":`Automatic`,"es-ES":`Automático`,"fr-FR":`Automatique`,"id-ID":`Otomatis`,"it-IT":`Automatico`,"ja-JP":`自動認識`,"ko-KR":`자동 식별`,"ms-MY":`Automatik`,"nl-NL":`Automatische herkenning`,"pl-PL":`Automatyczne`,"pt-PT":`Automático`,"sr-Cyrl":`Аутоматски`,"vi-VN":`Tự động nhận dạng`,"zh-CN":`自动识别`,"zh-TW":`自動識別`},虚拟墙:{"de-DE":`Virtuelle Wand`,"en-US":`Virtual wall`,"es-ES":`Pared virtual`,"fr-FR":`Mur virtuel`,"id-ID":`Dinding virtual`,"it-IT":`Muro virtuale`,"ja-JP":`仮想壁`,"ko-KR":`가상 벽`,"ms-MY":`Dinding maya`,"nl-NL":`Virtuele muur`,"pl-PL":`Ściana wirtualna`,"pt-PT":`Parede virtual`,"sr-Cyrl":`Виртуелни зид`,"vi-VN":`Tường ảo`,"zh-CN":`虚拟墙`,"zh-TW":`虛擬牆`},玻璃落地墙:{"de-DE":`Glasbodenwand`,"en-US":`Glass floor wall`,"es-ES":`Pared de vidrio hasta el suelo`,"fr-FR":`Mur de verre au sol`,"id-ID":`Dinding lantai kaca`,"it-IT":`Muro di vetro a pavimento`,"ja-JP":`ガラス床壁`,"ko-KR":`유리 착지벽`,"ms-MY":`Dinding lantai kaca`,"nl-NL":`Glazen vloerwand`,"pl-PL":`Ściana szklana do podłogi`,"pt-PT":`Parede de vidro até o chão`,"sr-Cyrl":`Зид од стакленог пода`,"vi-VN":`Tường kính đến sàn`,"zh-CN":`玻璃落地墙`,"zh-TW":`玻璃落地牆`},栅栏:{"de-DE":`Zaun`,"en-US":`Fence`,"es-ES":`Valla`,"fr-FR":`Clôture`,"id-ID":`Pagar`,"it-IT":`Recinzione`,"ja-JP":`フェンス`,"ko-KR":`울타리`,"ms-MY":`Pagar`,"nl-NL":`hekken`,"pl-PL":`Płot`,"pt-PT":`Cerca`,"sr-Cyrl":`Ограда`,"vi-VN":`Hàng rào`,"zh-CN":`栅栏`,"zh-TW":`柵欄`},玻璃墙:{"de-DE":`Glaswand`,"en-US":`Glass wall`,"es-ES":`Muro de cristal`,"fr-FR":`Mur de verre`,"id-ID":`Dinding kaca`,"it-IT":`Muro di vetro`,"ja-JP":`ガラスの壁`,"ko-KR":`유리벽`,"ms-MY":`Dinding kaca`,"nl-NL":`Glazen muur`,"pl-PL":`Ściana szklana`,"pt-PT":`Parede de vidro`,"sr-Cyrl":`Стаклени зид`,"vi-VN":`Tường kính`,"zh-CN":`玻璃墙`,"zh-TW":`玻璃牆`},悬空墙:{"de-DE":`Schwebende Wand`,"en-US":`Suspended wall`,"es-ES":`Pared suspendida`,"fr-FR":`Mur suspendu`,"id-ID":`Dinding gantung`,"it-IT":`Muro sospeso`,"ja-JP":`オーバーハングした壁`,"ko-KR":`현공벽`,"ms-MY":`Dinding tergantung`,"nl-NL":`Ophangende muur`,"pl-PL":`Wieszana ściana`,"pt-PT":`Parede suspensa`,"sr-Cyrl":`Суспендовани зид`,"vi-VN":`Tường treo`,"zh-CN":`悬空墙`,"zh-TW":`懸空牆`},矮墙:{"de-DE":`Niedrige Wand`,"en-US":`Short wall`,"es-ES":`Pared baja`,"fr-FR":`Mur bas`,"id-ID":`Dinding pendek`,"it-IT":`Muro basso`,"ja-JP":`低い壁`,"ko-KR":`낮은 벽`,"ms-MY":`Dinding pendek`,"nl-NL":`De lage muur`,"pl-PL":`Niska ściana`,"pt-PT":`Parede baixa`,"sr-Cyrl":`Кратак зид`,"vi-VN":`Tường thấp`,"zh-CN":`矮墙`,"zh-TW":`矮牆`},室:{"de-DE":`Zimmer`,"en-US":`room`,"es-ES":`habitación`,"fr-FR":`chambre`,"id-ID":`ruangan`,"it-IT":`stanza`,"ja-JP":`室`,"ko-KR":`실`,"ms-MY":`bilik`,"nl-NL":`Kamer`,"pl-PL":`pokój`,"pt-PT":`quarto`,"sr-Cyrl":`Соба`,"vi-VN":`phòng`,"zh-CN":`室`,"zh-TW":`室`},厅:{"de-DE":`Büro`,"en-US":`office`,"es-ES":`oficina`,"fr-FR":`bureau`,"id-ID":`kantor`,"it-IT":`ufficio`,"ja-JP":`庁`,"ko-KR":`홀`,"ms-MY":`pejabat`,"nl-NL":`De zaal`,"pl-PL":`biuro`,"pt-PT":`escritório`,"sr-Cyrl":`Канцеларија`,"vi-VN":`văn phòng`,"zh-CN":`厅`,"zh-TW":`廳`},厨:{"de-DE":`Küche`,"en-US":`kitchen`,"es-ES":`cocina`,"fr-FR":`cuisine`,"id-ID":`dapur`,"it-IT":`cucina`,"ja-JP":`キッチン`,"ko-KR":`요리사`,"ms-MY":`dapur`,"nl-NL":`Keuken`,"pl-PL":`kuchnia`,"pt-PT":`cozinha`,"sr-Cyrl":`кухиња`,"vi-VN":`bếp`,"zh-CN":`厨`,"zh-TW":`廚房`},卫:{"de-DE":`WC`,"en-US":`restroom`,"es-ES":`baño`,"fr-FR":`toilettes`,"id-ID":`kamar mandi`,"it-IT":`bagno`,"ja-JP":`トイレ`,"ko-KR":`경비`,"ms-MY":`tandas`,"nl-NL":`Wade`,"pl-PL":`toaleta`,"pt-PT":`banheiro`,"sr-Cyrl":`тоалет`,"vi-VN":`nhà vệ sinh`,"zh-CN":`卫`,"zh-TW":`衛生間`},露台:{"de-DE":`Terrasse`,"en-US":`TERRACE`,"es-ES":`terraza`,"fr-FR":`terrasse`,"id-ID":`teras`,"it-IT":`terrazza`,"ja-JP":`テラス`,"ko-KR":`테라스`,"ms-MY":`teres`,"nl-NL":`Het terras`,"pl-PL":`taras`,"pt-PT":`terraço`,"sr-Cyrl":`тераса`,"vi-VN":`sân thượng`,"zh-CN":`露台`,"zh-TW":`露台`},花园:{"de-DE":`Garten`,"en-US":`GARDEN`,"es-ES":`jardín`,"fr-FR":`jardin`,"id-ID":`Taman`,"it-IT":`giardino`,"ja-JP":`庭園`,"ko-KR":`화원`,"ms-MY":`Taman`,"nl-NL":`tuin`,"pl-PL":`ogród`,"pt-PT":`jardim`,"sr-Cyrl":`Башта`,"vi-VN":`vườn`,"zh-CN":`花园`,"zh-TW":`花園`},储:{"de-DE":`Abstellraum`,"en-US":`Storeroom`,"es-ES":`Trastero`,"fr-FR":`Garde-manger`,"id-ID":`Gudang`,"it-IT":`Ripostiglio`,"ja-JP":`物置`,"ko-KR":`저장`,"ms-MY":`Stor`,"nl-NL":`Opslag`,"pl-PL":`Pomieszczenie gospodarcze`,"pt-PT":`Armazém`,"sr-Cyrl":`Остава`,"vi-VN":`Kho`,"zh-CN":`储`,"zh-TW":`儲藏室`},阁楼:{"de-DE":`Dachboden`,"en-US":`ATTIC`,"es-ES":`ático`,"fr-FR":`grenier`,"id-ID":`Loteng`,"it-IT":`soffitta`,"ja-JP":`屋根裏`,"ko-KR":`다락방`,"ms-MY":`Loteng`,"nl-NL":`Loft`,"pl-PL":`strych`,"pt-PT":`sótão`,"sr-Cyrl":`Поткровље`,"vi-VN":`gác xép`,"zh-CN":`阁楼`,"zh-TW":`閣樓`},衣:{"de-DE":`kleidung`,"en-US":`clothing`,"es-ES":`ropa`,"fr-FR":`vêtements`,"id-ID":`pakaian`,"it-IT":`indumenti`,"ja-JP":`衣服`,"ko-KR":`옷`,"ms-MY":`pakaian`,"nl-NL":`Kleding`,"pl-PL":`ubranie`,"pt-PT":`roupa`,"sr-Cyrl":`Одећа`,"vi-VN":`quần áo`,"zh-CN":`衣`,"zh-TW":`衣服`},商铺:{"de-DE":`Läden`,"en-US":`shops`,"es-ES":`tiendas`,"fr-FR":`magasins`,"id-ID":`Toko`,"it-IT":`negozi`,"ja-JP":`店`,"ko-KR":`상가`,"ms-MY":`kedai`,"nl-NL":`winkels`,"pl-PL":`sklepy`,"pt-PT":`lojas`,"sr-Cyrl":`продавнице`,"vi-VN":`cửa hàng`,"zh-CN":`商铺`,"zh-TW":`商店`},写字楼:{"de-DE":`Bürogebäude`,"en-US":`Office Building`,"es-ES":`Edificio de oficinas`,"fr-FR":`Immeuble de bureaux`,"id-ID":`Gedung Kantor`,"it-IT":`Edificio per uffici`,"ja-JP":`オフィスビル`,"ko-KR":`오피스 빌딩`,"ms-MY":`Bangunan Pejabat`,"nl-NL":`Kantoorgebouw`,"pl-PL":`Budynek biurowy`,"pt-PT":`Prédio de escritórios`,"sr-Cyrl":`Пословна зграда`,"vi-VN":`Tòa nhà văn phòng`,"zh-CN":`写字楼`,"zh-TW":`辦公大樓`},木质地板:{"de-DE":`Holzboden`,"en-US":`Wooden floor`,"es-ES":`Suelo de madera`,"fr-FR":`Plancher en bois`,"id-ID":`Lantai kayu`,"it-IT":`Pavimento in legno`,"ja-JP":`木の床`,"ko-KR":`목재 마루`,"ms-MY":`Lantai kayu`,"nl-NL":`Houten vloeren`,"pl-PL":`Drewniana podłoga`,"pt-PT":`Piso de madeira`,"sr-Cyrl":`Дрвени под`,"vi-VN":`Sàn gỗ`,"zh-CN":`木质地板`,"zh-TW":`木地板`},瓷砖地面:{"de-DE":`Keramikfliese`,"en-US":`Ceramic tile`,"es-ES":`Azulejo cerámico`,"fr-FR":`Carreau de céramique`,"id-ID":`Ubin keramik`,"it-IT":`Piastrella ceramica`,"ja-JP":`セラミックタイル`,"ko-KR":`타일 바닥`,"ms-MY":`Jubin seramik`,"nl-NL":`Tegelvloer`,"pl-PL":`Płytki ceramiczne`,"pt-PT":`Telha cerâmica`,"sr-Cyrl":`Керамичка плочица`,"vi-VN":`Gạch men`,"zh-CN":`瓷砖地面`,"zh-TW":`陶瓷磁磚`},户外地面:{"de-DE":`Außenboden`,"en-US":`Outdoor ground`,"es-ES":`Suelo exterior`,"fr-FR":`Sol extérieur`,"id-ID":`Tanah luar`,"it-IT":`Pavimento esterno`,"ja-JP":`屋外グラウンド`,"ko-KR":`옥외 바닥`,"ms-MY":`Tanah luar`,"nl-NL":`Buitengrond`,"pl-PL":`Podłoga na zewnątrz`,"pt-PT":`Chão ao ar livre`,"sr-Cyrl":`Спољашње тло`,"vi-VN":`Mặt đất ngoài trời`,"zh-CN":`户外地面`,"zh-TW":`室外地面`},卫生间地面:{"de-DE":`Toilettenboden`,"en-US":`Toilet floor`,"es-ES":`Suelo del baño`,"fr-FR":`Sol de toilette`,"id-ID":`Lantai toilet`,"it-IT":`Pavimento del bagno`,"ja-JP":`トイレの床`,"ko-KR":`화장실 바닥`,"ms-MY":`Lantai tandas`,"nl-NL":`Toiletvloer`,"pl-PL":`Podłoga toaletowa`,"pt-PT":`Chão do banheiro`,"sr-Cyrl":`Под тоалета`,"vi-VN":`Sàn nhà vệ sinh`,"zh-CN":`卫生间地面`,"zh-TW":`廁所地板`},阳台地面:{"de-DE":`Balkonboden`,"en-US":`Balcony floor`,"es-ES":`Suelo del balcón`,"fr-FR":`Sol de balcon`,"id-ID":`Lantai balkon`,"it-IT":`Pavimento del balcone`,"ja-JP":`バルコニーの床`,"ko-KR":`베란다 바닥`,"ms-MY":`Lantai balkoni`,"nl-NL":`Balkon grond`,"pl-PL":`Podłoga na balkonie`,"pt-PT":`Chão da varanda`,"sr-Cyrl":`Под балкона`,"vi-VN":`Sàn ban công`,"zh-CN":`阳台地面`,"zh-TW":`陽台地板`},车库地面:{"de-DE":`Garagenboden`,"en-US":`Garage floor`,"es-ES":`Suelo de garaje`,"fr-FR":`Sol de garage`,"id-ID":`Lantai garasi`,"it-IT":`Pavimento del garage`,"ja-JP":`ガレージの床`,"ko-KR":`차고 바닥`,"ms-MY":`Lantai garaj`,"nl-NL":`Garagegrond`,"pl-PL":`Podłoga garażu`,"pt-PT":`Chão da garagem`,"sr-Cyrl":`Под гараже`,"vi-VN":`Sàn nhà để xe`,"zh-CN":`车库地面`,"zh-TW":`車庫地板`},餐厅:{"de-DE":`Esszimmer`,"en-US":`DINING`,"es-ES":`Comedor`,"fr-FR":`Salle à manger`,"id-ID":`Ruang Makan`,"it-IT":`Sala da pranzo`,"ja-JP":`ダイニング`,"ko-KR":`식당`,"ms-MY":`Ruang Makan`,"nl-NL":`Het restaurant`,"pl-PL":`Jadalnia`,"pt-PT":`Sala de jantar`,"sr-Cyrl":`Трпезарија`,"vi-VN":`Phòng ăn`,"zh-CN":`餐厅`,"zh-TW":`餐廳`},淋浴间:{"de-DE":`Dusche`,"en-US":`SHOWER`,"es-ES":`Ducha`,"fr-FR":`Douche`,"id-ID":`Mandi`,"it-IT":`Doccia`,"ja-JP":`バスルーム`,"ko-KR":`샤워실`,"ms-MY":`Bilik mandi`,"nl-NL":`Douche`,"pl-PL":`Prysznic`,"pt-PT":`Chuveiro`,"sr-Cyrl":`Туш`,"vi-VN":`Vòi sen`,"zh-CN":`淋浴间`,"zh-TW":`淋浴間`},洗手间:{"de-DE":`Waschraum`,"en-US":`BATHROOM`,"es-ES":`Baño`,"fr-FR":`Toilettes`,"id-ID":`Kamar mandi`,"it-IT":`Bagno`,"ja-JP":`洗面室`,"ko-KR":`화장실`,"ms-MY":`Tandas`,"nl-NL":`Het toilet`,"pl-PL":`Łazienka`,"pt-PT":`Banheiro`,"sr-Cyrl":`Тоалет`,"vi-VN":`Nhà vệ sinh`,"zh-CN":`洗手间`,"zh-TW":`洗手間`},多功能间:{"de-DE":`Multifunktionsraum`,"en-US":`FLEX`,"es-ES":`Habitación multifuncional`,"fr-FR":`Salle polyvalente`,"id-ID":`Ruangan multi-fungsi`,"it-IT":`Stanza multifunzione`,"ja-JP":`フリースペース`,"ko-KR":`다기능 간`,"ms-MY":`Bilik serbaguna`,"nl-NL":`Multifunctionele kamer`,"pl-PL":`Pokój wielofunkcyjny`,"pt-PT":`Sala multiusos`,"sr-Cyrl":`Мултифункционална просторија`,"vi-VN":`Phòng đa năng`,"zh-CN":`多功能间`,"zh-TW":`多功能房間`},保姆间:{"de-DE":`Kindermädchenzimmer`,"en-US":`MAID'S ROOM`,"es-ES":`Habitación de niñera`,"fr-FR":`Chambre de nounou`,"id-ID":`Ruang pengasuh`,"it-IT":`Camera della tata`,"ja-JP":`ベビーシッター?ルーム`,"ko-KR":`보모실`,"ms-MY":`Bilik pengasuh`,"nl-NL":`Babysitter kamer`,"pl-PL":`Pokój niani`,"pt-PT":`Quarto da babá`,"sr-Cyrl":`Соба за дадиљу`,"vi-VN":`Phòng bảo mẫu`,"zh-CN":`保姆间`,"zh-TW":`保姆房`},衣帽间:{"de-DE":`Garderobe`,"en-US":`CLOSET`,"es-ES":`Guardarropa`,"fr-FR":`Vestiaire`,"id-ID":`Ruang ganti`,"it-IT":`Guardaroba`,"ja-JP":`ウォークインクローゼット`,"ko-KR":`옷방`,"ms-MY":`Bilik persalinan`,"nl-NL":`Kledingkamer`,"pl-PL":`Szatnia`,"pt-PT":`Guarda-roupa`,"sr-Cyrl":`Гардероба`,"vi-VN":`Phòng để quần áo`,"zh-CN":`衣帽间`,"zh-TW":`衣帽間`},车库:{"de-DE":`Fahrzeughalle`,"en-US":`GARAGE`,"es-ES":`garaje`,"fr-FR":`garage`,"id-ID":`Garasi`,"it-IT":`garage`,"ja-JP":`ガレージ`,"ko-KR":`차고`,"ms-MY":`Garaj`,"nl-NL":`De garage`,"pl-PL":`garaż`,"pt-PT":`garagem`,"sr-Cyrl":`Гаража`,"vi-VN":`garage`,"zh-CN":`车库`,"zh-TW":`車庫`},电梯:{"de-DE":`Aufzug`,"en-US":`ELEVATOR`,"es-ES":`Ascensor`,"fr-FR":`Ascenseur`,"id-ID":`Lift`,"it-IT":`Ascensore`,"ja-JP":`エレベーター`,"ko-KR":`엘리베이터`,"ms-MY":`Lif`,"nl-NL":`De lift`,"pl-PL":`Winda`,"pt-PT":`Elevador`,"sr-Cyrl":`Лифт`,"vi-VN":`Thang máy`,"zh-CN":`电梯`,"zh-TW":`電梯`},地下室:{"de-DE":`Keller`,"en-US":`BASEMENT`,"es-ES":`sótano`,"fr-FR":`sous-sol`,"id-ID":`Ruang bawah tanah`,"it-IT":`seminterrato`,"ja-JP":`地下室`,"ko-KR":`지하실`,"ms-MY":`Ruang bawah tanah`,"nl-NL":`De kelder`,"pl-PL":`piwnica`,"pt-PT":`porão`,"sr-Cyrl":`Подрум`,"vi-VN":`tầng hầm`,"zh-CN":`地下室`,"zh-TW":`地下室`},天井:{"de-DE":`Innenhof`,"en-US":`COURTYARD`,"es-ES":`patio`,"fr-FR":`cour`,"id-ID":`Halaman`,"it-IT":`cortile`,"ja-JP":`天井`,"ko-KR":`천정`,"ms-MY":`Laman`,"nl-NL":`Het patio`,"pl-PL":`podwórko`,"pt-PT":`pátio`,"sr-Cyrl":`Двориште`,"vi-VN":`sân`,"zh-CN":`天井`,"zh-TW":`天井`},阳光房:{"de-DE":`Wintergarten`,"en-US":`SUNROOM`,"es-ES":`sala de sol`,"fr-FR":`salle de soleil`,"id-ID":`Ruang matahari`,"it-IT":`sala solare`,"ja-JP":`ひかりの部屋`,"ko-KR":`햇빛집`,"ms-MY":`Bilik matahari`,"nl-NL":`Zonnige kamer`,"pl-PL":`pokój słoneczny`,"pt-PT":`sala de sol`,"sr-Cyrl":`Сунчана соба`,"vi-VN":`phòng nắng`,"zh-CN":`阳光房`,"zh-TW":`陽光房`},过道:{"de-DE":`Flur`,"en-US":`HALLWAY`,"es-ES":`pasillo`,"fr-FR":`couloir`,"id-ID":`Lorong`,"it-IT":`androne`,"ja-JP":`廊下`,"ko-KR":`통로`,"ms-MY":`Lorong`,"nl-NL":`De gang`,"pl-PL":`korytarz`,"pt-PT":`corredor`,"sr-Cyrl":`Ходник`,"vi-VN":`hành lang`,"zh-CN":`过道`,"zh-TW":`走廊`},楼梯间:{"de-DE":`Treppe`,"en-US":`STAIR`,"es-ES":`escalera`,"fr-FR":`escalier`,"id-ID":`Tangga`,"it-IT":`scala`,"ja-JP":`階段`,"ko-KR":`계단간`,"ms-MY":`Tangga`,"nl-NL":`De trap`,"pl-PL":`schody`,"pt-PT":`escada`,"sr-Cyrl":`Степениште`,"vi-VN":`cầu thang`,"zh-CN":`楼梯间`,"zh-TW":`樓梯`},门厅:{"de-DE":`Lobby`,"en-US":`FOYER`,"es-ES":`vestíbulo`,"fr-FR":`hall`,"id-ID":`lobi`,"it-IT":`atrio`,"ja-JP":`ロビー`,"ko-KR":`현관`,"ms-MY":`Lobi`,"nl-NL":`Ingang`,"pl-PL":`hol`,"pt-PT":`hall`,"sr-Cyrl":`хол`,"vi-VN":`hành lang`,"zh-CN":`门厅`,"zh-TW":`大廳`},入户花园:{"de-DE":`Heimischer Garten`,"en-US":`ENTRY GARDEN`,"es-ES":`jardín doméstico`,"fr-FR":`jardin domestique`,"id-ID":`Taman rumah`,"it-IT":`giardino di casa`,"ja-JP":`家庭菜園`,"ko-KR":`화원에 입주하다`,"ms-MY":`Taman rumah`,"nl-NL":`Ingang Tuin`,"pl-PL":`ogród domowy`,"pt-PT":`jardim de casa`,"sr-Cyrl":`Башта код куће`,"vi-VN":`vườn nhà`,"zh-CN":`入户花园`,"zh-TW":`入戶花園`},玄关:{"de-DE":`Eingang`,"en-US":`ENTRY`,"es-ES":`entrada`,"fr-FR":`entrée`,"id-ID":`Masuk`,"it-IT":`ingresso`,"ja-JP":`玄関`,"ko-KR":`현관`,"ms-MY":`Pintu masuk`,"nl-NL":`Ingang`,"pl-PL":`wejście`,"pt-PT":`entrada`,"sr-Cyrl":`Улаз`,"vi-VN":`lối vào`,"zh-CN":`玄关`,"zh-TW":`玄關`},挑空:{"de-DE":`Starter`,"en-US":`VOID`,"es-ES":`Lanzadores`,"fr-FR":`Lanceurs`,"id-ID":`Peluncur`,"it-IT":`Lanciatori`,"ja-JP":`暇を見つける`,"ko-KR":`틈을 내다`,"ms-MY":`Pelancar`,"nl-NL":`Kies leeg`,"pl-PL":`Wyrzutniki`,"pt-PT":`Lançadores`,"sr-Cyrl":`Лансери`,"vi-VN":`Đầu nổ`,"zh-CN":`挑空`,"zh-TW":`挑空`},晾晒区:{"de-DE":`Trockenbereich`,"en-US":`DRYING AREA`,"es-ES":`Área de secado`,"fr-FR":`Zone de séchage`,"id-ID":`Area pengeringan`,"it-IT":`Area di essiccazione`,"ja-JP":`晒し区域`,"ko-KR":`건조구역`,"ms-MY":`Kawasan pengeringan`,"nl-NL":`Droogruimte`,"pl-PL":`Obszar suszenia`,"pt-PT":`Área de secagem`,"sr-Cyrl":`Површина за сушење`,"vi-VN":`Khu vực phơi`,"zh-CN":`晾晒区`,"zh-TW":`曬衣區`},洗衣房:{"de-DE":`Waschküche`,"en-US":`LAUNDRY`,"es-ES":`lavadero`,"fr-FR":`Buanderie`,"id-ID":`Ruang Cuci`,"it-IT":`Lavanderia`,"ja-JP":`ランドリー`,"ko-KR":`세탁소`,"ms-MY":`Bilik dobi`,"nl-NL":`Wasruimte`,"pl-PL":`Pralnia`,"pt-PT":`lavanderia`,"sr-Cyrl":`Вешерај`,"vi-VN":`phòng giặt`,"zh-CN":`洗衣房`,"zh-TW":`洗衣房`},娱乐区:{"de-DE":`Unterhaltungsbereich`,"en-US":`REC ROOM`,"es-ES":`área de entretenimiento`,"fr-FR":`Zone de divertissement`,"id-ID":`Area hiburan`,"it-IT":`Area intrattenimento`,"ja-JP":`娯楽エリア`,"ko-KR":`오락 구역`,"ms-MY":`Kawasan hiburan`,"nl-NL":`Vermaakgebied`,"pl-PL":`Obszar rozrywki`,"pt-PT":`área de entretenimento`,"sr-Cyrl":`Зона за забаву`,"vi-VN":`khu vui chơi`,"zh-CN":`娱乐区`,"zh-TW":`娛樂區`},健身区:{"de-DE":`Fitnessbereich`,"en-US":`FITNESS`,"es-ES":`zona de fitness`,"fr-FR":`Zone de fitness`,"id-ID":`Area kebugaran`,"it-IT":`Area fitness`,"ja-JP":`フィットネスゾーン`,"ko-KR":`헬스장`,"ms-MY":`Kawasan kecergasan`,"nl-NL":`Fitnessruimte`,"pl-PL":`Obszar fitness`,"pt-PT":`área de fitness`,"sr-Cyrl":`Фитнес зона`,"vi-VN":`khu vực tập thể dục`,"zh-CN":`健身区`,"zh-TW":`健身區`},接待区:{"de-DE":`Empfangsbereich`,"en-US":`RECEPTION`,"es-ES":`Área de recepción`,"fr-FR":`Zone de réception`,"id-ID":`Area resepsi`,"it-IT":`Area reception`,"ja-JP":`接待区域`,"ko-KR":`접견 구역`,"ms-MY":`Kawasan penerimaan`,"nl-NL":`Receptie`,"pl-PL":`Strefa recepcji`,"pt-PT":`Área de recepção`,"sr-Cyrl":`Пријемни простор`,"vi-VN":`Khu tiếp đón`,"zh-CN":`接待区`,"zh-TW":`接待區`},影音区:{"de-DE":`Medien`,"en-US":`MEDIA`,"es-ES":`Multimedia`,"fr-FR":`Médias`,"id-ID":`Media`,"it-IT":`Media`,"ja-JP":`メディアエリア`,"ko-KR":`영상 음향 구역`,"ms-MY":`Media`,"nl-NL":`Videogebied`,"pl-PL":`Media`,"pt-PT":`Mídia`,"sr-Cyrl":`Медији`,"vi-VN":`Truyền thông`,"zh-CN":`影音区`,"zh-TW":`媒體區`},餐饮区:{"de-DE":`Speisebereich`,"en-US":`DINING`,"es-ES":`Área de comedor`,"fr-FR":`Zone de restauration`,"id-ID":`Area makan`,"it-IT":`Area ristoro`,"ja-JP":`フードコート`,"ko-KR":`음식점`,"ms-MY":`Kawasan makan`,"nl-NL":`Eetgedeelte`,"pl-PL":`Strefa restauracyjna`,"pt-PT":`Área de jantar`,"sr-Cyrl":`Трпезаријски простор`,"vi-VN":`Khu ẩm thực`,"zh-CN":`餐饮区`,"zh-TW":`餐飲區`},起居室:{"de-DE":`Wohnzimmer`,"en-US":`LIVING`,"es-ES":`Sala de estar`,"fr-FR":`Salle de séjour`,"id-ID":`Ruang Tamu`,"it-IT":`Soggiorno`,"ja-JP":`リビングダイニング`,"ko-KR":`거실`,"ms-MY":`Ruang tamu`,"nl-NL":`Woonkamer`,"pl-PL":`Pokój dzienny`,"pt-PT":`Sala de estar`,"sr-Cyrl":`Дневни боравак`,"vi-VN":`Phòng khách`,"zh-CN":`起居室`,"zh-TW":`起居室`},主卧:{"de-DE":`Haupt-Schlafzimmer`,"en-US":`PRIMARY BEDROOM`,"es-ES":`Dormitorio principal`,"fr-FR":`Chambre principale`,"id-ID":`Kamar Tidur Utama`,"it-IT":`Camera matrimoniale`,"ja-JP":`主寝室`,"ko-KR":`안방`,"ms-MY":`Bilik tidur utama`,"nl-NL":`Hoofdbed`,"pl-PL":`Główna sypialnia`,"pt-PT":`Quarto principal`,"sr-Cyrl":`Главна спаваћа соба`,"vi-VN":`Phòng ngủ chính`,"zh-CN":`主卧`,"zh-TW":`主臥室`},次卧:{"de-DE":`Bett`,"en-US":`BEDROOM`,"es-ES":`Cama`,"fr-FR":`Lit`,"id-ID":`Tempat tidur`,"it-IT":`Letto`,"ja-JP":`寝室`,"ko-KR":`차침`,"ms-MY":`Katil`,"nl-NL":`Tweede bed`,"pl-PL":`Łóżko`,"pt-PT":`Cama`,"sr-Cyrl":`Кревет`,"vi-VN":`Giường`,"zh-CN":`次卧`,"zh-TW":`次臥室`},优化间:{"de-DE":`Optimierungszimmer`,"en-US":`OPTIMIZATION`,"es-ES":`Sala de optimización`,"fr-FR":`Salle d'optimisation`,"id-ID":`Ruang optimasi`,"it-IT":`Stanza di ottimizzazione`,"ja-JP":`最適化室`,"ko-KR":`최적화 간`,"ms-MY":`Bilik pengoptimuman`,"nl-NL":`Optimale kamer`,"pl-PL":`Pokój optymalizacji`,"pt-PT":`Sala de otimização`,"sr-Cyrl":`Соба за оптимизацију`,"vi-VN":`Phòng tối ưu`,"zh-CN":`优化间`,"zh-TW":`優化間`},办公室:{"de-DE":`Büro`,"en-US":`OFFICE`,"es-ES":`oficina`,"fr-FR":`bureau`,"id-ID":`kantor`,"it-IT":`ufficio`,"ja-JP":`事務室`,"ko-KR":`사무실`,"ms-MY":`pejabat`,"nl-NL":`Het kantoor`,"pl-PL":`biuro`,"pt-PT":`escritório`,"sr-Cyrl":`Канцеларија`,"vi-VN":`văn phòng`,"zh-CN":`办公室`,"zh-TW":`辦公室`},会议室:{"de-DE":`Konferenzraum`,"en-US":`CONFERENCE ROOM`,"es-ES":`Sala de reuniones`,"fr-FR":`Salle de Réunion`,"id-ID":`Ruang Rapat`,"it-IT":`Sala Riunioni`,"ja-JP":`会議室`,"ko-KR":`회의실`,"ms-MY":`Bilik Mesyuarat`,"nl-NL":`Vergaderruimte`,"pl-PL":`Sala konferencyjna`,"pt-PT":`Sala de Reuniões`,"sr-Cyrl":`Сала за састанке`,"vi-VN":`Phòng họp`,"zh-CN":`会议室`,"zh-TW":`會議室`},洽谈间:{"de-DE":`Verhandlungsraum`,"en-US":`CONSULTATION ROOM`,"es-ES":`Sala de negociación`,"fr-FR":`Salle de négociation`,"id-ID":`Ruang negosiasi`,"it-IT":`Sala di negoziazione`,"ja-JP":`商談室`,"ko-KR":`상담실`,"ms-MY":`Bilik rundingan`,"nl-NL":`Gesprekskamer`,"pl-PL":`Pokój negocjacyjny`,"pt-PT":`Sala de negociação`,"sr-Cyrl":`Соба за преговоре`,"vi-VN":`Phòng đàm phán`,"zh-CN":`洽谈间`,"zh-TW":`洽談間`},共享大厅:{"de-DE":`Gemeinschaftshalle`,"en-US":`COMMUNAL HALL`,"es-ES":`Sala de compartir`,"fr-FR":`Salle de partage`,"id-ID":`Aula berbagi`,"it-IT":`Sala condivisa`,"ja-JP":`共有ホール`,"ko-KR":`공유 홀`,"ms-MY":`Dewan Perkongsian`,"nl-NL":`Gedeelde hal`,"pl-PL":`Sala udostępniania`,"pt-PT":`Hall de compartilhamento`,"sr-Cyrl":`Дељена сала`,"vi-VN":`Hội trường chia sẻ`,"zh-CN":`共享大厅`,"zh-TW":`共享大廳`},水吧:{"de-DE":`Wasserbar`,"en-US":`COFFEE BAR`,"es-ES":`Bar de agua`,"fr-FR":`Bar à eau`,"id-ID":`Bar Air`,"it-IT":`Bar dell'acqua`,"ja-JP":`ウォーターバー`,"ko-KR":`물 바`,"ms-MY":`Bar Air`,"nl-NL":`Neem maar water`,"pl-PL":`Bar wodny`,"pt-PT":`Bar de água`,"sr-Cyrl":`Бар за воду`,"vi-VN":`Quầy nước`,"zh-CN":`水吧`,"zh-TW":`水吧`},出入口:{"de-DE":`Eingang`,"en-US":`ENTRY`,"es-ES":`Entrada`,"fr-FR":`Entrée`,"id-ID":`Masuk`,"it-IT":`Entrata`,"ja-JP":`入口`,"ko-KR":`출입구`,"ms-MY":`Pintu masuk`,"nl-NL":`Ingang`,"pl-PL":`Wejście`,"pt-PT":`Entrada`,"sr-Cyrl":`Улаз`,"vi-VN":`Lối vào`,"zh-CN":`出入口`,"zh-TW":`出入口`},大厅:{"de-DE":`Halle`,"en-US":`HALL`,"es-ES":`Sala`,"fr-FR":`Salle`,"id-ID":`Aula`,"it-IT":`Sala`,"ja-JP":`大広間`,"ko-KR":`홀`,"ms-MY":`Dewan`,"nl-NL":`De lobby`,"pl-PL":`Hala`,"pt-PT":`Sala`,"sr-Cyrl":`Ходник`,"vi-VN":`Hội trường`,"zh-CN":`大厅`,"zh-TW":`大廳`},包厢:{"de-DE":`Box`,"en-US":`PRIVATE`,"es-ES":`Box`,"fr-FR":`Boîte`,"id-ID":`Kotak`,"it-IT":`Box`,"ja-JP":`貸し切り席`,"ko-KR":`특별석`,"ms-MY":`Kotak`,"nl-NL":`Kabine`,"pl-PL":`Pudło`,"pt-PT":`Caixa`,"sr-Cyrl":`Кутија`,"vi-VN":`Hộp`,"zh-CN":`包厢`,"zh-TW":`包廂`},办公区:{"de-DE":`Bürobereich`,"en-US":`OFFICE`,"es-ES":`Área de oficina`,"fr-FR":`Zone de bureau`,"id-ID":`Area kantor`,"it-IT":`Area ufficio`,"ja-JP":`オフィスエリア`,"ko-KR":`사무실 구역`,"ms-MY":`Kawasan Pejabat`,"nl-NL":`Kantoorruimte`,"pl-PL":`Obszar biura`,"pt-PT":`Área de escritório`,"sr-Cyrl":`Канцеларијски простор`,"vi-VN":`Khu văn phòng`,"zh-CN":`办公区`,"zh-TW":`辦公區`},老板间:{"de-DE":`Chefzimmer`,"en-US":`EXECUTIVE OFFICE`,"es-ES":`Sala del jefe`,"fr-FR":`Salle du patron`,"id-ID":`Ruang bos`,"it-IT":`Stanza del capo`,"ja-JP":`ボスルーム`,"ko-KR":`사장간`,"ms-MY":`Bilik Bos`,"nl-NL":`Baas kamer`,"pl-PL":`Pokój szefa`,"pt-PT":`Sala do chefe`,"sr-Cyrl":`Шефова соба`,"vi-VN":`Phòng sếp`,"zh-CN":`老板间`,"zh-TW":`老板間`},"休息区/水吧":{"de-DE":`Ruhebereich / Wasserbar`,"en-US":`REST AREA`,"es-ES":`Área de descanso / bar de agua`,"fr-FR":`Zone de repos / bar à eau`,"id-ID":`Area istirahat`,"it-IT":`Area relax / bar dell'acqua`,"ja-JP":`休憩エリア/水バー`,"ko-KR":`휴게소/물바`,"ms-MY":`Kawasan Rehat`,"nl-NL":`Zithoek/waterbar`,"pl-PL":`Obszar odpoczynku / bar wodny`,"pt-PT":`Área de descanso / bar de água`,"sr-Cyrl":`Простор за одмор`,"vi-VN":`Khu vực nghỉ ngơi / quầy nước`,"zh-CN":`休息区/水吧`,"zh-TW":`休息區/水吧`},空中花园:{"de-DE":`Himmelsgarten`,"en-US":`SKY GARDEN`,"es-ES":`Jardín en el cielo`,"fr-FR":`Jardin suspendu`,"id-ID":`Taman langit`,"it-IT":`Giardino sospeso`,"ja-JP":`空中庭園`,"ko-KR":`공중정원`,"ms-MY":`Taman Langit`,"nl-NL":`De luchttuin`,"pl-PL":`Ogród na niebie`,"pt-PT":`Jardim suspenso`,"sr-Cyrl":`Небеска башта`,"vi-VN":`Vườn trên không`,"zh-CN":`空中花园`,"zh-TW":`空中花園`},洋室:{"de-DE":`Westliches Zimmer`,"en-US":`WESTERN-STYLE ROOM`,"es-ES":`Habitación de estilo occidental`,"fr-FR":`Chambre de style occidental`,"id-ID":`Ruang bergaya Barat`,"it-IT":`Camera in stile occidentale`,"ja-JP":`洋室`,"ko-KR":`양실`,"ms-MY":`Bilik Gaya Barat`,"nl-NL":`Ocean kamer`,"pl-PL":`Pokój w stylu zachodnim`,"pt-PT":`Quarto de estilo ocidental`,"sr-Cyrl":`Соба у западном стилу`,"vi-VN":`Phòng kiểu Tây`,"zh-CN":`洋室`,"zh-TW":`洋室`},和室:{"de-DE":`Japanisches Zimmer`,"en-US":`WASHITSU`,"es-ES":`Washitsu`,"fr-FR":`Washitsu`,"id-ID":`Washitsu`,"it-IT":`Washitsu`,"ja-JP":`和室`,"ko-KR":`화실`,"ms-MY":`Washitsu`,"nl-NL":`en kamer`,"pl-PL":`Washitsu`,"pt-PT":`Washitsu`,"sr-Cyrl":`Вашицу`,"vi-VN":`Washitsu`,"zh-CN":`和室`,"zh-TW":`和室`},卧室卫生间:{"de-DE":`Eigenes Bad`,"en-US":`En-suite`,"es-ES":`Baño privado`,"fr-FR":`Salle de bain attenante`,"id-ID":`Kamar mandi dalam`,"it-IT":`Bagno privato`,"ja-JP":`エンスイート`,"ko-KR":`침실 화장실`,"ms-MY":`Bilik Mandi Dalam`,"nl-NL":`Slaapkamer toilet`,"pl-PL":`Łazienka en-suite`,"pt-PT":`Suíte`,"sr-Cyrl":`Сопствено купатило`,"vi-VN":`Phòng tắm riêng`,"zh-CN":`卧室卫生间`,"zh-TW":`套房衛生間`},后院:{"de-DE":`Hinterhof`,"en-US":`Backyard`,"es-ES":`Patio trasero`,"fr-FR":`Arrière-cour`,"id-ID":`Halaman belakang`,"it-IT":`Cortile posteriore`,"ja-JP":`裏庭`,"ko-KR":`뒤뜰`,"ms-MY":`Halaman Belakang`,"nl-NL":`achtertuin`,"pl-PL":`Podwórko`,"pt-PT":`Quintal`,"sr-Cyrl":`Двориште`,"vi-VN":`Sân sau`,"zh-CN":`后院`,"zh-TW":`後院`},家庭活动区:{"de-DE":`Familie`,"en-US":`Family`,"es-ES":`Familia`,"fr-FR":`Famille`,"id-ID":`Keluarga`,"it-IT":`Famiglia`,"ja-JP":`活動エリア`,"ko-KR":`가족 활동 구역`,"ms-MY":`Keluarga`,"nl-NL":`Gezinsactiviteiten`,"pl-PL":`Rodzina`,"pt-PT":`Família`,"sr-Cyrl":`Породица`,"vi-VN":`Gia đình`,"zh-CN":`家庭活动区`,"zh-TW":`家庭活動區`},"会议桌-2":{"de-DE":`Sitzungstisch-2`,"en-US":`Meeting table-2`,"es-ES":`Mesa de reuniones-2`,"fr-FR":`Réunion tableau-2`,"id-ID":`Meja rapat-2`,"it-IT":`Tavolo riunioni-2`,"ja-JP":`会議テーブル-2`,"ko-KR":`회의 테이블-2`,"ms-MY":`Meja mesyuarat-2`,"nl-NL":`Vergadertafel-2`,"pl-PL":`Stół konferencyjny-2`,"pt-PT":`Mesa de reunião-2`,"sr-Cyrl":`Састанак сто-2`,"vi-VN":`Bàn họp - 2`,"zh-CN":`会议桌-2`,"zh-TW":`会议桌-2`},餐椅:{"de-DE":`Essstühle`,"en-US":`Dining chair`,"es-ES":`Silla de comedor`,"fr-FR":`Chaises à manger`,"id-ID":`Kursi makan`,"it-IT":`Sedia da pranzo`,"ja-JP":`ダイニングチェア`,"ko-KR":`식탁 의자`,"ms-MY":`Kerusi Makan`,"nl-NL":`Eetstoelen`,"pl-PL":`Krzesło do jedzenia`,"pt-PT":`Cadeira de jantar`,"sr-Cyrl":`Столица за трпезарију`,"vi-VN":`Ghế ăn`,"zh-CN":`餐椅`,"zh-TW":`餐椅`},"转椅-1":{"de-DE":`Stuhl-1`,"en-US":`Rotating chair 1`,"es-ES":`Silla giratoria - 1`,"fr-FR":`Chaise pivotante - 1`,"id-ID":`Kursi berputar 1`,"it-IT":`Sedia girevole - 1`,"ja-JP":`回転椅子-1`,"ko-KR":`회전의자-1`,"ms-MY":`Kerusi Berpusing 1`,"nl-NL":`draaistoel-1`,"pl-PL":`Krzesło obrotowe - 1`,"pt-PT":`Cadeira giratória - 1`,"sr-Cyrl":`Ротирајућа столица 1`,"vi-VN":`Ghế xoay - 1`,"zh-CN":`转椅-1`,"zh-TW":`转椅-1`},"转椅-2":{"de-DE":`Drehstühl - 2`,"en-US":`Rotating chair 2`,"es-ES":`Silla giratoria - 2`,"fr-FR":`Chaise pivotante - 2`,"id-ID":`Kursi putar 2`,"it-IT":`Sedia girevole - 2`,"ja-JP":`回転椅子-2`,"ko-KR":`회전의자-2`,"ms-MY":`Kerusi Berpusing 2`,"nl-NL":`Draaistoel - 2`,"pl-PL":`Krzesło zwrotne - 2`,"pt-PT":`Cadeira giratória - 2`,"sr-Cyrl":`Ротирајућа столица 2`,"vi-VN":`Ghế xoay - 2`,"zh-CN":`转椅-2`,"zh-TW":`转椅-2`},长方形茶几:{"de-DE":`Rechteckiger Teetisch`,"en-US":`Rectangular coffee table`,"es-ES":`Mesa de café rectangular`,"fr-FR":`Table à thé rectangulaire`,"id-ID":`Meja kopi persegi panjang`,"it-IT":`Tavola da tè rettangolare`,"ja-JP":`長方形のテーブル`,"ko-KR":`직사각형 탁자`,"ms-MY":`Meja Kopi Segi Empat Tepat`,"nl-NL":`Rechthoekige theetafel`,"pl-PL":`Prostokątny stolik na kawę`,"pt-PT":`Mesa de chá rectangular`,"sr-Cyrl":`Правоугаони сточић за кафу`,"vi-VN":`Bàn cà phê hình chữ nhật`,"zh-CN":`长方形茶几`,"zh-TW":`长方形茶几`},抽油烟机:{"de-DE":`Dunstabzugshaube`,"en-US":`Range Hood`,"es-ES":`Campana extractora`,"fr-FR":`Hotte aspirante`,"id-ID":`Cooker Hood`,"it-IT":`Cappa aspirante`,"ja-JP":`レンジフード`,"ko-KR":`범위 후드`,"ms-MY":`Hud Dapur`,"nl-NL":`Afzuigkap`,"pl-PL":`Okap kuchenny`,"pt-PT":`Exaustor`,"sr-Cyrl":`Аспиратор`,"vi-VN":`Máy hút mùi`,"zh-CN":`抽油烟机`,"zh-TW":`排油煙機`},电话机:{"de-DE":`Telefon`,"en-US":`Telephone`,"es-ES":`Teléfono`,"fr-FR":`Le téléphone`,"id-ID":`Telepon`,"it-IT":`Telefono`,"ja-JP":`でんわき`,"ko-KR":`전화기`,"ms-MY":`Telefon`,"nl-NL":`Telefoon`,"pl-PL":`Telefon`,"pt-PT":`Telefone`,"sr-Cyrl":`Телефон`,"vi-VN":`Điện thoại`,"zh-CN":`电话机`,"zh-TW":`电话机`},对讲机:{"de-DE":`Interfone`,"en-US":`Walkie-talkie`,"es-ES":`Walkie - talkie`,"fr-FR":`Interphone`,"id-ID":`Walkie-talkie`,"it-IT":`Radio`,"ja-JP":`トランシーバ`,"ko-KR":`무전기`,"ms-MY":`Walkie-talkie`,"nl-NL":`Interfone`,"pl-PL":`Radio`,"pt-PT":`Interfone`,"sr-Cyrl":`Воки-токи`,"vi-VN":`Bộ đàm`,"zh-CN":`对讲机`,"zh-TW":`对讲机`},花盆:{"de-DE":`Blumentöpfe`,"en-US":`Flower pot`,"es-ES":`Maceta`,"fr-FR":`Pots de fleurs`,"id-ID":`Pot bunga`,"it-IT":`Vaso di fiori`,"ja-JP":`植木鉢`,"ko-KR":`화분`,"ms-MY":`Pasu bunga`,"nl-NL":`bloempotten`,"pl-PL":`doniczki kwiatowe`,"pt-PT":`Vasos de flores`,"sr-Cyrl":`Саксија за цвеће`,"vi-VN":`Chậu hoa`,"zh-CN":`花盆`,"zh-TW":`花盆`},剪刀:{"de-DE":`Schere`,"en-US":`Scissors`,"es-ES":`Tijeras`,"fr-FR":`Ciseaux`,"id-ID":`Gunting`,"it-IT":`forbici`,"ja-JP":`はさみ`,"ko-KR":`가위`,"ms-MY":`Gunting`,"nl-NL":`schaar`,"pl-PL":`Nożyczki`,"pt-PT":`tesoura`,"sr-Cyrl":`Машице`,"vi-VN":`Kéo`,"zh-CN":`剪刀`,"zh-TW":`剪刀`},角柜:{"de-DE":`Eckschrank`,"en-US":`Corner cabinet`,"es-ES":`Gabinete de esquina`,"fr-FR":`Armoire d'angle`,"id-ID":`Lemari sudut`,"it-IT":`armadio angolare`,"ja-JP":`コーナーキャビネット`,"ko-KR":`코너 캐비닛`,"ms-MY":`Kabinet sudut`,"nl-NL":`Hoekkast`,"pl-PL":`Szafa rogowa`,"pt-PT":`Armário de canto`,"sr-Cyrl":`Ормар за угао`,"vi-VN":`Tủ góc`,"zh-CN":`角柜`,"zh-TW":`角柜`},口杯:{"de-DE":`Tasse`,"en-US":`Mouth cup`,"es-ES":`Copa de boca`,"fr-FR":`Coupe de bouche`,"id-ID":`Cangkir mulut`,"it-IT":`tazza`,"ja-JP":`カップ1杯`,"ko-KR":`컵`,"ms-MY":`Cawan mulut`,"nl-NL":`Beker`,"pl-PL":`kieliszek`,"pt-PT":`Taça`,"sr-Cyrl":`Шоља за уста`,"vi-VN":`Cốc miệng`,"zh-CN":`口杯`,"zh-TW":`口杯`},盘子:{"de-DE":`Teller`,"en-US":`Plate`,"es-ES":`Plato`,"fr-FR":`Les assiettes`,"id-ID":`Piring`,"it-IT":`piatto`,"ja-JP":`プレート枚`,"ko-KR":`접시`,"ms-MY":`Pinggan`,"nl-NL":`schotel`,"pl-PL":`talerz`,"pt-PT":`pratos`,"sr-Cyrl":`Тањир`,"vi-VN":`Đĩa`,"zh-CN":`盘子`,"zh-TW":`盘子`},勺子:{"de-DE":`Löffel`,"en-US":`Spoon`,"es-ES":`Cuchara`,"fr-FR":`La cuillère`,"id-ID":`Sendok`,"it-IT":`cucchiaio`,"ja-JP":`スプーン本`,"ko-KR":`수저`,"ms-MY":`Sudu`,"nl-NL":`lepel`,"pl-PL":`łyżka`,"pt-PT":`Colher`,"sr-Cyrl":`Кашика`,"vi-VN":`Việt`,"zh-CN":`勺子`,"zh-TW":`勺子`},手提包:{"de-DE":`Handtaschen`,"en-US":`Handbag`,"es-ES":`Bolsos`,"fr-FR":`Sac à main`,"id-ID":`Tas tangan`,"it-IT":`Borsa a mano`,"ja-JP":`ハンドバッグ`,"ko-KR":`핸드백`,"ms-MY":`Beg tangan`,"nl-NL":`Handtas`,"pl-PL":`Torba ręczna`,"pt-PT":`Bolsa de mão`,"sr-Cyrl":`Торба`,"vi-VN":`Túi xách`,"zh-CN":`手提包`,"zh-TW":`手提包`},双人沙发:{"de-DE":`Doppelsofa`,"en-US":`Double sofa`,"es-ES":`Sofá doble`,"fr-FR":`Canapé pour deux personnes`,"id-ID":`Sofa ganda`,"it-IT":`Divano doppio`,"ja-JP":`ツインソファ`,"ko-KR":`2인용 소파`,"ms-MY":`Sofa berkembar`,"nl-NL":`Tweepersoonsbank`,"pl-PL":`Dwuosobowa sofa`,"pt-PT":`Sofá Duplo`,"sr-Cyrl":`Двосед`,"vi-VN":`Sofa đôi`,"zh-CN":`双人沙发`,"zh-TW":`双人沙发`},藤椅:{"de-DE":`Vine Stuhl`,"en-US":`Cane chair`,"es-ES":`Silla de Ratán`,"fr-FR":`Chaise en rotin`,"id-ID":`Kursi rotan`,"it-IT":`Sedia di Vino`,"ja-JP":`籐椅子`,"ko-KR":`등나무 의자`,"ms-MY":`Kerusi rotan`,"nl-NL":`Vintage stoel`,"pl-PL":`Krzesło`,"pt-PT":`Cadeira de Vinho`,"sr-Cyrl":`Столица од трске`,"vi-VN":`Ghế mây`,"zh-CN":`藤椅`,"zh-TW":`藤椅`},拖把:{"de-DE":`Ziehen Sie.`,"en-US":`Mop`,"es-ES":`Fregona`,"fr-FR":`Vadrouille`,"id-ID":`Pel`,"it-IT":`Trascina.`,"ja-JP":`モップ本`,"ko-KR":`대걸레`,"ms-MY":`Penyapu lantai`,"nl-NL":`Sleep de handvat.`,"pl-PL":`Przeciągnij.`,"pt-PT":`Arraste a mão.`,"sr-Cyrl":`Моп`,"vi-VN":`Trang chủ`,"zh-CN":`拖把`,"zh-TW":`拖把`},卫生纸:{"de-DE":`Toilettenpapier`,"en-US":`Toilet paper`,"es-ES":`Papel higiénico`,"fr-FR":`Papier toilette`,"id-ID":`Tisu toilet`,"it-IT":`Carta igienica`,"ja-JP":`トイレットペーパー`,"ko-KR":`화장지`,"ms-MY":`Kertas tandas`,"nl-NL":`Toiletpapier`,"pl-PL":`Papier toaletowy`,"pt-PT":`Papel higiénico`,"sr-Cyrl":`Тоалет папир`,"vi-VN":`Giấy vệ sinh`,"zh-CN":`卫生纸`,"zh-TW":`卫生纸`},烟盒:{"de-DE":`Zigarettenkasten`,"en-US":`Cigarette case`,"es-ES":`Pitillera`,"fr-FR":`Boîte à cigarettes`,"id-ID":`Kotak rokok`,"it-IT":`scatola sigarette`,"ja-JP":`シガレットケース`,"ko-KR":`담뱃갑`,"ms-MY":`Bekas rokok`,"nl-NL":`Sigaretdozen`,"pl-PL":`pudełko papierosów`,"pt-PT":`Caixa de cigarro`,"sr-Cyrl":`Кутија за цигарете`,"vi-VN":`Hộp thuốc lá`,"zh-CN":`烟盒`,"zh-TW":`烟盒`},烟头:{"de-DE":`Zigarettenkopf`,"en-US":`Cigarette butt`,"es-ES":`Colillas de cigarrillos`,"fr-FR":`Tête de cigarette`,"id-ID":`Puntung rokok`,"it-IT":`Cigarette`,"ja-JP":`吸い殻`,"ko-KR":`담배꽁초`,"ms-MY":`Puntung rokok`,"nl-NL":`Sigaretkop`,"pl-PL":`Cygarety`,"pt-PT":`Cabeça de cigarro`,"sr-Cyrl":`Опушак цигарете`,"vi-VN":`Đầu thuốc lá`,"zh-CN":`烟头`,"zh-TW":`烟头`},鱼缸:{"de-DE":`Aquarium`,"en-US":`Fish tank`,"es-ES":`Pecera`,"fr-FR":`Aquarium à poissons`,"id-ID":`Akuarium`,"it-IT":`Aquarium`,"ja-JP":`かまくら`,"ko-KR":`어항`,"ms-MY":`Akuarium`,"nl-NL":`Aquarium`,"pl-PL":`Akwarium`,"pt-PT":`aquário de peixe`,"sr-Cyrl":`Акваријум`,"vi-VN":`Bể cá`,"zh-CN":`鱼缸`,"zh-TW":`鱼缸`},笔记本电脑:{"de-DE":`Laptops`,"en-US":`Notebook computer`,"es-ES":`Computadora portátil`,"fr-FR":`Ordinateur portable`,"id-ID":`Komputer notebook`,"it-IT":`Computer portatili`,"ja-JP":`ノートブックPC`,"ko-KR":`노트북`,"ms-MY":`Komputer riba`,"nl-NL":`De laptop`,"pl-PL":`Laptop`,"pt-PT":`Computador portátil`,"sr-Cyrl":`Преносни рачунар`,"vi-VN":`Máy tính xách tay`,"zh-CN":`笔记本电脑`,"zh-TW":`笔记本电脑`},微波炉:{"de-DE":`Mikrowelle`,"en-US":`Microwave Oven`,"es-ES":`Microondas`,"fr-FR":`Four à micro - ondes`,"id-ID":`Oven Microwave`,"it-IT":`Forno a microonde`,"ja-JP":`電子レンジ`,"ko-KR":`전자레인지`,"ms-MY":`Ketuhar gelombang mikro`,"nl-NL":`Magnetronoven`,"pl-PL":`Kuchenka mikrofalowa`,"pt-PT":`Microondas`,"sr-Cyrl":`Микроталасна пећница`,"vi-VN":`Lò vi sóng`,"zh-CN":`微波炉`,"zh-TW":`微波炉`},断口:{"de-DE":`Unterbrechung`,"en-US":`Fracture`,"es-ES":`Fractura`,"fr-FR":`La coupure`,"id-ID":`Patah`,"it-IT":`Interruzione`,"ja-JP":`カットアウト`,"ko-KR":`브레이크`,"ms-MY":`Patah`,"nl-NL":`Breken`,"pl-PL":`Przerwanie`,"pt-PT":`Interruptão`,"sr-Cyrl":`Прелом`,"vi-VN":`Lỗ Hổng`,"zh-CN":`断口`,"zh-TW":`断口`},遗物堆:{"de-DE":`Überreste`,"en-US":`Relic pile`,"es-ES":`Montón de reliquias`,"fr-FR":`Pile de reliques`,"id-ID":`Tumpukan peninggalan`,"it-IT":`Pila di resti`,"ja-JP":`遺物の山`,"ko-KR":`유물 더미`,"ms-MY":`Timbunan relik`,"nl-NL":`Overblijfselen`,"pl-PL":`Kopa pozostałości`,"pt-PT":`Pilhas de resíduos`,"sr-Cyrl":`Гомила реликвија`,"vi-VN":`Kho báu`,"zh-CN":`遗物堆`,"zh-TW":`遗物堆`},衣物:{"de-DE":`Kleidung`,"en-US":`Clothing`,"es-ES":`Ropa`,"fr-FR":`Vêtements`,"id-ID":`Pakaian`,"it-IT":`Abbigliamento`,"ja-JP":`衣類`,"ko-KR":`옷`,"ms-MY":`Pakaian`,"nl-NL":`Kleding`,"pl-PL":`Odzież`,"pt-PT":`Roupas`,"sr-Cyrl":`Одећа`,"vi-VN":`Quần áo`,"zh-CN":`衣物`,"zh-TW":`衣物`},浴巾:{"de-DE":`Badetücher`,"en-US":`Bath towel`,"es-ES":`Toallas de baño`,"fr-FR":`Serviettes de bain`,"id-ID":`Handuk mandi`,"it-IT":`asciugamani da bagno`,"ja-JP":`バスタオル枚`,"ko-KR":`타올`,"ms-MY":`Tuala mandi`,"nl-NL":`Baddoeken`,"pl-PL":`ręczniki`,"pt-PT":`Toalhas de banho`,"sr-Cyrl":`Пешкир за купање`,"vi-VN":`Khăn tắm`,"zh-CN":`浴巾`,"zh-TW":`浴巾`},水渍:{"de-DE":`Wasserflecken`,"en-US":`Water stains`,"es-ES":`Manchas de agua`,"fr-FR":`Taches d'eau`,"id-ID":`Noda air`,"it-IT":`Macchie d'acqua`,"ja-JP":`みずあか`,"ko-KR":`물때`,"ms-MY":`Kesan air`,"nl-NL":`Watervlekken`,"pl-PL":`Plamy wodne`,"pt-PT":`Manchas de água`,"sr-Cyrl":`Мрље од воде`,"vi-VN":`Vết nước`,"zh-CN":`水渍`,"zh-TW":`水渍`},螺丝刀:{"de-DE":`Schraubschrauber`,"en-US":`Bolt driver`,"es-ES":`Destornillador`,"fr-FR":`Tournevis`,"id-ID":`Penggerak baut`,"it-IT":`Vitizzatore`,"ja-JP":`スクリュードライバ`,"ko-KR":`드라이버`,"ms-MY":`Pemutar bolt`,"nl-NL":`Schroefmachine`,"pl-PL":`Śrubowca`,"pt-PT":`Torcacafas`,"sr-Cyrl":`Одвијач за вијке`,"vi-VN":`Tuốc nơ vít`,"zh-CN":`螺丝刀`,"zh-TW":`螺丝刀`},凉鞋:{"de-DE":`Sandalen`,"en-US":`Sandals`,"es-ES":`Sandalias`,"fr-FR":`Sandales`,"id-ID":`Sandal`,"it-IT":`Sandali`,"ja-JP":`サンダル本`,"ko-KR":`샌들`,"ms-MY":`Sandal`,"nl-NL":`Sandalen`,"pl-PL":`Sandały`,"pt-PT":`Sandálias`,"sr-Cyrl":`Сандале`,"vi-VN":`Giày dép`,"zh-CN":`凉鞋`,"zh-TW":`凉鞋`},水果刀:{"de-DE":`Obstmesser`,"en-US":`Fruit knife`,"es-ES":`Cuchillo de frutas`,"fr-FR":`Couteau à fruits`,"id-ID":`Pisau buah`,"it-IT":`Coltello da frutta`,"ja-JP":`果物ナイフ`,"ko-KR":`과도`,"ms-MY":`Pisau buah`,"nl-NL":`Fruitmes`,"pl-PL":`Noże owocowe`,"pt-PT":`Faca de fruta`,"sr-Cyrl":`Воћни нож`,"vi-VN":`Dao cắt trái cây`,"zh-CN":`水果刀`,"zh-TW":`水果刀`},匕首:{"de-DE":`Ein Dolch`,"en-US":`Dagger`,"es-ES":`Daga`,"fr-FR":`Poignard`,"id-ID":`Belati`,"it-IT":`pugnale`,"ja-JP":`短刀`,"ko-KR":`단검`,"ms-MY":`Belati`,"nl-NL":`De dolk`,"pl-PL":`sztylet`,"pt-PT":`punhal`,"sr-Cyrl":`Бодеж`,"vi-VN":`Dao găm`,"zh-CN":`匕首`,"zh-TW":`匕首`},玻璃弹孔:{"de-DE":`Glaskugellöcher`,"en-US":`Glass bullet hole`,"es-ES":`Agujero de bala de vidrio`,"fr-FR":`Trou de balle en verre`,"id-ID":`Lubang peluru kaca`,"it-IT":`Foro di proiettile di vetro`,"ja-JP":`ガラス弾孔`,"ko-KR":`유리 탄공`,"ms-MY":`Lubang peluru kaca`,"nl-NL":`Glazen kogelgaten`,"pl-PL":`Szklane dziury kulowe`,"pt-PT":`Buraco de bala de vidro`,"sr-Cyrl":`Рупа од метка на стаклу`,"vi-VN":`Lỗ đạn thủy tinh`,"zh-CN":`玻璃弹孔`,"zh-TW":`玻璃弹孔`},"按住shift正交绘制,按住alt/option取消吸附":{"de-DE":`Drücken Sie shift und halten Sie alt/option gedrückt`,"en-US":`Hold down shift to draw orthogonally, hold down alt/opt to cancel adsorption`,"es-ES":`Presione el cambio para dibujar ortonormal, presione alt / opción para cancelar la adsorción`,"fr-FR":`Maintenez Shift Orthogonal Draw enfoncé et maintenez ALT / option enfoncé pour annuler l'adsorption`,"id-ID":`Tahan shift untuk menggambar secara ortogonal, tahan alt/opt untuk membatalkan adsorpsi`,"it-IT":`Tieni premuto shift per disegnare ortogonalmente, tene premuto alt/option per annullare l'assorbimento`,"ja-JP":`shift直交描画を押したまま、alt/optionを押したまま吸着を解除します`,"ko-KR":`shift 직교 드로잉을 누른 채 alt/option 키를 누른 채 흡착 해제`,"ms-MY":`Tekan shift untuk melukis secara ortogonal, tekan alt/opt untuk membatalkan penyerapan`,"nl-NL":`Houd shift ingedrukt om orthogonal te tekenen, houd alt/option ingedrukt om de adsorptie te annuleren`,"pl-PL":`Przytrzymaj Shift i alt/option, aby anulować adsorpcję`,"pt-PT":`Mantenha pressionado shift para desenhar ortogonalmente, mantenha pressionado alt/option para cancelar a adsorção`,"sr-Cyrl":`Држите притиснут shift да цртате ортогонално, држите притиснут alt/opt да откажете апсорпцију`,"vi-VN":`Giữ shift vẽ trực giao, giữ alt/option để hủy hấp phụ`,"zh-CN":`按住shift正交绘制,按住alt/option取消吸附`,"zh-TW":`按住shift正交绘制,按住alt/option取消吸附`},确认:{"de-DE":`bestätigen`,"en-US":`confirm`,"es-ES":`confirmar`,"fr-FR":`confirmer`,"id-ID":`konfirmasi`,"it-IT":`confermare`,"ja-JP":`確認`,"ko-KR":`확인`,"ms-MY":`sahkan`,"nl-NL":`Bevestiging`,"pl-PL":`potwierdź`,"pt-PT":`confirmar`,"sr-Cyrl":`потврди`,"vi-VN":`Xác nhận`,"zh-CN":`确认`,"zh-TW":`確認`},电视:{"de-DE":`Fernsehen`,"en-US":`TV`,"es-ES":`Televisión`,"fr-FR":`Télévision`,"id-ID":`TV`,"it-IT":`televisione`,"ja-JP":`テレビ`,"ko-KR":`텔레비전`,"ms-MY":`TV`,"nl-NL":`televisie`,"pl-PL":`telewizji`,"pt-PT":`televisão`,"sr-Cyrl":`ТВ`,"vi-VN":`Truyền hình`,"zh-CN":`电视`,"zh-TW":`电视`},单向楼梯:{"de-DE":`Einrichtungstreppe`,"en-US":`Stairs`,"es-ES":`Escalera unidireccional`,"fr-FR":`Escalier à sens unique`,"id-ID":`Tangga`,"it-IT":`Scale unidirezionali`,"ja-JP":`一方通行の階段`,"ko-KR":`단방향 계단`,"ms-MY":`Tangga`,"nl-NL":`Eenrichtingstrap`,"pl-PL":`Schody jednokierunkowe`,"pt-PT":`Escadas unidirecionais`,"sr-Cyrl":`Степенице`,"vi-VN":`Cầu thang một chiều`,"zh-CN":`单向楼梯`,"zh-TW":`单向楼梯`},电脑:{"de-DE":`Rechner`,"en-US":`Computer`,"es-ES":`Computadora`,"fr-FR":`Ordinateur`,"id-ID":`Komputer`,"it-IT":`Elaboratore`,"ja-JP":`コンピューター`,"ko-KR":`컴퓨터`,"ms-MY":`Komputer`,"nl-NL":`Computers`,"pl-PL":`komputera`,"pt-PT":`Computador`,"sr-Cyrl":`Компјутер`,"vi-VN":`Máy tính`,"zh-CN":`电脑`,"zh-TW":`电脑`},工具:{"de-DE":`Werkzeuge`,"en-US":`Tool`,"es-ES":`Herramientas`,"fr-FR":`Outils`,"id-ID":`Alat`,"it-IT":`Strumenti`,"ja-JP":`道具`,"ko-KR":`도구`,"ms-MY":`Alat`,"nl-NL":`Gereedschappen`,"pl-PL":`Narzędzie`,"pt-PT":`Ferramentas`,"sr-Cyrl":`Алат`,"vi-VN":`Công cụ`,"zh-CN":`工具`,"zh-TW":`工具`},特殊:{"de-DE":`Spezielle`,"en-US":`Special`,"es-ES":`Especial`,"fr-FR":`Spécial`,"id-ID":`Khusus`,"it-IT":`Speciale`,"ja-JP":`特别`,"ko-KR":`특수`,"ms-MY":`Khas`,"nl-NL":`Speciale`,"pl-PL":`Specjalne`,"pt-PT":`Especiais`,"sr-Cyrl":`Посебно`,"vi-VN":`Đặc biệt`,"zh-CN":`特殊`,"zh-TW":`特殊`},生物:{"de-DE":`Biologische`,"en-US":`Biology`,"es-ES":`Biología`,"fr-FR":`Biologique`,"id-ID":`Biologi`,"it-IT":`Biologia`,"ja-JP":`生物学`,"ko-KR":`생물`,"ms-MY":`Biologi`,"nl-NL":`Biologische`,"pl-PL":`biologii`,"pt-PT":`Biologia`,"sr-Cyrl":`Биологија`,"vi-VN":`Sinh học`,"zh-CN":`生物`,"zh-TW":`生物`},毒化:{"de-DE":`Vergiftung`,"en-US":`Poison`,"es-ES":`Envenenar`,"fr-FR":`Empoisonnement`,"id-ID":`Racun`,"it-IT":`avvelenamento`,"ja-JP":`毒`,"ko-KR":`독화`,"ms-MY":`Racun`,"nl-NL":`Vergiftiging`,"pl-PL":`zatrucie`,"pt-PT":`intoxicação`,"sr-Cyrl":`Отров`,"vi-VN":`Độc tính`,"zh-CN":`毒化`,"zh-TW":`毒化`},理化:{"de-DE":`Physikalisierung`,"en-US":`physics&chemistry`,"es-ES":`Física y química`,"fr-FR":`Physicalisation`,"id-ID":`fisika&kimia`,"it-IT":`Fisicologia`,"ja-JP":`物理学と化学`,"ko-KR":`이화`,"ms-MY":`fizik&kimia`,"nl-NL":`fysische`,"pl-PL":`Fizyka`,"pt-PT":`Física`,"sr-Cyrl":`физика и хемија`,"vi-VN":`Vật lý hóa học`,"zh-CN":`理化`,"zh-TW":`理化`},文检:{"de-DE":`Textprüfung`,"en-US":`Document`,"es-ES":`Inspección literaria`,"fr-FR":`Vérification du texte`,"id-ID":`Dokumen`,"it-IT":`Testo`,"ja-JP":`書類検査`,"ko-KR":`문검`,"ms-MY":`Dokumen`,"nl-NL":`Inspectie`,"pl-PL":`Kontrola tekstowa`,"pt-PT":`Inspeção de texto`,"sr-Cyrl":`Документ`,"vi-VN":`Kiểm tra văn bản`,"zh-CN":`文检`,"zh-TW":`文检`},电子:{"de-DE":`Elektronik`,"en-US":`Electronic`,"es-ES":`Electrónica`,"fr-FR":`Électronique`,"id-ID":`Elektronik`,"it-IT":`elettronica`,"ja-JP":`電子`,"ko-KR":`전자`,"ms-MY":`Elektronik`,"nl-NL":`Elektronische`,"pl-PL":`Elektronika`,"pt-PT":`eletrônica`,"sr-Cyrl":`Електронски`,"vi-VN":`Điện tử`,"zh-CN":`电子`,"zh-TW":`电子`},人像:{"de-DE":`Personenbild`,"en-US":`Portrait`,"es-ES":`Retrato`,"fr-FR":`Portrait humain`,"id-ID":`Potret`,"it-IT":`Personaggio`,"ja-JP":`肖像画`,"ko-KR":`인물`,"ms-MY":`Potret`,"nl-NL":`Persoonlijk beeld`,"pl-PL":`Portret człowieka`,"pt-PT":`Retrato humano`,"sr-Cyrl":`Портрет`,"vi-VN":`Giống như`,"zh-CN":`人像`,"zh-TW":`人像`},提取物品:{"de-DE":`Extrahieren von Gegenständen`,"en-US":`Extract_items`,"es-ES":`Extracción de artículos`,"fr-FR":`Extraire des objets`,"id-ID":`Ekstrak_item`,"it-IT":`Estrarre oggetti`,"ja-JP":`アイテムを抽出する`,"ko-KR":`물품을 인출하다`,"ms-MY":`Ekstrak_item`,"nl-NL":`Extract items`,"pl-PL":`Wyciągnij przedmioty`,"pt-PT":`Extrair itens`,"sr-Cyrl":`Издвој_ставке`,"vi-VN":`Khai thác các mặt hàng`,"zh-CN":`提取物品`,"zh-TW":`提取物品`},左脚足迹:{"de-DE":`Der linke Fußspur`,"en-US":`L_footprint`,"es-ES":`Huella del pie izquierdo`,"fr-FR":`Footprint gauche`,"id-ID":`L_jejak`,"it-IT":`Le impronte del piede sinistro`,"ja-JP":`左足の足跡`,"ko-KR":`왼발 자국`,"ms-MY":`Jejak_L`,"nl-NL":`Links voetafdruk`,"pl-PL":`Lewa stopa`,"pt-PT":`Pegada esquerda`,"sr-Cyrl":`L_отисак`,"vi-VN":`Dấu chân trái`,"zh-CN":`左脚足迹`,"zh-TW":`左脚足迹`},右脚足迹:{"de-DE":`Rechte Fußspur`,"en-US":`R_footprint`,"es-ES":`Huella del pie derecho`,"fr-FR":`Empreinte du pied droit`,"id-ID":`Jejak_kaki`,"it-IT":`Le impronte del piede destro`,"ja-JP":`右足の足跡`,"ko-KR":`오른발 자국`,"ms-MY":`Jejak_R`,"nl-NL":`Rechte voetafdruk`,"pl-PL":`Prawa stopa`,"pt-PT":`Pegada direita`,"sr-Cyrl":`Р_отисак`,"vi-VN":`Dấu chân phải`,"zh-CN":`右脚足迹`,"zh-TW":`右脚足迹`},电动车:{"de-DE":`Elektrofahrzeuge`,"en-US":`E-bike`,"es-ES":`Vehículos eléctricos`,"fr-FR":`Véhicule électrique`,"id-ID":`Sepeda listrik`,"it-IT":`Auto elettriche`,"ja-JP":`電気自動車`,"ko-KR":`전동차`,"ms-MY":`E-basikal`,"nl-NL":`Elektrische voertuigen`,"pl-PL":`Samochód elektryczny`,"pt-PT":`Carro elétrico`,"sr-Cyrl":`Е-бицикл`,"vi-VN":`Xe điện`,"zh-CN":`电动车`,"zh-TW":`电动车`},自行车:{"de-DE":`Fahrrad`,"en-US":`Bike`,"es-ES":`Bicicletas`,"fr-FR":`Le vélo`,"id-ID":`Sepeda`,"it-IT":`Bicicletta`,"ja-JP":`自転車`,"ko-KR":`자전거`,"ms-MY":`Basikal`,"nl-NL":`Fietsen`,"pl-PL":`Rowery`,"pt-PT":`Bicicleta`,"sr-Cyrl":`Бицикл`,"vi-VN":`Xe đạp`,"zh-CN":`自行车`,"zh-TW":`自行车`},摩托车:{"de-DE":`Motorrad`,"en-US":`Moto`,"es-ES":`Motocicletas`,"fr-FR":`Motos`,"id-ID":`Motor`,"it-IT":`Motociclette`,"ja-JP":`オートバイ`,"ko-KR":`오토바이`,"ms-MY":`Motosikal`,"nl-NL":`Motorfietsen`,"pl-PL":`Motocykl`,"pt-PT":`Motocicleta`,"sr-Cyrl":`Мото`,"vi-VN":`Xe máy`,"zh-CN":`摩托车`,"zh-TW":`摩托车`},越野车:{"de-DE":`Offroad-Fahrzeuge`,"en-US":`ORV`,"es-ES":`Vehículo todoterreno`,"fr-FR":`Véhicules hors route`,"id-ID":`ORV`,"it-IT":`Veicoli off-road`,"ja-JP":`オフロード車`,"ko-KR":`지프차`,"ms-MY":`ORV`,"nl-NL":`Offroad voertuigen`,"pl-PL":`Samochód terenowy`,"pt-PT":`Veículo off-road`,"sr-Cyrl":`ОРВ`,"vi-VN":`Xe địa hình`,"zh-CN":`越野车`,"zh-TW":`越野车`},卡车:{"de-DE":`Lastwagen`,"en-US":`Truck`,"es-ES":`Camión`,"fr-FR":`Camion`,"id-ID":`Truk`,"it-IT":`camion`,"ja-JP":`トラック`,"ko-KR":`트럭`,"ms-MY":`Lori`,"nl-NL":`Vrachtwagen`,"pl-PL":`ciężarówka`,"pt-PT":`Caminhões`,"sr-Cyrl":`Камион`,"vi-VN":`Xe tải`,"zh-CN":`卡车`,"zh-TW":`卡车`},客车:{"de-DE":`Busse`,"en-US":`Bus`,"es-ES":`Autobuses`,"fr-FR":`Autobus`,"id-ID":`Bis`,"it-IT":`autobus`,"ja-JP":`バス`,"ko-KR":`버스`,"ms-MY":`Bas`,"nl-NL":`Bussen`,"pl-PL":`autobusów`,"pt-PT":`ônibus`,"sr-Cyrl":`Аутобус`,"vi-VN":`Xe buýt`,"zh-CN":`客车`,"zh-TW":`客车`},叉车:{"de-DE":`Gabelstapler`,"en-US":`Forklift`,"es-ES":`Carretilla elevadora`,"fr-FR":`Chariot élévateur`,"id-ID":`Truk garpu`,"it-IT":`Carrello elevatore`,"ja-JP":`フォークリフト`,"ko-KR":`지게차`,"ms-MY":`Forklift`,"nl-NL":`Vorkheftrucks`,"pl-PL":`Wózki widłowe`,"pt-PT":`empilhadeira`,"sr-Cyrl":`Вилушкар`,"vi-VN":`Xe nâng`,"zh-CN":`叉车`,"zh-TW":`叉车`},拖拉机:{"de-DE":`Traktor`,"en-US":`Tractor`,"es-ES":`Tractor`,"fr-FR":`Tracteurs`,"id-ID":`Traktor`,"it-IT":`Trattore`,"ja-JP":`トラクター`,"ko-KR":`트랙터`,"ms-MY":`Traktor`,"nl-NL":`De tractor`,"pl-PL":`Ciągnik`,"pt-PT":`Tratores`,"sr-Cyrl":`Трактор`,"vi-VN":`Máy kéo`,"zh-CN":`拖拉机`,"zh-TW":`拖拉机`},"免责说明:尺寸仅作参考,不代表实际测量":{"de-DE":`Haftungsausschluss: Die Größe des Grundrisses kann leicht von der tatsächlichen Größe abweichen.`,"en-US":`Disclaimer: The dimensions are for reference only and do not represent actual measurement.`,"es-ES":`Nota de exención de responsabilidad: el tamaño del plano puede ser ligeramente diferente del Real.`,"fr-FR":`Disclaimer description la taille du plan d'étage peut légèrement différer de la réalité.`,"id-ID":`Disclaimer: Dimensi hanya untuk referensi dan tidak mewakili pengukuran sebenarnya.`,"it-IT":`Disclaimer: Le dimensioni della planimetria possono differire leggermente dalle dimensioni effettive.`,"ja-JP":`免責事項:寸法は参考用であり、実際の測定値を表すものではありません。`,"ko-KR":`면책 조항: 치수는 참조용으로만 제공되며 실제 측정을 나타내지 않습니다.`,"ms-MY":`Penafian: Dimensi adalah untuk rujukan sahaja dan tidak mewakili ukuran sebenar.`,"nl-NL":`Disclaimer: De afmetingen zijn uitsluitend voor referentie en betekenen geen werkelijke metingen.`,"pl-PL":`Zastrzeżenie: Rozmiar planu piętra może nieznacznie różnić się od rzeczywistego rozmiaru.`,"pt-PT":`Aviso Legal: O tamanho da planta pode diferir ligeiramente do tamanho real.`,"sr-Cyrl":`Напомена: Димензије су само за референцу и не представљају стварна мерења.`,"vi-VN":`Miễn trừ trách nhiệm: kích thước kế hoạch sàn hơi khác so với thực tế có thể`,"zh-CN":`免责说明:尺寸仅作参考,不代表实际测量。`,"zh-TW":`免责说明:尺寸仅作参考,不代表实际测量。`},墙面物体类型错误:{"de-DE":`Nicht unterstützter Tür- oder Fenstertyp`,"en-US":`Unsupported door or window type`,"es-ES":`Tipo de puerta o ventana no compatible`,"fr-FR":`Type de porte ou de fenêtre non pris en charge`,"id-ID":`Jenis pintu atau jendela tidak didukung`,"it-IT":`Tipo di porta o finestra non supportato`,"ja-JP":`対応できない窓やドアが存在しているため、削除·修正してください`,"ko-KR":`벽면 물체 유형 오류`,"ms-MY":`Jenis pintu atau tingkap tidak disokong`,"nl-NL":`Verkeerde muurbojecttype`,"pl-PL":`Niewspierany typ drzwi lub okna`,"pt-PT":`Tipo de porta ou janela não suportado`,"sr-Cyrl":`Неподржани тип врата или прозора`,"vi-VN":`Loại cửa hoặc cửa sổ không được hỗ trợ`,"zh-CN":`墙面物体类型错误`,"zh-TW":`墙面物体类型错误`},"增删门窗,点击下方工具并选择墙面;或直接选择门窗;":{"de-DE":`Um Türen und Fenster hinzuzufügen oder zu löschen, klicken Sie auf das untenstehende Werkzeug und wählen Sie die Wand aus. oder wählen Sie Türen und Fenster direkt aus;`,"en-US":`To add or delete doors and windows, click the tool below and select the wall; or directly select doors and windows;`,"es-ES":`Para agregar o eliminar puertas y ventanas, haga clic en la herramienta a continuación y seleccione la pared; o seleccione directamente puertas y ventanas;`,"fr-FR":`Pour ajouter ou supprimer des portes et des fenêtres, cliquez sur l'outil ci-dessous et sélectionnez le mur ; ou sélectionnez directement les portes et fenêtres ;`,"id-ID":`Untuk menambah atau menghapus pintu dan jendela, klik alat di bawah ini dan pilih dinding; atau langsung pilih pintu dan jendela;`,"it-IT":`Per aggiungere o eliminare porte e finestre, fare clic sullo strumento sottostante e selezionare il muro; o selezionare direttamente porte e finestre;`,"ja-JP":`ドアと窓を追加または削除するには、下のツールをクリックして壁を選択するか、ドアと窓を直接選択します。`,"ko-KR":`문과 창문을 첨삭하고 아래 도구를 클릭하고 벽면을 선택한다;또는 직접 문과 창문을 선택합니다.`,"ms-MY":`Untuk menambah atau memadam pintu dan tingkap, klik alat di bawah dan pilih dinding; atau terus pilih pintu dan tingkap;`,"nl-NL":`Voeg een venster toe, klik op het onderstaande hulpmiddel en selecteer de muur; of rechtstreeks kiezen voor ramen;`,"pl-PL":`Aby dodać lub usunąć drzwi i okna, kliknij narzędzie poniżej i wybierz ścianę; lub wybierz drzwi i okna bezpośrednio;`,"pt-PT":`Para adicionar ou excluir portas e janelas, clique na ferramenta abaixo e selecione a parede; ou selecione diretamente portas e janelas;`,"sr-Cyrl":`Да бисте додали или обрисали врата и прозоре, кликните на алат испод и изаберите зид; или директно изаберите врата и прозоре;`,"vi-VN":`Để thêm hoặc xóa cửa và cửa sổ, nhấp vào công cụ bên dưới và chọn tường; hoặc chọn trực tiếp cửa và cửa sổ;`,"zh-CN":`增删门窗,点击下方工具并选择墙面;或直接选择门窗;`,"zh-TW":`要添加或刪除門窗,請單擊下方的工具並選擇牆壁;或直接選擇門窗;`},"修改功能间名称,点击名称;":{"de-DE":`Ändern Sie den Namen des Funktionsraums, klicken Sie auf den Namen;`,"en-US":`Modify the name of the function room, click on the name;`,"es-ES":`Modifique el nombre de la sala de funciones, haga clic en el nombre;`,"fr-FR":`Modifiez le nom de la salle de fonction, cliquez sur le nom ;`,"id-ID":`Ubah nama ruang fungsi, klik pada nama;`,"it-IT":`Modifica il nome della stanza funzionale, clicca sul nome;`,"ja-JP":`ファンクションルームの名前を変更し、名前をクリックします。`,"ko-KR":`기능 간 이름을 수정하고 이름을 클릭합니다.`,"ms-MY":`Ubah nama bilik fungsi, klik pada nama;`,"nl-NL":`De naam van de functie wijzigen, klik op de naam;`,"pl-PL":`Zmień nazwę pomieszczenia funkcjonalnego, klikając na nazwę;`,"pt-PT":`Modifique o nome do espaço funcional, clique no nome;`,"sr-Cyrl":`Измените назив функционалне просторије, кликните на назив;`,"vi-VN":`Sửa tên của phòng chức năng, nhấp vào tên;`,"zh-CN":`修改功能间名称,点击名称;`,"zh-TW":`修改功能間名稱,點擊名稱;`},"添加朝向,通过旋转指北针编辑户型图的朝向;":{"de-DE":`Fügen Sie eine Ausrichtung hinzu und bearbeiten Sie die Ausrichtung des Grundrisses, indem Sie den Nordpfeil drehen;`,"en-US":`Add orientation, and edit the orientation of the floor plan by rotating the north arrow;`,"es-ES":`Agregue orientación y edite la orientación del plano de planta girando la flecha norte;`,"fr-FR":`Ajoutez une orientation et modifiez l'orientation du plan d'étage en faisant pivoter la flèche nord ;`,"id-ID":`Tambahkan orientasi, dan edit orientasi denah lantai dengan memutar panah utara;`,"it-IT":`Aggiungi orientamento e modifica l'orientamento della pianta del piano ruotando la freccia nord;`,"ja-JP":`向きを追加し、北矢印を回転させて間取り図の向きを編集します。`,"ko-KR":`방향을 추가하고 나침반을 회전하여 평형도의 방향을 편집합니다.`,"ms-MY":`Tambah orientasi, dan edit orientasi pelan lantai dengan memutar anak panah utara;`,"nl-NL":`Toevoegen van oriëntatie, de oriëntatie van het huistypel diagram te bewerken door het draaien van de noodzaak;`,"pl-PL":`Dodaj orientację i edytuj orientację planu piętra, obracając strzałkę północną;`,"pt-PT":`Adicione orientação e edite a orientação do planta girando a seta norte;`,"sr-Cyrl":`Додајте оријентацију и измените оријентацију плана пода ротирањем стрелице север;`,"vi-VN":`Thêm hướng và chỉnh sửa hướng của bản vẽ tầng bằng cách xoay mũi tên phía bắc;`,"zh-CN":`添加朝向,通过旋转指北针编辑户型图的朝向;`,"zh-TW":`添加朝向,通過旋轉指北針編輯樓層平面圖的朝向;`},"修改墙线,敬请期待...":{"de-DE":`Ändern Sie die Wandlinie. Bleiben Sie dran…`,"en-US":`Modify the wall line. stay tuned…`,"es-ES":`Modifique la línea de la pared. Manténganse atentos…`,"fr-FR":`Modifiez la ligne de mur. Restez à l'écoute…`,"id-ID":`Modifikasi garis dinding. tetap disini…`,"it-IT":`Modifica la linea del muro. Rimanete sintonizzati…`,"ja-JP":`壁の線を変更し、しばらくお待ちください…`,"ko-KR":`벽선을 수정하니 기대해 주십시오…`,"ms-MY":`Ubah garis dinding. nantikan…`,"nl-NL":`Wijzigingen aan de muurlijn, kijk alstublieft uit…`,"pl-PL":`Zmodyfikuj linię ściany. Pozostanijcie w kontakcie…`,"pt-PT":`Modifique a linha da parede. Fiquem atentos…`,"sr-Cyrl":`Измените линију зида. останите у току…`,"vi-VN":`Chỉnh sửa đường tường. Hãy tiếp tục…`,"zh-CN":`修改墙线,敬请期待…`,"zh-TW":`修改牆線。 敬請期待…`},户型图:{"de-DE":`Wohnungsgrundrissdiagramm`,"en-US":`Apartment layout diagram`,"es-ES":`Diagrama de diseño de apartamento`,"fr-FR":`Diagramme de disposition de l'appartement`,"id-ID":`Diagram tata letak apartemen`,"it-IT":`Diagramma di disposizione dell'appartamento`,"ja-JP":`戸口図`,"ko-KR":`평형도`,"ms-MY":`Diagram susun atur apartmen`,"nl-NL":`Huisdiagram`,"pl-PL":`Schemat układu mieszkania`,"pt-PT":`Diagrama de layout do apartamento`,"sr-Cyrl":`Дијаграм распореда стана`,"vi-VN":`Sơ đồ bố trí căn hộ`,"zh-CN":`户型图`,"zh-TW":`戶型圖`},提示:{"de-DE":`Tipps`,"en-US":`Tips`,"es-ES":`Consejos`,"fr-FR":`Conseils`,"id-ID":`Saran`,"it-IT":`Suggerimenti`,"ja-JP":`ヒント`,"ko-KR":`힌트`,"ms-MY":`Tips`,"nl-NL":`Adviezen`,"pl-PL":`Wskazówki`,"pt-PT":`Dicas`,"sr-Cyrl":`Савети`,"vi-VN":`Mẹo`,"zh-CN":`提示`,"zh-TW":`提示`},"外墙上缺少门,请添加":{"de-DE":`Fehlende Tür an der Außenwand, bitte hinzufügen`,"en-US":`Missing door on exterior wall, please add`,"es-ES":`Falta puerta en la pared exterior, por favor agregue`,"fr-FR":`Porte manquante sur le mur extérieur, veuillez ajouter`,"id-ID":`Pintu hilang di dinding luar, harap tambahkan`,"it-IT":`Porta mancante sul muro esterno, per favore aggiungi`,"ja-JP":`外壁にドアが足りません。追加してください`,"ko-KR":`외벽에 문이 부족합니다. 추가하십시오`,"ms-MY":`Pintu pada dinding luar hilang, sila tambah`,"nl-NL":`De deur ontbreekt aan de buitenmuur, alstublieft toevoegen`,"pl-PL":`Brakuje drzwi na zewnętrznej ścianie, proszę dodać`,"pt-PT":`Falta porta na parede exterior, por favor adicione`,"sr-Cyrl":`Недостаје врата на спољашњем зиду, молимо додајте`,"vi-VN":`Thiếu cửa trên tường ngoài, vui lòng thêm`,"zh-CN":`外墙上缺少门,请添加`,"zh-TW":`外牆上缺少門,請添加`},功能:{"de-DE":`Funktion`,"en-US":`function`,"es-ES":`función`,"fr-FR":`fonction`,"id-ID":`fungsi`,"it-IT":`funzione`,"ja-JP":`機能`,"ko-KR":`기능`,"ms-MY":`fungsi`,"nl-NL":`Functies`,"pl-PL":`funkcja`,"pt-PT":`função`,"sr-Cyrl":`функција`,"vi-VN":`chức năng`,"zh-CN":`功能`,"zh-TW":`功能`},"请选择墙面添加门/窗":{"de-DE":`Bitte wählen Sie eine Wand aus, um eine Tür / ein Fenster hinzuzufügen`,"en-US":`Please select a wall to add a door / window`,"es-ES":`Por favor seleccione una pared para agregar una puerta / ventana`,"fr-FR":`Veuillez sélectionner un mur pour ajouter une porte / une fenêtre`,"id-ID":`Silakan pilih dinding untuk menambahkan pintu / jendela`,"it-IT":`Si prega di selezionare un muro per aggiungere una porta / una finestra`,"ja-JP":`壁にドア/窓を追加するように選択してください`,"ko-KR":`벽면을 선택하여 문/창을 추가하세요`,"ms-MY":`Sila pilih dinding untuk menambah pintu / tingkap`,"nl-NL":`Selecteer een muurToevoeg een deur/raam`,"pl-PL":`Proszę wybrać ścianę, aby dodać drzwi / okno`,"pt-PT":`Por favor, selecione uma parede para adicionar uma porta / janela`,"sr-Cyrl":`Молимо вас да изаберете зид за додавање врата/прозора`,"vi-VN":`Vui lòng chọn một tường để thêm cửa / cửa sổ`,"zh-CN":`请选择墙面添加门/窗`,"zh-TW":`請選擇牆面添加門/窗`},"该自动户型图外墙缺少门!":{"de-DE":`Die Tür in der Außenwand fehlt`,"en-US":`The door in the exterior wall is missing`,"es-ES":`Falta la puerta en la pared exterior del plano de planta automático`,"fr-FR":`La porte dans le mur extérieur est manquante`,"id-ID":`Pintu di dinding luar hilang`,"it-IT":`Manca la porta nel muro esterno del diagramma di layout automatico`,"ja-JP":`この自動間取り図の外壁にはドアがありません`,"ko-KR":`이 자동 평형도 외벽에 문이 부족하다`,"ms-MY":`Pintu pada dinding luar hilang`,"nl-NL":`De automatische huistype buitenmuur ontbreekt deuren`,"pl-PL":`Brakuje drzwi w zewnętrznej ścianie automatycznego układu`,"pt-PT":`Está faltando a porta na parede exterior do diagrama automático do layout`,"sr-Cyrl":`Недостаје врата на спољашњем зиду`,"vi-VN":`Thiếu cửa trên tường ngoài của sơ đồ tự động`,"zh-CN":`该自动户型图外墙缺少门`,"zh-TW":`該自動戶型圖外牆缺少門`},操作引导:{"de-DE":`Anleitung`,"en-US":`Guide`,"es-ES":`Guía`,"fr-FR":`Manuel`,"id-ID":`Panduan`,"it-IT":`Guida`,"ja-JP":`操作ガイド`,"ko-KR":`작업 부트`,"ms-MY":`Panduan`,"nl-NL":`Operatie begeleiding`,"pl-PL":`Przewodnik`,"pt-PT":`Guia`,"sr-Cyrl":`Водич`,"vi-VN":`Hướng dẫn`,"zh-CN":`操作引导`,"zh-TW":`操作引導`},旋转户型图:{"de-DE":`Drehendes Hausdiagramm`,"en-US":`Revolving house type diagram`,"es-ES":`Diagrama de tipo de casa giratoria`,"fr-FR":`Diagramme de type de maison tournant`,"id-ID":`Diagram tipe rumah berputar`,"it-IT":`Diagramma di tipo di casa girevole`,"ja-JP":`回転戸型図`,"ko-KR":`회전 평형도`,"ms-MY":`Rajah jenis rumah berputar`,"nl-NL":`Rotatiewoningdiagram`,"pl-PL":`Obrotowy schemat typu domu`,"pt-PT":`Diagrama de tipo de casa giratório`,"sr-Cyrl":`Дијаграм типа ротирајуће куће`,"vi-VN":`Sơ đồ loại nhà quay`,"zh-CN":`旋转户型图`,"zh-TW":`旋轉戶型圖`},朝向:{"de-DE":`Ausrichtung`,"en-US":`orientation`,"es-ES":`orientación`,"fr-FR":`orientation`,"id-ID":`orientasi`,"it-IT":`orientamento`,"ja-JP":`向き`,"ko-KR":`향방`,"ms-MY":`orientasi`,"nl-NL":`richting`,"pl-PL":`orientacja`,"pt-PT":`orientação`,"sr-Cyrl":`Оријентација`,"vi-VN":`hướng`,"zh-CN":`朝向`,"zh-TW":`朝向`},旋转90度:{"de-DE":`90° drehen`,"en-US":`Rotate 90°`,"es-ES":`Rotar 90°`,"fr-FR":`Tourner 90°`,"id-ID":`Putar 90°`,"it-IT":`Ruotare 90°`,"ja-JP":`90度回転`,"ko-KR":`90도 회전`,"ms-MY":`Putar 90°`,"nl-NL":`Draai 90°`,"pl-PL":`Obróć o 90°`,"pt-PT":`Rodar 90°`,"sr-Cyrl":`Заврти 90°`,"vi-VN":`Xoay 90°`,"zh-CN":`旋转90度`,"zh-TW":`旋轉90度`},拓展延长:{"de-DE":`Erweiterung`,"en-US":`Expansion`,"es-ES":`Expansión`,"fr-FR":`Extension`,"id-ID":`Perluasan`,"it-IT":`Espansione`,"ja-JP":`拡張`,"ko-KR":`확장 연장`,"ms-MY":`Pengembangan`,"nl-NL":`Uitbreiding verlenging`,"pl-PL":`Rozszerzenie`,"pt-PT":`Expansão`,"sr-Cyrl":`Проширење`,"vi-VN":`Mở rộng`,"zh-CN":`拓展延长`,"zh-TW":`拓展延長`},公制:{"zh-CN":`公制`,"zh-TW":`公制`,"en-US":`Metric`,"ja-JP":`メートル法`,"ko-KR":`미터법`,"de-DE":`Metrisch`,"nl-NL":`Metriek`,"pl-PL":`Metryczny`,"pt-PT":`Métrico`,"es-ES":`Métrico`,"fr-FR":`Métrique`,"it-IT":`Metrico`,"id-ID":`Metrik`,"ms-MY":`Metrik`,"sr-Cyrl":`Метрички`,"vi-VN":`Hệ mét`},英制:{"zh-CN":`英制`,"zh-TW":`英制`,"en-US":`Imperial`,"ja-JP":`ヤード・ポンド法`,"ko-KR":`야드파운드법`,"de-DE":`Imperial`,"nl-NL":`Imperiaal`,"pl-PL":`Imperialny`,"pt-PT":`Imperial`,"es-ES":`Imperial`,"fr-FR":`Impérial`,"it-IT":`Imperiale`,"id-ID":`Imperial`,"ms-MY":`Imperial`,"sr-Cyrl":`Империјални`,"vi-VN":`Hệ Anh`},"这些墙可能是多余的,请删除":{"de-DE":`Diese Wände könnten überflüssig sein, bitte löschen`,"en-US":`These walls may be redundant, please delete`,"es-ES":`Estas paredes pueden ser redundantes, por favor elimínelas`,"fr-FR":`Ces murs peuvent être redondants, veuillez les supprimer`,"id-ID":`Dinding ini mungkin berlebihan, harap hapus`,"it-IT":`Questi muri potrebbero essere ridondanti, per favore eliminateli`,"ja-JP":`これらの壁は余分かもしれません。削除してください`,"ko-KR":`이러한 벽은 불필요한 것일 수 있으므로 삭제하십시오`,"ms-MY":`Dinding ini mungkin berlebihan, sila padam`,"nl-NL":`Deze muren kunnen overbodig zijn, verwijder alstublieft`,"pl-PL":`Te ściany mogą być zbędne, proszę usunąć`,"pt-PT":`Estas paredes podem ser redundantes, por favor exclua`,"sr-Cyrl":`Ови зидови могу бити сувишни, молимо избришите`,"vi-VN":`Những bức tường này có thể là dư thừa, vui lòng xóa`,"zh-CN":`这些墙可能是多余的,请删除`,"zh-TW":`這些牆可能是多餘的,請刪除`},北:{"de-DE":`Norden`,"en-US":`North`,"es-ES":`Norte`,"fr-FR":`Nord`,"id-ID":`Utara`,"it-IT":`Nord`,"ja-JP":`北の方`,"ko-KR":`북`,"ms-MY":`Utara`,"nl-NL":`Noord`,"pl-PL":`Północ`,"pt-PT":`Norte`,"sr-Cyrl":`Север`,"vi-VN":`Bắc`,"zh-CN":`北`,"zh-TW":`北`},东北:{"de-DE":`Nordosten`,"en-US":`Northeast`,"es-ES":`Noreste`,"fr-FR":`Nord-est`,"id-ID":`Timur laut`,"it-IT":`Nord-est`,"ja-JP":`東北`,"ko-KR":`동북`,"ms-MY":`Timur Laut`,"nl-NL":`Noordoosten`,"pl-PL":`Północny wschód`,"pt-PT":`Nordeste`,"sr-Cyrl":`Североисток`,"vi-VN":`Đông Bắc`,"zh-CN":`东北`,"zh-TW":`東北`},东:{"de-DE":`Osten`,"en-US":`East`,"es-ES":`Este`,"fr-FR":`Est`,"id-ID":`Timur`,"it-IT":`Est`,"ja-JP":`東`,"ko-KR":`동`,"ms-MY":`Timur`,"nl-NL":`Oost`,"pl-PL":`Wschód`,"pt-PT":`Leste`,"sr-Cyrl":`Исток`,"vi-VN":`Đông`,"zh-CN":`东`,"zh-TW":`東`},东南:{"de-DE":`Südosten`,"en-US":`Southeast`,"es-ES":`Sureste`,"fr-FR":`Sud-est`,"id-ID":`Tenggara`,"it-IT":`Sud-est`,"ja-JP":`南東`,"ko-KR":`동남`,"ms-MY":`Tenggara`,"nl-NL":`Zuidoost`,"pl-PL":`Południowy wschód`,"pt-PT":`Sudeste`,"sr-Cyrl":`Југоисток`,"vi-VN":`Đông Nam`,"zh-CN":`东南`,"zh-TW":`東南`},南:{"de-DE":`Süden`,"en-US":`South`,"es-ES":`Sur`,"fr-FR":`Sud`,"id-ID":`Selatan`,"it-IT":`Sud`,"ja-JP":`南の方`,"ko-KR":`남`,"ms-MY":`Selatan`,"nl-NL":`Zuid`,"pl-PL":`Południe`,"pt-PT":`Sul`,"sr-Cyrl":`Југ`,"vi-VN":`Nam`,"zh-CN":`南`,"zh-TW":`南`},西南:{"de-DE":`Südwesten`,"en-US":`Southwest`,"es-ES":`Suroeste`,"fr-FR":`Sud-ouest`,"id-ID":`Barat daya`,"it-IT":`Sud-ovest`,"ja-JP":`南西`,"ko-KR":`서남`,"ms-MY":`Barat Daya`,"nl-NL":`Zuidwesten`,"pl-PL":`Południowy zachód`,"pt-PT":`Sudoeste`,"sr-Cyrl":`Југозапад`,"vi-VN":`Tây Nam`,"zh-CN":`西南`,"zh-TW":`西南`},西:{"de-DE":`Westen`,"en-US":`West`,"es-ES":`Oeste`,"fr-FR":`Ouest`,"id-ID":`Barat`,"it-IT":`Ovest`,"ja-JP":`西の方`,"ko-KR":`서`,"ms-MY":`Barat`,"nl-NL":`het Westen`,"pl-PL":`Zachód`,"pt-PT":`Oeste`,"sr-Cyrl":`Запад`,"vi-VN":`Tây`,"zh-CN":`西`,"zh-TW":`西`},西北:{"de-DE":`Nordwesten`,"en-US":`Northwest`,"es-ES":`Noroeste`,"fr-FR":`Nord-ouest`,"id-ID":`Barat laut`,"it-IT":`Nord-ovest`,"ja-JP":`北西`,"ko-KR":`북서`,"ms-MY":`Barat Laut`,"nl-NL":`Noordwesten`,"pl-PL":`Północny zachód`,"pt-PT":`Noroeste`,"sr-Cyrl":`Северозапад`,"vi-VN":`Tây Bắc`,"zh-CN":`西北`,"zh-TW":`西北`},错误:{"de-DE":`Fehler`,"en-US":`Error`,"es-ES":`Error`,"fr-FR":`Erreur`,"id-ID":`Kesalahan`,"it-IT":`Errore`,"ja-JP":`エラー`,"ko-KR":`오류`,"ms-MY":`Ralat`,"nl-NL":`Fout`,"pl-PL":`Błąd`,"pt-PT":`Erro`,"sr-Cyrl":`Грешка`,"vi-VN":`Lỗi`,"zh-CN":`错误`,"zh-TW":`錯誤`},警告:{"de-DE":`Warnung`,"en-US":`Warning`,"es-ES":`Advertencia`,"fr-FR":`Avertissement`,"id-ID":`Peringatan`,"it-IT":`Avvertimento`,"ja-JP":`警告`,"ko-KR":`경고`,"ms-MY":`Amaran`,"nl-NL":`Waarschuwing`,"pl-PL":`Ostrzeżenie`,"pt-PT":`Aviso`,"sr-Cyrl":`Упозорење`,"vi-VN":`Cảnh báo`,"zh-CN":`警告`,"zh-TW":`警告`},区域标记位置:{"de-DE":`Bereichsmarkierungsort`,"en-US":`Area mark location`,"es-ES":`Ubicación de la marca de área`,"fr-FR":`Emplacement du marquage de la zone`,"id-ID":`Lokasi tanda area`,"it-IT":`Posizione del marchio dell'area`,"ja-JP":`エリアマークの位置`,"ko-KR":`영역 태그 위치`,"ms-MY":`Lokasi tanda kawasan`,"nl-NL":`Regionale markeringslocatie`,"pl-PL":`Lokalizacja znacznika obszaru`,"pt-PT":`Localização da marca de área`,"sr-Cyrl":`Локација ознаке површине`,"vi-VN":`Vị trí đánh dấu khu vực`,"zh-CN":`区域标记位置`,"zh-TW":`區域標記位置`},可见长:{"de-DE":`Sichtbare Länge`,"en-US":`Visible length`,"es-ES":`Longitud visible`,"fr-FR":`Longueur visible`,"id-ID":`Panjang terlihat`,"it-IT":`Lunghezza visibile`,"ja-JP":`表示長`,"ko-KR":`가시 길이`,"ms-MY":`Panjang yang kelihatan`,"nl-NL":`zichtbaar lang`,"pl-PL":`Widoczna długość`,"pt-PT":`Comprimento visível`,"sr-Cyrl":`Видљива дужина`,"vi-VN":`Độ dài hiển thị`,"zh-CN":`可见长`,"zh-TW":`可見長`},是承重墙:{"de-DE":`Tragende Wand`,"en-US":`Bearing wall`,"es-ES":`Pared de carga`,"fr-FR":`Mur porteur`,"id-ID":`Dinding penahan`,"it-IT":`Muro portante`,"ja-JP":`荷重壁`,"ko-KR":`하중벽이야`,"ms-MY":`Dinding galas`,"nl-NL":`Het is een muur`,"pl-PL":`Ściana nośna`,"pt-PT":`Parede de suporte`,"sr-Cyrl":`Носећи зид`,"vi-VN":`Tường chịu tải`,"zh-CN":`是承重墙`,"zh-TW":`承重牆`},距离:{"de-DE":`Entfernung`,"en-US":`distance`,"es-ES":`distancia`,"fr-FR":`distance`,"id-ID":`jarak`,"it-IT":`distanza`,"ja-JP":`距離`,"ko-KR":`거리`,"ms-MY":`jarak`,"nl-NL":`Afstand`,"pl-PL":`odległość`,"pt-PT":`distância`,"sr-Cyrl":`удаљеност`,"vi-VN":`khoảng cách`,"zh-CN":`距离`,"zh-TW":`距離`},撑满整个墙面:{"de-DE":`Auffüllen`,"en-US":`Fill up`,"es-ES":`Llenar`,"fr-FR":`Remplir`,"id-ID":`Penuh`,"it-IT":`Riempi`,"ja-JP":`満たす`,"ko-KR":`채우다`,"ms-MY":`Isi`,"nl-NL":`Vullen`,"pl-PL":`Napełnij`,"pt-PT":`Encher`,"sr-Cyrl":`Пуно`,"vi-VN":`Đầy đủ`,"zh-CN":`撑满`,"zh-TW":`撑满`},门窗:{"de-DE":`Türen/Fenster`,"en-US":`doors/windows`,"es-ES":`puertas/ventanas`,"fr-FR":`portes/fenêtres`,"id-ID":`pintu/jendela`,"it-IT":`porte/finestre`,"ja-JP":`ドアと窓`,"ko-KR":`문과 창문`,"ms-MY":`pintu/tingkap`,"nl-NL":`Deuren en ramen`,"pl-PL":`drzwi/okna`,"pt-PT":`portas/janelas`,"sr-Cyrl":`врата/прозори`,"vi-VN":`cửa cửa sổ`,"zh-CN":`门窗`,"zh-TW":`門窗`},物件:{"de-DE":`Möbel`,"en-US":`Furnitures`,"es-ES":`Muebles`,"fr-FR":`Meubles`,"id-ID":`Perabotan`,"it-IT":`Mobili`,"ja-JP":`家具`,"ko-KR":`물건`,"ms-MY":`Perabot`,"nl-NL":`Meubilair`,"pl-PL":`Meble`,"pt-PT":`Mobília`,"sr-Cyrl":`Намештај`,"vi-VN":`đồ đạc`,"zh-CN":`物件`,"zh-TW":`傢俱`},预览标准图:{"de-DE":`Vorschau der Standardzeichnung`,"en-US":`Preview standard drawing`,"es-ES":`Vista previa del dibujo estándar`,"fr-FR":`Aperçu du dessin standard`,"id-ID":`Pratinjau gambar standar`,"it-IT":`Anteprima del disegno standard`,"ja-JP":`プレビューの標準図`,"ko-KR":`표준 그림 미리 보기`,"ms-MY":`Pratonton lukisan standard`,"nl-NL":`Voorbeeld van standaarddiagrammen`,"pl-PL":`Podgląd standardowego rysunku`,"pt-PT":`Pré-visualização do desenho padrão`,"sr-Cyrl":`Преглед стандардног цртежа`,"vi-VN":`Xem trước bản vẽ tiêu chuẩn`,"zh-CN":`预览标准图`,"zh-TW":`預覽標準圖`},绘制墙面:{"de-DE":`Wand zeichnen`,"en-US":`Draw wall`,"es-ES":`Dibujar pared`,"fr-FR":`Dessiner un mur`,"id-ID":`Gambar dinding`,"it-IT":`Disegna parete`,"ja-JP":`壁を描く`,"ko-KR":`벽면을 그리다`,"ms-MY":`Lukis dinding`,"nl-NL":`Wanden tekenen`,"pl-PL":`Narysuj ścianę`,"pt-PT":`Desenhar parede`,"sr-Cyrl":`Цртање зида`,"vi-VN":`Vẽ tường`,"zh-CN":`绘制墙面`,"zh-TW":`繪製牆面`},消除多余墙面分段点:{"de-DE":`Überflüssige Wandsegmentierungspunkte eliminieren`,"en-US":`Eliminate redundant wall segmentation points`,"es-ES":`Eliminar puntos redundantes de segmentación de la pared`,"fr-FR":`Éliminer les points de segmentation de mur redondants`,"id-ID":`Hilangkan titik segmentasi dinding yang berlebihan`,"it-IT":`Elimina i punti di segmentazione della parete ridondanti`,"ja-JP":`余分な壁面のセグメントを削除する`,"ko-KR":`여분의 벽면 분단점을 제거하다`,"ms-MY":`Hapuskan titik segmentasi dinding yang berlebihan`,"nl-NL":`Het verwijderen van overtollige muur segmentatiepunten`,"pl-PL":`Usuń zbędne punkty segmentacji ściany`,"pt-PT":`Eliminar pontos redundantes de segmentação da parede`,"sr-Cyrl":`Елиминишите сувишне тачке сегментације зида`,"vi-VN":`Loại bỏ các điểm phân đoạn tường dư thừa`,"zh-CN":`消除多余墙面分段点`,"zh-TW":`消除多餘牆面分段點`},楼层属性:{"de-DE":`Eigenschaften des Bodens`,"en-US":`Floor attributes`,"es-ES":`Atributos del piso`,"fr-FR":`Propriétés de l'étage`,"id-ID":`Atribut lantai`,"it-IT":`Proprietà del piano`,"ja-JP":`フロアプロパティ`,"ko-KR":`층 속성`,"ms-MY":`Atribut lantai`,"nl-NL":`Eigenschappen van de vloer`,"pl-PL":`Właściwości podłogi`,"pt-PT":`Propriedades do piso`,"sr-Cyrl":`Особине пода`,"vi-VN":`Thuộc tính sàn`,"zh-CN":`楼层属性`,"zh-TW":`楼层属性`},户型构建:{"de-DE":`Hausbau`,"en-US":`Constructions`,"es-ES":`Construcciones`,"fr-FR":`Constructions`,"id-ID":`Konstruksi`,"it-IT":`Costruzioni`,"ja-JP":`戸建て`,"ko-KR":`평형 구축`,"ms-MY":`Pembinaan`,"nl-NL":`Huisbouw`,"pl-PL":`Konstrukcje`,"pt-PT":`Construções`,"sr-Cyrl":`Конструкције`,"vi-VN":`Các công trình`,"zh-CN":`户型构建`,"zh-TW":`户型构建`},物件图例:{"de-DE":`Objekte`,"en-US":`Objects`,"es-ES":`Objetos`,"fr-FR":`Objets`,"id-ID":`Objek`,"it-IT":`Oggetti`,"ja-JP":`物件図例`,"ko-KR":`객체 범례`,"ms-MY":`Objek`,"nl-NL":`Objecten`,"pl-PL":`Obiekty`,"pt-PT":`Objetos`,"sr-Cyrl":`Објекти`,"vi-VN":`Đồ đạc`,"zh-CN":`物件图例`,"zh-TW":`物件图例`},全景:{"de-DE":`Panoramablick`,"en-US":`Panorama`,"es-ES":`Panorama`,"fr-FR":`Paysage`,"id-ID":`Lanskap`,"it-IT":`Vista panoramica`,"ja-JP":`広景`,"ko-KR":`파노라마`,"ms-MY":`Pemandangan`,"nl-NL":`Uitzicht`,"pl-PL":`Widok panoramiczny`,"pt-PT":`Vista panorâmica`,"sr-Cyrl":`Панорама`,"vi-VN":`Toàn cảnh`,"zh-CN":`全景`,"zh-TW":`全景`},模型:{"de-DE":`Modell`,"en-US":`Model`,"es-ES":`Modelo`,"fr-FR":`Modèle`,"id-ID":`Model`,"it-IT":`Modello`,"ja-JP":`Model`,"ko-KR":`모델`,"ms-MY":`Model`,"nl-NL":`Model`,"pl-PL":`Model`,"pt-PT":`Modelo`,"sr-Cyrl":`Модел`,"vi-VN":`Mô hình`,"zh-CN":`模型`,"zh-TW":`模型`},楼层结构:{"de-DE":`Bodenstruktur`,"en-US":`Floor structure`,"es-ES":`Estructura del piso`,"fr-FR":`Structure des étages`,"id-ID":`Struktur lantai`,"it-IT":`Struttura del pavimento`,"ja-JP":`フロア構造`,"ko-KR":`층구조`,"ms-MY":`Struktur lantai`,"nl-NL":`vloerstructuur`,"pl-PL":`Konstrukcja podłogi`,"pt-PT":`Estrutura do piso`,"sr-Cyrl":`Структура пода`,"vi-VN":`Cấu trúc sàn`,"zh-CN":`楼层结构`,"zh-TW":`楼层结构`},画布设置:{"de-DE":`Leinwand-Einstellungen`,"en-US":`Canvas Settings`,"es-ES":`Configuración del lienzo`,"fr-FR":`Paramètres Canvas`,"id-ID":`Pengaturan Kanvas`,"it-IT":`Impostazioni tela`,"ja-JP":`キャンバス設定`,"ko-KR":`캔버스 설정`,"ms-MY":`Tetapan Kanvas`,"nl-NL":`Canvas instellingen`,"pl-PL":`Ustawienia płótna`,"pt-PT":`Configurações da tela`,"sr-Cyrl":`Подешавања платна`,"vi-VN":`Thiết lập Canvas`,"zh-CN":`画布设置`,"zh-TW":`画布设置`},更多:{"de-DE":`Mehr`,"en-US":`more`,"es-ES":`Más`,"fr-FR":`Plus`,"id-ID":`lebih`,"it-IT":`Più`,"ja-JP":`詳細`,"ko-KR":`추가`,"ms-MY":`lebih`,"nl-NL":`Meer`,"pl-PL":`Więcej`,"pt-PT":`Mais`,"sr-Cyrl":`више`,"vi-VN":`Thêm`,"zh-CN":`更多`,"zh-TW":`更多`},墙绘制方式:{"de-DE":`Wandzeichnung`,"en-US":`Wall mode`,"es-ES":`Método de dibujo de la pared`,"fr-FR":`Manière de peindre le mur`,"id-ID":`Mode dinding`,"it-IT":`Metodo di disegno a parete`,"ja-JP":`壁の描画方法`,"ko-KR":`벽 그리기 방법`,"ms-MY":`Mod dinding`,"nl-NL":`Wandtekening`,"pl-PL":`Sposób rysowania ścian`,"pt-PT":`Desenho de parede`,"sr-Cyrl":`Режим зида`,"vi-VN":`Cách vẽ tường`,"zh-CN":`墙绘制方式`,"zh-TW":`墙绘制方式`},交通工具:{"de-DE":`Verkehrsmittel`,"en-US":`vehicle`,"es-ES":`Medios de transporte`,"fr-FR":`Moyens de transport`,"id-ID":`kendaraan`,"it-IT":`mezzi di trasporto`,"ja-JP":`乗り物`,"ko-KR":`교통수단`,"ms-MY":`kenderaan`,"nl-NL":`Vervoer`,"pl-PL":`Pojazdy transportowe`,"pt-PT":`Transporte`,"sr-Cyrl":`возило`,"vi-VN":`Phương tiện vận chuyển`,"zh-CN":`交通工具`,"zh-TW":`交通工具`},整体平移:{"de-DE":`Gesamtverschiebung`,"en-US":`Overall translation`,"es-ES":`Traducción general`,"fr-FR":`Translation globale`,"id-ID":`Terjemahan keseluruhan`,"it-IT":`Spostamento globale`,"ja-JP":`ソリッドシフト`,"ko-KR":`전체 변환`,"ms-MY":`Terjemahan keseluruhan`,"nl-NL":`Algemene verplaatsing`,"pl-PL":`Przeniesienie całkowite`,"pt-PT":`Deslocamento global`,"sr-Cyrl":`Укупни превод`,"vi-VN":`Xoay toàn bộ`,"zh-CN":`整体平移`,"zh-TW":`整体平移`},"旋转90°":{"de-DE":`90° drehen`,"en-US":`Rotate 90°`,"es-ES":`Rotar 90°`,"fr-FR":`Tourner 90°`,"id-ID":`Putar 90°`,"it-IT":`Ruotare 90°`,"ja-JP":`90°回転`,"ko-KR":`90° 회전`,"ms-MY":`Putar 90°`,"nl-NL":`Draai 90°`,"pl-PL":`Obróć o 90°`,"pt-PT":`Rodar 90°`,"sr-Cyrl":`Заврти 90°`,"vi-VN":`Xoay 90 °`,"zh-CN":`旋转90°`,"zh-TW":`旋转90°`},左右镜像:{"de-DE":`Horizontaler Spiegel`,"en-US":`Horizontal mirror`,"es-ES":`Espejo Horizontal`,"fr-FR":`Miroir Horizontal`,"id-ID":`Cermin horisontal`,"it-IT":`Riflesso orizzontale`,"ja-JP":`平面図左右ミラーリング`,"ko-KR":`수평 반사`,"ms-MY":`Cermin horizontal`,"nl-NL":`Spiegel horizontaal`,"pl-PL":`Poziome odbicie`,"pt-PT":`Espelho horizontal`,"sr-Cyrl":`Хоризонтално одраз`,"vi-VN":`Gương trái và phải`,"zh-CN":`左右镜像`,"zh-TW":`左右镜像`},上下镜像:{"de-DE":`Spiegel vertikal`,"en-US":`Vertical mirror`,"es-ES":`Espejo Vertical`,"fr-FR":`Miroir vertical`,"id-ID":`Cermin vertikal`,"it-IT":`Lo specchio su e giù`,"ja-JP":`平面図上下ミラーリング`,"ko-KR":`상하 미러`,"ms-MY":`Cermin vertikal`,"nl-NL":`Spiegel verticaal`,"pl-PL":`Lustro w górę`,"pt-PT":`Espelho na vertical`,"sr-Cyrl":`Вертикално огледало`,"vi-VN":`Gương trên và dưới`,"zh-CN":`上下镜像`,"zh-TW":`上下镜像`},新增顶层:{"de-DE":`Höher`,"en-US":`Higher`,"es-ES":`Más alto`,"fr-FR":`Supérieur`,"id-ID":`Tinggi`,"it-IT":`Più alto`,"ja-JP":`最上位`,"ko-KR":`더 높은`,"ms-MY":`Tinggi`,"nl-NL":`Hoger`,"pl-PL":`Wyższy`,"pt-PT":`Mais alto`,"sr-Cyrl":`Више`,"vi-VN":`Cao hơn`,"zh-CN":`新增顶层`,"zh-TW":`新增顶层`},新增底层:{"de-DE":`Unterer`,"en-US":`Lower`,"es-ES":`Más bajo`,"fr-FR":`Bas`,"id-ID":`Bawah`,"it-IT":`Riduci`,"ja-JP":`最下位`,"ko-KR":`하향`,"ms-MY":`Rendah`,"nl-NL":`Lager`,"pl-PL":`Niżej`,"pt-PT":`Inferior`,"sr-Cyrl":`Доњи`,"vi-VN":`Hạ thấp`,"zh-CN":`新增底层`,"zh-TW":`新增底层`},撑满:{"de-DE":`Auffüllen`,"en-US":`Fill up`,"es-ES":`Llenar`,"fr-FR":`Remplir`,"id-ID":`Penuh`,"it-IT":`Riempi`,"ja-JP":`満たす`,"ko-KR":`채우다`,"ms-MY":`Isi`,"nl-NL":`Vullen`,"pl-PL":`Napełnij`,"pt-PT":`Encher`,"sr-Cyrl":`Пуно`,"vi-VN":`Đầy đủ`,"zh-CN":`撑满`,"zh-TW":`撑满`},入户门设置:{"de-DE":`Eingangstüreinstellungen`,"en-US":`Entrance door setting`,"es-ES":`Configuración de la puerta de entrada`,"fr-FR":`Configuration de la porte d'entrée`,"id-ID":`Pengaturan pintu masuk`,"it-IT":`Impostazioni porta d'ingresso`,"ja-JP":`ポータルの設定`,"ko-KR":`입주문 설치`,"ms-MY":`Tetapan pintu masuk`,"nl-NL":`Ingangsdeur instellen`,"pl-PL":`Ustawienia drzwi wejściowych`,"pt-PT":`Configuração da porta de entrada`,"sr-Cyrl":`Подешавање улазних врата`,"vi-VN":`Thiết lập cửa vào`,"zh-CN":`入户门设置`,"zh-TW":`入户门设置`},设为入户门:{"de-DE":`Als Eingangstür einstellen`,"en-US":`Set as the entrance door`,"es-ES":`Establecido como puerta de entrada`,"fr-FR":`Faire une porte d'entrée`,"id-ID":`Tetapkan sebagai pintu masuk`,"it-IT":`Impostare come porta d'ingresso`,"ja-JP":`入戸門とする`,"ko-KR":`입주문으로 만들다`,"ms-MY":`Tetapkan sebagai pintu masuk`,"nl-NL":`Als ingang instellen`,"pl-PL":`Ustaw jako drzwi wejściowe`,"pt-PT":`Definir como porta de entrada`,"sr-Cyrl":`Поставите као улазна врата`,"vi-VN":`Thiết lập cửa vào`,"zh-CN":`设为入户门`,"zh-TW":`设为入户门`},入户门角度:{"de-DE":`Eingangswinkel`,"en-US":`Entrance door angle`,"es-ES":`ángulo de entrada`,"fr-FR":`Angle de porte d'entrée`,"id-ID":`Sudut pintu masuk`,"it-IT":`Angolo di ingresso`,"ja-JP":`入戸ゲート角度`,"ko-KR":`입주문 각도`,"ms-MY":`Sudut pintu masuk`,"nl-NL":`Ingangshoek`,"pl-PL":`Kąt drzwi wejściowych`,"pt-PT":`Ángulo da porta de entrada`,"sr-Cyrl":`Угао улазних врата`,"vi-VN":`Góc cửa vào nhà`,"zh-CN":`入户门角度`,"zh-TW":`入户门角度`},高度:{"de-DE":`Höhe`,"en-US":`height`,"es-ES":`Altura`,"fr-FR":`Hauteur`,"id-ID":`tinggi`,"it-IT":`Altezza`,"ja-JP":`高さ`,"ko-KR":`높이`,"ms-MY":`ketinggian`,"nl-NL":`Hoogte`,"pl-PL":`Wysokość`,"pt-PT":`Altura`,"sr-Cyrl":`висина`,"vi-VN":`Chiều cao`,"zh-CN":`高度`,"zh-TW":`高度`},距地:{"de-DE":`Entfernung`,"en-US":`Distance from the ground`,"es-ES":`Distancia al suelo`,"fr-FR":`Distance de la terre`,"id-ID":`Jarak dari tanah`,"it-IT":`Distanza`,"ja-JP":`ピッチ`,"ko-KR":`격지`,"ms-MY":`Jarak dari tanah`,"nl-NL":`Afstand`,"pl-PL":`Odległość`,"pt-PT":`Distância`,"sr-Cyrl":`Раздаљина од земље`,"vi-VN":`Từ mặt đất`,"zh-CN":`距地`,"zh-TW":`距地`},门宽:{"de-DE":`Türbereite`,"en-US":`Door width`,"es-ES":`Ancho de la puerta`,"fr-FR":`Largeur de la porte`,"id-ID":`Lebar pintu`,"it-IT":`Larghezza porta`,"ja-JP":`ドア幅`,"ko-KR":`문폭`,"ms-MY":`Lebar pintu`,"nl-NL":`Deurbreedte`,"pl-PL":`Szerokość drzwi`,"pt-PT":`Largura da porta`,"sr-Cyrl":`Ширина врата`,"vi-VN":`Chiều rộng cửa`,"zh-CN":`门宽`,"zh-TW":`门宽`},窗高:{"de-DE":`Fenster hoch`,"en-US":`Window height`,"es-ES":`Altura de la ventana`,"fr-FR":`Fenêtre haute`,"id-ID":`Tinggi jendela`,"it-IT":`Finestra alta`,"ja-JP":`窓の高さ`,"ko-KR":`창 높이`,"ms-MY":`Ketinggian tingkap`,"nl-NL":`Ramen hoog`,"pl-PL":`Wysokość okna`,"pt-PT":`Altura da janela`,"sr-Cyrl":`Висина прозора`,"vi-VN":`Chiều cao cửa sổ`,"zh-CN":`窗高`,"zh-TW":`窗高`},旋转物件:{"de-DE":`Objekt drehen`,"en-US":`Rotating object`,"es-ES":`Objetos giratorios`,"fr-FR":`Rotation des objets`,"id-ID":`Memutar objek`,"it-IT":`Ruotare oggetti`,"ja-JP":`回転物`,"ko-KR":`회전 개체`,"ms-MY":`Objek berputar`,"nl-NL":`Object draaien`,"pl-PL":`Obracaj obiekt`,"pt-PT":`Rotar o objeto`,"sr-Cyrl":`Ротирање објекта`,"vi-VN":`Xoay đối tượng`,"zh-CN":`旋转物件`,"zh-TW":`旋转物件`},墙体设置:{"de-DE":`Wandeinstellungen`,"en-US":`Wall setting`,"es-ES":`Configuración de la pared`,"fr-FR":`Paramètres du mur`,"id-ID":`Pengaturan dinding`,"it-IT":`Impostazioni del muro`,"ja-JP":`壁の設定`,"ko-KR":`벽체 설치`,"ms-MY":`Tetapan dinding`,"nl-NL":`Wandinstellingen`,"pl-PL":`Ustawienia ściany`,"pt-PT":`Configurações da parede`,"sr-Cyrl":`Подешавање зида`,"vi-VN":`Cài đặt tường`,"zh-CN":`墙体设置`,"zh-TW":`墙体设置`},墙点设置:{"de-DE":`Wandpunkteinstellungen`,"en-US":`Wall point setting`,"es-ES":`Configuración del punto de la pared`,"fr-FR":`Paramètres de point de mur`,"id-ID":`Pengaturan titik dinding`,"it-IT":`Impostazioni del punto del muro`,"ja-JP":`壁ポイントの設定`,"ko-KR":`벽 점 설정`,"ms-MY":`Tetapan titik dinding`,"nl-NL":`Muurpunten instellen`,"pl-PL":`Ustawienia punktu ściennego`,"pt-PT":`Configuração do ponto da parede`,"sr-Cyrl":`Подешавање тачке зида`,"vi-VN":`Cài đặt điểm tường`,"zh-CN":`墙点设置`,"zh-TW":`墙点设置`},分区设置:{"de-DE":`Partitionseinstellungen`,"en-US":`Partition settings`,"es-ES":`Configuración de la zona`,"fr-FR":`Paramètres de partition`,"id-ID":`Pengaturan partisi`,"it-IT":`Impostazioni partizione`,"ja-JP":`パーティション設定`,"ko-KR":`파티션 설정`,"ms-MY":`Tetapan partition`,"nl-NL":`Partitie instellingen`,"pl-PL":`Ustawienia partycji`,"pt-PT":`Configurações da partição`,"sr-Cyrl":`Подешавања преграда`,"vi-VN":`Thiết lập phân vùng`,"zh-CN":`分区设置`,"zh-TW":`分区设置`},文本标注:{"de-DE":`Textmarkierung`,"en-US":`Text annotation`,"es-ES":`Etiquetado de texto`,"fr-FR":`Annotation de texte`,"id-ID":`Anotasi teks`,"it-IT":`Etichette di testo`,"ja-JP":`テキストマークアップ`,"ko-KR":`텍스트 마크업`,"ms-MY":`Anotasi teks`,"nl-NL":`Tekstmarkeringen`,"pl-PL":`Oznaki tekstowe`,"pt-PT":`Marcação de texto`,"sr-Cyrl":`Текстуална анотација`,"vi-VN":`Kích thước văn bản`,"zh-CN":`文本标注`,"zh-TW":`文本标注`},外墙内线长度:{"de-DE":`Länge der Außenwand`,"en-US":`Inner length`,"es-ES":`Longitud interior de la pared exterior`,"fr-FR":`Longueur de la ligne intérieure du mur extérieur`,"id-ID":`Panjang dalam`,"it-IT":`Lunghezza della parete esterna`,"ja-JP":`外壁内線長さ`,"ko-KR":`외벽 내선 길이`,"ms-MY":`Panjang dalam`,"nl-NL":`Lengte van de buitenwand`,"pl-PL":`Długość ściany zewnętrznej`,"pt-PT":`Comprimento da linha interna da parede externa`,"sr-Cyrl":`Унутрашња дужина`,"vi-VN":`Chiều dài bên trong tường bên ngoài`,"zh-CN":`外墙内线长度`,"zh-TW":`外墙内线长度`},小:{"de-DE":`Klein`,"en-US":`Small`,"es-ES":`Pequeño`,"fr-FR":`Petit`,"id-ID":`Kecil`,"it-IT":`Piccolo`,"ja-JP":`小さい`,"ko-KR":`작은`,"ms-MY":`Kecil`,"nl-NL":`Klein`,"pl-PL":`Małe`,"pt-PT":`Pequeno`,"sr-Cyrl":`Мали`,"vi-VN":`Nhỏ`,"zh-CN":`小`,"zh-TW":`小`},中:{"de-DE":`Mittel`,"en-US":`Medium`,"es-ES":`Medio`,"fr-FR":`Au milieu`,"id-ID":`Sedang`,"it-IT":`Medio`,"ja-JP":`中`,"ko-KR":`가운데`,"ms-MY":`Sederhana`,"nl-NL":`Midden`,"pl-PL":`Środkowy`,"pt-PT":`médio`,"sr-Cyrl":`Средње`,"vi-VN":`Giữa`,"zh-CN":`中`,"zh-TW":`中`},大:{"de-DE":`Große`,"en-US":`Large`,"es-ES":`Grande`,"fr-FR":`Grand`,"id-ID":`Besar`,"it-IT":`Grande`,"ja-JP":`大きい`,"ko-KR":`큰`,"ms-MY":`Besar`,"nl-NL":`Groot`,"pl-PL":`Wielkie`,"pt-PT":`Grande`,"sr-Cyrl":`Велико`,"vi-VN":`Lớn`,"zh-CN":`大`,"zh-TW":`大`},参数设置:{"de-DE":`Parametereinstellungen`,"en-US":`Parameter settings`,"es-ES":`Configuración de parámetros`,"fr-FR":`Paramètres paramètres`,"id-ID":`Pengaturan parameter`,"it-IT":`Impostazioni dei parametri`,"ja-JP":`パラメータ設定`,"ko-KR":`매개변수 설정`,"ms-MY":`Tetapan parameter`,"nl-NL":`Parameter instellingen`,"pl-PL":`Ustawienia parametrów`,"pt-PT":`Configuração dos parâmetros`,"sr-Cyrl":`Подешавања параметара`,"vi-VN":`Thiết lập tham số`,"zh-CN":`参数设置`,"zh-TW":`参数设置`},设置:{"de-DE":`Einstellungen`,"en-US":`Setup`,"es-ES":`Configuración`,"fr-FR":`Paramètres`,"id-ID":`Pengaturan`,"it-IT":`Impostazioni`,"ja-JP":`設定#セッテイ#`,"ko-KR":`설치`,"ms-MY":`Tetapan`,"nl-NL":`Instellingen`,"pl-PL":`Ustawienia`,"pt-PT":`Configurações`,"sr-Cyrl":`Подешавање`,"vi-VN":`Thiết lập`,"zh-CN":`设置`,"zh-TW":`设置`},整图调整:{"de-DE":`Gesamtbildanpassung`,"en-US":`Modify`,"es-ES":`Ajuste de toda la imagen`,"fr-FR":`Ajustement de la figure entière`,"id-ID":`Ubah`,"it-IT":`Regolazione intera`,"ja-JP":`全図調整`,"ko-KR":`전체 그림 조정`,"ms-MY":`Ubah`,"nl-NL":`Afbeelding aanpassen`,"pl-PL":`Dostosowanie zdjęcia`,"pt-PT":`Ajuste do mapa inteiro`,"sr-Cyrl":`Измени`,"vi-VN":`Điều chỉnh toàn đồ thị`,"zh-CN":`整图调整`,"zh-TW":`整图调整`},字号:{"de-DE":`Schriftnummer`,"en-US":`word size`,"es-ES":`Tamaño`,"fr-FR":`Numéro de mot`,"id-ID":`ukuran kata`,"it-IT":`Numero di carattere`,"ja-JP":`サイズ`,"ko-KR":`문자 번호`,"ms-MY":`saiz perkataan`,"nl-NL":`letternummer`,"pl-PL":`Numer pisma`,"pt-PT":`Número de letra`,"sr-Cyrl":`величина речи`,"vi-VN":`Cỡ`,"zh-CN":`字号`,"zh-TW":`字号`},墙厚:{"de-DE":`Wanddicke`,"en-US":`Thickness`,"es-ES":`Espesor de la pared`,"fr-FR":`Épaisseur du mur`,"id-ID":`Ketebalan`,"it-IT":`Spessore della parete`,"ja-JP":`壁の厚さ`,"ko-KR":`벽 두께`,"ms-MY":`Ketebalan`,"nl-NL":`Wanddikte`,"pl-PL":`Grubość ściany`,"pt-PT":`Espessura da parede`,"sr-Cyrl":`Дебљина`,"vi-VN":`Độ dày tường`,"zh-CN":`墙厚`,"zh-TW":`墙厚`},弧形墙:{"de-DE":`Bogenwand`,"en-US":`Curved`,"es-ES":`Pared curvada`,"fr-FR":`Mur d'arc`,"id-ID":`Melengkung`,"it-IT":`Muro curvo`,"ja-JP":`円弧壁`,"ko-KR":`호형 벽`,"ms-MY":`Melengkung`,"nl-NL":`gebogen muur`,"pl-PL":`Skrzywiona ściana`,"pt-PT":`parede curva`,"sr-Cyrl":`Закривљено`,"vi-VN":`Tường cong`,"zh-CN":`弧形墙`,"zh-TW":`弧形墙`},"按方向键进行微调,按Esc结束调整":{"de-DE":`Drücken Sie die Richtungstaste, um die Einstellung zu beenden, und drücken Sie Esc`,"en-US":`Press the directional keys for fine-tuning, press Esc to end the adjustment`,"es-ES":`Presione el botón de dirección para ajustar y presione ESC para terminar el ajuste`,"fr-FR":`Appuyez sur les touches directionnelles pour affiner, appuyez sur Esc pour terminer le réglage`,"id-ID":`Tekan tombol arah untuk penyesuaian halus, tekan Esc untuk mengakhiri penyesuaian`,"it-IT":`Premere il tasto di direzione per la regolazione fine, premere Esc per la fine della regolazione`,"ja-JP":`方向キーを押して微調整し、Escを押して調整を終了する`,"ko-KR":`방향키를 눌러 미세 조정하고 Esc 키를 눌러 조정 종료`,"ms-MY":`Tekan kekunci arah untuk pelarasan halus, tekan Esc untuk menamatkan pelarasan`,"nl-NL":`Druk op de richtingstoets om te fineren, druk op Esc om te eindigen`,"pl-PL":`Naciśnij klawisz kierunkowy, aby dostosować, naciśnij Esc, aby zakończyć regulację`,"pt-PT":`Pressione a tecla de direção para ajustar, pressione Esc para terminar o ajuste`,"sr-Cyrl":`Притисните тастере за усмеравање за фино подешавање, притисните Есц да завршите подешавање`,"vi-VN":`Tinh chỉnh bằng phím mũi tên, Esc để kết thúc điều chỉnh`,"zh-CN":`按方向键进行微调,按Esc结束调整`,"zh-TW":`按方向键进行微调,按Esc结束调整`},请输入楼层名称:{"de-DE":`Bitte geben Sie den Namen der Etage ein`,"en-US":`Please enter floor name`,"es-ES":`Introduzca el nombre del piso`,"fr-FR":`Veuillez entrer le nom de l'étage`,"id-ID":`Harap masukkan nama lantai`,"it-IT":`Inserisci il nome del piano`,"ja-JP":`請輸入樓層名稱`,"ko-KR":`층명을 입력하세요`,"ms-MY":`Sila masukkan nama tingkat`,"nl-NL":`Voer de naam van de verdieping in`,"pl-PL":`Proszę wpisać nazwę piętra`,"pt-PT":`Digite o nome do piso`,"sr-Cyrl":`Молимо вас да унесете име спрата`,"vi-VN":`Vui lòng nhập tên tầng`,"zh-CN":`请输入楼层名称`,"zh-TW":`请输入楼层名称`},展示名称:{"de-DE":`Anzeigename`,"en-US":`Name`,"es-ES":`Nombre de la pantalla`,"fr-FR":`Afficher le nom`,"id-ID":`Nama`,"it-IT":`Nome di visualizzazione`,"ja-JP":`名称`,"ko-KR":`프리젠테이션 이름`,"ms-MY":`Nama`,"nl-NL":`Toonnaam`,"pl-PL":`Nazwa wyświetlania`,"pt-PT":`Nome de exibição`,"sr-Cyrl":`Назив`,"vi-VN":`Hiển thị tên`,"zh-CN":`展示名称`,"zh-TW":`展示名称`},智能检测:{"de-DE":`Intelligente Prüfung`,"en-US":`AI Detect`,"es-ES":`Detección inteligente`,"fr-FR":`Détection intelligente`,"id-ID":`Deteksi AI`,"it-IT":`Rilevamento intelligente`,"ja-JP":`AI 検知`,"ko-KR":`지능형 검사`,"ms-MY":`AI Kesan`,"nl-NL":`Slimme detectie`,"pl-PL":`Inteligentne wykrywanie`,"pt-PT":`Detecção inteligente`,"sr-Cyrl":`АИ Детекција`,"vi-VN":`Phát hiện thông minh`,"zh-CN":`智能检测`,"zh-TW":`智能检测`},修改楼层名称:{"de-DE":`Name der Etage ändern`,"en-US":`Change floor name`,"es-ES":`Modificar el nombre del piso`,"fr-FR":`Modifier le nom de l'étage`,"id-ID":`Ubah nama lantai`,"it-IT":`Modificare il nome del piano`,"ja-JP":`フロア名の変更`,"ko-KR":`층명 수정`,"ms-MY":`Tukar nama tingkat`,"nl-NL":`De naam van de vloer wijzigen`,"pl-PL":`Zmiana nazwy piętra`,"pt-PT":`Modificar o nome do piso`,"sr-Cyrl":`Промени име спрата`,"vi-VN":`Thay đổi tên tầng`,"zh-CN":`修改楼层名称`,"zh-TW":`修改楼层名称`},添加直线墙:{"de-DE":`Direkte Wand hinzufügen`,"en-US":`Add a straight wall`,"es-ES":`Añadir paredes rectas`,"fr-FR":`Ajouter un mur droit`,"id-ID":`Tambahkan dinding lurus`,"it-IT":`Aggiungi parete lineare`,"ja-JP":`直線壁を追加`,"ko-KR":`선 벽 추가`,"ms-MY":`Tambah dinding lurus`,"nl-NL":`Rechte muur toevoegen`,"pl-PL":`Dodaj ścianę prostą`,"pt-PT":`Adicionar parede linear`,"sr-Cyrl":`Додајте прави зид`,"vi-VN":`Thêm tường thẳng`,"zh-CN":`添加直线墙`,"zh-TW":`添加直线墙`},添加矩形墙:{"de-DE":`Rechteckwand hinzufügen`,"en-US":`Add rectangular wall`,"es-ES":`Añadir paredes rectangulares`,"fr-FR":`Ajouter un mur rectangulaire`,"id-ID":`Tambah dinding persegi panjang`,"it-IT":`Aggiungi parete rettangolare`,"ja-JP":`矩形壁を追加するには`,"ko-KR":`직사각형 벽 추가`,"ms-MY":`Tambah dinding segi empat tepat`,"nl-NL":`Rechthoekige muur plaatsen`,"pl-PL":`Dodaj prostokątną ścianę`,"pt-PT":`Adicionar parede retangular`,"sr-Cyrl":`Додајте правоугаони зид`,"vi-VN":`Thêm tường hình chữ nhật`,"zh-CN":`添加矩形墙`,"zh-TW":`添加矩形墙`},打开构建面板:{"de-DE":`Build-Panel öffnen`,"en-US":`Open the build panel`,"es-ES":`Abrir el panel de construcción`,"fr-FR":`Ouvrir le panneau de construction`,"id-ID":`Buka panel bangunan`,"it-IT":`Aprire il pannello di costruzione`,"ja-JP":`ビルド面を開く`,"ko-KR":`빌드 패널 열기`,"ms-MY":`Buka panel binaan`,"nl-NL":`Het bouwpaneel openen`,"pl-PL":`Otwórz panel budowy`,"pt-PT":`Abrir painel de construção`,"sr-Cyrl":`Отворите панел за изградњу`,"vi-VN":`Mở Build Panel`,"zh-CN":`打开构建面板`,"zh-TW":`打开构建面板`},打开物件面板:{"de-DE":`Objektfeld öffnen`,"en-US":`Open the object panel`,"es-ES":`Abrir el panel de objetos`,"fr-FR":`Ouvrir le panneau objets`,"id-ID":`Buka panel objek`,"it-IT":`Apri il pannello degli oggetti`,"ja-JP":`オブジェクトの面を開く`,"ko-KR":`객체 패널 열기`,"ms-MY":`Buka panel objek`,"nl-NL":`Objectpaneel openen`,"pl-PL":`Otwórz panel obiektów`,"pt-PT":`Abrir painel de objetos`,"sr-Cyrl":`Отворите панел објеката`,"vi-VN":`Mở Object Panel`,"zh-CN":`打开物件面板`,"zh-TW":`打开物件面板`},"正交/非正交绘制":{"de-DE":`Ortogonale/Nicht-Ortogonale Zeichnung`,"en-US":`Orth/Non Orth`,"es-ES":`Dibujo ortonormal / no ortonormal`,"fr-FR":`Dessin Orthogonal / non orthogonal`,"id-ID":`Ort/Nonort`,"it-IT":`Disegno ortogonale/non ortogonale`,"ja-JP":`直交/非直交描画`,"ko-KR":`직교 / 비직교 드로잉`,"ms-MY":`Orth/Bukan Orth`,"nl-NL":`Ortogonale / niet-orthogonale tekening`,"pl-PL":`Rysunek prostokątny/nieprostokątny`,"pt-PT":`Desenho ortogonal/não ortogonal`,"sr-Cyrl":`Орт/Неорт`,"vi-VN":`Vẽ trực giao/không trực giao`,"zh-CN":`正交/非正交绘制`,"zh-TW":`正交/非正交绘制`},自由绘制:{"de-DE":`Freie Zeichnung`,"en-US":`Free drawing`,"es-ES":`Dibujo libre`,"fr-FR":`Dessiner librement`,"id-ID":`Menggambar bebas`,"it-IT":`Disegno libero`,"ja-JP":`フリードラフト`,"ko-KR":`자유롭게 그리기`,"ms-MY":`Lukisan bebas`,"nl-NL":`Vrij tekenen`,"pl-PL":`Wolne rysowanie`,"pt-PT":`Desenho Livre`,"sr-Cyrl":`Слободно цртање`,"vi-VN":`Vẽ tự do`,"zh-CN":`自由绘制`,"zh-TW":`自由绘制`},移动画布:{"de-DE":`Mobile Leinwand`,"en-US":`Moving Canvas`,"es-ES":`Lienzo móvil`,"fr-FR":`Toile mobile`,"id-ID":`Kanvas Bergerak`,"it-IT":`Movire tela`,"ja-JP":`キャンバスを移動`,"ko-KR":`캔버스 이동`,"ms-MY":`Pergerakan Kanvas`,"nl-NL":`Mobiel canvas`,"pl-PL":`Przenieś płótno`,"pt-PT":`Mover tela`,"sr-Cyrl":`Покретно платно`,"vi-VN":`Di chuyển Canvas`,"zh-CN":`移动画布`,"zh-TW":`移动画布`},移动元素位置:{"de-DE":`Elementposition verschieben`,"en-US":`Move element position`,"es-ES":`Reubicar el elemento`,"fr-FR":`Position des éléments mobiles`,"id-ID":`Pindahkan posisi elemen`,"it-IT":`Sposta la posizione degli elementi`,"ja-JP":`要素の位置の移動`,"ko-KR":`요소 위치 이동`,"ms-MY":`Gerakkan kedudukan elemen`,"nl-NL":`Positie van element wijzigen`,"pl-PL":`Przenieś pozycję elementu`,"pt-PT":`Mover a posição dos elementos`,"sr-Cyrl":`Помери позицију елемента`,"vi-VN":`Di chuyển vị trí phần tử`,"zh-CN":`移动元素位置`,"zh-TW":`移动元素位置`},位置微调:{"de-DE":`Justierung`,"en-US":`Adjustment`,"es-ES":`Adaptación`,"fr-FR":`Adaptation`,"id-ID":`Penyesuaian`,"it-IT":`Adattamento`,"ja-JP":`位置微調整`,"ko-KR":`위치 미세 조정`,"ms-MY":`Pelarasan`,"nl-NL":`Bijstelling`,"pl-PL":`Korekta`,"pt-PT":`Modificação`,"sr-Cyrl":`Корекција`,"vi-VN":`Căn chỉnh`,"zh-CN":`位置微调`,"zh-TW":`位置微调`},清空画布:{"de-DE":`Leinwand leeren`,"en-US":`Clear Canvas`,"es-ES":`Vaciar el lienzo`,"fr-FR":`Vider la toile`,"id-ID":`Bersihkan Kanvas`,"it-IT":`Svuota la tela`,"ja-JP":`キャンバスを空にする`,"ko-KR":`캔버스 비우기`,"ms-MY":`Kosongkan Kanvas`,"nl-NL":`Leeg het doek`,"pl-PL":`Wyczyść płótno`,"pt-PT":`Esvaziar a tela`,"sr-Cyrl":`Очисти платно`,"vi-VN":`Trống vải`,"zh-CN":`清空画布`,"zh-TW":`清空画布`},"按方向键微调墙线位置,按住alt/option取消吸附":{"de-DE":`Drücken Sie die Richtungstaste, um die Position der Wandlinie zu verfeinern und halten Sie alt/option gedrückt, um die Adsorption abzuheben`,"en-US":`Press the directional keys to fine tune the position of the wall line, and hold down alt/opt to cancel the adsorption`,"es-ES":`Presione el botón de dirección para ajustar la posición de la línea de la pared y presione alt / opción para cancelar la adsorción`,"fr-FR":`Appuyez sur les touches directionnelles pour affiner la position de la ligne murale, maintenez la touche Alt / option enfoncée pour annuler l'adsorption`,"id-ID":`Tekan tombol arah untuk menyempurnakan posisi garis dinding, dan tahan alt/opt untuk membatalkan penyerapan`,"it-IT":`Premere il tasto di orientamento per affinare la posizione della linea del muro e tenere premuto alt / opzione per annullare l'assorbimento`,"ja-JP":`矢印キーを押して壁線の位置を微調整し、alt/optionを押したまま吸着を解除します`,"ko-KR":`방향키를 눌러 벽선의 위치를 미세하게 조정하고 alt/option을 누른 채 흡착을 취소합니다`,"ms-MY":`Tekan kekunci arah untuk melaras kedudukan garis dinding, dan tahan alt/opt untuk membatalkan penyerapan`,"nl-NL":`Druk op de richtingsknop om de positie van de wandlijn te verfijnen en houd de alt/optie ingedrukt om de adsorptie te annuleren`,"pl-PL":`Naciśnij klawisz kierunkowy, aby dostosować pozycję linii ściennej, przytrzymając alt/option, aby anulować adsorpcję`,"pt-PT":`Pressione a tecla de direção para ajustar a posição da linha de parede e mantenha pressionada alt/option para cancelar a adsorção`,"sr-Cyrl":`Притисните тастере за усмеравање да бисте прецизно подесили позицију линије зида, и држите алт/опт да бисте отказали апсорпцију`,"vi-VN":`Tinh chỉnh vị trí tường dòng bằng cách nhấn phím định hướng, giữ alt/option để hủy hấp phụ`,"zh-CN":`按方向键微调墙线位置,按住alt/option取消吸附`,"zh-TW":`按方向键微调墙线位置,按住alt/option取消吸附`},"按 Esc 或 右键 取消添加,按住alt/option取消吸附":{"de-DE":`Drücken Sie Esc oder rechte Taste, um das Hinzufügen abzubrechen, halten Sie Alt/Option gedrückt, um das Einrasten zu deaktivieren`,"en-US":`Press Esc or right-click to cancel the addition, hold Alt/Option to disable snapping`,"es-ES":`Presione Esc o haga clic derecho para cancelar la adición, mantenga Alt/Opción para desactivar el ajuste`,"fr-FR":`Appuyez sur Esc ou le bouton droit pour annuler l'ajout, maintenez Alt/Option pour désactiver l'alignement`,"id-ID":`Tekan Esc atau klik kanan untuk membatalkan penambahan, tahan Alt/Opsi untuk menonaktifkan penjajaran otomatis`,"it-IT":`Premere Esc o il tasto destro per annullare l'aggiunta, tenere premuto Alt/Option per disattivare l'aggancio`,"ja-JP":`Escまたは右クリックで追加解除、Alt/Optionキーを押しながらでスナップを無効化`,"ko-KR":`Esc 또는 마우스 오른쪽 버튼을 눌러 추가를 취소하고, Alt/Option 키를 누른 상태에서 스냅을 비활성화`,"ms-MY":`Tekan Esc atau klik kanan untuk membatalkan penambahan, tahan Alt/Option untuk mematikan penjajaran automatik`,"nl-NL":`Druk op Esc of rechtermuisknop om toevoegen te annuleren, houd Alt/Option ingedrukt om het vastklikken uit te schakelen`,"pl-PL":`Naciśnij Esc lub prawy przycisk, aby anulować dodanie, przytrzymaj Alt/Option, aby wyłączyć przyciąganie`,"pt-PT":`Pressione Esc ou botão direito para cancelar a adição, mantenha Alt/Option para desativar o encaixe automático`,"sr-Cyrl":`Притисните Esc или десни клик да откажете додавање, држите Alt/Option да онемогућите приањање`,"vi-VN":`Nhấn Esc hoặc nhấp chuột phải để hủy bỏ thêm, giữ Alt/Option để tắt chế độ hút`,"zh-CN":`按 Esc 或 右键 取消添加,按住 Alt/Option 取消吸附`,"zh-TW":`按 Esc 或 右鍵 取消添加,按住 Alt/Option 取消吸附`},无结果:{"de-DE":`Keine Ergebnisse`,"en-US":`No results`,"es-ES":`Sin resultados`,"fr-FR":`Aucun résultat`,"id-ID":`Tidak ada hasil`,"it-IT":`Nessun risultato`,"ja-JP":`結果なし`,"ko-KR":`결과 없음`,"ms-MY":`Tiada hasil`,"nl-NL":`Geen resultaten`,"pl-PL":`Brak wyników`,"pt-PT":`Nenhum resultado`,"sr-Cyrl":`Нема резултата`,"vi-VN":`Không có kết quả`,"zh-CN":`无结果`,"zh-TW":`无结果`},处理失败:{"de-DE":`Bearbeitung fehlgeschlagen`,"en-US":`Processing failed`,"es-ES":`El procesamiento falló`,"fr-FR":`échec du traitement`,"id-ID":`Pemrosesan gagal`,"it-IT":`Gestione non riuscita`,"ja-JP":`処理に失敗しました`,"ko-KR":`처리 실패`,"ms-MY":`Pemprosesan gagal`,"nl-NL":`Handling mislukt`,"pl-PL":`Nieudane przetwarzanie`,"pt-PT":`Falha no processamento`,"sr-Cyrl":`Обрада није успела`,"vi-VN":`Xử lý thất bại`,"zh-CN":`处理失败`,"zh-TW":`处理失败`},处理成功:{"de-DE":`Erfolgreiche Bearbeitung`,"en-US":`Processing successful`,"es-ES":`Procesamiento exitoso`,"fr-FR":`Traiter avec succès`,"id-ID":`Pemrosesan berhasil`,"it-IT":`Gestione con successo`,"ja-JP":`処理に成功しました`,"ko-KR":`처리 성공`,"ms-MY":`Pemprosesan berjaya`,"nl-NL":`Succesvolle verwerking`,"pl-PL":`Pomyślne przetwarzanie`,"pt-PT":`Processamento bem sucedido`,"sr-Cyrl":`Обрада успешна`,"vi-VN":`Xử lý thành công`,"zh-CN":`处理成功`,"zh-TW":`处理成功`},"按Enter确认,按Esc取消编辑":{"de-DE":`Drücken Sie Enter, um zu bestätigen und Esc, um die Bearbeitung zu stornieren`,"en-US":`Press Enter to confirm, press Esc to cancel editing`,"es-ES":`Presione enter para confirmar, presione ESC para cancelar la edición`,"fr-FR":`Appuyez sur Entrée pour confirmer et ESC pour annuler la modification`,"id-ID":`Tekan Enter untuk mengonfirmasi, tekan Esc untuk membatalkan pengeditan`,"it-IT":`Premere Enter per confermare, Esc per annullare la modifica`,"ja-JP":`Enterを押して確認し、Escを押して編集をキャンセルします`,"ko-KR":`Enter 키를 눌러 확인하고 Esc 키를 눌러 편집 취소`,"ms-MY":`Tekan Enter untuk mengesahkan, tekan Esc untuk membatalkan penyuntingan`,"nl-NL":`Druk op Enter om te bevestigen en op Esc om de bewerking te annuleren`,"pl-PL":`Naciśnij Enter, aby potwierdzić, naciśnij Esc, aby anulować edycję`,"pt-PT":`Pressione Enter para confirmar e Esc para cancelar a edição`,"sr-Cyrl":`Притисните Enter за потврду, притисните Esc за отказивање уређивања`,"vi-VN":`Nhấn Enter để xác nhận, nhấn Esc để hủy chỉnh sửa`,"zh-CN":`按Enter确认,按Esc取消编辑`,"zh-TW":`按Enter确认,按Esc取消编辑`},指引线:{"de-DE":`Leitlinien`,"en-US":`Leader`,"es-ES":`Dedo`,"fr-FR":`Se référer à leads`,"id-ID":`Pemimpin`,"it-IT":`Linee guida`,"ja-JP":`ガイド線`,"ko-KR":`지시선`,"ms-MY":`Pemimpin`,"nl-NL":`De richtlijn`,"pl-PL":`Wskazówki`,"pt-PT":`Linha de orientação`,"sr-Cyrl":`Лидер`,"vi-VN":`Đường dẫn`,"zh-CN":`指引线`,"zh-TW":`指引线`},有指引线:{"de-DE":`Es gibt Leitlinien`,"en-US":`Guided lead wire`,"es-ES":`Con un dedo`,"fr-FR":`Leads avec doigts`,"id-ID":`Kabel panduan`,"it-IT":`Ci sono linee guida`,"ja-JP":`ゆうどうせん`,"ko-KR":`안내선 있음`,"ms-MY":`Wayar panduan berpandu`,"nl-NL":`Er zijn richtlijnen`,"pl-PL":`Ma wytyczne`,"pt-PT":`Há uma linha de orientação`,"sr-Cyrl":`Вођена жица`,"vi-VN":`Có đường chỉ dẫn`,"zh-CN":`有指引线`,"zh-TW":`有指引线`},无指引线:{"de-DE":`Keine Leitlinie`,"en-US":`Undirected lead wire`,"es-ES":`Sin dedo`,"fr-FR":`Leads sans doigts`,"id-ID":`Kabel utama tanpa arah`,"it-IT":`Nessuna linea guida`,"ja-JP":`指なし引出線`,"ko-KR":`지시선 없음`,"ms-MY":`Wayar panduan tidak berpandu`,"nl-NL":`Geen richtlijn`,"pl-PL":`Brak wskaźników`,"pt-PT":`Sem linha de orientação`,"sr-Cyrl":`Неусмерени проводник`,"vi-VN":`Dây dẫn ngón tay`,"zh-CN":`无指引线`,"zh-TW":`无指引线`},文字方向:{"de-DE":`Textrichtung`,"en-US":`direction`,"es-ES":`Dirección del texto`,"fr-FR":`Direction du texte`,"id-ID":`arah`,"it-IT":`Direzione del testo`,"ja-JP":`テキストの方向`,"ko-KR":`문자 방향`,"ms-MY":`arah`,"nl-NL":`Tekst richting`,"pl-PL":`Kierunek tekstu`,"pt-PT":`Direção do texto`,"sr-Cyrl":`правац`,"vi-VN":`Hướng văn bản`,"zh-CN":`文字方向`,"zh-TW":`文字方向`},墙线对比:{"de-DE":`Wandlinienvergleich`,"en-US":`Wall line comparison`,"es-ES":`Comparación de líneas de pared`,"fr-FR":`Comparaison des lignes de mur`,"id-ID":`Perbandingan garis dinding`,"it-IT":`Confronto pareti`,"ja-JP":`壁線のコントラスト`,"ko-KR":`벽선 비교`,"ms-MY":`Perbandingan garis dinding`,"nl-NL":`Vergelijking van muurlijnen`,"pl-PL":`Porównanie ścian`,"pt-PT":`Comparação de linhas de parede`,"sr-Cyrl":`Поређење линија зида`,"vi-VN":`Tương phản dòng tường`,"zh-CN":`墙线对比`,"zh-TW":`墙线对比`},断点清除:{"de-DE":`Pauschpunkt löschen`,"en-US":`clear breakpoints`,"es-ES":`Eliminar puntos de interrupción`,"fr-FR":`Effacer les points d'arrêt`,"id-ID":`hapus breakpoint`,"it-IT":`Pulire il punto di interruzione`,"ja-JP":`ブレークポイントの消去`,"ko-KR":`브레이크 지우기`,"ms-MY":`kosongkan titik putus`,"nl-NL":`Pauspunt verwijderen`,"pl-PL":`Wyczyść punkt przerwy`,"pt-PT":`Limpar o ponto de interrupção`,"sr-Cyrl":`обриши тачке прекида`,"vi-VN":`Xóa điểm ngắt`,"zh-CN":`断点清除`,"zh-TW":`断点清除`},清除完成:{"de-DE":`Löschen abgeschlossen`,"en-US":`Clear completed`,"es-ES":`Se completa la limpieza`,"fr-FR":`Nettoyage terminé`,"id-ID":`Hapus selesai`,"it-IT":`Cancellazione completata`,"ja-JP":`パージ完了`,"ko-KR":`지우기 완료`,"ms-MY":`Kosongkan selesai`,"nl-NL":`Verwijderen voltooid`,"pl-PL":`Czyszczenie zakończone`,"pt-PT":`Limpeza concluída`,"sr-Cyrl":`Очистите завршено`,"vi-VN":`Xoá xong`,"zh-CN":`清除完成`,"zh-TW":`清除完成`},右手手印:{"de-DE":`Rechtshandabdruck`,"en-US":`right_handprint`,"es-ES":`Huella de mano derecha`,"fr-FR":`Empreinte de main droite`,"id-ID":`tangan_kanan`,"it-IT":`Impronta della mano destra`,"ja-JP":`右手の指紋`,"ko-KR":`오른손 손도장`,"ms-MY":`cap jari tangan kanan`,"nl-NL":`Rechtshandafdrukken`,"pl-PL":`Odpis prawej ręki`,"pt-PT":`Impressão da mão direita`,"sr-Cyrl":`десни_отисак_руке`,"vi-VN":`Ấn tay phải`,"zh-CN":`右手手印`,"zh-TW":`右手手印`},指纹:{"de-DE":`Fingerabdruck`,"en-US":`fingerprint`,"es-ES":`Huellas dactilares`,"fr-FR":`Empreintes digitales`,"id-ID":`sidik jari`,"it-IT":`impronte digitali`,"ja-JP":`指紋`,"ko-KR":`지문`,"ms-MY":`cap jari`,"nl-NL":`Vingerafdrukken`,"pl-PL":`Odciski palców`,"pt-PT":`Impressões digitais`,"sr-Cyrl":`отисак прста`,"vi-VN":`Dấu vân tay`,"zh-CN":`指纹`,"zh-TW":`指纹`},血指纹:{"de-DE":`Blutfingerabdrücke`,"en-US":`bloody_fingerprint`,"es-ES":`Huellas dactilares de sangre`,"fr-FR":`Empreintes sanguines`,"id-ID":`sidik_jari_berdarah`,"it-IT":`Imprinte digitali di sangue`,"ja-JP":`血のついた指紋`,"ko-KR":`피지문`,"ms-MY":`cap jari berdarah`,"nl-NL":`Bloed vingerafdrukken`,"pl-PL":`Odciski palców krwi`,"pt-PT":`Impressões digitais de sangue`,"sr-Cyrl":`крвави_отисак`,"vi-VN":`Máu vân tay`,"zh-CN":`血指纹`,"zh-TW":`血指纹`},手套:{"de-DE":`Handschuhe`,"en-US":`glove`,"es-ES":`Guantes`,"fr-FR":`Gants`,"id-ID":`sarung tangan`,"it-IT":`Guanti`,"ja-JP":`手袋`,"ko-KR":`장갑`,"ms-MY":`sarung tangan`,"nl-NL":`Handschoenen`,"pl-PL":`Rękawice`,"pt-PT":`luvas`,"sr-Cyrl":`рукавица`,"vi-VN":`Găng tay`,"zh-CN":`手套`,"zh-TW":`手套`},血手套:{"de-DE":`Bluthandschuhe`,"en-US":`bloody_glove`,"es-ES":`Guantes de sangre`,"fr-FR":`Gants de sang`,"id-ID":`bloody_glove`,"it-IT":`Guanti di sangue`,"ja-JP":`血のついた手袋`,"ko-KR":`피장갑`,"ms-MY":`sarung tangan berdarah`,"nl-NL":`Bloed handschoenen`,"pl-PL":`Rękawice krwi`,"pt-PT":`Luvas de sangue`,"sr-Cyrl":`крвава_рукавица`,"vi-VN":`Găng tay máu`,"zh-CN":`血手套`,"zh-TW":`血手套`},赤足印:{"de-DE":`Rotfußabdruck`,"en-US":`barefoot_print`,"es-ES":`Sello descalzo`,"fr-FR":`Impression pieds nus`,"id-ID":`jejak_kaki_tanpa_sepatu`,"it-IT":`Impronta di piedi rossi`,"ja-JP":`裸足の足跡`,"ko-KR":`맨발의 자국`,"ms-MY":`jejak kaki tanpa alas`,"nl-NL":`Rode voetafdrukken`,"pl-PL":`Czerwone stopy`,"pt-PT":`Impressão de pés vermelhos`,"sr-Cyrl":`отисак босих ногу`,"vi-VN":`Dấu chân trần`,"zh-CN":`赤足印`,"zh-TW":`赤足印`},水脚印:{"de-DE":`Wasserfußabdrücke`,"en-US":`water_footprint`,"es-ES":`Huellas de agua`,"fr-FR":`Empreintes d'eau`,"id-ID":`jejak_air`,"it-IT":`impronte d'acqua`,"ja-JP":`水の跡`,"ko-KR":`물발자국`,"ms-MY":`jejak kaki air`,"nl-NL":`Watervoetafdrukken`,"pl-PL":`Ślady wodne`,"pt-PT":`pegadas de água`,"sr-Cyrl":`водени_отисак`,"vi-VN":`Dấu chân nước`,"zh-CN":`水脚印`,"zh-TW":`水脚印`},血脚印:{"de-DE":`Blutfußspuren`,"en-US":`bloody_footprint`,"es-ES":`Huellas de sangre`,"fr-FR":`Empreintes de sang`,"id-ID":`jejak_kaki_berdarah`,"it-IT":`Le impronte di sangue`,"ja-JP":`血のついた足跡`,"ko-KR":`핏자국`,"ms-MY":`jejak kaki berdarah`,"nl-NL":`Bloed voetafdrukken`,"pl-PL":`Ślady krwi`,"pt-PT":`pegadas de sangue`,"sr-Cyrl":`крвави_отисак`,"vi-VN":`Dấu chân máu`,"zh-CN":`血脚印`,"zh-TW":`血脚印`},残缺鞋掌印:{"de-DE":`Fehlende Schuhe`,"en-US":`shoe_sole_print`,"es-ES":`Huellas de zapatos incompletos`,"fr-FR":`Empreinte de la main de chaussures mutilées`,"id-ID":`jejak_sol_sepatu`,"it-IT":`Scarpe mancanti impronte`,"ja-JP":`不完全な靴底の跡`,"ko-KR":`신발 자국이 부족하다`,"ms-MY":`jejak tapak kasut`,"nl-NL":`Ontbrekende schoenen afdrukken`,"pl-PL":`Brakujące buty`,"pt-PT":`Impressão de sapatos deficientes`,"sr-Cyrl":`отисак ђона ципеле`,"vi-VN":`Dấu giày khiếm khuyết`,"zh-CN":`残缺鞋掌印`,"zh-TW":`残缺鞋掌印`},残缺鞋跟印:{"de-DE":`Fehlende Schuhe Absatz`,"en-US":`heel_print`,"es-ES":`Huellas de talón mutiladas`,"fr-FR":`Impression de talon mutilé`,"id-ID":`jejak_tumit`,"it-IT":`Traccia del tallone`,"ja-JP":`不完全なかかとの跡`,"ko-KR":`구두굽 자국이 부족하다`,"ms-MY":`jejak tumit`,"nl-NL":`ontbrekende schoenen hakken afdruk`,"pl-PL":`Brakujące obuwie`,"pt-PT":`Impressão de calcanhar deficiente`,"sr-Cyrl":`отисак_пете`,"vi-VN":`Thiếu dấu gót giày`,"zh-CN":`残缺鞋跟印`,"zh-TW":`残缺鞋跟印`},狗蹄印:{"de-DE":`Hundehufdruck`,"en-US":`dog_hoof_print`,"es-ES":`Huellas de pezuña de perro`,"fr-FR":`Empreinte de sabot de chien`,"id-ID":`jejak kuku anjing`,"it-IT":`impronte di cane`,"ja-JP":`犬の蹄の跡`,"ko-KR":`개발자국`,"ms-MY":`jejak kuku anjing`,"nl-NL":`Hondenhoofdrukken`,"pl-PL":`Psie ślady`,"pt-PT":`Impressão de cachorro`,"sr-Cyrl":`отисак псеће шапе`,"vi-VN":`Dấu chân chó`,"zh-CN":`狗蹄印`,"zh-TW":`狗蹄印`},流淌血迹:{"de-DE":`Blutflüsse`,"en-US":`flowing_blood`,"es-ES":`Sangre que fluye`,"fr-FR":`Sang qui coule`,"id-ID":`darah_mengalir`,"it-IT":`Il sangue scorre`,"ja-JP":`流れる血`,"ko-KR":`핏자국이 흐르다`,"ms-MY":`darah mengalir`,"nl-NL":`Bloeding`,"pl-PL":`Krwią`,"pt-PT":`Correndo sangue`,"sr-Cyrl":`текућа_крв`,"vi-VN":`chảy máu`,"zh-CN":`流淌血迹`,"zh-TW":`流淌血迹`},行进血迹:{"de-DE":`Gehen Sie Blut`,"en-US":`traveling_blood`,"es-ES":`Huellas de sangre en la marcha`,"fr-FR":`Marcher le sang`,"id-ID":`darah_berjalan`,"it-IT":`Marche di sangue`,"ja-JP":`流れる血`,"ko-KR":`행진 혈흔`,"ms-MY":`darah bergerak`,"nl-NL":`Wandelen van bloed`,"pl-PL":`Droga ślady krwi`,"pt-PT":`Caminhar com sangue`,"sr-Cyrl":`крв_у_покрету`,"vi-VN":`Lời bài hát: Marching Blood`,"zh-CN":`行进血迹`,"zh-TW":`行进血迹`},滴落血迹:{"de-DE":`Tropfen Blut`,"en-US":`dripping_blood`,"es-ES":`Gotas de sangre`,"fr-FR":`Gouttes de sang`,"id-ID":`darah_menetes`,"it-IT":`Gocce di sangue`,"ja-JP":`滴る血`,"ko-KR":`핏자국이 떨어지다`,"ms-MY":`darah menitis`,"nl-NL":`Droppers van bloed`,"pl-PL":`krople krwi`,"pt-PT":`Gotas de sangue`,"sr-Cyrl":`крв_која_капље`,"vi-VN":`Giọt máu`,"zh-CN":`滴落血迹`,"zh-TW":`滴落血迹`},喷溅血迹:{"de-DE":`Spritz Blut`,"en-US":`splashing_blood`,"es-ES":`Salpicaduras de sangre`,"fr-FR":`éclaboussures de sang`,"id-ID":`percikan_darah`,"it-IT":`Spruzzo di sangue`,"ja-JP":`飛び散る血`,"ko-KR":`핏자국이 튀다`,"ms-MY":`darah memercik`,"nl-NL":`Spuit bloed`,"pl-PL":`Roztrysk krwi`,"pt-PT":`Spray de sangue`,"sr-Cyrl":`прскање_крви`,"vi-VN":`Phun máu`,"zh-CN":`喷溅血迹`,"zh-TW":`喷溅血迹`},血泊:{"de-DE":`Blut`,"en-US":`pond_of_blood`,"es-ES":`Charco de sangre`,"fr-FR":`Poires de sang`,"id-ID":`kolam darah`,"it-IT":`Sangue`,"ja-JP":`血だまり`,"ko-KR":`피바다`,"ms-MY":`kolam darah`,"nl-NL":`bloed`,"pl-PL":`Krwi`,"pt-PT":`Sangue`,"sr-Cyrl":`језеро крви`,"vi-VN":`Bể máu`,"zh-CN":`血泊`,"zh-TW":`血泊`},无当前楼层VR:{"de-DE":`Kein aktueller Boden VR`,"en-US":`No current floor VR available`,"es-ES":`No hay piso actual VR`,"fr-FR":`Aucun étage actuel VR`,"id-ID":`Tidak ada VR lantai saat ini yang tersedia`,"it-IT":`Nessun piano attuale VR`,"ja-JP":`現在のフロアVRなし`,"ko-KR":`현재 층 VR 없음`,"ms-MY":`Tiada VR lantai semasa tersedia`,"nl-NL":`Geen huidige vloer VR`,"pl-PL":`Bez bieżącej podłogi VR`,"pt-PT":`Sem andar atual VR`,"sr-Cyrl":`Није доступан ВР за тренутни спрат`,"vi-VN":`Không có tầng hiện tại VR`,"zh-CN":`无当前楼层VR`,"zh-TW":`无当前楼层VR`},发布:{"de-DE":`Veröffentlichen`,"en-US":`release`,"es-ES":`Lanzamiento`,"fr-FR":`Publier`,"id-ID":`lepas`,"it-IT":`Pubblicazione`,"ja-JP":`リリース`,"ko-KR":`게시`,"ms-MY":`lepaskan`,"nl-NL":`Uitgeven`,"pl-PL":`Publikowanie`,"pt-PT":`Publicação`,"sr-Cyrl":`ослободи`,"vi-VN":`Xuất bản`,"zh-CN":`发布`,"zh-TW":`发布`},切换元素类型:{"de-DE":`Elementtyp wechseln`,"en-US":`Switch element type`,"es-ES":`Cambiar tipo de elemento`,"fr-FR":`Changer le type d'élément`,"id-ID":`Ganti jenis elemen`,"it-IT":`Passa al tipo di elemento`,"ja-JP":`要素タイプの切り替え`,"ko-KR":`요소 유형 전환`,"ms-MY":`Tukar jenis elemen`,"nl-NL":`Type element wisselen`,"pl-PL":`Przełącz typ elementu`,"pt-PT":`Alterar o tipo de elemento`,"sr-Cyrl":`Измени тип елемента`,"vi-VN":`Chuyển đổi kiểu phần tử`,"zh-CN":`切换元素类型`,"zh-TW":`切换元素类型`},找到元素:{"de-DE":`Suchen`,"en-US":`Search`,"es-ES":`Buscar`,"fr-FR":`Recherche`,"id-ID":`Cari`,"it-IT":`Cerca`,"ja-JP":`検索`,"ko-KR":`검색`,"ms-MY":`Cari`,"nl-NL":`Zoeken`,"pl-PL":`Szukaj`,"pt-PT":`Procurar`,"sr-Cyrl":`Претрага`,"vi-VN":`Tìm đi.`,"zh-CN":`找到元素`,"zh-TW":`找到元素`},显示元素尺寸:{"de-DE":`Elementgrößen anzeigen`,"en-US":`Display element size`,"es-ES":`Tamaño del elemento de visualización`,"fr-FR":`Afficher les dimensions des éléments`,"id-ID":`Tampilkan ukuran elemen`,"it-IT":`Mostra dimensioni degli elementi`,"ja-JP":`要素サイズの表示`,"ko-KR":`요소 치수 표시하기`,"ms-MY":`Paparkan saiz elemen`,"nl-NL":`Elementgrootte weergeven`,"pl-PL":`Pokaż rozmiar elementu`,"pt-PT":`Mostrar tamanho do elemento`,"sr-Cyrl":`Прикажи величину елемента`,"vi-VN":`Hiển thị kích thước phần tử`,"zh-CN":`显示元素尺寸`,"zh-TW":`显示元素尺寸`},显示物件控制点:{"de-DE":`Objektsteuerpunkte anzeigen`,"en-US":`Display object control points`,"es-ES":`Mostrar puntos de control de objetos`,"fr-FR":`Afficher les points de contrôle des objets`,"id-ID":`Tampilkan titik kontrol objek`,"it-IT":`Esibisci i punti di controllo dell'oggetto`,"ja-JP":`物件制御点の表示`,"ko-KR":`개체 제어점 표시`,"ms-MY":`Paparkan titik kawalan objek`,"nl-NL":`Objectcontrolepunten tonen`,"pl-PL":`Pokaż punkt sterowania obiektem`,"pt-PT":`Mostrar o ponto de controle do objeto`,"sr-Cyrl":`Прикажи контролне тачке објекта`,"vi-VN":`Hiển thị điều khiển đối tượng`,"zh-CN":`显示物件控制点`,"zh-TW":`显示物件控制点`},删除该楼层:{"de-DE":`Diese Etage entfernen`,"en-US":`Delete this floor`,"es-ES":`Eliminar el piso`,"fr-FR":`Supprimer cet étage`,"id-ID":`Hapus lantai ini`,"it-IT":`Rimuovi questo piano`,"ja-JP":`フロアを削除`,"ko-KR":`이 층 삭제`,"ms-MY":`Padam lantai ini`,"nl-NL":`Verwijder deze vloer`,"pl-PL":`Usuń podłogę`,"pt-PT":`Remover este piso`,"sr-Cyrl":`Обришите овај спрат`,"vi-VN":`Xóa tầng này`,"zh-CN":`删除该楼层`,"zh-TW":`删除该楼层`},"删除楼层的操作不能撤销,是否继续":{"de-DE":`Die Operation der Entfernung des Bodens kann nicht rückgängig gemacht werden, ob fortgesetzt`,"en-US":`The operation of deleting floors cannot be undone. Do you want to continue`,"es-ES":`¿La operación de eliminar el piso no se puede cancelar, ¿ continuar?`,"fr-FR":`L'opération de suppression d'un étage ne peut pas être annulée, continuer ou non`,"id-ID":`Operasi menghapus lantai tidak dapat dibatalkan. Apakah Anda ingin melanjutkan`,"it-IT":`L'operazione di rimozione del piano non può essere annullata, se continuare`,"ja-JP":`フロアを削除する操作は元に戻すことはできません。続行するかどうか`,"ko-KR":`층을 삭제하는 작업은 취소할 수 없습니다. 계속하시겠습니까`,"ms-MY":`Operasi memadam lantai tidak boleh dibatalkan. Adakah anda ingin meneruskan`,"nl-NL":`De operatie van het verwijderen van de vloer kan niet worden ingetrokken, of voortgezet`,"pl-PL":`Operacja usuwania podłogi nie może być odwołana, czy kontynuowana`,"pt-PT":`A operação de remoção do piso não pode ser revogada, se continuar`,"sr-Cyrl":`Операција брисања спратова не може се опозвати. Да ли желите да наставите`,"vi-VN":`Thao tác xóa tầng không thể hủy bỏ, có nên tiếp tục hay không`,"zh-CN":`删除楼层的操作不能撤销,是否继续`,"zh-TW":`刪除樓層後無法撤銷,是否繼續`},"按 Esc 结束调整":{"de-DE":`Drücken Sie Esc, um die Anpassung zu beenden`,"en-US":`Press Esc to end the adjustment`,"es-ES":`Cierre del ajuste por Esc`,"fr-FR":`Appuyez sur Esc pour terminer l'ajustement`,"id-ID":`Tekan Esc untuk mengakhiri penyesuaian`,"it-IT":`Premere Esc per terminare la regolazione`,"ja-JP":`Escによる調整の終了`,"ko-KR":`Esc 키를 눌러 조정 종료`,"ms-MY":`Tekan Esc untuk menamatkan pelarasan`,"nl-NL":`Druk op Esc om de aanpassing te beëindigen`,"pl-PL":`Naciśnij klawisz Esc do zakończenia korekty`,"pt-PT":`Pressione Esc para terminar o ajuste`,"sr-Cyrl":`Притисните Esc да завршите подешавање`,"vi-VN":`Nhấn Esc để kết thúc điều chỉnh`,"zh-CN":`按 Esc 结束调整`,"zh-TW":`按 Esc 结束调整`},自定义旋转:{"de-DE":`Benutzerdefinierte Drehung`,"en-US":`Custom Rotation`,"es-ES":`Rotación personalizada`,"fr-FR":`Rotation personnalisée`,"id-ID":`Rotasi Kustom`,"it-IT":`Ruotazione personalizzata`,"ja-JP":`カスタム回転`,"ko-KR":`사용자 정의 회전`,"ms-MY":`Putaran Tersuai`,"nl-NL":`Aangepaste draaien`,"pl-PL":`Obrót niestandardowy`,"pt-PT":`Rotação personalizada`,"sr-Cyrl":`Прилагођена ротација`,"vi-VN":`Xoay tùy chỉnh`,"zh-CN":`自定义旋转`,"zh-TW":`自定义旋转`},复制当前楼层:{"de-DE":`Aktuelle Etage kopieren`,"en-US":`Copy current floor`,"es-ES":`Copiar piso actual`,"fr-FR":`Copier l'étage actuel`,"id-ID":`Salin lantai saat ini`,"it-IT":`Copia piano corrente`,"ja-JP":`現在の階をコピー`,"ko-KR":`현재 층 복사`,"ms-MY":`Salin tingkat semasa`,"nl-NL":`Huidige verdieping kopiëren`,"pl-PL":`Skopiuj bieżące piętro`,"pt-PT":`Copiar piso atual`,"sr-Cyrl":`Копирај тренутни спрат`,"vi-VN":`Sao chép tầng hiện tại`,"zh-CN":`复制当前楼层`,"zh-TW":`複製當前樓層`},总内部面积:{"de-DE":`Brutto-Innenfläche`,"en-US":`GROSS INTERNAL AREA`,"es-ES":`Superficie Bruta Interna`,"fr-FR":`Surface Hors Œuvre Nette`,"id-ID":`Luas Internal Kotor`,"it-IT":`Superficie Lorda Interna`,"ja-JP":`内部総面積`,"ko-KR":`총 내부 면적`,"ms-MY":`Luas Dalaman Kasar`,"nl-NL":`Bruto-oppervlakte binnenmuren`,"pl-PL":`Powierzchnia całkowita wewnętrzna`,"pt-PT":`Área Bruta Interna`,"sr-Cyrl":`Бруто унутрашња површина`,"vi-VN":`Diện tích Tổng thể Bên trong`,"zh-CN":`总内部面积`,"zh-TW":`建築內部總面積`},"所有尺寸、面积和布局仅供参考,实际可能存在偏差":{"de-DE":`Alle Größen, Flächen und Grundrisse dienen nur als Referenz, die tatsächlichen Ergebnisse können abweichen`,"en-US":`ALL SIZES, AREAS, AND LAYOUTS ARE FOR REFERENCE ONLY, AND ACTUAL RESULTS MAY VARY`,"es-ES":`Todos los tamaños, áreas y distribuciones son solo de referencia, y los resultados reales pueden variar`,"fr-FR":`Toutes les tailles, surfaces et dispositions sont données à titre indicatif uniquement, et les résultats réels peuvent varier`,"id-ID":`Semua ukuran, area, dan tata letak hanya untuk referensi, dan hasil aktual dapat bervariasi`,"it-IT":`Tutte le dimensioni, aree e layout sono solo di riferimento e i risultati effettivi possono variare`,"ja-JP":`すべてのサイズ、面積、レイアウトは参考情報であり、実際の結果は異なる場合があります`,"ko-KR":`모든 크기, 면적 및 레이아웃은 참고용이며, 실제 결과는 다를 수 있습니다`,"ms-MY":`Semua saiz, kawasan, dan susun atur adalah untuk rujukan sahaja, dan hasil sebenar mungkin berbeza`,"nl-NL":`Alle afmetingen, oppervlakken en indelingen zijn alleen ter referentie, de daadwerkelijke resultaten kunnen variëren`,"pl-PL":`Wszystkie rozmiary, powierzchnie i układy służą wyłącznie jako odniesienie, a rzeczywiste wyniki mogą się różnić`,"pt-PT":`Todos os tamanhos, áreas e layouts são apenas para referência, e os resultados reais podem variar`,"sr-Cyrl":`Све величине, површине и распореди су само за референцу, а стварни резултати могу варирати`,"vi-VN":`Tất cả kích thước, khu vực và bố cục chỉ mang tính tham khảo, kết quả thực tế có thể khác nhau`,"zh-CN":`所有尺寸、面积和布局仅供参考,实际可能存在偏差`,"zh-TW":`所有尺寸、面積和佈局僅供參考,實際結果可能有所不同`},总和:{"de-DE":`Gesamt`,"en-US":`TOTAL`,"es-ES":`TOTAL`,"fr-FR":`TOTAL`,"id-ID":`TOTAL`,"it-IT":`Totale`,"ja-JP":`合計`,"ko-KR":`총계`,"ms-MY":`Jumlah`,"nl-NL":`Totaal`,"pl-PL":`Suma`,"pt-PT":`TOTAL`,"sr-Cyrl":`Укупно`,"vi-VN":`Tổng cộng`,"zh-CN":`总和`,"zh-TW":`總計`},设备间:{"de-DE":`Technikraum`,"en-US":`PLANT`,"es-ES":`Cuarto de Máquinas`,"fr-FR":`Local Technique`,"id-ID":`Ruang Mesin`,"it-IT":`Locale Tecnico`,"ja-JP":`設備室`,"ko-KR":`기계실`,"ms-MY":`Bilik Loji`,"nl-NL":`Technische ruimte`,"pl-PL":`Pomieszczenie techniczne`,"pt-PT":`Casa de Máquinas`,"sr-Cyrl":`Машинска просторија`,"vi-VN":`Phòng Kỹ thuật`,"zh-CN":`设备间`,"zh-TW":`設備間`},阳台花园:{"de-DE":`Wintergarten`,"en-US":`WINTER GARDEN`,"es-ES":`Jardín de invierno`,"fr-FR":`Jardin d'hiver`,"id-ID":`Taman Musim Dingin`,"it-IT":`Giardino d'inverno`,"ja-JP":`ウィンターガーデン`,"ko-KR":`겨울 정원`,"ms-MY":`Taman Musim Sejuk`,"nl-NL":`Wintertuin`,"pl-PL":`Ogród zimowy`,"pt-PT":`Jardim de Inverno`,"sr-Cyrl":`Зимска башта`,"vi-VN":`Vườn Đông`,"zh-CN":`阳台花园`,"zh-TW":`阳台花園`},序号更新完成:{"de-DE":`Nummerierung erfolgreich aktualisiert`,"en-US":`Numbering Update Complete`,"es-ES":`Actualización de Numeración Completada`,"fr-FR":`Mise à jour de la numérotation terminée`,"id-ID":`Pembaruan Penomoran Selesai`,"it-IT":`Aggiornamento della numerazione completato`,"ja-JP":`連番更新が完了しました`,"ko-KR":`일련 번호 업데이트 완료`,"ms-MY":`Pengemaskinian Penomboran Selesai`,"nl-NL":`Volgnummering bijgewerkt`,"pl-PL":`Zakończono aktualizację numeracji`,"pt-PT":`Atualização de Numeração Concluída`,"sr-Cyrl":`Ажурирање нумерације завршено`,"vi-VN":`Cập nhật Số thứ tự Hoàn tất`,"zh-CN":`序号更新完成`,"zh-TW":`序號更新完成`},飘窗区域:{"de-DE":`Erkerbereich`,"en-US":`BAY WINDOW`,"es-ES":`Zona del mirador`,"fr-FR":`Zone de la fenêtre en baie`,"id-ID":`Area Jendela Sudut`,"it-IT":`Area Finestra a Bovindo`,"ja-JP":`出窓エリア`,"ko-KR":`베이 창 영역`,"ms-MY":`Kawasan Jendela Teluk`,"nl-NL":`Erkergebied`,"pl-PL":`Obszar okna wykuszowego`,"pt-PT":`Área da Janela Saliente`,"sr-Cyrl":`Простор код прозора`,"vi-VN":`Khu vực cửa sổ lồi`,"zh-CN":`飘窗区域`,"zh-TW":`飄窗區域`},老人房:{"de-DE":`Seniorenzimmer`,"en-US":`IN-LAW SUITE`,"es-ES":`Dormitorio de ancianos`,"fr-FR":`Chambre pour personnes âgées`,"id-ID":`Kamar Orang Tua`,"it-IT":`Stanza per anziani`,"ja-JP":`高齢者用寝室`,"ko-KR":`노인방`,"ms-MY":`Bilik Warga Emas`,"nl-NL":`Seniorenkamer`,"pl-PL":`Pokój dla seniora`,"pt-PT":`Quarto de Idosos`,"sr-Cyrl":`Соба за старије особе`,"vi-VN":`Phòng người cao tuổi`,"zh-CN":`老人房`,"zh-TW":`老人房`},儿童房:{"de-DE":`Kinderzimmer`,"en-US":`CHILDREN'S ROOM`,"es-ES":`Dormitorio infantil`,"fr-FR":`Chambre d'enfants`,"id-ID":`Kamar Anak`,"it-IT":`Stanza dei bambini`,"ja-JP":`子供部屋`,"ko-KR":`어린이방`,"ms-MY":`Bilik Kanak-Kanak`,"nl-NL":`Kinderkamer`,"pl-PL":`Pokój dziecięcy`,"pt-PT":`Quarto das Crianças`,"sr-Cyrl":`Дечија соба`,"vi-VN":`Phòng trẻ em`,"zh-CN":`儿童房`,"zh-TW":`兒童房`},保姆房:{"de-DE":`Kinderzimmer für die Kindermädchen`,"en-US":`MAID'S ROOM`,"es-ES":`Dormitorio de la niñera`,"fr-FR":`Chambre de la nounou`,"id-ID":`Kamar Pengasuh`,"it-IT":`Stanza della tata`,"ja-JP":`お手伝いさんの部屋`,"ko-KR":`유모방`,"ms-MY":`Bilik Pembantu`,"nl-NL":`Kindermeisjeskamer`,"pl-PL":`Pokój dla niani`,"pt-PT":`Quarto da Empregada`,"sr-Cyrl":`Соба за дадиљу`,"vi-VN":`Phòng người giúp việc`,"zh-CN":`保姆房`,"zh-TW":`保姆房`},主卫:{"de-DE":`Hauptbad`,"en-US":`PRIMARY BATHROOM`,"es-ES":`Baño principal`,"fr-FR":`Salle de bain principale`,"id-ID":`Kamar Mandi Utama`,"it-IT":`Bagno padronale`,"ja-JP":`主寝室の浴室`,"ko-KR":`마스터 욕실`,"ms-MY":`Bilik Air Utama`,"nl-NL":`Hoofdbadkamer`,"pl-PL":`Główna łazienka`,"pt-PT":`Casa de Banho Principal`,"sr-Cyrl":`Главно купатило`,"vi-VN":`Phòng vệ sinh chính`,"zh-CN":`主卫`,"zh-TW":`主衛`},客卫:{"de-DE":`Gäste-Badezimmer`,"en-US":`GUEST BATHROOM`,"es-ES":`Baño de invitados`,"fr-FR":`Salle de bain d'invités`,"id-ID":`Kamar Mandi Tamu`,"it-IT":`Bagno degli ospiti`,"ja-JP":`ゲスト用浴室`,"ko-KR":`손님용 욕실`,"ms-MY":`Bilik Air Tetamu`,"nl-NL":`Gastenbadkamer`,"pl-PL":`Łazienka gościnna`,"pt-PT":`Casa de Banho de Serviço`,"sr-Cyrl":`Купатило за госте`,"vi-VN":`Phòng vệ sinh khách`,"zh-CN":`客卫`,"zh-TW":`客衛`},厨房阳台:{"de-DE":`Küchenbalkon`,"en-US":`KITCHEN BALCONY`,"es-ES":`Balcón de la cocina`,"fr-FR":`Balcon de cuisine`,"id-ID":`Balkon Dapur`,"it-IT":`Balcone della cucina`,"ja-JP":`キッチンバルコニー`,"ko-KR":`주방 발코니`,"ms-MY":`Balkoni Dapur`,"nl-NL":`Keukenbalkon`,"pl-PL":`Balkon kuchenny`,"pt-PT":`Varanda da Cozinha`,"sr-Cyrl":`Кухињски балкон`,"vi-VN":`Ban công bếp`,"zh-CN":`厨房阳台`,"zh-TW":`廚房陽臺`},屋顶阁楼:{"de-DE":`Dachboden`,"en-US":`ROOF ATTIC`,"es-ES":`Ático/Buhardilla de la azotea`,"fr-FR":`Grenier sur le toit`,"id-ID":`Loteng Atap`,"it-IT":`Soffitta sul tetto`,"ja-JP":`屋根裏部屋`,"ko-KR":`옥상 다락방`,"ms-MY":`Loteng Atas Bumbung`,"nl-NL":`Dakzolder`,"pl-PL":`Poddasze na dachu`,"pt-PT":`Sótão no Telhado`,"sr-Cyrl":`Поткровље на крову`,"vi-VN":`Gác mái trên sân thượng`,"zh-CN":`屋顶阁楼`,"zh-TW":`屋頂閣樓`},宠物房:{"de-DE":`Tierzimmer`,"en-US":`PET ROOM`,"es-ES":`Habitación para mascotas`,"fr-FR":`Chambre pour animaux de compagnie`,"id-ID":`Kamar Hewan Peliharaan`,"it-IT":`Stanza per animali domestici`,"ja-JP":`ペットルーム`,"ko-KR":`애완동물 방`,"ms-MY":`Bilik Haiwan Peliharaan`,"nl-NL":`Dierenkamer`,"pl-PL":`Pokój dla zwierząt`,"pt-PT":`Quarto para Animais de Estimação`,"sr-Cyrl":`Соба за кућне љубимце`,"vi-VN":`Phòng thú cưng`,"zh-CN":`宠物房`,"zh-TW":`寵物房`},处理中:{"de-DE":`Wird verarbeitet`,"en-US":`Processing`,"es-ES":`Procesando`,"fr-FR":`En cours de traitement`,"id-ID":`Sedang diproses`,"it-IT":`In elaborazione`,"ja-JP":`処理中`,"ko-KR":`처리 중`,"ms-MY":`Sedang diproses`,"nl-NL":`Wordt verwerkt`,"pl-PL":`Przetwarzanie`,"pt-PT":`Em processamento`,"sr-Cyrl":`У обради`,"vi-VN":`Đang xử lý`,"zh-CN":`处理中`,"zh-TW":`處理中`},对比完成:{"de-DE":`Vergleich abgeschlossen`,"en-US":`Comparison complete`,"es-ES":`Comparación Completa`,"fr-FR":`Comparaison terminée`,"id-ID":`Perbandingan Selesai`,"it-IT":`Confronto completato`,"ja-JP":`比較完了`,"ko-KR":`비교 완료`,"ms-MY":`Perbandingan Selesai`,"nl-NL":`Vergelijking voltooid`,"pl-PL":`Porównanie zakończone`,"pt-PT":`Comparação Concluída`,"sr-Cyrl":`Поређење завршено`,"vi-VN":`So sánh Hoàn tất`,"zh-CN":`对比完成`,"zh-TW":`對比完成`},排序完成:{"de-DE":`Sortierung abgeschlossen`,"en-US":`Sorting complete`,"es-ES":`Clasificación Completa`,"fr-FR":`Tri terminé`,"id-ID":`Pengurutan Selesai`,"it-IT":`Ordinamento completato`,"ja-JP":`並べ替え完了`,"ko-KR":`정렬 완료`,"ms-MY":`Pengisihan Selesai`,"nl-NL":`Sortering voltooid`,"pl-PL":`Sortowanie zakończone`,"pt-PT":`Ordenação Concluída`,"sr-Cyrl":`Сортирање завршено`,"vi-VN":`Sắp xếp Hoàn tất`,"zh-CN":`排序完成`,"zh-TW":`排序完成`},门头:{"de-DE":`Türsturz`,"en-US":`ENTRANCE`,"es-ES":`Dintel de Puerta`,"fr-FR":`Linteau de porte`,"id-ID":`Header Pintu`,"it-IT":`Architrave`,"ja-JP":`戸口の上部`,"ko-KR":`문틀 상단`,"ms-MY":`Kepala Pintu`,"nl-NL":`Deurkop`,"pl-PL":`Nadproże drzwiowe`,"pt-PT":`Verga da Porta`,"sr-Cyrl":`Горња греда врата`,"vi-VN":`Thanh ngang trên cửa`,"zh-CN":`门头`,"zh-TW":`門頭`},显示墙点:{"de-DE":`Wandpunkte anzeigen`,"en-US":`Show wall points`,"es-ES":`Mostrar puntos de pared`,"fr-FR":`Afficher les points de mur`,"id-ID":`Tampilkan titik dinding`,"it-IT":`Mostra punti parete`,"ja-JP":`壁点を表示`,"ko-KR":`벽 점 표시`,"ms-MY":`Tunjukkan titik dinding`,"nl-NL":`Muurpunten weergeven`,"pl-PL":`Pokaż punkty ścian`,"pt-PT":`Mostrar pontos de parede`,"sr-Cyrl":`Прикажи тачке зида`,"vi-VN":`Hiển thị điểm tường`,"zh-CN":`显示墙点`,"zh-TW":`顯示牆點`},显示墙体厚度:{"de-DE":`Wanddicke anzeigen`,"en-US":`Show wall thickness`,"es-ES":`Mostrar grosor de pared`,"fr-FR":`Afficher l'épaisseur du mur`,"id-ID":`Tampilkan ketebalan dinding`,"it-IT":`Mostra spessore parete`,"ja-JP":`壁の厚さを表示`,"ko-KR":`벽 두께 표시`,"ms-MY":`Tunjukkan ketebalan dinding`,"nl-NL":`Muurdikte weergeven`,"pl-PL":`Pokaż grubość ściany`,"pt-PT":`Mostrar espessura da parede`,"sr-Cyrl":`Прикажи дебљину зида`,"vi-VN":`Hiển thị độ dày tường`,"zh-CN":`显示墙体厚度`,"zh-TW":`顯示牆體厚度`},拓图透明度:{"de-DE":`Transparenz des Referenzbildes`,"en-US":`Reference image opacity`,"es-ES":`Opacidad de la imagen de referencia`,"fr-FR":`Opacité de l'image de référence`,"id-ID":`Opasitas gambar referensi`,"it-IT":`Opacità dell'immagine di riferimento`,"ja-JP":`参照画像の透明度`,"ko-KR":`참조 이미지 투명도`,"ms-MY":`Kelegapan imej rujukan`,"nl-NL":`Transparantie referentieafbeelding`,"pl-PL":`Przezroczystość obrazu referencyjnego`,"pt-PT":`Opacidade da imagem de referência`,"sr-Cyrl":`Провидност референтне слике`,"vi-VN":`Độ mờ ảnh tham chiếu`,"zh-CN":`拓图透明度`,"zh-TW":`拓圖透明度`},不计面积:{"de-DE":`Fläche nicht einbeziehen`,"en-US":`EXCLUDED`,"es-ES":`Excluir del área`,"fr-FR":`Exclure de la surface`,"id-ID":`Kecualikan dari luas`,"it-IT":`Escludi dall'area`,"ja-JP":`面積に含めない`,"ko-KR":`면적에 포함하지 않음`,"ms-MY":`Kecualikan daripada luas`,"nl-NL":`Niet meetellen in oppervlakte`,"pl-PL":`Nie wliczaj do powierzchni`,"pt-PT":`Excluir da área`,"sr-Cyrl":`Не рачунај у површину`,"vi-VN":`Không tính diện tích`,"zh-CN":`不计面积`,"zh-TW":`不計面積`}};function Lk(e){return function(t){return Ik.hasOwnProperty(t)&&Ik[t].hasOwnProperty(e)&&(t=Ik[t][e]),t}}var Rk={north:`100500000007`,"north-east":`100500000008`,east:`100500000001`,"south-east":`100500000002`,south:`100500000003`,"south-west":`100500000004`,west:`100500000005`,"north-west":`100500000006`};function zk(e,t){for(var n=t.width,r=t.height,i=[],a=e.length,o=0;o<a;o++){var s=e[o],c=e[(o+1)%a],l={x:(s.x+c.x)/2,y:(s.y+c.y)/2},u={x:c.x-s.x,y:c.y-s.y},d={x:-u.y,y:u.x},f=Math.sqrt(d.x*d.x+d.y*d.y);d.x/=f,d.y/=f;for(var p={x:l.x+d.x*n,y:l.y+d.y*r},m={x:l.x-d.x*n,y:l.y-d.y*r},h=[],g=[],_=0;_<a;_++){var v=e[_],y=e[(_+1)%a],b=lk(p,m,v,y);b&&ck(b,[v,y])&&(h.push(b),g.push($(b,v),$(b,y)))}h.length===2&&i.push([h,Math.min.apply(Math,g)])}return i}var Bk=function(e){function t(e){var n;return CE(this,t),n=SE(this,t),n.points=e,n.type=t.defaultType,n.nameIndex=``,n.labelX=0,n.labelY=0,n.labelScale=1,n.simpleLabelMod=!1,n.roomTypeLabelMod=!1,n.hideName=!1,n.hideSize=!1,n.hideBounding=!0,n.subType=0,n.subLabelX=0,n.subLabelY=0,n.customizedName=``,n.labelError=!1,n.areaHeight=2700,n.innerPathCache={},n}return jE(t,e),EE(t,[{key:`check`,value:function(e){e.roomType&&!t.rooms[e.roomType]&&(t.rooms[e.roomType]={type:e.roomType,name:e.roomTypeName||`未知`}),e.type&&!t.types[e.type]&&(t.types[e.type]={type:e.type,floorType:e.floorType||0,roomType:e.roomType||0,name:e.typeName||`未知`})}},{key:`empty`,value:function(){return this.type===28||this.type===62||this.type===73}},{key:`typeName`,value:function(e){return Lk(e)(t.types[this.type].name)}},{key:`roomType`,value:function(e){return Lk(e)(t.types[this.type].roomType)}},{key:`getroomType`,value:function(e){return this.roomType(e)}},{key:`roomTypeName`,value:function(e){return Lk(e)(t.rooms[t.types[this.type].roomType].name)}},{key:`innerPathDetail`,value:function(){var e=this,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;function n(e,t,r){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,a=[];if(i>5)return a;var o=t.edgePoints(!0),s=t.points[0]===r?t.points[1]:t.points[0],c=[],l=[];if(t.points[0]===r?(c=[1,2],l=[4,5]):(c=[4,5],l=[1,2]),a.push.apply(a,HE(c.map(function(e){return{index:e,line:t,point:o[e]}}))),!a.every(function(t){var n=t.index;return e.isPointInArea(o[n])}))return[];for(var u=[].concat(s.lines,s.lines),d;(d=u.shift())&&d!==t;);for(;(d=u.pop())&&d!==t;);for(;d=u.pop();)a.push.apply(a,HE(n(e,d,s,i+1)));return a.push.apply(a,HE(l.map(function(e){return{index:e,line:t,point:o[e]}}))),a}var r=[];this.points.forEach(function(i,a,o){var s=o[(a+1)%o.length],c=e.canvas.getLineByPoints(i,s);if(c){var l=c.edgePoints(!0),u=c.points[0]===i?5:2,d=c.points[0]===i?4:1;r.push({index:u,line:c,point:l[u]},{index:d,line:c,point:l[d]});for(var f=o[(a+2)%o.length],p=e.canvas.getLineByPoints(s,f),m=[].concat(s.lines,s.lines),h;(h=m.shift())&&h!==c;);for(;(h=m.pop())&&h!==c;);for(;(h=m.shift())&&!(t||h===p);){var g=n(e,h,s);g.reverse(),r.push.apply(r,HE(g))}}});var i=[];return r.forEach(function(e,t){if(t===0||t%2==1)return i.push(e);var n=r[t-1];if(n.line.id!==e.line.id)return i.push(e);n.index>e.index?(i.push({index:4,line:n.line,point:n.point}),i.push({index:2,line:n.line,point:n.point})):(i.push({index:1,line:n.line,point:n.point}),i.push({index:5,line:n.line,point:n.point})),i.push(e)}),i}},{key:`innerPath`,value:function(){var e=this,t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=yk(this.points),i=this.id+String(Number(t))+String(Number(n));if(this.innerPathCache.hash===r&&this.innerPathCache[i])return this.innerPathCache[i];this.innerPathCache.hash!==r&&(this.innerPathCache={hash:r});var a=function(n,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,o=[],s;if(i>5)return o;n.type===3?(s=n.edgePoints(t),s=[s[0],s[0],s[3],s[3],s[3],s[0]]):s=n.edgePoints(t);var c=n.points[0]===r?n.points[1]:n.points[0],l=[],u=[];if(n.points[0]===r?(l=[1,2],u=[4,5]):(l=[4,5],u=[1,2]),o.push.apply(o,HE(l.map(function(e){return s[e]}))),!o.every(function(t){return e.isPointInArea(t)}))return[];for(var d=[].concat(c.lines,c.lines),f;(f=d.shift())&&f!==n;);for(;(f=d.pop())&&f!==n;);for(;f=d.shift();)o.push.apply(o,HE(a(f,c,i+1)));return o.push.apply(o,HE(u.map(function(e){return s[e]}))),o},o=[];this.points.forEach(function(n,r,i){var s=i[(r+1)%i.length],c=e.canvas.getLineByPoints(n,s);if(c){var l,u,d;if(c.type===3){l=c.edgePoints(t);var f=tk(l[0],[l[1],l[5]]),p=tk(l[3],[l[2],l[4]]);u=c.points[0]===n?f:p,d=c.points[0]===n?p:f}else l=c.edgePoints(t),u=l[c.points[0]===n?5:2],d=l[c.points[0]===n?4:1];o.push(u,d);for(var m=i[(r+2)%i.length],h=e.canvas.getLineByPoints(s,m),g=[].concat(s.lines,s.lines),_;(_=g.shift())&&_!==c;);for(;(_=g.pop())&&_!==c;);for(;(_=g.shift())&&_!==h;){var v=a(_,s);v.reverse(),o.push.apply(o,HE(v))}}});var s=[];return o.forEach(function(e){if(!(isNaN(e.x)||isNaN(e.y))){var t=s[s.length-1];if(!(t&&ZO(t,e))){var r=s[s.length-2];n&&r&&QO($O(r,t),$O(t,e))&&s.pop(),s.push(e)}}}),this.innerPathCache[i]=s,s}},{key:`size`,value:function(){var e=this,t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,r=0,i=0;this.points.forEach(function(e,t,n){var i=t>=n.length-1?n[0]:n[t+1],a=e.lines.find(function(e){return e.points.indexOf(i)>-1});if(a){var o=a.curveSize();o*=a.points[0]===e?1:-1,o*=a.curve>0?1:-1,r+=o}});var a=t?this.points:this.innerPath();a.length<3&&(a=this.points);var o=Math.abs(hk(a)),s=this.canvas.items.reduce(function(t,n){if(n.displayName!==`Item-PillarItem`)return t;var r=n.getPointAt();return r.every(function(t){return e.isPointInArea(t)})&&(t+=Math.abs(hk(r))),t},0);if(!n){var c=this.canvas.areas.findIndex(function(t){return t===e});this.canvas.areas.slice(c).forEach(function(n){n!==e&&e.isAreaInArea(n)&&(i+=n.size(t))})}return o+r-i-s}},{key:`labelName`,value:function(e){var t=this.nameIndex,n=this.customizedName,r=this.roomTypeLabelMod?this.roomTypeName(e):this.typeName(e),i=this.canvas.templates&&this.canvas.templates.areaLabelName;try{return XO(i,{name:r,nameIndex:t,customizedName:this.roomTypeLabelMod?``:n})}catch(e){}return i=this.canvas.constructor.defaultFloorplan().templates.areaLabelName,XO(i,{name:r,nameIndex:t,customizedName:this.roomTypeLabelMod?``:n})}},{key:`labelSubName`,value:function(e){return Lk(e)(t.types[this.subType].name)}},{key:`floorType`,value:function(){return t.types[this.type].floorType}},{key:`dimension`,value:function(){var e=this.lines();if(!e.find(function(e){return e.curve!==0})&&!e.map(function(e){return $O.apply(void 0,HE(e.points))}).find(function(e){return!QO(e,0)&&!QO(e,1/0)})){var t=this.innerPathDetail(!1,!1),n=0,r=t.length,i=[];try{for(;i.length===0;){var a=n+2,o=(n-2+r)%r,s=$O(t[n].point,t[n+1].point),c=$O(t[a].point,t[a+1].point),l=$O(t[o].point,t[o+1].point);QO(s,c)&&QO(s,l)?n+=2:i.push(t[n].point,t[n+1].point)}}catch(e){return}for(var u=n+2;u!==n;u=(u+2)%r)QO($O.apply(void 0,HE(i.slice(-2))),$O(t[u].point,t[u+1].point))&&$(i[i.length-1],t[u].point)<=10?(i.pop(),i.push(t[u+1].point)):i.push(t[u].point,t[u+1].point);var d=zk(i.filter(function(e,t){return t%2==0}),this.computeBounding(!0)).reduce(function(e,t){var n=zE(t,2),r=n[0],i=n[1],a=$O.apply(void 0,HE(r)),o=$.apply(void 0,HE(r));return QO(a,0)?(e.width<o||e.width-o<1&&e.weightWidth<i)&&(e.width=o,e.horizontal=r.sort(function(e,t){return e.x-t.x}),e.weightWidth=i):(e.height<o||e.height-o<1&&e.weightHeight<i)&&(e.height=o,e.vertical=r.sort(function(e,t){return e.y-t.y}),e.weightHeight=i),e},{weightWidth:0,weightHeight:0,width:0,height:0});if(!(d.width===0||d.height===0)&&lk.apply(void 0,HE(d.horizontal).concat(HE(d.vertical)))){d.lines=[];for(var f=0,p=t.length;f<p;f+=2)(ck(d.horizontal[0],[t[f].point,t[f+1].point])||ck(d.horizontal[1],[t[f].point,t[f+1].point])||ck(d.vertical[0],[t[f].point,t[f+1].point])||ck(d.vertical[1],[t[f].point,t[f+1].point]))&&d.lines.push(t[f].line.id);return d}}}},{key:`isPointInArea`,value:function(e){var t=this;function n(e,t){for(var n=e[0],r=e[1],i=!1,a=0,o=t.length-1;a<t.length;o=a++){var s=t[a][0],c=t[a][1],l=t[o][0],u=t[o][1];c>r!=u>r&&n<(l-s)*(r-c)/(u-c)+s&&(i=!i)}return i}function r(e){return[e.x,e.y]}var i=[];return this.points.concat(this.points[0]).reduce(function(e,n){i.push(e);var r=t.canvas.getLineByPoints(e,n);if(!r)return n;if(r.curve){var a=r.curveCenterPoint();dk(r.points);var o=r.curveR(),s=Math.abs(o-$(a,n)*r.length()/Math.abs(r.curve)/4),c=[r.curveCenterPoint.call({curve:s,points:[e,a]}),r.curveCenterPoint.call({curve:-s,points:[e,a]})].sort(function(e,t){return $(t,n)-$(e,n)})[0],l=[r.curveCenterPoint.call({curve:s,points:[a,n]}),r.curveCenterPoint.call({curve:-s,points:[a,n]})].sort(function(t,n){return $(n,e)-$(t,e)})[0];i=i.concat([c,a,l])}else if(r.items.length>0&&r.isEdge()){var u=r.items.filter(function(e){return e.type===7||e.type===11});if(u.length===0)return n;u.sort(function(t,r){return(t.startPointAt()-r.startPointAt())*(n-e)}).map(function(t){var n=t.startPointAt(),r=t.endPointAt();if($(n,e)>$(r,e)){var a=[r,n];n=a[0],r=a[1]}var o=zE(rk(700,[n,r])[0],2),s=o[0],c=o[1];i=i.concat([n,s,c,r])})}return n}),n(r(e),i.map(r))}},{key:`isAreaInArea`,value:function(e){var t=this;return e.points.every(function(e){return t.isPointInArea(e)})}},{key:`lines`,value:function(){var e=this,t=[];return this.points.concat(this.points[0]).reduce(function(n,r){var i=e.canvas.getLineByPoints(n,r);return i&&t.push(i),r}),t}},{key:`attachments`,value:function(){var e=this,t={lines:[],lineItems:[],areas:[]},n=this.lines(),r=function(t){var n=DE(e.canvas.areas),r;try{for(n.s();!(r=n.n()).done;){var i=r.value;if(i!==e&&i.points.indexOf(t.points[0])>=0&&i.points.indexOf(t.points[1])>=0)return i}}catch(e){n.e(e)}finally{n.f()}return null},i=function(){if(!e.canvas.app)return null;var t=zE(e.canvas.app.getEntrenceLineItemTowardsRadAndNorthRad(),2);t[0];var n=t[1];return n===null?null:n}(),a=function(e){if(!i)return null;var t=(e-i)/Math.PI*180;return t=kk(t),{0:`north`,45:`north-west`,90:`west`,135:`south-west`,180:`south`,225:`south-east`,270:`east`,315:`north-east`}[t]};return n.forEach(function(n){var i=n.towardsRadWithArea(e),o=a(i);t.lines.push({id:n.id,towardsRad:i,direction:o,directionCode:Rk[o]||``,edge:n.edgeComputed,length:n.length()});var s=r(n);if(s){var c=t.areas.filter(function(e){return e.id===s.id})[0];if(c)c.sharedLines.push(n.id),c.sharedLineItems=c.sharedLineItems.concat(n.items.map(function(e){return e.id}));else{var l=a(i);t.areas.push({id:s.id,towardsRad:i,direction:l,directionCode:Rk[l]||``,roomType:s.roomType(),type:s.type,sharedLines:[n.id],sharedLineItems:n.items.map(function(e){return e.id})})}}n.items.forEach(function(e){var r=a(i);t.lineItems.push({id:e.id,towardsRad:i,direction:r,directionCode:Rk[r]||``,edge:n.edgeComputed,length:e.length,is:e.model().is})})}),t}},{key:`computeBounding`,value:function(){var e=vk(arguments.length>0&&arguments[0]!==void 0&&arguments[0]?this.innerPath():this.points),t=e.minX,n=e.maxX,r=e.minY,i=e.maxY;return{width:n-t,height:i-r}}}])}(jk);Bk.displayName=Bk.prototype.displayName=`Area`,Bk.propTypes={points:`array`,type:`number`,nameIndex:`string`,labelX:`number`,labelY:`number`,labelScale:`number`,areaHeight:`number`,simpleLabelMod:`boolean`,roomTypeLabelMod:`boolean`,empty:`boolean`,roomType:`string`,hideName:`boolean`,hideSize:`boolean`,hideBounding:`boolean`,subType:`number`,subLabelX:`number`,subLabelY:`number`,customizedName:`string`},Bk.storeTypes={points:`idArray`,type:`value`,typeName:function(e){return e.typeName()},nameIndex:`value`,labelX:`value`,labelY:`value`,labelScale:`value`,areaHeight:`value`,simpleLabelMod:`value`,roomTypeLabelMod:`value`,hideName:`value`,hideSize:`value`,hideBounding:`value`,subType:`value`,subLabelX:`value`,subLabelY:`value`,customizedName:`value`,empty:function(e){return e.empty()},roomType:function(e){return e.roomType()},roomTypeName:function(e){return e.roomTypeName()},floorType:function(e){return e.floorType()},size:function(e){return e.size()},sizeWithoutLine:function(e){return e.size(!1)},roomName:function(e){return e.labelName()},attachments:function(e){return e.attachments()}},Bk.rooms={100900000001:{type:`100900000001`,name:`室`},100900000002:{type:`100900000002`,name:`厅`},100900000003:{type:`100900000003`,name:`厨`},100900000004:{type:`100900000004`,name:`卫`},100900000005:{type:`100900000005`,name:`阳台`},100900000006:{type:`100900000006`,name:`露台`},100900000007:{type:`100900000007`,name:`花园`},100900000008:{type:`100900000008`,name:`储`},100900000009:{type:`100900000009`,name:`保姆间`},100900000010:{type:`100900000010`,name:`车库`},100900000011:{type:`100900000011`,name:`阁楼`},100900000012:{type:`100900000012`,name:`其他`},100900000013:{type:`100900000013`,name:`衣`},100900000015:{type:`100900000015`,name:`商铺`},100900000016:{type:`100900000016`,name:`写字楼`}},Bk.floors=[{type:0,href:`resource/floors/{{ theme }}/wood.png`,description:`木质地板`},{type:1,href:`resource/floors/{{ theme }}/tile.png`,description:`瓷砖地面`},{type:2,href:`resource/floors/{{ theme }}/yard.png`,description:`户外地面`},{type:3,href:`resource/floors/{{ theme }}/bath.png`,description:`卫生间地面`},{type:4,href:`resource/floors/{{ theme }}/balcony.png`,description:`阳台地面`},{type:5,href:`resource/floors/{{ theme }}/garage.png`,description:`车库地面`}],Bk.types=[{type:0,floorType:1,roomType:`100900000012`,name:`其他`},{type:1,floorType:1,roomType:`100900000002`,name:`客厅`},{type:2,floorType:1,roomType:`100900000002`,name:`餐厅`},{type:3,floorType:0,roomType:`100900000001`,name:`卧室`},{type:4,floorType:0,roomType:`100900000001`,name:`书房`},{type:5,floorType:3,roomType:`100900000004`,name:`卫生间`},{type:6,floorType:3,roomType:`100900000004`,name:`淋浴间`},{type:7,floorType:3,roomType:`100900000004`,name:`洗手间`},{type:8,floorType:3,roomType:`100900000003`,name:`厨房`},{type:9,floorType:1,roomType:`100900000003`,name:`开放厨房`,onlySubArea:!0},{type:10,floorType:0,roomType:`100900000001`,name:`多功能间`},{type:11,floorType:0,roomType:`100900000009`,name:`保姆间`},{type:12,floorType:4,roomType:`100900000005`,name:`阳台`},{type:13,floorType:4,roomType:`100900000006`,name:`露台`},{type:14,floorType:0,roomType:`100900000008`,name:`储物间`},{type:15,floorType:0,roomType:`100900000013`,name:`衣帽间`},{type:16,floorType:0,roomType:`100900000011`,name:`阁楼`},{type:17,floorType:2,roomType:`100900000007`,name:`花园`},{type:18,floorType:5,roomType:`100900000010`,name:`车库`},{type:19,floorType:1,roomType:`100900000012`,name:`电梯`},{type:20,floorType:1,roomType:`100900000012`,name:`地下室`},{type:21,floorType:1,roomType:`100900000012`,name:`天井`},{type:22,floorType:1,roomType:`100900000012`,name:`阳光房`},{type:23,floorType:1,roomType:`100900000012`,name:`过道`},{type:24,floorType:1,roomType:`100900000012`,name:`楼梯间`},{type:25,floorType:1,roomType:`100900000012`,name:`门厅`},{type:26,floorType:2,roomType:`100900000012`,name:`入户花园`},{type:27,floorType:1,roomType:`100900000012`,name:`玄关`},{type:28,floorType:1,roomType:`100900000012`,name:`挑空`},{type:29,floorType:4,roomType:`100900000012`,name:`晾晒区`},{type:30,floorType:4,roomType:`100900000012`,name:`洗衣房`},{type:31,floorType:0,roomType:`100900000012`,name:`娱乐区`},{type:32,floorType:0,roomType:`100900000012`,name:`健身区`},{type:33,floorType:0,roomType:`100900000012`,name:`接待区`},{type:34,floorType:0,roomType:`100900000012`,name:`影音区`},{type:35,floorType:1,roomType:`100900000012`,name:`餐饮区`},{type:36,floorType:1,roomType:`100900000012`,name:`其他`,onlySubArea:!0},{type:37,floorType:1,roomType:`100900000002`,name:`起居室`},{type:38,floorType:0,roomType:`100900000001`,name:`主卧`},{type:39,floorType:0,roomType:`100900000001`,name:`次卧`},{type:40,floorType:0,roomType:`100900000001`,name:`优化间`},{type:41,floorType:0,roomType:`100900000001`,name:`办公室`},{type:42,floorType:0,roomType:`100900000001`,name:`会议室`},{type:43,floorType:0,roomType:`100900000001`,name:`洽谈间`},{type:44,floorType:1,roomType:`100900000002`,name:`共享大厅`},{type:45,floorType:1,roomType:`100900000012`,name:`水吧`},{type:46,floorType:0,roomType:`100900000015`,name:`出入口`},{type:47,floorType:0,roomType:`100900000015`,name:`大厅`},{type:48,floorType:0,roomType:`100900000015`,name:`包厢`},{type:49,floorType:0,roomType:`100900000015`,name:`其他`},{type:50,floorType:0,roomType:`100900000016`,name:`出入口`},{type:51,floorType:0,roomType:`100900000016`,name:`办公区`},{type:52,floorType:0,roomType:`100900000016`,name:`老板间`},{type:53,floorType:0,roomType:`100900000016`,name:`会议室`},{type:54,floorType:0,roomType:`100900000016`,name:`休息区/水吧`},{type:55,floorType:0,roomType:`100900000016`,name:`其他`},{type:56,floorType:2,roomType:`100900000012`,name:`空中花园`},{type:57,floorType:0,roomType:`100900000001`,name:`洋室`},{type:58,floorType:0,roomType:`100900000001`,name:`和室`},{type:59,floorType:4,roomType:`100900000006`,name:`庭院`},{type:60,floorType:5,roomType:`100900000012`,name:`设备间`},{type:61,floorType:5,roomType:`100900000012`,name:`阳台花园`},{type:62,floorType:1,roomType:`100900000012`,name:`飘窗区域`},{type:63,floorType:5,roomType:`100900000012`,name:`老人房`},{type:64,floorType:5,roomType:`100900000012`,name:`儿童房`},{type:65,floorType:5,roomType:`100900000012`,name:`保姆房`},{type:66,floorType:5,roomType:`100900000012`,name:`主卫`},{type:67,floorType:5,roomType:`100900000012`,name:`客卫`},{type:68,floorType:5,roomType:`100900000012`,name:`厨房阳台`},{type:69,floorType:5,roomType:`100900000012`,name:`楼梯`},{type:70,floorType:5,roomType:`100900000012`,name:`屋顶阁楼`},{type:71,floorType:5,roomType:`100900000012`,name:`宠物房`},{type:72,floorType:5,roomType:`100900000012`,name:`门头`},{type:73,floorType:1,roomType:`100900000012`,name:`不计面积`}],Bk.nameIndices=`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split(``),Bk.defaultType=0;function Vk(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,`default`)?e.default:e}var Hk={exports:{}},Uk;function Wk(){return Uk?Hk.exports:(Uk=1,(function(e){function t(e){return e.split(``).map(function(e){return`\\`+e}).join(``)}var n=[`{{`,`}}`],r=RegExp(`(`+t(n[0])+`\\d+`+t(n[1])+`)`,`g`);function i(e){return e==null?``:``+e}function a(e){return e.split(`-`)[0]}function o(e,t){t=t||{};function o(){return typeof e==`function`?e():e}function s(e){var t=o();if(e.indexOf(t)!==-1)return t;var n=a(t);if(e.indexOf(n)!==-1)return n;for(var r=0;r<e.length;r++){var i=e[r];if(a(i)===n)return i}return``}function c(){var e=Array.prototype.slice.call(arguments),a=e.shift();if(typeof a!=`string`)throw Error(`first argument needs to be a string`);var o=null;if(t[a]){var c=s(Object.keys(t[a]));o=t[a][c]}if(Array.isArray(o))switch(e.filter(function(e){return typeof e==`number`})[0]){case 0:o=o[Math.max(0,o.length-3)];break;case 1:o=o[Math.max(0,o.length-2)];break;default:o=o[Math.max(0,o.length-1)];break}return typeof o!=`string`&&(o=a),o.replace(r,function(t){return i(e[Number(t.slice(n[0].length,-n[1].length))])})}return Object.defineProperty(c,"language",{get:o}),Object.defineProperty(c,"match",{value:s}),c}e.exports=o,Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.default=o})(Hk),Hk.exports)}var Gk=Vk(Wk()),Kk,qk=[`zh-CN`,`en-US`,`ja-JP`,`es-ES`,`pt-PT`,`vi-VN`,`zh-TW`,`de-DE`,`fr-FR`,`it-IT`,`pl-PL`,`nl-NL`,`ms-MY`,`sr-Cyrl`,`id-ID`],Jk=EE(function e(){CE(this,e)});Kk=Jk,OE(Jk,`translate`,Gk(typeof $CONFIG<`u`&&$CONFIG.LANGUAGE||`zh-CN`,Ik)),OE(Jk,`setLanguage`,function(e){Kk.translate=Gk(e||`zh-CN`,Ik),Kk.globalLanguage=Kk.translate.match(qk)||`zh-CN`}),OE(Jk,`setLocale`,function(e){Object.keys(e).forEach(function(t){Ik.hasOwnProperty(t)&&Object.keys(e[t]).forEach(function(n){Ik[t][n]=e[t][n]})}),Kk.translate=Gk(Kk.globalLanguage,Ik)}),OE(Jk,`globalLanguage`,Kk.translate.match(qk)||`zh-CN`);function Yk(e){if(Ik.hasOwnProperty(e)&&Ik[e].hasOwnProperty(Jk.globalLanguage)){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return Jk.translate.apply(Jk,[e].concat(n))}return e}var Xk=[{type:0,is:`door`,href:`resource/line-items/single_door.svg`,description:`单开门`,i18n:Yk(`单开门`),width:800,height:800,fixY:0,ratio:1,strokeWidth:0,svg:`
764
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
765
+ <polyline points="3.04,64.249 3.04,-0.272 -0.186,-0.272"/>
766
+ <line x1="64.335" y1="-0.272" x2="3.04" y2="-0.272"/>
767
+ <line x1="-0.353" y1="-0.272" x2="-0.353" y2="64.249"/>
768
+ <line x1="-0.186" y1="-0.272" x2="64.335" y2="-0.272"/>
769
+ <path d="M-0.353,64.249c34.787,0.937,63.747-26.504,64.683-61.291c0.013-0.486,0.021-0.972,0.022-1.458"/>
770
+ </g>
771
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:1,is:`door`,href:`resource/line-items/sliding_door.svg`,description:`推拉门`,i18n:Yk(`推拉门`),width:1400,height:1400,fixY:.5,ratio:0,strokeWidth:.07,svg:`
772
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
773
+ <rect x="-0.353" y="32" width="32.353" height="1.999"/>
774
+ <rect x="32" y="30.001" width="32.353" height="1.999"/>
775
+ </g>
776
+ `,svgWidth:64,svgHeight:64,svgContentHeight:20},{type:2,is:`door`,href:`resource/line-items/double_door.svg`,description:`双开门`,i18n:Yk(`双开门`),width:1400,height:1400,fixY:.25,ratio:1,svg:`
777
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
778
+ <line x1="32" y1="15.824" x2="1.265" y2="15.824"/>
779
+ <polyline points="
780
+ 32,15.824 -0.353,15.824 -0.353,48.176 1.265,48.136 5.063,47.717 9.127,46.814 12.852,45.345 16.521,43.482 19.795,41.11
781
+ 23.125,38.174 25.947,34.729 28.035,31.397 29.334,28.63 30.406,25.75 31.309,22.701 31.874,19.313 32,15.824
782
+ "/>
783
+ <polyline points="
784
+ 32,15.824 64.353,15.824 64.353,48.176 62.735,48.136 58.937,47.717 54.873,46.814 51.148,45.345 47.479,43.482 44.205,41.11
785
+ 40.875,38.174 38.053,34.729 35.965,31.397 34.666,28.63 33.594,25.75 32.691,22.701 32.126,19.313 32,15.824
786
+ "/>
787
+ <line x1="1.265" y1="15.824" x2="1.265" y2="48.136"/>
788
+ <line x1="62.735" y1="15.824" x2="62.735" y2="48.136"/>
789
+ </g>
790
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:3,is:`door`,href:`resource/line-items/unequal_double_door.svg`,description:`子母门`,i18n:Yk(`子母门`),width:1400,height:1400,fixY:.2,ratio:1,svg:`
791
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
792
+ <path d="
793
+ M29.449,12.143"/>
794
+ <line x1="-0.353" y1="12.143" x2="-0.353" y2="42.612"/>
795
+ <line x1="-0.353" y1="12.143" x2="64.353" y2="12.143"/>
796
+ <line x1="64.353" y1="51.857" x2="64.353" y2="12.143"/>
797
+ <line x1="2.18" y1="12.143" x2="2.19" y2="42.393"/>
798
+ <line x1="61.475" y1="12.143" x2="61.454" y2="51.618"/>
799
+ <polyline points="
800
+ 28.091,12.143 28.055,14.548 28.112,16.106 28.23,17.617 28.583,20.266 29.213,23.249 30.198,26.512 31.404,29.527 32.953,32.585
801
+ 35.225,36.135 37.576,39.076 40.129,41.697 42.412,43.661 45.109,45.616 48.062,47.378 51.316,48.931 54.717,50.172
802
+ 58.276,51.095 60.898,51.546 63.941,51.837 64.353,51.857
803
+ "/>
804
+ <polyline points="
805
+ 28.037,12.143 28.02,15.283 27.797,17.541 27.359,19.952 26.505,22.969 25.598,25.288 24.151,28.134 22.699,30.392 20.894,32.679
806
+ 18.848,34.794 16.503,36.763 13.744,38.606 11.094,39.987 8.791,40.923 6.013,41.762 3.734,42.232 1.563,42.506 -0.353,42.612
807
+ "/>
808
+ </g>
809
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:4,is:`door`,href:`resource/line-items/elevator_door.svg`,description:`电梯门`,i18n:Yk(`电梯门`),width:1e3,height:1e3,fixY:.5,ratio:0,strokeWidth:.1,svg:`
810
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
811
+ <line x1="64.353" y1="29.782" x2="-0.353" y2="29.782"/>
812
+ <line x1="11.664" y1="34.218" x2="11.664" y2="29.782"/>
813
+ <line x1="52.336" y1="31.63" x2="11.664" y2="31.63"/>
814
+ <line x1="52.336" y1="32.37" x2="11.664" y2="32.37"/>
815
+ <line x1="64.353" y1="34.218" x2="-0.353" y2="34.218"/>
816
+ <line x1="32" y1="34.218" x2="32" y2="32.37"/>
817
+ <line x1="52.336" y1="34.218" x2="52.336" y2="29.782"/>
818
+ <line x1="-0.353" y1="34.218" x2="-0.353" y2="29.782"/>
819
+ <line x1="64.353" y1="34.218" x2="64.353" y2="29.782"/>
820
+ <line x1="32" y1="31.63" x2="32" y2="29.782"/>
821
+ </g>
822
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:5,is:`window`,href:`resource/line-items/window.svg`,description:`普通窗`,i18n:Yk(`普通窗`),width:800,height:800,fixY:.5,ratio:0,strokeWidth:.1,svg:`
823
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
824
+ <line stroke-width="1" x1="30.848" y1="30" x2="30.848" y2="34"/>
825
+ <line stroke-width="0.8" x1="0.9" y1="32.384" x2="63.249" y2="32.384"/>
826
+ <line stroke-width="0.8" x1="0.9" y1="31.931" x2="63.249" y2="31.931"/>
827
+ <line stroke-width="1" x1="0.9" y1="32.158" x2="63.249" y2="32.158"/>
828
+ <line stroke-width="0.6" x1="63.249" y1="34.244" x2="64.353" y2="34.244"/>
829
+ <line stroke-width="0.6" x1="64.353" y1="29.756" x2="64.353" y2="34.244"/>
830
+ <line stroke-width="0.6" x1="63.249" y1="29.756" x2="64.353" y2="29.756"/>
831
+ <line stroke-width="0.6" x1="0.9" y1="34.244" x2="-0.353" y2="34.244"/>
832
+ <line stroke-width="0.6" x1="-0.353" y1="29.756" x2="-0.353" y2="34.244"/>
833
+ <line stroke-width="0.6" x1="0.9" y1="29.756" x2="-0.353" y2="29.756"/>
834
+ <rect x="0.9" y="29.756" stroke-width="0.6" width="62.349" height="4.488"/>
835
+ </g>
836
+ `,svgWidth:64,svgHeight:64,svgContentHeight:20},{type:6,is:`window`,disabled:!0,href:`resource/line-items/curved_window.svg`,description:`弧形窗`,i18n:Yk(`弧形窗`),width:1800,height:1800,fixY:.4,ratio:0,strokeWidth:.1,svg:`
837
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
838
+ <line stroke-width="0.8504" x1="32.294" y1="40.462" x2="32.293" y2="37.572"/>
839
+ <path stroke-width="0.7087" d="M0.491,24.757c16.093,17.377,43.226,18.418,60.603,2.325c0.837-0.775,1.642-1.583,2.415-2.422"/>
840
+ <path stroke-width="0.8504" d="M0.491,25.336c16.343,17.407,43.703,18.269,61.11,1.926c0.656-0.615,1.292-1.251,1.908-1.906"/>
841
+ <path stroke-width="0.7087" d="M0.491,26.093C17.545,43.5,45.482,43.787,62.89,26.732c0.209-0.204,0.415-0.411,0.619-0.619"/>
842
+ <path stroke-width="0.4252" d="M0.491,23.543c15.661,17.4,42.462,18.81,59.862,3.15c1.107-0.996,2.16-2.05,3.156-3.156"/>
843
+ <rect x="63.509" y="23.536" stroke-width="0.4252" width="0.844" height="3.967"/>
844
+ <rect x="-0.353" y="23.543" stroke-width="0.4252" width="0.844" height="3.967"/>
845
+ <path stroke-width="0.4252" d="M0.491,27.509c17.455,17.275,45.566,17.272,63.018-0.007"/>
846
+ </g>
847
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:7,is:`window`,href:`resource/line-items/bay_window.svg`,description:`普通飘窗`,i18n:Yk(`普通飘窗`),width:1800,height:1800,fixY:.36,ratio:0,strokeWidth:.1,svg:`
848
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
849
+ <line stroke-width="0.7087" x1="64.353" y1="20.567" x2="-0.352" y2="20.563"/>
850
+ <line stroke-width="0.7087" x1="64.352" y1="25.66" x2="64.353" y2="20.567"/>
851
+ <line stroke-width="0.7087" x1="63.638" y1="25.66" x2="64.352" y2="25.66"/>
852
+ <line stroke-width="0.7087" x1="-0.353" y1="25.653" x2="0.602" y2="25.653"/>
853
+ <line stroke-width="0.7087" x1="-0.352" y1="20.563" x2="-0.353" y2="25.653"/>
854
+ <line stroke-width="0.8504" x1="31.265" y1="38.39" x2="31.264" y2="43.435"/>
855
+ <line stroke-width="0.7087" x1="60.399" y1="39.992" x2="60.401" y2="20.562"/>
856
+ <line stroke-width="0.7087" x1="3.885" y1="39.986" x2="60.399" y2="39.992"/>
857
+ <line stroke-width="0.7087" x1="3.887" y1="20.564" x2="3.885" y2="39.986"/>
858
+ <line stroke-width="0.8504" x1="61.041" y1="40.72" x2="61.043" y2="20.562"/>
859
+ <line stroke-width="0.8504" x1="3.243" y1="40.714" x2="61.041" y2="40.72"/>
860
+ <line stroke-width="0.8504" x1="3.245" y1="20.564" x2="3.243" y2="40.714"/>
861
+ <line stroke-width="0.7087" x1="61.637" y1="41.271" x2="61.639" y2="20.562"/>
862
+ <line stroke-width="0.7087" x1="2.841" y1="41.265" x2="61.637" y2="41.271"/>
863
+ <line stroke-width="0.7087" x1="2.843" y1="20.564" x2="2.841" y2="41.265"/>
864
+ <line stroke-width="0.7087" x1="58.357" y1="38.392" x2="58.359" y2="20.642"/>
865
+ <line stroke-width="0.7087" x1="5.641" y1="38.387" x2="58.357" y2="38.392"/>
866
+ <line stroke-width="0.7087" x1="5.643" y1="20.564" x2="5.641" y2="38.387"/>
867
+ <line stroke-width="0.4252" x1="63.636" y1="43.438" x2="63.638" y2="20.57"/>
868
+ <line stroke-width="0.4252" x1="0.601" y1="43.432" x2="63.636" y2="43.438"/>
869
+ <line stroke-width="0.4252" x1="0.603" y1="20.564" x2="0.601" y2="43.432"/>
870
+ </g>
871
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:8,is:`window`,href:`resource/line-items/french_windows.svg`,description:`落地窗`,i18n:Yk(`落地窗`),width:1800,height:1800,fixY:.5,ratio:0,strokeWidth:.1,svg:`
872
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
873
+ <line stroke-width="0.8504" x1="0.9" y1="32.158" x2="63.249" y2="32.158"/>
874
+ <line stroke-width="0.4252" x1="63.249" y1="34.244" x2="64.353" y2="34.244"/>
875
+ <line stroke-width="0.4252" x1="64.353" y1="29.756" x2="64.353" y2="34.244"/>
876
+ <line stroke-width="0.4252" x1="63.249" y1="29.756" x2="64.353" y2="29.756"/>
877
+ <line stroke-width="0.4252" x1="0.9" y1="34.244" x2="-0.353" y2="34.244"/>
878
+ <line stroke-width="0.4252" x1="-0.353" y1="29.756" x2="-0.353" y2="34.244"/>
879
+ <line stroke-width="0.4252" x1="0.9" y1="29.756" x2="-0.353" y2="29.756"/>
880
+ <rect x="0.9" y="29.756" stroke-width="0.4252" width="62.349" height="4.488"/>
881
+ </g>
882
+ `,svgWidth:64,svgHeight:64,svgContentHeight:20},{type:9,is:`window`,disabled:!0,href:`resource/line-items/french_windows_1.svg`,description:`落地窗1`,i18n:Yk(`落地窗1`),width:1800,height:1800,fixY:.37,ratio:0,strokeWidth:.1,svg:`
883
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
884
+ <line stroke-width="0.7087" x1="-0.352" y1="20.563" x2="5.643" y2="20.563"/>
885
+ <line stroke-width="0.7087" x1="64.353" y1="20.567" x2="58.359" y2="20.566"/>
886
+ <line stroke-width="0.7087" x1="64.352" y1="25.66" x2="64.353" y2="20.567"/>
887
+ <line stroke-width="0.7087" x1="63.638" y1="25.66" x2="64.352" y2="25.66"/>
888
+ <line stroke-width="0.7087" x1="-0.353" y1="25.653" x2="0.602" y2="25.653"/>
889
+ <line stroke-width="0.7087" x1="-0.352" y1="20.563" x2="-0.353" y2="25.653"/>
890
+ <line stroke-width="0.8504" x1="31.264" y1="38.389" x2="31.264" y2="43.434"/>
891
+ <line stroke-width="0.7087" x1="60.399" y1="39.992" x2="60.401" y2="20.566"/>
892
+ <line stroke-width="0.7087" x1="3.885" y1="39.986" x2="60.399" y2="39.992"/>
893
+ <line stroke-width="0.7087" x1="3.887" y1="20.563" x2="3.885" y2="39.986"/>
894
+ <line stroke-width="0.8504" x1="61.04" y1="40.72" x2="61.043" y2="20.566"/>
895
+ <line stroke-width="0.8504" x1="3.243" y1="40.713" x2="61.04" y2="40.72"/>
896
+ <line stroke-width="0.8504" x1="3.245" y1="20.563" x2="3.243" y2="40.713"/>
897
+ <line stroke-width="0.7087" x1="61.637" y1="41.271" x2="61.639" y2="20.562"/>
898
+ <line stroke-width="0.7087" x1="2.841" y1="41.265" x2="61.637" y2="41.271"/>
899
+ <line stroke-width="0.7087" x1="2.843" y1="20.563" x2="2.841" y2="41.265"/>
900
+ <line stroke-width="0.7087" x1="58.357" y1="38.392" x2="58.359" y2="20.566"/>
901
+ <line stroke-width="0.7087" x1="5.641" y1="38.386" x2="58.357" y2="38.392"/>
902
+ <line stroke-width="0.7087" x1="5.643" y1="20.563" x2="5.641" y2="38.386"/>
903
+ <line stroke-width="0.4252" x1="63.636" y1="43.438" x2="63.638" y2="20.57"/>
904
+ <line stroke-width="0.4252" x1="0.6" y1="43.431" x2="63.636" y2="43.438"/>
905
+ <line stroke-width="0.4252" x1="0.603" y1="20.563" x2="0.6" y2="43.431"/>
906
+ </g>
907
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:10,is:`window`,disabled:!0,href:`resource/line-items/french_windows_2.svg`,description:`落地窗2`,i18n:Yk(`落地窗2`),width:1800,height:1800,fixY:.45,ratio:0,strokeWidth:.1,svg:`
908
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
909
+ <line stroke-width=0.7087" x1="-0.352" y1="26.162" x2="5.643" y2="26.162"/>
910
+ <line stroke-width=0.7087" x1="64.353" y1="26.166" x2="58.359" y2="26.165"/>
911
+ <line stroke-width=0.7087" x1="64.352" y1="31.259" x2="64.353" y2="26.166"/>
912
+ <line stroke-width=0.7087" x1="63.638" y1="31.259" x2="64.352" y2="31.259"/>
913
+ <line stroke-width=0.7087" x1="-0.353" y1="31.252" x2="0.602" y2="31.252"/>
914
+ <line stroke-width=0.7087" x1="-0.352" y1="26.162" x2="-0.353" y2="31.252"/>
915
+ <line stroke-width=0.7087" x1="61.638" y1="35.672" x2="61.639" y2="26.161"/>
916
+ <line stroke-width=0.7087" x1="2.842" y1="35.666" x2="61.638" y2="35.672"/>
917
+ <line stroke-width=0.7087" x1="2.843" y1="26.162" x2="2.842" y2="35.666"/>
918
+ <line stroke-width=0.7087" x1="58.359" y1="32.793" x2="58.359" y2="26.165"/>
919
+ <line stroke-width=0.7087" x1="5.642" y1="32.787" x2="58.359" y2="32.793"/>
920
+ <line stroke-width=0.7087" x1="5.643" y1="26.162" x2="5.642" y2="32.787"/>
921
+ <line stroke-width=0.4252" x1="63.637" y1="37.839" x2="63.638" y2="26.169"/>
922
+ <line stroke-width=0.4252" x1="0.602" y1="37.832" x2="63.637" y2="37.839"/>
923
+ <line stroke-width=0.4252" x1="0.603" y1="26.162" x2="0.602" y2="37.832"/>
924
+ </g>
925
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:11,is:`window`,href:`resource/line-items/french_bay_window.svg`,description:`落地飘窗`,i18n:Yk(`落地飘窗`),width:1800,height:1800,fixY:.36,ratio:0,strokeWidth:.1,svg:`
926
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
927
+ <line stroke-width="0.7087" x1="-0.352" y1="20.563" x2="5.643" y2="20.563"/>
928
+ <line stroke-width="0.7087" x1="64.353" y1="20.567" x2="58.359" y2="20.566"/>
929
+ <line stroke-width="0.7087" x1="64.352" y1="25.66" x2="64.353" y2="20.567"/>
930
+ <line stroke-width="0.7087" x1="63.638" y1="25.66" x2="64.352" y2="25.66"/>
931
+ <line stroke-width="0.7087" x1="-0.353" y1="25.653" x2="0.602" y2="25.653"/>
932
+ <line stroke-width="0.7087" x1="-0.352" y1="20.563" x2="-0.353" y2="25.653"/>
933
+ <line stroke-width="0.7087" x1="61.637" y1="41.271" x2="61.639" y2="20.562"/>
934
+ <line stroke-width="0.7087" x1="2.841" y1="41.265" x2="61.637" y2="41.271"/>
935
+ <line stroke-width="0.7087" x1="2.843" y1="20.563" x2="2.841" y2="41.265"/>
936
+ <line stroke-width="0.7087" x1="58.357" y1="38.392" x2="58.359" y2="20.566"/>
937
+ <line stroke-width="0.7087" x1="5.641" y1="38.386" x2="58.357" y2="38.392"/>
938
+ <line stroke-width="0.7087" x1="5.643" y1="20.563" x2="5.641" y2="38.386"/>
939
+ <line stroke-width="0.4252" x1="63.636" y1="43.438" x2="63.638" y2="20.57"/>
940
+ <line stroke-width="0.4252" x1="0.6" y1="43.431" x2="63.636" y2="43.438"/>
941
+ <line stroke-width="0.4252" x1="0.603" y1="20.563" x2="0.6" y2="43.431"/>
942
+ </g>
943
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:12,is:`window`,disabled:!0,href:`resource/line-items/french_corner_window.svg`,description:`落地拐角窗`,i18n:Yk(`落地拐角窗`),width:1e3,height:1e3,fixY:.5,ratio:0,strokeWidth:.1,svg:`
944
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
945
+ <line stroke-width="0.8504" x1="30.848" y1="29.756" x2="30.848" y2="34.244"/>
946
+ <line stroke-width="0.7087" x1="0.9" y1="32.384" x2="63.249" y2="32.384"/>
947
+ <line stroke-width="0.7087" x1="0.9" y1="31.931" x2="63.249" y2="31.931"/>
948
+ <line stroke-width="0.8504" x1="0.9" y1="32.158" x2="63.249" y2="32.158"/>
949
+ <line stroke-width="0.4252" x1="63.249" y1="34.244" x2="64.353" y2="34.244"/>
950
+ <line stroke-width="0.4252" x1="64.353" y1="29.756" x2="64.353" y2="34.244"/>
951
+ <line stroke-width="0.4252" x1="63.249" y1="29.756" x2="64.353" y2="29.756"/>
952
+ <line stroke-width="0.4252" x1="0.9" y1="34.244" x2="-0.353" y2="34.244"/>
953
+ <line stroke-width="0.4252" x1="-0.353" y1="29.756" x2="-0.353" y2="34.244"/>
954
+ <line stroke-width="0.4252" x1="0.9" y1="29.756" x2="-0.353" y2="29.756"/>
955
+ <rect x="0.9" y="29.756" stroke-width="0.4252" width="62.349" height="4.488"/>
956
+ </g>
957
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:13,is:`window`,disabled:!0,href:`resource/line-items/balcony.svg`,description:`阳台`,i18n:Yk(`阳台`),width:3e3,height:3e3,fixY:.375,ratio:0,strokeWidth:.1,svg:`
958
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
959
+ <polyline points="62.351,21.137 64.353,21.138 64.353,42.871 -0.353,42.871 -0.353,21.129 1.87,21.133 1.87,40.323 62.389,40.337 62.351,21.137"/>
960
+ </g>
961
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:14,is:`window`,disabled:!0,href:`resource/line-items/curved_balcony_with_window.svg`,description:`弧形带窗阳台`,i18n:Yk(`弧形带窗阳台`),width:3e3,height:3e3,fixY:.4,ratio:0,strokeWidth:.1,svg:`
962
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
963
+ <path stroke-width="0.7087" d="M-0.347,24.838c18.01,17.515,46.689,17.516,64.699,0.001"/>
964
+ <path stroke-width="0.8504" d="M-0.344,25.363C17.59,43.059,46.414,43.062,64.352,25.37"/>
965
+ <path stroke-width="0.7087" d="M-0.338,25.949C17.6,43.634,46.417,43.631,64.353,25.943"/>
966
+ <path stroke-width="0.4252" d="M-0.353,23.43c17.942,17.688,46.763,17.687,64.705-0.001"/>
967
+ <path stroke-width="0.4252" d="M-0.336,27.304C17.595,45,46.417,45.003,64.353,27.312"/>
968
+ <line stroke-width="0.7087" x1="64.352" y1="23.422" x2="64.352" y2="27.304"/>
969
+ <line stroke-width="0.7087" x1="-0.353" y1="23.422" x2="-0.336" y2="27.304"/>
970
+ <line stroke-width="0.7087" x1="32.002" y1="36.696" x2="32.002" y2="40.578"/>
971
+ </g>
972
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:15,is:`window`,disabled:!0,href:`resource/line-items/curved_windowless_balcony.svg`,description:`弧形无窗阳台`,i18n:Yk(`弧形无窗阳台`),width:3e3,height:3e3,fixY:.4,ratio:0,strokeWidth:.1,svg:`
973
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
974
+ <path stroke-width="0.7087" d="M-0.347,24.838c18.01,17.515,46.689,17.516,64.699,0.001"/>
975
+ <path stroke-width="0.8504" d="M-0.344,25.363C17.59,43.059,46.414,43.062,64.352,25.37"/>
976
+ <path stroke-width="0.7087" d="M-0.338,25.949C17.6,43.634,46.417,43.631,64.353,25.943"/>
977
+ <path stroke-width="0.4252" d="M-0.353,23.43c17.942,17.688,46.763,17.687,64.705-0.001"/>
978
+ <path stroke-width="0.4252" d="M-0.336,27.304C17.595,45,46.417,45.003,64.353,27.312"/>
979
+ <line stroke-width="0.7087" x1="64.352" y1="23.422" x2="64.352" y2="27.304"/>
980
+ <line stroke-width="0.7087" x1="-0.353" y1="23.422" x2="-0.336" y2="27.304"/>
981
+ <line stroke-width="0.7087" x1="32.002" y1="36.696" x2="32.002" y2="40.578"/>
982
+ </g>
983
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:16,is:`door`,href:`resource/line-items/pass.svg`,description:`垭口`,i18n:Yk(`垭口`),width:1400,height:1400,fixY:.5,ratio:0,strokeWidth:.2,svg:`
984
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
985
+ <rect x="-0.353" y="26.357" width="2.151" height="11.287"/>
986
+ <rect x="62.202" y="26.357" width="2.151" height="11.287"/>
987
+ </g>
988
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:17,is:`window`,href:`resource/line-items/window.svg`,description:`普通单面飘窗`,i18n:Yk(`普通单面飘窗`),width:800,height:800,fixY:.5,ratio:0,strokeWidth:.1,svg:`
989
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
990
+ <line stroke-width="1" x1="30.848" y1="30" x2="30.848" y2="34"/>
991
+ <line stroke-width="0.8" x1="0.9" y1="32.384" x2="63.249" y2="32.384"/>
992
+ <line stroke-width="0.8" x1="0.9" y1="31.931" x2="63.249" y2="31.931"/>
993
+ <line stroke-width="1" x1="0.9" y1="32.158" x2="63.249" y2="32.158"/>
994
+ <line stroke-width="0.6" x1="63.249" y1="34.244" x2="64.353" y2="34.244"/>
995
+ <line stroke-width="0.6" x1="64.353" y1="29.756" x2="64.353" y2="34.244"/>
996
+ <line stroke-width="0.6" x1="63.249" y1="29.756" x2="64.353" y2="29.756"/>
997
+ <line stroke-width="0.6" x1="0.9" y1="34.244" x2="-0.353" y2="34.244"/>
998
+ <line stroke-width="0.6" x1="-0.353" y1="29.756" x2="-0.353" y2="34.244"/>
999
+ <line stroke-width="0.6" x1="0.9" y1="29.756" x2="-0.353" y2="29.756"/>
1000
+ <rect x="0.9" y="29.756" stroke-width="0.6" width="62.349" height="4.488"/>
1001
+ </g>
1002
+ `,svgWidth:64,svgHeight:64,svgContentHeight:20},{type:18,is:`window`,href:`resource/line-items/french_windows.svg`,description:`落地单面飘窗`,i18n:Yk(`落地单面飘窗`),width:1800,height:1800,fixY:.5,ratio:0,strokeWidth:.1,svg:`
1003
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
1004
+ <line stroke-width="0.8504" x1="0.9" y1="32.158" x2="63.249" y2="32.158"/>
1005
+ <line stroke-width="0.4252" x1="63.249" y1="34.244" x2="64.353" y2="34.244"/>
1006
+ <line stroke-width="0.4252" x1="64.353" y1="29.756" x2="64.353" y2="34.244"/>
1007
+ <line stroke-width="0.4252" x1="63.249" y1="29.756" x2="64.353" y2="29.756"/>
1008
+ <line stroke-width="0.4252" x1="0.9" y1="34.244" x2="-0.353" y2="34.244"/>
1009
+ <line stroke-width="0.4252" x1="-0.353" y1="29.756" x2="-0.353" y2="34.244"/>
1010
+ <line stroke-width="0.4252" x1="0.9" y1="29.756" x2="-0.353" y2="29.756"/>
1011
+ <rect x="0.9" y="29.756" stroke-width="0.4252" width="62.349" height="4.488"/>
1012
+ </g>
1013
+ `,svgWidth:64,svgHeight:64,svgContentHeight:20},{type:19,is:`door`,href:`resource/line-items/folding_door.svg`,description:`折叠门`,i18n:Yk(`折叠门`),width:800,height:800,fixY:.5,ratio:0,strokeWidth:.1,svg:`
1014
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
1015
+ <g id="分组-41" transform="translate(-12.000000, -5.000000)">
1016
+ <g id="垭口-copy" transform="translate(12.000000, 30.000000)" fill="{{ color }}">
1017
+ <g id="分组-18">
1018
+ <path d="M3,6 L1.77635684e-15,6 L1.77635684e-15,5 L3,5 L3,1 L1.77635684e-15,1 L1.77635684e-15,-3.20820439e-15 L3,-3.39190141e-15 L4,-1.77635684e-15 L4,6 L3,6 Z" id="合并形状"></path>
1019
+ <path d="M52,6 L51,6 L51,-1.77635684e-15 L52,-1.77635684e-15 L55,-3.45313375e-15 L55,1 L52,1 L52,5 L55,5 L55,6 L52,6 Z" id="合并形状"></path>
1020
+ <path d="M7.95568368,1.29673035 L4.37039752,5.81471343 C4.20012341,6.02928361 3.89169492,6.06231731 3.68150319,5.88849626 C3.47131147,5.71467521 3.43895185,5.3998219 3.60922595,5.18525171 L7.57700831,0.185267688 C7.77365382,-0.0625343179 8.14422983,-0.0616083429 8.33968463,0.187173421 L11.8867805,4.70204214 L15.4525354,0.186215429 C15.650404,-0.0643738546 16.0252881,-0.0616158442 16.2195981,0.191858684 L19.6733827,4.69727104 L23.2533397,0.185297428 C23.4509588,-0.0637704023 23.8238789,-0.0613735254 24.0184101,0.19021478 L27.5043775,4.69863627 L31.0744734,0.185855738 C31.2711896,-0.0628034863 31.6428046,-0.0617897044 31.8382161,0.187939261 L35.3660677,4.6964074 L38.8573337,0.189846171 C39.0523584,-0.0618937035 39.4259132,-0.0635357209 39.6230544,0.186480328 L43.1831277,4.70139442 L46.7249949,0.187416707 C46.9213865,-0.0628771562 47.2945606,-0.0623952864 47.4903314,0.188404965 L51.3932408,5.18838899 C51.5618176,5.40435128 51.5269765,5.71892851 51.3154211,5.89101689 C51.1038657,6.06310528 50.7957076,6.02753844 50.6271308,5.81157615 L47.1062838,1.301049 L43.5663487,5.81256441 C43.3705765,6.06206878 42.9988808,6.06252445 42.8025221,5.81350079 L39.244891,1.30168383 L35.7521609,5.81013494 C35.5566694,6.06247734 35.1819876,6.06340903 34.9852942,5.81204185 L31.4534349,1.29845202 L27.8810505,5.81412538 C27.6836006,6.06371196 27.3102478,6.06158598 27.1155378,5.80976633 L23.6290111,1.30062158 L20.047397,5.81468369 C19.8492486,6.06441862 19.4750782,6.06121503 19.281061,5.80812243 L15.828196,1.30390973 L12.2671556,5.81376568 C12.0707954,6.06244486 11.6994899,6.06197893 11.5037291,5.81280769 L7.95568368,1.29673035 Z" id="路径-10" fill-rule="nonzero"></path>
1021
+ </g>
1022
+ </g>
1023
+ </g>
1024
+ </g>
1025
+ `,svgWidth:55,svgHeight:55,svgContentHeight:55},{type:20,is:`other`,href:`resource/line-items/pass.svg`,description:`弧形垭口`,i18n:Yk(`弧形垭口`),width:1e3,height:2200,fixY:.5,ratio:0,strokeWidth:.2,svg:`
1026
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
1027
+ <rect x="-0.353" y="26.357" width="2.151" height="11.287"/>
1028
+ <rect x="62.202" y="26.357" width="2.151" height="11.287"/>
1029
+ </g>
1030
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:21,is:`door_window`,href:`resource/line-items/door_window.svg`,description:`门联窗`,i18n:Yk(`门联窗`),width:1900,subWidth:700,height:2200,subHeight:1350,fixY:.5,ratio:1,strokeWidth:0,svg:`
1031
+ <g fill="none" stroke="{{ color }}" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
1032
+ <g transform="translate(26, 0) scale(0.6, 1)">
1033
+ <line stroke-width="1" x1="30.848" y1="30" x2="30.848" y2="34"/>
1034
+ <line stroke-width="0.8" x1="0.9" y1="32.384" x2="63.249" y2="32.384"/>
1035
+ <line stroke-width="0.8" x1="0.9" y1="31.931" x2="63.249" y2="31.931"/>
1036
+ <line stroke-width="1" x1="0.9" y1="32.158" x2="63.249" y2="32.158"/>
1037
+ <line stroke-width="0.6" x1="63.249" y1="34.244" x2="64.353" y2="34.244"/>
1038
+ <line stroke-width="0.6" x1="64.353" y1="29.756" x2="64.353" y2="34.244"/>
1039
+ <line stroke-width="0.6" x1="63.249" y1="29.756" x2="64.353" y2="29.756"/>
1040
+ <line stroke-width="0.6" x1="0.9" y1="34.244" x2="-0.353" y2="34.244"/>
1041
+ <line stroke-width="0.6" x1="-0.353" y1="29.756" x2="-0.353" y2="34.244"/>
1042
+ <line stroke-width="0.6" x1="0.9" y1="29.756" x2="-0.353" y2="29.756"/>
1043
+ <rect x="0.9" y="29.756" stroke-width="0.6" width="62.349" height="4.488"/>
1044
+ </g>
1045
+ <g transform="translate(0, 32) scale(0.4, 0.4)">
1046
+ <polyline points="3.04,64.249 3.04,-0.272 -0.186,-0.272"/>
1047
+ <line x1="64.335" y1="-0.272" x2="3.04" y2="-0.272"/>
1048
+ <line x1="-0.353" y1="-0.272" x2="-0.353" y2="64.249"/>
1049
+ <line x1="-0.186" y1="-0.272" x2="64.335" y2="-0.272"/>
1050
+ <path d="M-0.353,64.249c34.787,0.937,63.747-26.504,64.683-61.291c0.013-0.486,0.021-0.972,0.022-1.458"/>
1051
+ </g>
1052
+ </g>
1053
+ `,svgWidth:64,svgHeight:64,svgContentHeight:64},{type:22,is:`door`,href:`resource/line-items/shutter_door.svg`,description:`卷帘门`,i18n:Yk(`卷帘门`),width:1e3,height:1e3,fixY:.5,ratio:0,strokeWidth:.1,svg:`
1054
+ <g fill="#FFF" stroke="{{ color }}" fill-rule="evenodd">
1055
+ <g transform="translate(0, 28) scale(0.65, 0.45)">
1056
+ <path d="M98 .75A1.246 1.246 0 0 1 99.25 2v16A1.246 1.246 0 0 1 98 19.25H2A1.246 1.246 0 0 1 .75 18V2A1.246 1.246 0 0 1 2 .75z" stroke-width="1.5"/>
1057
+ <path d="M2.5 2h95a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-95a.5.5 0 0 1-.5-.5v-15a.5.5 0 0 1 .5-.5zM2 13.5h96M2 15.5h96M2 4.5h96M2 6.5h96" stroke-width=".2"/>
1058
+ </g>
1059
+ </g>
1060
+ `,svgWidth:65,svgHeight:65,svgContentHeight:20},{type:23,is:`door`,href:`resource/line-items/double_layer_door.svg`,description:`双层门`,i18n:Yk(`双层门`),width:800,height:1600,fixY:.5,ratio:1,strokeWidth:.1,svg:`
1061
+ <g fill="none" stroke="{{ color }}" stroke-width="1" fill-rule="evenodd">
1062
+ <g transform="scale(2, 2)">
1063
+ <g transform="translate(0, -40)">
1064
+ <path d="M74.722.966v157.888" /><path d="M79.25.756v158.49c-21.587-.2-41.11-9.03-55.288-23.208C9.62 121.697.75 101.884.75 80c0-21.647 8.68-41.267 22.747-55.57C37.59 10.103 57.09 1.11 78.683.76l.567-.004z"/><path d="M80 79.91H0"/>
1065
+ </g>
1066
+ </g>
1067
+ </g>
1068
+ `,svgWidth:80,svgHeight:160,svgContentHeight:320}],Zk=function(e){function t(e,n,r,i){var a,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!1,c=arguments.length>6&&arguments[6]!==void 0?arguments[6]:0;CE(this,t),a=SE(this,t);var l=Xk[n];return a.line=e,a.start=r,a.startIndex=c,a.type=n,a.length=i||(l?l.width:0),a.subLength=l&&l.subWidth?l.subWidth:null,a.rotateX=o,a.rotateY=s,a.entrance=null,a.noAnalysis=!1,a.height=null,a.subHeight=l&&l.subHeight?l.subHeight:null,a.offsetY=null,a.leftR=null,a.rightR=null,a}return jE(t,e),EE(t,[{key:`model`,value:function(){var e=Xk[this.type];return HO({},e,{originWidth:e.width,originHeight:e.height,width:this.length,height:e.ratio?this.length*e.ratio:this.line?this.line.getThickness()/e.strokeWidth:0})}},{key:`startPointAt`,value:function(){var e=zE(this.line.points,2),t=e[0],n=e[1];if(this.line.align){var r=[void 0,1,0][this.line.align],i=zE(rk(this.line.getThickness()/2,[t,n])[r],2);t=i[0],n=i[1]}if(this.startIndex===1){var a=[n,t];t=a[0],n=a[1]}var o=this.start/$(t,n);return isNaN(o)&&(o=0),{x:t.x+(n.x-t.x)*o,y:t.y+(n.y-t.y)*o}}},{key:`startPointDrawAt`,value:function(){var e=zE(this.line.edgeLine(),2),t=e[0],n=e[1],r={x:t[0].x/2+n[0].x/2,y:t[0].y/2+n[0].y/2},i={x:t[1].x/2+n[1].x/2,y:t[1].y/2+n[1].y/2};return ek(this.startPointAt(),[r,i])}},{key:`endPointAt`,value:function(){var e=zE(this.line.points,2),t=e[0],n=e[1];if(this.line.align){var r=[void 0,1,0][this.line.align],i=zE(rk(this.line.getThickness()/2,[t,n])[r],2);t=i[0],n=i[1]}if(this.startIndex===1){var a=[n,t];t=a[0],n=a[1]}var o=(this.start+this.length)/$(t,n);return isNaN(o)&&(o=0),{x:t.x+(n.x-t.x)*o,y:t.y+(n.y-t.y)*o}}},{key:`endPointDrawAt`,value:function(){var e=zE(this.line.edgeLine(),2),t=e[0],n=e[1],r={x:t[0].x/2+n[0].x/2,y:t[0].y/2+n[0].y/2},i={x:t[1].x/2+n[1].x/2,y:t[1].y/2+n[1].y/2};return ek(this.endPointAt(),[r,i])}},{key:`rad`,value:function(){var e=zE(this.line.points,2),t=e[0],n=e[1];if(this.startIndex===1){var r=[n,t];t=r[0],n=r[1]}return Math.atan2(n.y-t.y,n.x-t.x)}},{key:`towardsRadWithArea`,value:function(e){return this.line.towardsRadWithArea(e)}},{key:`_checkItem`,value:function(e,t){var n=[];return e.forEach(function(e){var r=e.startPointAt(),i=e.endPointAt();if(ck(r,t)){var a=$(t[0],r);n.push({distance:a,point:r})}if(ck(i,t)){var o=$(t[0],i);n.push({distance:o,point:i})}}),n}},{key:`limitePointRange`,value:function(){var e=this,t=this.line,n=t.edgePoints(!0),r=t.items.filter(function(t){return t.id!==e.id}),i=zE(n.map(function(e){return t.closestPointOnLine(e)}),6),a=i[0],o=i[1],s=i[2],c=i[3],l=i[4],u=i[5],d={x:a.x/2+c.x/2,y:a.y/2+c.y/2},f=this.startPointAt(),p=this.endPointAt(),m={x:f.x/2+p.x/2,y:f.y/2+p.y/2},h=$(d,o)>$(d,u)?u:o,g=this._checkItem(r,[m,h]);g.length>0&&(g.sort(function(e,t){return e.distance-t.distance}),h=g[0].point);var _=$(d,s)>$(d,l)?l:s,v=this._checkItem(r,[m,_]);return v.length>0&&(v.sort(function(e,t){return e.distance-t.distance}),_=v[0].point),this.startIndex===1?[_,h]:[h,_]}}])}(jk);Zk.displayName=`LineItem`,Zk.prototype.displayName=`LineItem`,Zk.propTypes={line:[`object`,`null`],start:`number`,startIndex:`number`,type:`number`,length:`number`,rotateX:`boolean`,rotateY:`boolean`,entrance:[`number`,`null`],noAnalysis:`boolean`,height:[`number`,`null`],offsetY:[`number`,`null`],subLength:[`number`,`null`],leftR:[`number`,`null`],rightR:[`number`,`null`],subHeight:[`number`,`null`]},Zk.storeTypes={type:`value`,line:`id`,startIndex:`value`,start:`value`,length:`value`,rotateX:`value`,rotateY:`value`,entrance:`value`,noAnalysis:`value`,height:`value`,offsetY:`value`,subLength:`value`,leftR:`value`,rightR:`value`,subHeight:`value`,startPointAt:function(e){return e.startPointAt()},endPointAt:function(e){return e.endPointAt()},is:function(e){return e.model().is}},Zk.lineItemModels=Xk;var Qk={0:{type:0,description:`车-2`,href:`resource/items/{{ theme }}/car_2.png`,width:4200,height:1800,tag:`其他`,direction:3,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},1:{type:1,description:`车-1`,href:`resource/items/{{ theme }}/car_1.png`,width:1900,height:4300,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},2:{type:2,description:`中厨-1`,href:`resource/items/{{ theme }}/kitchen_1.png`,width:3158,height:1400,tag:`厨房`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},3:{type:3,description:`8人餐桌`,href:`resource/items/{{ theme }}/table_for_8.png`,width:3240,height:1800,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},4:{type:4,description:`衣柜-1`,href:`resource/items/{{ theme }}/wardrobe_1.png`,width:1820,height:600,tag:`卧室`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},5:{type:5,description:`浴缸-2`,href:`resource/items/{{ theme }}/bathtub_2.png`,width:1500,height:694,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},6:{type:6,description:`衣柜-3`,href:`resource/items/{{ theme }}/wardrobe_3.png`,width:2830,height:600,tag:`卧室`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},7:{type:7,description:`植物-4`,href:`resource/items/{{ theme }}/plant_4.png`,width:700,height:628,tag:`装饰类`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},8:{type:8,description:`植物-1`,href:`resource/items/{{ theme }}/plant_1.png`,width:700,height:565,tag:`装饰类`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},9:{type:9,description:`植物-6`,href:`resource/items/{{ theme }}/plant_6.png`,width:800,height:758,tag:`装饰类`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},10:{type:10,description:`书桌-1`,href:`resource/items/{{ theme }}/desk_1.png`,width:1200,height:930,tag:`书房`,direction:0,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},11:{type:11,description:`瓶艺-1`,href:`resource/items/{{ theme }}/bottle_art_1.png`,width:530,height:520,tag:`装饰类`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},12:{type:12,description:`衣柜-2`,href:`resource/items/{{ theme }}/wardrobe_2.png`,width:2310,height:600,tag:`卧室`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},13:{type:13,description:`植物-2`,href:`resource/items/{{ theme }}/plant_2.png`,width:600,height:600,tag:`装饰类`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},14:{type:14,description:`西厨-1`,href:`resource/items/{{ theme }}/western_kitchen_1.png`,width:2180,height:550,tag:`厨房`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},15:{type:15,description:`西厨-2`,href:`resource/items/{{ theme }}/western_kitchen_2.png`,width:1480,height:550,tag:`厨房`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},16:{type:16,description:`浴缸-1`,href:`resource/items/{{ theme }}/bathtub_1.png`,width:1500,height:956,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},17:{type:17,description:`植物-3`,href:`resource/items/{{ theme }}/plant_3.png`,width:700,height:639,tag:`装饰类`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},18:{type:18,description:`书桌-2`,href:`resource/items/{{ theme }}/desk_2.png`,width:2200,height:2470,tag:`书房`,direction:3,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},19:{type:19,description:`吧台`,href:`resource/items/{{ theme }}/bar_counter.png`,width:1800,height:1130,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},20:{type:20,description:`书柜-短`,href:`resource/items/{{ theme }}/bookcase_short.png`,width:1460,height:350,tag:`书房`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},21:{type:21,description:`鞋柜-长`,href:`resource/items/{{ theme }}/shoe_cabinet_long.png`,width:2059,height:550,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},22:{type:22,description:`鞋柜-短`,href:`resource/items/{{ theme }}/shoe_cabinet_short.png`,width:1308,height:550,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},23:{type:23,description:`中厨-2`,href:`resource/items/{{ theme }}/kitchen_2.png`,width:2020,height:650,tag:`厨房`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},24:{type:24,description:`椅子`,href:`resource/items/{{ theme }}/chair.png`,width:1050,height:950,tag:`客厅`,direction:1,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},25:{type:25,description:`秋千`,href:`resource/items/{{ theme }}/swing.png`,width:1600,height:1370,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},26:{type:26,description:`茶几`,href:`resource/items/{{ theme }}/tea_table.png`,width:1090,height:800,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},27:{type:27,description:`庭院`,href:`resource/items/{{ theme }}/courtyard.png`,width:2100,height:3020,tag:`其他`,direction:3,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},28:{type:28,description:`躺椅`,href:`resource/items/{{ theme }}/deck_chair.png`,width:900,height:1850,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},29:{type:29,description:`钢琴`,href:`resource/items/{{ theme }}/piano.png`,width:1900,height:2260,tag:`其他`,direction:0,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},30:{type:30,description:`音响`,href:`resource/items/{{ theme }}/sound.png`,width:2500,height:550,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},31:{type:31,description:`马桶`,href:`resource/items/{{ theme }}/flush_toilet.png`,width:450,height:750,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},32:{type:32,description:`植物-5`,href:`resource/items/{{ theme }}/plant_5.png`,width:544,height:600,tag:`装饰类`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},33:{type:33,description:`书柜-长`,href:`resource/items/{{ theme }}/bookcase_long.png`,width:2040,height:350,tag:`书房`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},34:{type:34,description:`燃气灶-1`,href:`resource/items/{{ theme }}/gas_stove_1.png`,width:820,height:450,tag:`厨房`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},35:{type:35,description:`洗脸池-单`,href:`resource/items/{{ theme }}/wash_basin_single.png`,width:1150,height:500,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},36:{type:36,description:`洗手池-单`,href:`resource/items/{{ theme }}/sink_single.png`,width:1200,height:500,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},37:{type:37,description:`双人床-4`,href:`resource/items/{{ theme }}/double_4.png`,width:2743,height:2e3,tag:`卧室`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},38:{type:38,description:`电视柜-短`,href:`resource/items/{{ theme }}/tv_cabinet_short.png`,width:1580,height:350,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},39:{type:39,description:`储物柜-1`,href:`resource/items/{{ theme }}/locker_1.png`,width:1400,height:600,tag:`储物间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},40:{type:40,description:`双人床-3`,href:`resource/items/{{ theme }}/double_3.png`,width:2791,height:2300,tag:`卧室`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},41:{type:41,description:`双人床-2`,href:`resource/items/{{ theme }}/double_2.png`,width:2791,height:2300,tag:`卧室`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},42:{type:42,description:`洗手池-双`,href:`resource/items/{{ theme }}/sink_double.png`,width:2777,height:600,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},43:{type:43,description:`洗脸池-双`,href:`resource/items/{{ theme }}/wash_basin_double.png`,width:2550,height:600,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},44:{type:44,description:`双人床(无床头柜)-1`,href:`resource/items/{{ theme }}/double_bed_without_bedside_table_1.png`,width:1914,height:2e3,tag:`卧室`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},45:{type:45,description:`电视柜-长`,href:`resource/items/{{ theme }}/tv_cabinet_long.png`,width:2040,height:350,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},46:{type:46,description:`洽谈桌组合`,href:`resource/items/{{ theme }}/negotiation_table_combination.png`,width:2830,height:950,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},47:{type:47,description:`哑铃架`,href:`resource/items/{{ theme }}/dumbbell_rack.png`,width:900,height:650,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},48:{type:48,description:`沙发组合-1`,href:`resource/items/{{ theme }}/sofa_combination_1.png`,width:4e3,height:2792,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},49:{type:49,description:`游泳池-2`,href:`resource/items/{{ theme }}/swimming_pool_2.png`,width:7680,height:3800,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},50:{type:50,description:`美人榻`,href:`resource/items/{{ theme }}/beauty_couch.png`,width:1600,height:520,tag:`卧室`,direction:1,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},51:{type:51,description:`单人床(无床头柜)`,href:`resource/items/{{ theme }}/single_bed_without_bedside_table.png`,width:1200,height:2120,tag:`卧室`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},52:{type:52,description:`沙发组合-2`,href:`resource/items/{{ theme }}/sofa_combination_2.png`,width:2e3,height:2054,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},53:{type:53,description:`跑步机`,href:`resource/items/{{ theme }}/treadmill.png`,width:2120,height:950,tag:`其他`,direction:1,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},54:{type:54,description:`储物柜-3`,href:`resource/items/{{ theme }}/lockers_3.png`,width:2400,height:1360,tag:`储物间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},55:{type:55,description:`洗菜池-1`,href:`resource/items/{{ theme }}/vegetable_washing_pool_1.png`,width:760,height:470,tag:`厨房`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},56:{type:56,description:`组合沙发-4`,href:`resource/items/{{ theme }}/combination_sofa_4.png`,width:1800,height:1595,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},57:{type:57,description:`台球桌`,href:`resource/items/{{ theme }}/pool_table.png`,width:2540,height:1400,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},58:{type:58,description:`置物台-1`,href:`resource/items/{{ theme }}/shelf_1.png`,width:1632,height:560,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},59:{type:59,description:`储物柜-2`,href:`resource/items/{{ theme }}/locker_2.png`,width:2640,height:600,tag:`储物间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},60:{type:60,description:`户外桌椅`,href:`resource/items/{{ theme }}/outdoor_tables_and_chairs.png`,width:3e3,height:2800,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},61:{type:61,description:`洗衣机-1`,href:`resource/items/{{ theme }}/washing_machine_1.png`,width:850,height:600,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},62:{type:62,description:`双人床-1`,href:`resource/items/{{ theme }}/double_1.png`,width:2851,height:2200,tag:`卧室`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},63:{type:63,description:`六人餐桌`,href:`resource/items/{{ theme }}/table_for_six.png`,width:2230,height:1700,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},64:{type:64,description:`洽谈沙发椅`,href:`resource/items/{{ theme }}/sofa_chair.png`,width:1e3,height:950,tag:`其他`,direction:1,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},65:{type:65,description:`三人沙发`,href:`resource/items/{{ theme }}/three_seat_sofa.png`,width:2670,height:950,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},66:{type:66,description:`会客桌`,href:`resource/items/{{ theme }}/reception_table.png`,width:1800,height:1800,tag:`其他`,direction:1,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},67:{type:67,description:`健身机`,href:`resource/items/{{ theme }}/fitness_machine.png`,width:2200,height:800,tag:`其他`,direction:1,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},68:{type:68,description:`沙发组合-3`,href:`resource/items/{{ theme }}/sofa_combination_3.png`,width:2670,height:2330,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},69:{type:69,description:`双开冰箱`,href:`resource/items/{{ theme }}/double_refrigerator.png`,width:720,height:600,tag:`厨房`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},70:{type:70,description:`车库工具箱`,href:`resource/items/{{ theme }}/garage_toolbox.png`,width:1280,height:500,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},71:{type:71,description:`储物柜-4`,href:`resource/items/{{ theme }}/locker_4.png`,width:2440,height:2440,tag:`储物间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},72:{type:72,description:`临时餐台`,href:`resource/items/{{ theme }}/temporary_dining_table.png`,width:1e3,height:1500,tag:`厨房`,direction:1,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},73:{type:73,description:`置物台-2`,href:`resource/items/{{ theme }}/shelf_2.png`,width:1590,height:600,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},74:{type:74,description:`四人餐桌`,href:`resource/items/{{ theme }}/table_for_four.png`,width:1700,height:1700,tag:`客厅`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},75:{type:75,description:`洽谈桌`,href:`resource/items/{{ theme }}/negotiating_table.png`,width:950,height:950,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},76:{type:76,description:`游泳池-1`,href:`resource/items/{{ theme }}/swimming_pool_1.png`,width:4300,height:5340,tag:`其他`,direction:1,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},77:{type:77,description:`毛巾凳`,href:`resource/items/{{ theme }}/towel_stool.png`,width:800,height:500,tag:`卫生间`,direction:0,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},78:{type:78,description:`电梯`,href:`resource/items/{{ theme }}/lift.png`,width:2e3,height:2e3,tag:`楼梯`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},79:{type:79,description:`AC`,href:`resource/items/{{ theme }}/ac.png`,width:850,height:320,tag:`其他`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},80:{type:80,description:`二人餐桌`,href:`resource/items/{{ theme }}/table_for_two.png`,width:780,height:1500,tag:`客厅`,direction:1,keywords:[`default`],themes:[`realsee`],label:!0},81:{type:81,description:`双人床(无床头柜)-2`,href:`resource/items/{{ theme }}/double_bed_without_bedside_table_2.png`,width:1500,height:2200,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},82:{type:82,description:`双人床(无床头柜)-3`,href:`resource/items/{{ theme }}/double_bed_without_bedside_table_3.png`,width:1800,height:2200,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},83:{type:83,description:`床头柜`,href:`resource/items/{{ theme }}/bedstand.png`,width:500,height:500,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},84:{type:84,description:`单开门冰箱`,href:`resource/items/{{ theme }}/refrigerator.png`,width:650,height:670,tag:`厨房`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},85:{type:85,description:`沙发组合-5`,href:`resource/items/{{ theme }}/sofa_combination_5.png`,width:1598,height:1418,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},86:{type:86,description:`沙发组合-6`,href:`resource/items/{{ theme }}/sofa_combination_6.png`,width:2680,height:1790,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},87:{type:87,description:`四人餐桌-1`,href:`resource/items/{{ theme }}/table_for_four_1.png`,width:1600,height:1700,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},88:{type:88,description:`小单人沙发`,href:`resource/items/{{ theme }}/chair_2.png`,width:460,height:416,tag:`客厅`,direction:1,keywords:[`default`],themes:[`realsee`],label:!0},89:{type:89,description:`小洗手池`,href:`resource/items/{{ theme }}/sink_small.png`,width:600,height:500,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},90:{type:90,description:`小厨`,href:`resource/items/{{ theme }}/kitchen_small.png`,width:740,height:550,tag:`厨房`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},91:{type:91,description:`小衣柜`,href:`resource/items/{{ theme }}/wardrobe_small.png`,width:910,height:600,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},92:{type:92,description:`淋浴房`,href:`resource/items/{{ theme }}/shower.png`,width:650,height:670,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},93:{type:93,description:`鞋柜-1`,href:`resource/items/{{ theme }}/shoe_cabinet_1.png`,width:900,height:400,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},94:{type:94,description:`鞋柜-2`,href:`resource/items/{{ theme }}/shoe_cabinet_2.png`,width:1500,height:400,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},95:{type:95,description:`鞋柜-3`,href:`resource/items/{{ theme }}/shoe_cabinet_3.png`,width:2e3,height:400,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},96:{type:96,description:`电视柜-1`,href:`resource/items/{{ theme }}/tv_cabinet_1.png`,width:1500,height:350,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},97:{type:97,description:`电视柜-2`,href:`resource/items/{{ theme }}/tv_cabinet_2.png`,width:2040,height:350,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},98:{type:98,description:`电视柜-3`,href:`resource/items/{{ theme }}/tv_cabinet_3.png`,width:3e3,height:350,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},99:{type:99,description:`餐边柜-1`,href:`resource/items/{{ theme }}/sideboard_1.png`,width:900,height:550,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},100:{type:100,description:`餐边柜-2`,href:`resource/items/{{ theme }}/sideboard_2.png`,width:1500,height:550,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},101:{type:101,description:`餐边柜-3`,href:`resource/items/{{ theme }}/sideboard_3.png`,width:2e3,height:550,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},102:{type:102,description:`燃气灶-2`,href:`resource/items/{{ theme }}/gas_stove_2.png`,width:900,height:550,tag:`厨房`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},103:{type:103,description:`洗菜池-2`,href:`resource/items/{{ theme }}/vegetable_washing_pool_2.png`,width:900,height:550,tag:`厨房`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},104:{type:104,description:`橱柜-1`,href:`resource/items/{{ theme }}/kitchen_cabinet_1.png`,width:550,height:550,tag:`厨房`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},105:{type:105,description:`橱柜-2`,href:`resource/items/{{ theme }}/kitchen_cabinet_2.png`,width:900,height:550,tag:`厨房`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},106:{type:106,description:`花洒`,href:`resource/items/{{ theme }}/shower_head.png`,width:260,height:200,tag:`卫生间`,direction:1,keywords:[`default`],themes:[`realsee`],label:!0},107:{type:107,description:`淋浴屏`,href:`resource/items/{{ theme }}/shower_panel.png`,width:1500,height:100,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},108:{type:108,description:`洗衣机-2`,href:`resource/items/{{ theme }}/washing_machine_2.png`,width:600,height:500,tag:`卫生间`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},109:{type:109,description:`双人床-5`,href:`resource/items/{{ theme }}/double_5.png`,width:1500,height:2e3,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},110:{type:110,description:`双人床-6`,href:`resource/items/{{ theme }}/double_6.png`,width:1800,height:2e3,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},111:{type:111,description:`双人床-7`,href:`resource/items/{{ theme }}/double_7.png`,width:2e3,height:2200,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},112:{type:112,description:`双人床-8`,href:`resource/items/{{ theme }}/double_8.png`,width:2300,height:2200,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},113:{type:113,description:`梳妆台`,href:`resource/items/{{ theme }}/dressing_table.png`,width:1200,height:900,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},114:{type:114,description:`儿童床-1`,href:`resource/items/{{ theme }}/children_bed_1.png`,width:1400,height:2e3,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},115:{type:115,description:`儿童床-2`,href:`resource/items/{{ theme }}/children_bed_2.png`,width:1700,height:2e3,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},116:{type:116,description:`儿童床-3`,href:`resource/items/{{ theme }}/children_bed_3.png`,width:2e3,height:2200,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},117:{type:117,description:`儿童书桌-1`,href:`resource/items/{{ theme }}/children_desk_1.png`,width:1e3,height:800,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},118:{type:118,description:`儿童书桌-2`,href:`resource/items/{{ theme }}/children_desk_2.png`,width:1200,height:800,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},119:{type:119,description:`儿童书桌-3`,href:`resource/items/{{ theme }}/children_desk_3.png`,width:1500,height:800,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},120:{type:120,description:`儿童活动区域-1`,href:`resource/items/{{ theme }}/children_carpet_1.png`,width:600,height:600,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},121:{type:121,description:`儿童活动区域-2`,href:`resource/items/{{ theme }}/children_carpet_2.png`,width:1200,height:1200,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},122:{type:122,description:`儿童活动区域-3`,href:`resource/items/{{ theme }}/children_carpet_3.png`,width:1800,height:1800,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},123:{type:123,description:`茶榻组合-1`,href:`resource/items/{{ theme }}/tea_table_combination_1.png`,width:2e3,height:1400,tag:`其他`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},124:{type:124,description:`茶榻组合-2`,href:`resource/items/{{ theme }}/tea_table_combination_2.png`,width:2500,height:1400,tag:`其他`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},125:{type:125,description:`茶榻组合-3`,href:`resource/items/{{ theme }}/tea_table_combination_3.png`,width:3e3,height:1800,tag:`其他`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},126:{type:126,description:`儿童衣柜-1`,href:`resource/items/{{ theme }}/children_wardrobe_1.png`,width:900,height:500,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},127:{type:127,description:`儿童衣柜-2`,href:`resource/items/{{ theme }}/children_wardrobe_2.png`,width:1200,height:500,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},128:{type:128,description:`儿童衣柜-3`,href:`resource/items/{{ theme }}/children_wardrobe_3.png`,width:1500,height:500,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},129:{type:129,description:`儿童书柜-1`,href:`resource/items/{{ theme }}/children_bookcase_1.png`,width:800,height:450,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},130:{type:130,description:`儿童书柜-2`,href:`resource/items/{{ theme }}/children_bookcase_2.png`,width:1200,height:450,tag:`卧室`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},131:{type:131,description:`折行双跑楼梯`,href:`resource/items/{{ theme }}/folding_double_running_stairs.png`,width:3e3,height:3e3,tag:`楼梯`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},132:{type:132,description:`平行双跑楼梯`,href:`resource/items/{{ theme }}/parallel_double_running_stairs.png`,width:2500,height:3600,tag:`楼梯`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},133:{type:133,description:`折行三跑楼梯`,href:`resource/items/{{ theme }}/folding_treble_running_stairs.png`,width:4300,height:2700,tag:`楼梯`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!0},134:{type:134,description:`手枪`,href:`resource/items/{{ theme }}/pistol.png`,width:500,height:500,tag:`物证痕迹`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!1},135:{type:135,description:`血迹`,href:`resource/items/{{ theme }}/bloodstain.png`,width:500,height:500,tag:`物证痕迹`,direction:2,keywords:[`default`],themes:[`legacy`,`realsee`],label:!1},136:{type:136,description:`手印`,href:`resource/items/{{ theme }}/handprint.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`legacy`,`realsee`],label:!1},137:{type:137,description:`足迹`,href:`resource/items/{{ theme }}/footprint.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`legacy`,`realsee`],label:!1},138:{type:138,description:`车轮轨迹`,href:`resource/items/{{ theme }}/wheelprint.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`legacy`,`realsee`],label:!1},139:{type:139,description:`弹头`,href:`resource/items/{{ theme }}/bullet.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`legacy`,`realsee`],label:!1},140:{type:140,description:`弹壳`,href:`resource/items/{{ theme }}/shell.png`,width:500,height:500,tag:`物证痕迹`,direction:1,keywords:[`default`],themes:[`legacy`,`realsee`],label:!1},141:{type:141,description:`尸体`,href:`resource/items/{{ theme }}/corpse.png`,width:1500,height:1500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`legacy`,`realsee`],label:!1},142:{type:142,description:`空气净化器`,href:`resource/items/{{ theme }}/airscrubber.png`,width:580,height:380,tag:`其他`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},143:{type:143,description:`吹风机`,href:`resource/items/{{ theme }}/airblower.png`,width:640,height:600,tag:`其他`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},144:{type:144,description:`除湿器`,href:`resource/items/{{ theme }}/dehumidifier.png`,width:480,height:430,tag:`其他`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},145:{type:145,description:`冰柜`,href:`resource/items/{{ theme }}/freezer.png`,width:800,height:460,tag:`厨房`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},146:{type:146,description:`架子`,href:`resource/items/{{ theme }}/shelf.png`,width:1e3,height:380,tag:`其他`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},147:{type:147,description:`杂物`,href:`resource/items/{{ theme }}/sundries.png`,width:800,height:800,tag:`其他`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},148:{type:148,description:`L型沙发`,href:`resource/items/{{ theme }}/L_sofa.png`,width:3500,height:1800,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},149:{type:149,description:`书桌3`,href:`resource/items/{{ theme }}/desk_3.png`,width:1200,height:680,tag:`书房`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},150:{type:150,description:`会议桌-1`,href:`resource/items/{{ theme }}/conference_table_1.png`,width:1600,height:1100,tag:`客厅`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},151:{type:151,description:`衣架`,href:`resource/items/{{ theme }}/coat_hanger.png`,width:1200,height:400,tag:`卧室`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},152:{type:152,description:`上下铺`,href:`resource/items/{{ theme }}/bunk_beds.png`,width:2e3,height:1040,tag:`卧室`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},153:{type:153,description:`蹲坑`,href:`resource/items/{{ theme }}/squatting.png`,width:600,height:480,tag:`卫生间`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},154:{type:154,description:`男尸`,href:`resource/items/{{ theme }}/male_corpse.png`,width:1600,height:800,tag:`物证痕迹`,direction:1,keywords:[`default`],themes:[`realsee`],label:!1},155:{type:155,description:`女尸`,href:`resource/items/{{ theme }}/female_corpse.png`,width:1500,height:800,tag:`物证痕迹`,direction:1,keywords:[`default`],themes:[`realsee`],label:!1},156:{type:156,description:`擦蹭状血迹`,href:`resource/items/{{ theme }}/rub-like-bookd-stains.png`,width:1200,height:800,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},157:{type:157,description:`擦拭物`,href:`resource/items/{{ theme }}/wipes.png`,width:300,height:60,tag:`物证痕迹`,direction:3,keywords:[`default`],themes:[`realsee`],label:!1},158:{type:158,description:`纸团`,href:`resource/items/{{ theme }}/paper_ball.png`,width:400,height:400,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},159:{type:159,description:`未整理的被子`,href:`resource/items/{{ theme }}/unarranged_quilts.png`,width:800,height:500,tag:`其他`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},160:{type:160,description:`手机`,href:`resource/items/{{ theme }}/mobile_phone.png`,width:400,height:280,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},161:{type:161,description:`菜刀`,href:`resource/items/{{ theme }}/kitchen_knife.png`,width:500,height:220,tag:`物证痕迹`,direction:3,keywords:[`default`],themes:[`realsee`],label:!1},162:{type:162,description:`矩形`,href:`resource/items/{{ theme }}/rectangle.png`,width:900,height:600,tag:`自定义`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0,svgWidth:90,svgHeight:60,svg:`<rect x=".75" y=".75" width="88.5" height="58.5" rx="4" fill="#FFF" stroke="#3D404E" fill-rule="evenodd" vector-effect="non-scaling-stroke"/>`},163:{type:163,description:`圆形`,href:`resource/items/{{ theme }}/circle.png`,width:600,height:600,tag:`自定义`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},164:{type:164,description:`三角形`,href:`resource/items/{{ theme }}/triangle.png`,width:600,height:600,tag:`自定义`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},165:{type:165,description:`五角星形`,href:`resource/items/{{ theme }}/five_pointedstar.png`,width:800,height:800,tag:`自定义`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},166:{type:166,description:`会议桌-2`,href:`resource/items/{{ theme }}/conference_table_2.png`,width:2800,height:1800,tag:`客厅`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},167:{type:167,description:`餐椅`,href:`resource/items/{{ theme }}/dining_chair.png`,width:500,height:580,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},168:{type:168,description:`转椅-1`,href:`resource/items/{{ theme }}/rotating_chair_1.png`,width:500,height:580,tag:`书房`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},169:{type:169,description:`转椅-2`,href:`resource/items/{{ theme }}/rotating_chair_2.png`,width:640,height:640,tag:`书房`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},170:{type:170,description:`长方形茶几`,href:`resource/items/{{ theme }}/rectangular_coffee_table.png`,width:1090,height:800,tag:`客厅`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},171:{type:171,description:`抽油烟机`,href:`resource/items/{{ theme }}/smoke_lampblack_machine.png`,width:1200,height:800,tag:`厨房`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},172:{type:172,description:`电话机`,href:`resource/items/{{ theme }}/telephone.png`,width:500,height:500,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},173:{type:173,description:`对讲机`,href:`resource/items/{{ theme }}/walkie_talkie.png`,width:240,height:540,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},174:{type:174,description:`花盆`,href:`resource/items/{{ theme }}/flower_pot.png`,width:500,height:500,tag:`其他`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},175:{type:175,description:`剪刀`,href:`resource/items/{{ theme }}/scissors.png`,width:500,height:460,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},176:{type:176,description:`角柜`,href:`resource/items/{{ theme }}/corner_cabinet.png`,width:1e3,height:1e3,tag:`其他`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},177:{type:177,description:`口杯`,href:`resource/items/{{ theme }}/mouth_cup.png`,width:500,height:400,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},178:{type:178,description:`盘子`,href:`resource/items/{{ theme }}/plate.png`,width:500,height:500,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},179:{type:179,description:`勺子`,href:`resource/items/{{ theme }}/spoon.png`,width:600,height:180,tag:`日常用品`,direction:1,keywords:[`default`],themes:[`realsee`],label:!1},180:{type:180,description:`手提包`,href:`resource/items/{{ theme }}/handbag.png`,width:500,height:500,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},181:{type:181,description:`双人沙发`,href:`resource/items/{{ theme }}/double_sofa.png`,width:1600,height:850,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},182:{type:182,description:`藤椅`,href:`resource/items/{{ theme }}/cane_chair.png`,width:640,height:640,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!0},183:{type:183,description:`拖把`,href:`resource/items/{{ theme }}/mop.png`,width:490,height:1e3,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},184:{type:184,description:`卫生纸`,href:`resource/items/{{ theme }}/toilet_paper.png`,width:280,height:300,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},185:{type:185,description:`烟盒`,href:`resource/items/{{ theme }}/cigarette_case.png`,width:220,height:300,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},186:{type:186,description:`烟头`,href:`resource/items/{{ theme }}/cigarette_butt.png`,width:280,height:220,tag:`日常用品`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},187:{type:187,description:`鱼缸`,href:`resource/items/{{ theme }}/fish_tank.png`,width:1e3,height:500,tag:`客厅`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},188:{type:188,description:`笔记本电脑`,href:`resource/items/{{ theme }}/notebook_computer.png`,width:500,height:500,tag:`日常用品`,direction:2,keywords:[`default`],themes:[`realsee`],label:!1},189:{type:189,description:`微波炉`,href:`resource/items/{{ theme }}/microwave_oven.png`,width:600,height:400,tag:`厨房`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},190:{type:190,description:`断口`,href:`resource/items/{{ theme }}/fracture.png`,width:1200,height:300,tag:`其他`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},191:{type:191,description:`遗物堆`,href:`resource/items/{{ theme }}/relic_pile.png`,width:800,height:800,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},192:{type:192,description:`衣物`,href:`resource/items/{{ theme }}/clothing.png`,width:830,height:810,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},193:{type:193,description:`浴巾`,href:`resource/items/{{ theme }}/bath_towel.png`,width:420,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},194:{type:194,description:`水渍`,href:`resource/items/{{ theme }}/water_stains.png`,width:1070,height:600,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},195:{type:195,description:`螺丝刀`,href:`resource/items/{{ theme }}/bolt_driver.png`,width:300,height:300,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},196:{type:196,description:`凉鞋`,href:`resource/items/{{ theme }}/sandals.png`,width:430,height:460,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},197:{type:197,description:`水果刀`,href:`resource/items/{{ theme }}/fruit_knife.png`,width:300,height:260,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},198:{type:198,description:`匕首`,href:`resource/items/{{ theme }}/dragger.png`,width:400,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},199:{type:199,description:`玻璃弹孔`,href:`resource/items/{{ theme }}/glass_bullet_hole.png`,width:1160,height:1e3,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},200:{type:200,description:`电视`,href:`resource/items/{{ theme }}/tv.png`,width:1120,height:160,tag:`客厅`,direction:2,keywords:[`default`],themes:[`realsee`],label:!1},201:{type:201,description:`单向楼梯`,href:`resource/items/{{ theme }}/stairs.png`,width:1400,height:3600,tag:`楼梯`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},202:{type:202,description:`电脑`,href:`resource/items/{{ theme }}/computer.png`,width:700,height:120,tag:`书房`,direction:2,keywords:[`default`],themes:[`realsee`],label:!1},203:{type:203,description:`工具`,href:`resource/items/{{ theme }}/tool.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},204:{type:204,description:`特殊`,href:`resource/items/{{ theme }}/special.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},205:{type:205,description:`生物`,href:`resource/items/{{ theme }}/biology.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},206:{type:206,description:`毒化`,href:`resource/items/{{ theme }}/poison.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},207:{type:207,description:`理化`,href:`resource/items/{{ theme }}/physics&chemistry.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},208:{type:208,description:`文检`,href:`resource/items/{{ theme }}/document.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},209:{type:209,description:`电子`,href:`resource/items/{{ theme }}/electronic.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},210:{type:210,description:`人像`,href:`resource/items/{{ theme }}/portrait.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},211:{type:211,description:`提取物品`,href:`resource/items/{{ theme }}/extract_items.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},212:{type:212,description:`左脚足迹`,href:`resource/items/{{ theme }}/footprint_l.png`,width:220,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},213:{type:213,description:`右脚足迹`,href:`resource/items/{{ theme }}/footprint_r.png`,width:220,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},214:{type:214,description:`电动车`,href:`resource/items/{{ theme }}/electric_car.png`,width:480,height:1320,tag:`交通工具`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},215:{type:215,description:`自行车`,href:`resource/items/{{ theme }}/bike.png`,width:380,height:1480,tag:`交通工具`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},216:{type:216,description:`摩托车`,href:`resource/items/{{ theme }}/motorcycle.png`,width:500,height:1780,tag:`交通工具`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},217:{type:217,description:`越野车`,href:`resource/items/{{ theme }}/off_road_vehicle.png`,width:1700,height:4360,tag:`交通工具`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},218:{type:218,description:`卡车`,href:`resource/items/{{ theme }}/truck.png`,width:1880,height:6800,tag:`交通工具`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},219:{type:219,description:`客车`,href:`resource/items/{{ theme }}/bus.png`,width:3160,height:8e3,tag:`交通工具`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},220:{type:220,description:`叉车`,href:`resource/items/{{ theme }}/forklift.png`,width:940,height:2720,tag:`交通工具`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},221:{type:221,description:`拖拉机`,href:`resource/items/{{ theme }}/tractor.png`,width:1740,height:3060,tag:`交通工具`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},222:{type:222,description:`调压箱(柜)`,href:`resource/items/{{ theme }}/a-s.png`,width:1e3,height:800,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},223:{type:223,description:`皮膜表小超`,href:`resource/items/{{ theme }}/a-d.png`,width:300,height:240,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},224:{type:224,description:`气体探测器`,href:`resource/items/{{ theme }}/a-f.png`,width:340,height:200,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},225:{type:225,description:`报警控制器`,href:`resource/items/{{ theme }}/a-g.png`,width:450,height:270,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},226:{type:226,description:`球阀(螺纹)`,href:`resource/items/{{ theme }}/a-h.png`,width:500,height:250,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},227:{type:227,description:`球阀(法兰)`,href:`resource/items/{{ theme }}/a-j.png`,width:710,height:350,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},228:{type:228,description:`单气火嘴`,href:`resource/items/{{ theme }}/a-k.png`,width:320,height:160,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},229:{type:229,description:`三门蒸箱`,href:`resource/items/{{ theme }}/a-l.png`,width:900,height:850,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},230:{type:230,description:`电磁阀`,href:`resource/items/{{ theme }}/a-q.png`,width:510,height:450,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},231:{type:231,description:`压力表`,href:`resource/items/{{ theme }}/a-w.png`,width:300,height:300,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},232:{type:232,description:`PE球阀`,href:`resource/items/{{ theme }}/a-e.png`,width:300,height:300,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},233:{type:233,description:`家用燃气灶`,href:`resource/items/{{ theme }}/a-r.png`,width:600,height:400,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},234:{type:234,description:`双眼大锅灶`,href:`resource/items/{{ theme }}/a-t.png`,width:2200,height:1200,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},235:{type:235,description:`单眼大锅灶`,href:`resource/items/{{ theme }}/a-y.png`,width:1200,height:1200,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},236:{type:236,description:`四眼强力灶`,href:`resource/items/{{ theme }}/a-u.png`,width:900,height:500,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},237:{type:237,description:`单眼强力灶`,href:`resource/items/{{ theme }}/a-i.png`,width:460,height:460,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},238:{type:238,description:`双眼蒸灶`,href:`resource/items/{{ theme }}/a-o.png`,width:1500,height:800,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},239:{type:239,description:`单眼蒸灶`,href:`resource/items/{{ theme }}/a-p.png`,width:1e3,height:1e3,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},240:{type:240,description:`四眼煲仔炉`,href:`resource/items/{{ theme }}/q-w.png`,width:800,height:750,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},241:{type:241,description:`八眼煲仔炉`,href:`resource/items/{{ theme }}/q-e.png`,width:1450,height:750,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},242:{type:242,description:`六眼煲仔炉`,href:`resource/items/{{ theme }}/q-r.png`,width:1100,height:850,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},243:{type:243,description:`双眼矮汤炉`,href:`resource/items/{{ theme }}/q-t.png`,width:1200,height:650,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},244:{type:244,description:`单眼矮汤炉`,href:`resource/items/{{ theme }}/q-y.png`,width:700,height:700,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},245:{type:245,description:`单门蒸饭车`,href:`resource/items/{{ theme }}/q-u.png`,width:600,height:800,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},246:{type:246,description:`双门蒸饭车`,href:`resource/items/{{ theme }}/q-i.png`,width:520,height:550,tag:`燃气`,direction:0,keywords:[`default`],themes:[`realsee`],label:!0},247:{type:247,description:`右手手印`,href:`resource/items/{{ theme }}/right_handprint.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},248:{type:248,description:`指纹`,href:`resource/items/{{ theme }}/fingerprint.png`,width:400,height:400,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},249:{type:249,description:`血指纹`,href:`resource/items/{{ theme }}/bloody_fingerprint.png`,width:400,height:400,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},250:{type:250,description:`手套`,href:`resource/items/{{ theme }}/glove.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},251:{type:251,description:`血手套`,href:`resource/items/{{ theme }}/bloody_glove.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},252:{type:252,description:`赤足印`,href:`resource/items/{{ theme }}/barefoot_print.png`,width:220,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},253:{type:253,description:`水脚印`,href:`resource/items/{{ theme }}/water_footprint.png`,width:220,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},254:{type:254,description:`血脚印`,href:`resource/items/{{ theme }}/bloody_footprint.png`,width:220,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},255:{type:255,description:`残缺鞋掌印`,href:`resource/items/{{ theme }}/shoe_sole_print.png`,width:220,height:300,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},256:{type:256,description:`残缺鞋跟印`,href:`resource/items/{{ theme }}/heel_print.png`,width:220,height:200,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},257:{type:257,description:`狗蹄印`,href:`resource/items/{{ theme }}/dog_hoof_print.png`,width:300,height:300,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},258:{type:258,description:`流淌血迹`,href:`resource/items/{{ theme }}/flowing_blood.png`,width:760,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},259:{type:259,description:`行进血迹`,href:`resource/items/{{ theme }}/traveling_blood.png`,width:610,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},260:{type:260,description:`滴落血迹`,href:`resource/items/{{ theme }}/dripping_blood.png`,width:500,height:500,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},261:{type:261,description:`喷溅血迹`,href:`resource/items/{{ theme }}/splashing_blood.png`,width:800,height:800,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1},262:{type:262,description:`血泊`,href:`resource/items/{{ theme }}/pond_of_blood.png`,width:810,height:800,tag:`物证痕迹`,direction:0,keywords:[`default`],themes:[`realsee`],label:!1}},$k=function(e){function t(e,n){var r;return CE(this,t),r=SE(this,t),r.x=e,r.y=n,r.notes=``,r.comment=``,r.textWriteMode=`horizontal`,r.locked=!1,r.width=1,r.height=1,r.rotateZ=0,r.rotateX=!1,r.rotateY=!1,r.area=null,r}return jE(t,e),EE(t,[{key:`getPointAt`,value:function(){var e=this.x,t=this.y,n=this.rotateZ/180*Math.PI,r=this.width/2,i=this.height/2;return[{x:e-r,y:t+i},{x:e+r,y:t+i},{x:e+r,y:t-i},{x:e-r,y:t-i}].map(function(r){return uk(r,{x:e,y:t},n)})}},{key:`getAreaId`,value:function(){var e=this.canvas.areas,t=null,n=DE(e),r;try{for(n.s();!(r=n.n()).done;){var i=r.value;if(i.isPointInArea({x:this.x,y:this.y})){t=i.id;break}}}catch(e){n.e(e)}finally{n.f()}return t}}])}(jk);$k.displayName=$k.prototype.displayName=`Item`,$k.propTypes={x:`number`,y:`number`,notes:`string`,comment:`string`,textWriteMode:`string`,locked:`boolean`,width:`number`,height:`number`,rotateZ:`number`,rotateX:`boolean`,rotateY:`boolean`},$k.storeTypes={x:`value`,y:`value`,notes:`value`,comment:`value`,textWriteMode:`value`,locked:`value`,width:`value`,height:`value`,rotateZ:`value`,rotateX:`value`,rotateY:`value`,area:function(e){return e.getAreaId()}};var eA=function(e){function t(e,n){var r,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(CE(this,t),r=SE(this,t,[e,n]),HO(r,{type:0},i),i.width===void 0||i.height===void 0){var a=Qk[r.type];r.width=a.width,r.height=a.height}return r}return jE(t,e),EE(t)}($k);eA.displayName=eA.prototype.displayName=`Item-SimpleItem`,eA.propTypes=HO({type:[`number`,`string`]},$k.propTypes),eA.storeTypes=HO({type:`value`},$k.storeTypes),eA.types=Qk;var tA=function(e){function t(e,n){var r,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(this,t),r=SE(this,t,[e,n]),HO(r,i),r}return jE(t,e),EE(t)}($k);tA.displayName=tA.prototype.displayName=`Item-StairsItem`,tA.propTypes=HO({},$k.propTypes),tA.storeTypes=HO({},$k.storeTypes),tA.defaultSize={width:1e3,height:1e3};var nA=function(e){function t(e,n){var r,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(this,t),r=SE(this,t,[e,n]),HO(r,{range:.8},i),r}return jE(t,e),EE(t)}($k);nA.displayName=nA.prototype.displayName=`Item-CircularStairsItem`,nA.propTypes=HO({range:`number`},$k.propTypes),nA.storeTypes=HO({range:`value`},$k.storeTypes),nA.defaultSize={width:2e3,height:2e3};var rA=function(e){function t(e,n){var r,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(this,t),r=SE(this,t,[e,n]),HO(r,i),r}return jE(t,e),EE(t)}($k);rA.displayName=`Item-PillarItem`,rA.prototype.displayName=`Item-PillarItem`,rA.propTypes=HO({},$k.propTypes),rA.storeTypes=HO({},$k.storeTypes),rA.defaultSize={width:600,height:600};var iA=function(e){function t(e,n){var r,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(this,t),r=SE(this,t,[e,n]),HO(r,{depth:300},i),r}return jE(t,e),EE(t,[{key:`redraw`,value:function(){var e=this,t={x:this.x,y:this.y},n=zE(this.canvas.areas.filter(function(t){return t.isPointInArea(e)}),1)[0];if(n){var r=n.innerPath(),i=this.width<this.height?`height`:`width`,a,o;i===`width`?(a=Math.cos(this.rotateZ/180*Math.PI)*this.width/2,o=-Math.sin(this.rotateZ/180*Math.PI)*this.width/2):(a=Math.sin(this.rotateZ/180*Math.PI)*this.height/2,o=Math.cos(this.rotateZ/180*Math.PI)*this.height/2);for(var s=[{x:t.x+a,y:t.y+o},{x:t.x-a,y:t.y-o}],c=[],l=0;l<r.length-1;l++){var u=[r[l],r[l+1]],d=ak(s,u,!1);d&&nk(d,u)<.01&&c.push(d)}c.push(t),c.sort(function(e,t){var n=Math.abs(a)>.01?`x`:`y`;return e[n]-t[n]});var f=c.indexOf(t),p=c[f-1],m=c[f+1];if(p&&m){var h=dk([p,m]);t.x=h.x,t.y=h.y,this.set(i,$(p,m))}}this.set(`x`,t.x),this.set(`y`,t.y)}}])}($k);iA.displayName=`Item-BeamItem`,iA.prototype.displayName=`Item-BeamItem`,iA.propTypes=HO({depth:`number`},$k.propTypes),iA.storeTypes=HO({depth:`value`},$k.storeTypes),iA.defaultSize={width:1500,height:240};var aA=function(e){function t(e,n){var r,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(this,t),r=SE(this,t,[e,n]),HO(r,i),r}return jE(t,e),EE(t)}($k);aA.displayName=`Item-FlueItem`,aA.prototype.displayName=`Item-FlueItem`,aA.propTypes=HO({},$k.propTypes),aA.storeTypes=HO({},$k.storeTypes),aA.defaultSize={width:450,height:300};var oA=function(e){function t(e,n){var r,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(this,t),r=SE(this,t,[e,n]),HO(r,i),r}return jE(t,e),EE(t)}($k);oA.displayName=`Item-DrainItem`,oA.prototype.displayName=`Item-DrainItem`,oA.propTypes=HO({},$k.propTypes),oA.storeTypes=HO({},$k.storeTypes),oA.defaultSize={width:110,height:110};var sA=function(e){function t(e,n){var r,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(this,t),r=SE(this,t,[e,n]),HO(r,i),r}return jE(t,e),EE(t)}($k);sA.displayName=`Item-HeatingPipeItem`,sA.prototype.displayName=`Item-HeatingPipeItem`,sA.propTypes=HO({},$k.propTypes),sA.storeTypes=HO({},$k.storeTypes),sA.defaultSize={width:216,height:100};var cA=function(e){function t(e,n,r){var i,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return CE(this,t),i=SE(this,t),i.x=e,i.y=n,i.locked=!1,i.fontSize=a.fontSize||300,i.content=r||``,i.rotate=a.rotate||0,i.scale=a.scale||1,i.color=a.color||`#000000`,i.borderType=a.borderType||0,i.notes=a.notes||``,i.offsetX=0,i.offsetY=0,i.offsetEnable=!1,i}return jE(t,e),EE(t)}(jk);cA.displayName=cA.prototype.displayName=`Text`,cA.propTypes={x:`number`,y:`number`,locked:`boolean`,fontSize:`number`,rotate:`number`,scale:`number`,content:`string`,color:`string`,borderType:`number`,notes:`string`,offsetX:`number`,offsetY:`number`,offsetEnable:`boolean`},cA.storeTypes={x:`value`,y:`value`,locked:`value`,fontSize:`value`,content:`value`,rotate:`value`,scale:`value`,color:`value`,borderType:`value`,notes:`value`,offsetX:`value`,offsetY:`value`,offsetEnable:`value`};function lA(e,t){for(var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:e.length-1,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:dA;r>n;){if(r-n>600){var a=r-n+1,o=t-n+1,s=Math.log(a),c=.5*Math.exp(2*s/3),l=.5*Math.sqrt(s*c*(a-c)/a)*(o-a/2<0?-1:1);lA(e,t,Math.max(n,Math.floor(t-o*c/a+l)),Math.min(r,Math.floor(t+(a-o)*c/a+l)),i)}var u=e[t],d=n,f=r;for(uA(e,n,t),i(e[r],u)>0&&uA(e,n,r);d<f;){for(uA(e,d,f),d++,f--;i(e[d],u)<0;)d++;for(;i(e[f],u)>0;)f--}i(e[n],u)===0?uA(e,n,f):(f++,uA(e,f,r)),f<=t&&(n=f+1),t<=f&&(r=f-1)}}function uA(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function dA(e,t){return e<t?-1:+(e>t)}var fA=function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:9;CE(this,e),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4)),this.clear()}return EE(e,[{key:`all`,value:function(){return this._all(this.data,[])}},{key:`search`,value:function(e){var t=this.data,n=[];if(!wA(e,t))return n;for(var r=this.toBBox,i=[];t;){for(var a=0;a<t.children.length;a++){var o=t.children[a],s=t.leaf?r(o):o;wA(e,s)&&(t.leaf?n.push(o):CA(e,s)?this._all(o,n):i.push(o))}t=i.pop()}return n}},{key:`collides`,value:function(e){var t=this.data;if(!wA(e,t))return!1;for(var n=[];t;){for(var r=0;r<t.children.length;r++){var i=t.children[r],a=t.leaf?this.toBBox(i):i;if(wA(e,a)){if(t.leaf||CA(e,a))return!0;n.push(i)}}t=n.pop()}return!1}},{key:`load`,value:function(e){if(!(e&&e.length))return this;if(e.length<this._minEntries){for(var t=0;t<e.length;t++)this.insert(e[t]);return this}var n=this._build(e.slice(),0,e.length-1,0);if(!this.data.children.length)this.data=n;else if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){var r=this.data;this.data=n,n=r}this._insert(n,this.data.height-n.height-1,!0)}return this}},{key:`insert`,value:function(e){return e&&this._insert(e,this.data.height-1),this}},{key:`clear`,value:function(){return this.data=TA([]),this}},{key:`remove`,value:function(e,t){if(!e)return this;for(var n=this.data,r=this.toBBox(e),i=[],a=[],o,s,c;n||i.length;){if(n||(n=i.pop(),s=i[i.length-1],o=a.pop(),c=!0),n.leaf){var l=pA(e,n.children,t);if(l!==-1)return n.children.splice(l,1),i.push(n),this._condense(i),this}!c&&!n.leaf&&CA(n,r)?(i.push(n),a.push(o),o=0,s=n,n=n.children[0]):s?(o++,n=s.children[o],c=!1):n=null}return this}},{key:`toBBox`,value:function(e){return e}},{key:`compareMinX`,value:function(e,t){return e.minX-t.minX}},{key:`compareMinY`,value:function(e,t){return e.minY-t.minY}},{key:`toJSON`,value:function(){return this.data}},{key:`fromJSON`,value:function(e){return this.data=e,this}},{key:`_all`,value:function(e,t){for(var n=[];e;)e.leaf?t.push.apply(t,HE(e.children)):n.push.apply(n,HE(e.children)),e=n.pop();return t}},{key:`_build`,value:function(e,t,n,r){var i=n-t+1,a=this._maxEntries,o;if(i<=a)return o=TA(e.slice(t,n+1)),mA(o,this.toBBox),o;r||(r=Math.ceil(Math.log(i)/Math.log(a)),a=Math.ceil(i/Math.pow(a,r-1))),o=TA([]),o.leaf=!1,o.height=r;var s=Math.ceil(i/a),c=s*Math.ceil(Math.sqrt(a));EA(e,t,n,c,this.compareMinX);for(var l=t;l<=n;l+=c){var u=Math.min(l+c-1,n);EA(e,l,u,s,this.compareMinY);for(var d=l;d<=u;d+=s){var f=Math.min(d+s-1,u);o.children.push(this._build(e,d,f,r-1))}}return mA(o,this.toBBox),o}},{key:`_chooseSubtree`,value:function(e,t,n,r){for(;r.push(t),!(t.leaf||r.length-1===n);){for(var i=1/0,a=1/0,o=void 0,s=0;s<t.children.length;s++){var c=t.children[s],l=yA(c),u=xA(e,c)-l;u<a?(a=u,i=l<i?l:i,o=c):u===a&&l<i&&(i=l,o=c)}t=o||t.children[0]}return t}},{key:`_insert`,value:function(e,t,n){var r=n?e:this.toBBox(e),i=[],a=this._chooseSubtree(r,this.data,t,i);for(a.children.push(e),gA(a,r);t>=0&&i[t].children.length>this._maxEntries;)this._split(i,t),t--;this._adjustParentBBoxes(r,i,t)}},{key:`_split`,value:function(e,t){var n=e[t],r=n.children.length,i=this._minEntries;this._chooseSplitAxis(n,i,r);var a=this._chooseSplitIndex(n,i,r),o=TA(n.children.splice(a,n.children.length-a));o.height=n.height,o.leaf=n.leaf,mA(n,this.toBBox),mA(o,this.toBBox),t?e[t-1].children.push(o):this._splitRoot(n,o)}},{key:`_splitRoot`,value:function(e,t){this.data=TA([e,t]),this.data.height=e.height+1,this.data.leaf=!1,mA(this.data,this.toBBox)}},{key:`_chooseSplitIndex`,value:function(e,t,n){for(var r,i=1/0,a=1/0,o=t;o<=n-t;o++){var s=hA(e,0,o,this.toBBox),c=hA(e,o,n,this.toBBox),l=SA(s,c),u=yA(s)+yA(c);l<i?(i=l,r=o,a=u<a?u:a):l===i&&u<a&&(a=u,r=o)}return r||n-t}},{key:`_chooseSplitAxis`,value:function(e,t,n){var r=e.leaf?this.compareMinX:_A,i=e.leaf?this.compareMinY:vA;this._allDistMargin(e,t,n,r)<this._allDistMargin(e,t,n,i)&&e.children.sort(r)}},{key:`_allDistMargin`,value:function(e,t,n,r){e.children.sort(r);for(var i=this.toBBox,a=hA(e,0,t,i),o=hA(e,n-t,n,i),s=bA(a)+bA(o),c=t;c<n-t;c++){var l=e.children[c];gA(a,e.leaf?i(l):l),s+=bA(a)}for(var u=n-t-1;u>=t;u--){var d=e.children[u];gA(o,e.leaf?i(d):d),s+=bA(o)}return s}},{key:`_adjustParentBBoxes`,value:function(e,t,n){for(var r=n;r>=0;r--)gA(t[r],e)}},{key:`_condense`,value:function(e){for(var t=e.length-1,n;t>=0;t--)e[t].children.length===0?t>0?(n=e[t-1].children,n.splice(n.indexOf(e[t]),1)):this.clear():mA(e[t],this.toBBox)}}])}();function pA(e,t,n){if(!n)return t.indexOf(e);for(var r=0;r<t.length;r++)if(n(e,t[r]))return r;return-1}function mA(e,t){hA(e,0,e.children.length,t,e)}function hA(e,t,n,r,i){i||(i=TA(null)),i.minX=1/0,i.minY=1/0,i.maxX=-1/0,i.maxY=-1/0;for(var a=t;a<n;a++){var o=e.children[a];gA(i,e.leaf?r(o):o)}return i}function gA(e,t){return e.minX=Math.min(e.minX,t.minX),e.minY=Math.min(e.minY,t.minY),e.maxX=Math.max(e.maxX,t.maxX),e.maxY=Math.max(e.maxY,t.maxY),e}function _A(e,t){return e.minX-t.minX}function vA(e,t){return e.minY-t.minY}function yA(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function bA(e){return e.maxX-e.minX+(e.maxY-e.minY)}function xA(e,t){return(Math.max(t.maxX,e.maxX)-Math.min(t.minX,e.minX))*(Math.max(t.maxY,e.maxY)-Math.min(t.minY,e.minY))}function SA(e,t){var n=Math.max(e.minX,t.minX),r=Math.max(e.minY,t.minY),i=Math.min(e.maxX,t.maxX),a=Math.min(e.maxY,t.maxY);return Math.max(0,i-n)*Math.max(0,a-r)}function CA(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function wA(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function TA(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function EA(e,t,n,r,i){for(var a=[t,n];a.length;)if(n=a.pop(),t=a.pop(),!(n-t<=r)){var o=t+Math.ceil((n-t)/r/2)*r;lA(e,o,t,n,i),a.push(t,o,o,n)}}function DA(e){return{minX:Math.min(e.points[0].x,e.points[1].x),minY:Math.min(e.points[0].y,e.points[1].y),maxX:Math.max(e.points[0].x,e.points[1].x),maxY:Math.max(e.points[0].y,e.points[1].y),line:e}}function OA(e,t){return e===t.length-1?0:e+1}function kA(e,t){var n=t.points;return ZO(e,n[0])?n[1]:n[0]}var AA={_getArea:function(){var e=[],t={},n={},r={},i=this.points.map(function(e){return{x:e.x,y:e.y,id:e.id}});this.points.forEach(function(e,t){var n=i[t];n.lines=e.lines.map(function(e){return{id:e.id,type:e.type,points:e.points.map(function(e){return i.find(function(t){return t.id===e.id})})}})});for(var a=zE(i.reduce(function(e,t){return t.lines=t.lines.filter(function(e){return!(e.type===7||e.type===8)}),e[+(t.lines.length<2)].push(t),e},[[],[]]),2),o=a[0],s=a[1],c=function(){var e=s.pop(),t=e.lines[0];if(!t)return 0;var n=kA(e,t),r=o.findIndex(function(e){return e.id===n.id});if(r===-1)return 0;var i=n.lines.findIndex(function(t){return!!t.points.find(function(t){return t.id===e.id})});n.lines.splice(i,1),n.lines.length<2&&(o.splice(r,1),s.push(n))};s.length>0;)c();o.forEach(function(e){r[e.id]=[],e.lines.length&&(t[e.id]=[],n[e.id]=[],e.lines.forEach(function(r){var i=kA(e,r);t[e.id].push(i.id),n[e.id].push(i.id)}))});var l=[],u=null,d=null;function f(){if(l.length>1)u=l[l.length-2],d=l[l.length-1];else{if(l.length===0){if(!t||!Object.keys(t).length)return!1;l.push(u=Object.keys(t)[0])}if(l.length===1){if(u=l[l.length-1],!t[u]||!t[u].length)return l.pop(),f();l.push(d=t[u].shift()),t[u].length||delete t[u]}}return!0}for(;Object.keys(t).length&&f();){if(!t[d]){l.pop();continue}var p=n[d].indexOf(u),m=OA(p,n[d]);if(p===m){l.pop();continue}var h=n[d][m],g=t[d].indexOf(h);if(g===-1){n[d].splice(m,1),n[d].length||l.pop();continue}var _=t[d].splice(g,1)[0];t[d].length||delete t[d],_===u?t[d].length?(n[d].splice(m,1),n[d].length||l.pop()):l.pop():l.indexOf(_)===-1?l.push(_):(e.push(l.slice(l.indexOf(_))),l.splice(l.indexOf(_)+1))}return e},_check:function(){this.checkLine(),this.checkPoint(),this.checkArea(),this.checkLineItem(),this.checkProperty()},_mergeLineWhenCheck:function(){for(var e=this,t=HE(this.points),n=!1,r=function(){var r=t[i];if(r.lines.length!==2||r.lines[0].type!==r.lines[1].type||r.lines[0].curve||r.lines[1].curve||r.lines[0].thicknessComputed!==r.lines[1].thicknessComputed)return 0;var a=zE(r.lines.map(function(e){return $O.apply(void 0,HE(e.points))}),2),o=a[0],s=a[1];if(QO(o,s)){var c=zE(r.lines.map(function(e){return e.points.filter(function(e){return e.id!==r.id})[0]}),2),l=c[0],u=c[1];if(l.x>u.x||l.y<u.y){var d=[u,l];l=d[0],u=d[1]}var f=e.newLineWithPoints(l,u),p=zE(r.lines,2),m=p[0],h=p[1];m.items.map(function(e){var t=e.startIndex;e.set(`line`,f),ZO(m.points[t],[l,u][t])||e.set(`start`,e.start+$.apply(void 0,HE(h.points))),f.set(`items`,f.items.concat(e))}),h.items.map(function(e){var t=e.startIndex;e.set(`line`,f),ZO(h.points[t],[l,u][t])||e.set(`start`,e.start+$.apply(void 0,HE(m.points))),f.set(`items`,f.items.concat(e))}),r.lines[0].thickness&&f.set(`thickness`,r.lines[0].thickness),m.set(`items`,[]),h.set(`items`,[]),e.removePoint(r),n=!0}},i=0;i<t.length;i++)r();return this._check(),n},check:function(){var e=this;if(this.emit(`beforeCheck`),this.lines.forEach(function(t){e.lineItems.forEach(function(n){n.line.id===t.id&&t.items.every(function(e){return e.id!==n.id})&&t.items.push(e.getAnyById(n.id))})}),this.mergeLineWhenCheck)for(var t=0;this._mergeLineWhenCheck()&&!(t++>5););else this._check();this.emit(`check`)},checkPoint:function(){if(this.points.length<=1){this.removeAllModels();return}for(var e=[],t=0,n=this.points.length;t<n;t++){var r=this.points[t],i=!1;if(r.lines.length===0){this.removePoint(r),t--,n--;continue}var a=DE(e),o;try{for(a.s();!(o=a.n()).done;){var s=o.value;if(ZO(s,r)){var c=DE(r.lines),l;try{for(c.s();!(l=c.n()).done;){var u=l.value,d=u.points;d[d[0]===r?0:1]=s,d[0]===d[1]?(this.removeLine(u),s.lines.length===0&&(UO(s,this.points),t--,n--,i=!0)):(u.set(`points`,d),s.set(`lines`,s.lines.concat(u)))}}catch(e){c.e(e)}finally{c.f()}UO(r,this.points),t--,n--,i=!0;break}}}catch(e){a.e(e)}finally{a.f()}i||e.push(r)}e.length=0},checkLine:function(){var e=this;if(this.lines.forEach(function(t){if(t.points[0]===t.points[1]){e.removeLine(t);return}if(t.curve){var n=DE(t.items),r;try{for(n.s();!(r=n.n()).done;){var i=r.value;e.removeLineItem(i)}}catch(e){n.e(e)}finally{n.f()}t.set(`items`,[])}}),this.lines.length>1){var t=function(e){var t=DA(e);i.set(e,t),r.insert(t)},n=function(e){var t=i.get(e);t&&(r.remove(t),i.delete(e))},r=new fA,i=new WeakMap;this.lines.forEach(function(e){return t(e)});for(var a=function(r,i){for(var a=r.points,o=i.points,s=0,c=[r,i];s<c.length;s++){var l=c[s];if(ZO(l.points[0],l.points[1]))return e.removeLine(l),n(l),!1}var u=[ZO(a[0],o[0])&&ZO(a[1],o[1]),ZO(a[0],o[1])&&ZO(a[1],o[0])];if(u[0]||u[1]){var d=DE(i.items),f;try{for(d.s();!(f=d.n()).done;){var p=f.value;u[0]===!1&&p.set(`startIndex`,+(p.startIndex===0)),p.set(`line`,r)}}catch(e){d.e(e)}finally{d.f()}return e.removeLine(i),n(i),!1}var m=$O(a[0],a[1]),h=$O(o[0],o[1]),g=ZO(a[0],o[0])?$O(a[1],o[0]):$O(a[0],o[0]),_=Math.abs(Math.atan(m))<Math.PI/4?`x`:`y`;if(QO(m,h)&&QO(h,g)&&((a[0][_]-o[0][_])*(a[1][_]-o[0][_])<0||(a[0][_]-o[1][_])*(a[1][_]-o[1][_])<0||(o[0][_]-a[0][_])*(o[1][_]-a[0][_])<0||(o[0][_]-a[1][_])*(o[1][_]-a[1][_])<0)){var v=a.concat(o).sort(function(e,t){return e[_]-t[_]}),y=[].concat(r.items,i.items);y=y.map(function(e){return{startPointAt:e.startPointAt(),endPointAt:e.endPointAt(),lineItem:e,received:!1}});var b=[];return v.forEach(function(n,a){var o=v[a+1];if(o){var s=e.newLine(n,o);t(s);for(var c=function(){var e=u[l],t={type:e.type,thickness:e.thickness,height:e.height,curve:e.curve,isLoadBearing:e.isLoadBearing,isSplitArea:e.isSplitArea};if(s.points.every(function(t){return ck(t,e.points)}))return Object.assign(s,t),1},l=0,u=[i,r];l<u.length&&!c();l++);b.push(s)}}),e.removeLine(i),e.removeLine(r),n(i),n(r),y.forEach(function(t){var n=t.startPointAt,r=t.endPointAt,i=t.lineItem;b.forEach(function(a){if(!t.received&&a.isPointOnLine(n)&&a.isPointOnLine(r)){var o=zE(a.points,2),s=o[0],c=o[1],l=s.distanceFromPoint(n);s.distanceFromPoint(r)>l?(i.set(`startIndex`,0),i.set(`start`,l)):(i.set(`startIndex`,1),i.set(`start`,c.distanceFromPoint(n))),a.set(`items`,a.items.concat(i)),i.set(`line`,a),e.lineItems.push(i),t.received=!0}})}),!1}var x=ak(a,o,!0),S=x&&(ZO(x,a[0])||ZO(x,a[1]))&&(ZO(x,o[0])||ZO(x,o[1]));if(x&&!S){var C=[].concat(r.items,i.items);C=C.map(function(e){return{startPointAt:e.startPointAt(),endPointAt:e.endPointAt(),lineItem:e,received:!1}});for(var ee=[],te=0,ne=[r,i];te<ne.length;te++){var w=ne[te];e.newPoint(x.x,x.y);var re={type:w.type,thickness:w.thickness,height:w.height,curve:w.curve,isLoadBearing:w.isLoadBearing,isSplitArea:w.isSplitArea};ZO(x,w.points[0])||ZO(x,w.points[1])||(ee.push(Object.assign(e.newLine(x,w.points[0]),re),Object.assign(e.newLine(x,w.points[1]),re)),e.removeLine(w),n(w))}return ee.forEach(function(e){return t(e)}),C.forEach(function(t){var n=t.startPointAt,r=t.endPointAt,i=t.lineItem;ee.forEach(function(a){if(!t.received&&a.isPointOnLine(n)&&a.isPointOnLine(r)){var o=zE(a.points,2),s=o[0],c=o[1],l=s.distanceFromPoint(n);s.distanceFromPoint(r)>l?(i.set(`startIndex`,0),i.set(`start`,l)):(i.set(`startIndex`,1),i.set(`start`,c.distanceFromPoint(n))),a.set(`items`,a.items.concat(i)),i.set(`line`,a),e.lineItems.push(i),t.received=!0}})}),!1}},o=!1,s=new Set,c=0;!o&&c<1e3;){o=!0;var l=DE(this.lines),u;try{outer:for(l.s();!(u=l.n()).done;){var d=u.value;if(!s.has(d.id)){var f=DE(r.search(i.get(d)).map(function(e){return e.line})),p;try{for(f.s();!(p=f.n()).done;){var m=p.value;if(m!==d&&!s.has(d.id)&&a(d,m)===!1){o=!1,c++;break outer}}}catch(e){f.e(e)}finally{f.f()}s.add(d.id)}}}catch(e){l.e(e)}finally{l.f()}}}this.lines.forEach(function(e){var t=e.points,n=!1;Math.abs(t[0].x-t[1].x)>.01?t[0].x>t[1].x&&(e.points=[t[1],t[0]],n=!0):t[0].y<t[1].y&&(e.points=[t[1],t[0]],n=!0),n&&(e.align===1?e.align=2:e.align===2&&(e.align=1),e.curve=-e.curve,e.items.forEach(function(t){t.start=e.length()-t.start-t.length,t.rotateX=!t.rotateX,t.rotateY=!t.rotateY}))})},checkArea:function(){var e=this;if(this.points.length!==0){this.points.forEach(function(e){return e.sortLinesClickWise()});var t;try{t=this._getArea()}catch(e){console.log(e),t=[]}var n=[];t.forEach(function(t){var r=t.map(function(t){return e.getPointById(t)});gk(r)&&n.push(r)});var r=this.areas.slice();return this.areas.length=0,r.forEach(function(t,i){var a={};t.points.forEach(function(e){return a[e.id]=!0});var o=zE(KO(n,function(e){return e.filter(function(e){return a[e.id]===!0}).length}),2),s=o[0];o[1]>2&&(t.set(`points`,s),e.areas.push(t),UO(s,n),r[i]=void 0)}),n.forEach(function(t){return e.newArea(t)}),this.sortAreas(),r.forEach(function(e){e&&(e.set(`points`,[]),delete e.canvas)}),t}},checkLineItem:function(){var e=this;this.lineItems.slice().forEach(function(t){t.line||e.removeLineItem(t)}),this.lines.forEach(function(e){e.items.forEach(function(t){return t.set(`line`,e)})});var t=[];this.lineItems.forEach(function(e){var n=e.line.points[e.startIndex],r=e.line,i=zE(e.limitePointRange(),2),a=i[0],o=i[1],s=$(a,o);if(Math.round(s)<Math.round(r.getThickness())){t.push(e);return}$(o,n)<e.start+e.length&&(s>=e.length?e.set(`start`,$(o,n)-e.length):(e.set(`start`,$(n,a)),e.set(`length`,s)))}),t.forEach(function(t){e.removeLineItem(t)})},checkProperty:function(){var e=this,t;try{t=this._getArea()}catch(e){t=[]}this.lines.forEach(function(e){e.set(`edgeComputed`,!1),e.set(`thicknessComputed`,120),e.set(`offsetComputed`,0)}),t.forEach(function(t){var n=t.map(function(t){return e.getPointById(t)});gk(n)||n.forEach(function(t,r){var i=n[r+1]||n[0],a=e.getLineByPoints(t,i);if(a){a.set(`edgeComputed`,!0),a.set(`thicknessComputed`,240);var o=a.points[1],s=a.points[0];t===o&&i===s?a.set(`offsetComputed`,a.thicknessComputed/2-60):a.set(`offsetComputed`,-a.thicknessComputed/2+60)}})}),this.lines.map(function(e){e.points,e.thickness!==null&&e.set(`thicknessComputed`,e.thickness),e.offset!==void 0&&e.offset!==null&&e.set(`offsetComputed`,e.offset)})}},jA=[`points`,`lines`,`areas`,`lineItems`,`items`,`texts`],MA={Point:Pk,Line:Fk,Area:Bk,LineItem:Zk,"Item-SimpleItem":eA,"Item-StairsItem":tA,"Item-CircularStairsItem":nA,"Item-PillarItem":rA,"Item-BeamItem":iA,"Item-FlueItem":aA,"Item-DrainItem":oA,"Item-HeatingPipeItem":sA,Text:cA};function NA(e,t){return BO(e.constructor.storeTypes,function(n,r){if(RO(n)===`function`)return t.skipCalculation?void 0:n(e);switch(n){case`value`:return zO(e[r]);case`idArray`:return e[r].map(function(e){return e.id});case`id`:return e[r].id;default:return}})}function PA(e,t,n){BO(e.constructor.storeTypes,function(r,i){var a=function(t){var n=e.constructor.propTypes[i];return n?[].concat(n).some(function(e){return RO(t)===e}):!0},o;switch(r){case`value`:o=t[i];break;case`idArray`:o=t[i].map(function(e){return n[e]}).filter(function(e){return!!e});break;case`id`:o=n[t[i]];break;default:return}a(o)&&(e[i]=o),e.check&&e.check(t)})}var FA={save:function(e){var t=this,n={};return jA.forEach(function(r){n[r]=t[r].map(function(n){return HO(NA(n,e||t.constructor.saveOptions),{displayName:n.constructor.displayName,id:n.id})})}),n.info=HO({},this.info),n.templates=this.templates,n},load:function(e){var t=this;this.removeAllModels(),this.sizeCache={},this.areaRelationCache={},this.info=HO({},e.info),this.info.height=this.info.height||0,this.info.subheight=this.info.subheight||0,this.info.description=this.info.description||``,this.info.tags=this.info.tags||[],this.info.ruleType=this.info.ruleType||0,this.templates=e.templates;var n={};jA.forEach(function(r){t[r]=(e[r]||[]).filter(function(e){var t=e.displayName;return Object.keys(MA).includes(t)}).map(function(e){var r=e.id,i=e.displayName;return HO(n[r]=new MA[i],{id:r,canvas:t})})}),jA.forEach(function(t){(e[t]||[]).filter(function(e){var t=e.displayName;return Object.keys(MA).includes(t)}).forEach(function(e){PA(n[e.id],e,n)})}),this.sortAreas(),this.emit(`canvas_loaded`)},copy:function(e){e=JSON.parse(JSON.stringify(e));var t={},n=function(e){return t[e]=t[e]||GO()};return jA.forEach(function(t){e[t].forEach(function(e){var t=MA[e.displayName].storeTypes;e.id=n(e.id),BO(t,function(t,r){switch(t){case`idArray`:e[r]=e[r].map(function(e){return n(e)});break;case`id`:e[r]=n(e[r]);break}})})}),e}},IA=`0.0.3`,LA=function(e){function t(){var e;return CE(this,t),e=SE(this,t),e.app={getEntrenceLineItemTowardsRadAndNorthRad:function(){return[]}},e.info={},e.templates={},e.points=[],e.lines=[],e.areas=[],e.lineItems=[],e.items=[],e.texts=[],e.tolerance=300,e.vrData={},e.property={},e.sizeCache={},e.areaRelationCache={},e}return jE(t,e),EE(t,[{key:`setInfo`,value:function(e,t){this.info[e]=t,this.emit(`canvasUpdateInfo`)}},{key:`getAnyById`,value:function(e){return this.getPointById(e)||this.getLineById(e)||this.getAreaById(e)||this.getLineItemById(e)||this.getItemById(e)||this.getTextById(e)}},{key:`newPoint`,value:function(e,t){var n=new Pk(e,t);return this.points.push(n),n.canvas=this,n}},{key:`removePoint`,value:function(e){var t=this;e.lines.forEach(function(e){return t.removeLine(e)}),e.set(`lines`,[]),UO(e,this.points),delete e.canvas}},{key:`getPointById`,value:function(e){var t=DE(this.points),n;try{for(t.s();!(n=t.n()).done;){var r=n.value;if(r.id===e)return r}}catch(e){t.e(e)}finally{t.f()}}},{key:`newLine`,value:function(e,t){var n=this.newPoint(e.x,e.y),r=this.newPoint(t.x,t.y);return this.newLineWithPoints(n,r)}},{key:`newLineWithPoints`,value:function(e,t){var n=new Fk(e,t);return e.lines.push(n),t.lines.push(n),this.lines.push(n),n.canvas=this,n}},{key:`removeLine`,value:function(e){var t=this;e.items.forEach(function(e){t.removeLineItem(e)}),e.points[0].removeLine(e),e.points[1].removeLine(e),e.set(`points`,[]),UO(e,this.lines),delete e.canvas}},{key:`getLineById`,value:function(e){var t=DE(this.lines),n;try{for(t.s();!(n=t.n()).done;){var r=n.value;if(r.id===e)return r}}catch(e){t.e(e)}finally{t.f()}}},{key:`getLineByPoints`,value:function(e,t){return this.lines.find(function(n){return n.points[0]===e&&n.points[1]===t||n.points[1]===e&&n.points[0]===t})}},{key:`getLineByPointIds`,value:function(e,t){return this.lines.find(function(n){return n.points[0].id===e&&n.points[1].id===t||n.points[1].id===e&&n.points[0].id===t})}},{key:`newLineItem`,value:function(e,t,n,r,i,a,o){var s=new Zk(e,t,n,r,i,a,o);return e.items.push(s),this.lineItems.push(s),s.canvas=this,s}},{key:`removeLineItem`,value:function(e){var t=e.line;t&&t.set(`items`,t.items.filter(function(t){return t!==e})),e.set(`line`,null),UO(e,this.lineItems),delete e.canvas}},{key:`getLineItemById`,value:function(e){var t=DE(this.lineItems),n;try{for(t.s();!(n=t.n()).done;){var r=n.value;if(r.id===e)return r}}catch(e){t.e(e)}finally{t.f()}}},{key:`newItem`,value:function(e,t,n,r){var i;switch(n){case`Item-StairsItem`:i=new tA(e,t,r);break;case`Item-CircularStairsItem`:i=new nA(e,t,r);break;case`Item-PillarItem`:i=new rA(e,t,r);break;case`Item-BeamItem`:i=new iA(e,t,r);break;case`Item-FlueItem`:i=new aA(e,t,r);break;case`Item-DrainItem`:i=new oA(e,t,r);break;case`Item-HeatingPipeItem`:i=new sA(e,t,r);break;default:i=new eA(e,t,r);break}return this.items.push(i),i.canvas=this,i}},{key:`removeItem`,value:function(e){UO(e,this.items),delete e.canvas}},{key:`getItemById`,value:function(e){var t=DE(this.items),n;try{for(t.s();!(n=t.n()).done;){var r=n.value;if(r.id===e)return r}}catch(e){t.e(e)}finally{t.f()}}},{key:`newArea`,value:function(e){var t=new Bk(e);return this.property.fontScale&&(t.labelScale=this.property.fontScale),t.canvas=this,this.areas.push(t),t}},{key:`getAreaById`,value:function(e){var t=DE(this.areas),n;try{for(t.s();!(n=t.n()).done;){var r=n.value;if(r.id===e)return r}}catch(e){t.e(e)}finally{t.f()}}},{key:`newText`,value:function(e,t,n,r){var i=new cA(e,t,n,r);return this.property.fontScale&&(i.scale=this.property.fontScale),this.texts.push(i),i.canvas=this,i}},{key:`removeText`,value:function(e){UO(e,this.texts),delete e.canvas}},{key:`getTextById`,value:function(e){var t=DE(this.texts),n;try{for(t.s();!(n=t.n()).done;){var r=n.value;if(r.id===e)return r}}catch(e){t.e(e)}finally{t.f()}}},{key:`sortAreas`,value:function(){var e=this.areas.reduce(function(e,t){var n=t.computeBounding(),r=n.width,i=n.height;return e[t.id]=r*i,e},{});this.areas.sort(function(t,n){return e[n.id]-e[t.id]})}},{key:`getAreasSize`,value:function(e){var t=this.lines.reduce(function(e,t){return e+Math.abs(t.curve)},0),n=0,r=DE(this.items),i;try{for(r.s();!(i=r.n()).done;){var a=i.value;if(a.displayName===`Item-PillarItem`){var o=DE(a.getPointAt()),s;try{for(o.s();!(s=o.n()).done;){var c=s.value;n=n*31+Math.round(c.x)|0,n=n*17+Math.round(c.y)|0}}catch(e){o.e(e)}finally{o.f()}}}}catch(e){r.e(e)}finally{r.f()}var l=t*65537+n,u={},d=DE(this.areas),f;try{for(d.s();!(f=d.n()).done;){var p=f.value,m=yk(p.points)*31+l|0,h=p.id+String(Number(e)),g=void 0,_=this.sizeCache[h];_&&_.hash===m&&(g=_.size),g||(g=p.size(e,!0),this.sizeCache[h]={size:g,hash:m}),u[p.id]={originSize:g,cutSize:g}}}catch(e){d.e(e)}finally{d.f()}for(var v=this.areas.length-1;v>0;v--)for(var y=this.areas[v],b=v-1;b>=0;b--){var x=this.areas[b];if(u[x.id].cutSize>u[y.id].originSize){var S=x.id+`-`+y.id,C=this.areaRelationCache[S];if((!C||C.outsidePointsHash!==yk(x.points)||C.insidePointsHash!==yk(y.points))&&(C={outsidePointsHash:yk(x.points),insidePointsHash:yk(y.points),inArea:x.isAreaInArea(y)},this.areaRelationCache[S]=C),C.inArea){u[x.id].cutSize-=u[y.id].originSize;break}}}return u}},{key:`removeAllModels`,value:function(){this.points.forEach(function(e){e.lines=[],delete e.canvas}),this.lines.forEach(function(e){e.points=[],e.items=[],delete e.canvas}),this.areas.forEach(function(e){e.points=[],delete e.canvas}),this.lineItems.forEach(function(e){e.line=null,delete e.canvas}),this.points.length=this.lines.length=this.areas.length=this.lineItems.length=this.texts.length=0}},{key:`closestPointAtCrossLine`,value:function(e,t,n){var r=nk(e,t);if(!(r<=this.tolerance)){var i=t.find(function(t){return ZO(e,n)});if(i){var a=rk(r,[n,i]),o=[a[0][0],a[1][0]];if(!(nk(e,o)>this.tolerance))return ek(e,o)}}}},{key:`closestPointAtPointMode`,value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:FO,r=isNaN(t.tolerance)?this.tolerance:t.tolerance;typeof t.toleranceByZoom==`function`&&(r=t.toleranceByZoom(r));var i=[],a=[];this.points.forEach(function(e){t.exceptPoint&&t.exceptPoint.some(function(t){return t===e})||i.push({x:e.x,y:e.y})}),this.lines.forEach(function(e){t.exceptLine&&t.exceptLine.some(function(t){return t===e})||e.points.length<2||a.push([{x:e.points[0].x,y:e.points[0].y},{x:e.points[1].x,y:e.points[1].y}])}),t.points&&(i=i.concat(t.points)),t.lines&&(a=a.concat(t.lines)),t.useInnerLine&&t.currentArea&&(a=_k(t.currentArea.innerPath(!1,!1)));var o=zE(qO(i,function(t){return $(e,t)}),2),s=o[0];if(o[1]<r)return n(`point`,s),s;var c=zE(qO(a,function(t){return nk(e,t)}),2),l=c[0];if(c[1]<r){n(`line`,l);var u=ek(e,l),d=Math.abs($O.apply(void 0,HE(l)));if(QO(d,0)){var f=zE(qO(i,function(t){return Math.abs(e.x-t.x)}),2),p=f[0];f[1]<r&&(u.x=p.x)}else if(QO(d,1/0)){var m=zE(qO(i,function(t){return Math.abs(e.y-t.y)}),2),h=m[0];m[1]<r&&(u.y=h.y)}return u}if(!t.noExtension&&t.checkVertical&&t.startPoint){var g=this.points.find(function(e){return ZO(e,t.startPoint)}),_=this.lines.reduce(function(e,t){var n=t.points.findIndex(function(e){return g===e});return n!==-1&&(e.push(t.points),e.push([t.points[n],uk(t.points[n^1],t.points[n],Math.PI/2)])),e},[]);if(_.length>0){var v=_.reduce(function(t,n){var r=tk(e,n),i=$(r,e);return i<t.dis?{point:r,dis:i}:t},{point:e,dis:1/0});if(v.dis<r)return n(`vertical`,[t.startPoint,v.point]),v.point}}return HO({noMath:!0},BO(e,function(e,a){var o=zE(qO(i,function(t){return Math.abs(e-t[a])}),2),s=o[0],c=o[1];return!t.noExtension&&c<r?(n(`line-`+a,s),s[a]):Math.round(e)}))}},{key:`moveTo`,value:function(e,t){var n=dk(this.points),r=e-n.x,i=t-n.y;this.points.forEach(function(e){e.set(`x`,e.x+r),e.set(`y`,e.y+i)}),this.items.forEach(function(e){e.set(`x`,e.x+r),e.set(`y`,e.y+i)})}},{key:`moveBy`,value:function(e,t){this.points.forEach(function(n){n.set(`x`,n.x+e),n.set(`y`,n.y+t)}),this.items.forEach(function(n){n.set(`x`,n.x+e),n.set(`y`,n.y+t)})}},{key:`rotate`,value:function(e){if(this.points.length!==0){var t=dk(this.points),n=function(e){return Math.round(e*1e3)/1e3},r=function(n,r){var i={x:r.x+n.x,y:r.y+n.y},a=uk(r,t,e),o=uk(i,t,e);return{x:o.x-a.x,y:o.y-a.y}},i={},a={};this.areas.forEach(function(e){var t=dk(e.points);i[e.id]=r({x:e.labelX,y:e.labelY},t),e.subType&&(a[e.id]=r({x:e.subLabelX,y:e.subLabelY},t))}),this.points.forEach(function(r){var i=uk(r,t,e),a=i.x,o=i.y;r.set(`x`,n(a)),r.set(`y`,n(o))}),this.items.forEach(function(r){var i=uk(r,t,e),a=i.x,o=i.y;r.set(`x`,n(a)),r.set(`y`,n(o)),r.set(`rotateZ`,r.rotateZ+=e/Math.PI*180)}),this.areas.forEach(function(e){e.set(`labelX`,n(i[e.id].x)),e.set(`labelY`,n(i[e.id].y)),a[e.id]&&(e.set(`subLabelX`,n(a[e.id].x)),e.set(`subLabelY`,n(a[e.id].y)))}),this.texts.forEach(function(r){var i=uk(r,t,e),a=i.x,o=i.y,s=uk({x:r.offsetX,y:r.offsetY},{x:0,y:0},e),c=s.x,l=s.y;r.set(`x`,n(a)),r.set(`y`,n(o)),r.set(`offsetX`,n(c)),r.set(`offsetY`,n(l))}),this.check()}}},{key:`mirrorX`,value:function(){var e=dk(this.points);this.points.forEach(function(t){t.set(`y`,t.y+(e.y-t.y)*2)}),this.lines.forEach(function(e){switch(e.align){case 1:e.set(`align`,2);break;case 2:e.set(`align`,1);break}}),this.items.forEach(function(t){t.set(`y`,t.y+(e.y-t.y)*2),t.set(`rotateX`,!t.rotateX),t.set(`rotateZ`,-t.rotateZ)}),this.lineItems.forEach(function(e){e.set(`rotateX`,!e.rotateX)}),this.areas.forEach(function(e){e.set(`labelY`,-e.labelY)}),this.texts.forEach(function(t){t.set(`y`,t.y+(e.y-t.y)*2),t.set(`offsetY`,-t.offsetY)}),this.check()}},{key:`mirrorY`,value:function(){var e=dk(this.points);this.points.forEach(function(t){t.set(`x`,t.x+(e.x-t.x)*2)}),this.lines.forEach(function(e){switch(e.align){case 1:e.set(`align`,2);break;case 2:e.set(`align`,1);break}}),this.items.forEach(function(t){t.set(`x`,t.x+(e.x-t.x)*2),t.set(`rotateY`,!t.rotateY),t.set(`rotateZ`,-t.rotateZ)}),this.lineItems.forEach(function(e){e.set(`rotateX`,!e.rotateX)}),this.areas.forEach(function(e){e.set(`labelX`,-e.labelX)}),this.texts.forEach(function(t){t.set(`x`,t.x+(e.x-t.x)*2),t.set(`offsetX`,-t.offsetX)}),this.check()}},{key:`recommendRules`,value:function(){var e=dk(this.points),t=DE(this.points),n;try{for(t.s();!(n=t.n()).done;){var r=n.value;if(!r.lines.some(function(e){return e.edgeComputed})){r.set(`rules`,`0000`);continue}var i=[0,0,0,0];r.x>e.x?i[1]=1:i[3]=1,r.y>e.y?i[0]=1:i[2]=1,r.set(`rules`,i.join(``))}}catch(e){t.e(e)}finally{t.f()}}},{key:`clean`,value:function(){var e=this;this.points.slice().forEach(function(t){return e.removePoint(t)}),this.items.length=0,this.check()}}])}(Ak);LA.displayName=LA.prototype.displayName=`Canvas`,HO(LA.prototype,AA,FA),LA.defaultFloorplan=function(){return JSON.parse(JSON.stringify({info:{height:0,subheight:0,description:``,tags:[],ruleType:1,itemSortRule:0},templates:{areaLabelName:`{{ customizedName || name }}{{ nameIndex }}`},points:[],lines:[],lineItems:[],items:[],areas:[]}))},LA.defaultMetaData={version:IA,doctorStrangeVersion:qE,structure:`101200000001`,floorplans:[],vrData:{origin:{left:37500,top:37500}},canvasSize:{width:75e3,height:75e3},property:{fontScale:1,sourceType:0}},LA.structures=[{text:`平层`,value:`101200000001`},{text:`跃层`,value:`101200000002`},{text:`复式`,value:`101200000003`},{text:`错层`,value:`101200000004`},{text:`Loft`,value:`101200000005`}],LA.tags=[{text:`阁楼`,value:`1`},{text:`斜角楼顶`,value:`2`},{text:`顶层露台`,value:`3`},{text:`地下室`,value:`4`}],LA.saveOptions={skipCalculation:!1};var RA=class{constructor(e,t,n,r){this.x=e,this.y=t,this.h=n,this.d=BA(e,t,r),this.max=this.d+this.h*Math.SQRT2}};function zA(e,t=1){let n=0,r=0,i=0,a=0;for(let t=0;t<e[0].length;t++){let o=e[0][t];(!t||o[0]<n)&&(n=o[0]),(!t||o[1]<r)&&(r=o[1]),(!t||o[0]>i)&&(i=o[0]),(!t||o[1]>a)&&(a=o[1])}let o=i-n,s=a-r,c=Math.min(o,s),l=c/2;if(c===0)return[n,r];let u=[];for(let t=n;t<i;t+=c)for(let n=r;n<a;n+=c)u.push(new RA(t+l,n+l,l,e));let d=VA(e),f=new RA(n+o/2,r+s/2,0,e);for(f.d>d.d&&(d=f);u.length;){u.sort((e,t)=>e.max-t.max);let n=u.pop();n.d>d.d&&(d=n),!(n.max-d.d<=t)&&(l=n.h/2,u.push(new RA(n.x-l,n.y-l,l,e)),u.push(new RA(n.x+l,n.y-l,l,e)),u.push(new RA(n.x-l,n.y+l,l,e)),u.push(new RA(n.x+l,n.y+l,l,e)))}return[d.x,d.y]}function BA(e,t,n){let r=!1,i=1/0;for(let a=0;a<n.length;a++){let o=n[a];for(let n=0,a=o.length,s=a-1;n<a;s=n++){let a=o[n],c=o[s];a[1]>t!=c[1]>t&&e<(c[0]-a[0])*(t-a[1])/(c[1]-a[1])+a[0]&&(r=!r),i=Math.min(i,HA(e,t,a,c))}}return(r?1:-1)*Math.sqrt(i)}function VA(e){let t=0,n=0,r=0,i=e[0];for(let e=0,a=i.length,o=a-1;e<a;o=e++){let a=i[e],s=i[o],c=a[0]*s[1]-s[0]*a[1];n+=(a[0]+s[0])*c,r+=(a[1]+s[1])*c,t+=c*3}return t===0?new RA(i[0][0],i[0][1],0,e):new RA(n/t,r/t,0,e)}function HA(e,t,n,r){let i=n[0],a=n[1],o=r[0]-i,s=r[1]-a;if(o!==0||s!==0){let n=((e-i)*o+(t-a)*s)/(o*o+s*s);n>1?(i=r[0],a=r[1]):n>0&&(i+=o*n,a+=s*n)}return o=e-i,s=t-a,o*o+s*s}var UA=500;function WA(e,t={}){let{observers:n=[],locate:r=`zh-CN`,outlines:i=[]}=t;if(!e||e.floorplans.length===0)return null;let a=e.floorplans.map(e=>{let t=new LA;return t.load(e),t}),o=YA(a,e.vrData),s=e=>XA(e,o);return{outlines:i,computed_data:{floor_datas:GA(a,e,n,o,r),bounding:o,entrance:ZA(a,s),observers:QA(a,e.vrData,n,s)}}}function GA(e,t,n,r,i){return e.map((e,a)=>{let o=e.areas.map(t=>{let n=KA(e,t),a=qA(n),o={position:a,position_in_image:XA(a,r)};return{id:t.id,size:e.info.ruleType===1?t.size(!1):t.size(),name:t.labelName(i),customized_name:t.customizedName||void 0,path:n,room_type:t.roomType(),floor_type:t.floorType(),room_label:o,observer_indexs:[],dimension:JA(t,a)}}),s=e.areas,c=0;return n.filter(e=>e.floor_index===a).forEach(e=>{let n=$A(e,t.vrData),r=-1;for(let e=c;e<s.length&&r===-1;e++)s[e].isPointInArea(n)&&(r=e);for(let e=c;e>=0&&r===-1;e--)s[e].isPointInArea(n)&&(r=e);r!==-1&&(c=r,o[r].observer_indexs.push(e.index))}),{floor_name:t.floorplans[a].name,floor_index:a,is_has_wall:e.lines.length>0,rules:ej(e),rooms:o}})}function KA(e,t){let n=[],r=t.points[0];return t.points.concat(r).reduce((t,r)=>{n.push(t);let i=e.getLineByPoints(t,r);if(!i)return r;if(i.curve){let e=i.curveCenterPoint(),a=i.curveR(),o=Math.abs(a-_E(e,r)*i.length()/Math.abs(i.curve)/4),s=[i.curveCenterPoint.call({curve:o,points:[t,e]}),i.curveCenterPoint.call({curve:-o,points:[t,e]})].sort((e,t)=>_E(t,r)-_E(e,r))[0],c=[i.curveCenterPoint.call({curve:o,points:[e,r]}),i.curveCenterPoint.call({curve:-o,points:[e,r]})].sort((e,n)=>_E(n,t)-_E(e,t))[0];n.push(s,e,c)}if(!i.isEdge()||i.items.length===0)return r;let a=i.items.filter(e=>e.type===7||e.type===11);return a.length===0||a.forEach(e=>{let r=e.startPointAt(),i=e.endPointAt();_E(r,t)>_E(i,t)&&([r,i]=[i,r]);let[a,o]=nj(700,[r,i])[0];n.push(r,a,o,i)}),r},r),n.map(({x:e,y:t})=>({x:e,y:t}))}function qA(e){let[t,n]=zA([e.map(({x:e,y:t})=>[Math.trunc(e),Math.trunc(t)])],1);return{x:t,y:n}}function JA(e,t){let n=e.innerPath();if(n.length===0)return;let r=1/0,i=-1/0,a=1/0,o=-1/0;n.forEach(e=>{r=Math.min(r,e.x),i=Math.max(i,e.x),a=Math.min(a,e.y),o=Math.max(o,e.y)});let s=i-r,c=o-a,l=Math.round(t.x),u=Math.round(t.y);return{width:s,height:c,vertical:[{x:l,y:a},{x:l,y:o}],horizontal:[{x:r,y:u},{x:i,y:u}]}}function YA(e,t){let n=1e3,r={min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0},origin:{x:0,y:0}};function i({x:e,y:t}){r.min.x=Math.min(e,r.min.x),r.min.y=Math.min(t,r.min.y),r.max.x=Math.max(e,r.max.x),r.max.y=Math.max(t,r.max.y)}return e.forEach(e=>{e.points.forEach(e=>i(e)),e.lines.forEach(e=>{e.curve!==0&&i(e.curveCenterPoint())})}),r.min.x-=n,r.min.y-=n,r.max.x+=n,r.max.y+=n,r.origin.x=t.origin.left,r.origin.y=t.origin.top,r}function XA(e,t){let n=t.max.x-t.min.x,r=t.max.y-t.min.y;return{x:n===0?0:(e.x-t.min.x)/n,y:r===0?0:(t.max.y-e.y)/r}}function ZA(e,t){let n=e.map(e=>e.lineItems).reduce((e,t)=>e.concat(t),[]).find(e=>e.entrance!==null);if(!n)return null;let r=n.canvas,i=r.areas.find(e=>n.line.points.every(t=>e.points.indexOf(t)>=0));if(!i)return null;let a=ij([n.startPointAt(),n.endPointAt()]),o=n.towardsRadWithArea(i)+n.entrance/180*Math.PI;return{position_in_image:t(a),north_rad:o,room_id:i.id,floor_index:e.findIndex(e=>e===r)}}function QA(e,t,n,r){return n.filter(t=>e[t.floor_index]).map(e=>({floor_index:e.floor_index,position_in_image:r($A(e,t))}))}function $A(e,t){return{x:e.position[0]*1e3+t.origin.left,y:-e.position[2]*1e3+t.origin.top}}function ej(e){let t=[],n=[],r=[],i=[];for(let a of e.lines){if(!a.edgeComputed||!a.points.length)continue;let o=e.areas.find(e=>a.points.every(t=>e.points.includes(t)));if(!o)continue;let s=a.edgePoints(!0),c=o.innerPath(!0,!1),[l,u]=s.filter(e=>c.some(t=>tj(t,e)));if(!l||!u)continue;let d={x:l.x|0,y:l.y|0},f={x:u.x|0,y:u.y|0},p=a.towardsRadWithArea(o),m=Math.cos(p),h=Math.sin(p);Math.abs(d.y-f.y)>UA&&(m<0?i.push([d,f].sort((e,t)=>e.y-t.y)):m>0&&n.push([d,f].sort((e,t)=>e.y-t.y))),Math.abs(d.x-f.x)>UA&&(h<0?r.push([d,f].sort((e,t)=>e.x-t.x)):h>0&&t.push([d,f].sort((e,t)=>e.x-t.x)))}return{top:t,right:n,bottom:r,left:i}}function tj(e,t){return e.x===t.x&&e.y===t.y}function nj(e,t){let n=rj(t[1],t[0]),r,i;Math.abs(n)===1/0?(i=0,r=e):(i=Math.sqrt(e*e/(n*n+1)),r=i/-(1/n));let a=[[{x:t[0].x-r,y:t[0].y-i},{x:t[1].x-r,y:t[1].y-i}],[{x:t[0].x+r,y:t[0].y+i},{x:t[1].x+r,y:t[1].y+i}]];return t[1].x-t[0].x<0?a:t[1].x-t[0].x>0||t[1].y-t[0].y<0?a.reverse():a}function rj(e,t){return(e.y-t.y)/(e.x-t.x)}function ij(e){let t=Math.min(...e.map(e=>e.x)),n=Math.max(...e.map(e=>e.x)),r=Math.min(...e.map(e=>e.y)),i=Math.max(...e.map(e=>e.y));return{x:(t+n)/2,y:(r+i)/2}}var aj=(e,t)=>new gE(e,t),oj=class{constructor(e,t,n,r,i){this.R=e,this.Q=t,this.A=n,this.B=r,this.C=i,this.cov=NaN,this.x=NaN}filter(e,t=0){if(isNaN(this.x))this.x=1/this.C*e,this.cov=1/this.C*this.Q*(1/this.C);else{let n=this.A*this.x+this.B*t,r=this.A*this.cov*this.A+this.R,i=r*this.C*(1/(this.C*r*this.C+this.Q));this.x=n+i*(e-this.C*n),this.cov=r-i*this.C*r}return this.x}},sj=class extends o.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){var n,r,i;super(e),this.boundingAABB=null,this.cancelAnimation=null,this.boundsSet=!1,this.keyframes=[],this.five=e,this.state={enabled:!0,visible:!0},this.duration=(n=t==null?void 0:t.duration)==null?5e3:n,this.curveHeight=(r=t==null?void 0:t.curveHeight)==null?1.5:r,this.pointDuration=(i=t==null?void 0:t.pointDuration)==null?3e3:i}load(){return r(this,void 0,void 0,function*(){})}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!0},n)}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!1},n)}dispose(){this.disable(),this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null);try{let e=this.findRenderMesh();e&&(e.material.aggregationEnabled=!1,e.material.aggregationProgress=1)}catch(e){}}extractKeyframes(e){let t=[];if(!e.content.data)throw Error(`轨迹数据未加载`);let n=e.content.data.positionArray,r=n.length/3,i=.01,a=.1,o=new oj(i,a,1,0,1),s=new oj(i,a,1,0,1),c=new oj(i,a,1,0,1),l=new Float32Array(r);for(let e=0;e<r;e++)if(e===0)l[e]=0;else{let t=new D(n[(e-1)*3],n[(e-1)*3+1],n[(e-1)*3+2]);l[e]=new D(n[e*3],n[e*3+1],n[e*3+2]).distanceTo(t)+l[e-1]}for(let i=0;i<r;i++){let a=new D(0,0,0),u=0;for(let e=i-5;e<i+6;e++)e>=0&&e<r&&(a.add(new D(n[e*3],n[e*3+1],n[e*3+2])),u++);a.divideScalar(u).applyMatrix4(e.transform);let d=o.filter(a.x),f=s.filter(a.y),p=c.filter(a.z);t.push({position:new D(d,f,p),location:l[i]})}return t}computeAABB2D(e){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let a of e)a.position.x<t&&(t=a.position.x),a.position.x>n&&(n=a.position.x),a.position.z<r&&(r=a.position.z),a.position.z>i&&(i=a.position.z);return{min:new at(t,r),max:new at(n,i)}}findClosestKeyframeToRay(e,t){let n=1/0,r=t[0].position.clone(),i=new D;for(let a of t){e.closestPointToPoint(a.position,i);let t=i.distanceTo(a.position);t<n&&(n=t,r=a.position.clone())}return r}findRenderMesh(){let e=null;if(this.five.scene.traverse(t=>{if(e)return;let n=t,r=n.material;r&&r.isPBMGaussianSplattingMaterial&&(e=n)}),!e)throw Error(`未找到 GaussianSplatting 渲染网格`);return e}loadTrajectoryDataIfNeeded(e){return r(this,void 0,void 0,function*(){var n,r,i,a,o,s,c,l;if((n=e.content)!=null&&n.data)return;if(((r=e.content)==null?void 0:r.loadState)===`LOADING`){yield new Promise(n=>{let r=t.AnimationFrameLoop.shared.add(()=>{var t;let i=(t=e.content)==null?void 0:t.loadState;(i===`READY`||i===`FAILED`||i===`UNLOADED`)&&(r(),n())})});return}let u=(i=this.five.model.viewLayers)==null?void 0:i[0],d=u==null?void 0:u.fetcher,f=u==null?void 0:u.search,p=(a=e.content)==null?void 0:a.uri;if(!d||!p)return;let m=f?p.includes(`?`)?`${p}&${f.replace(/^\?/,``)}`:`${p}${f.startsWith(`?`)?f:`?${f}`}`:p;e.content.loadState=`LOADING`;try{let n=yield(0,t.loadPly)(m,{type:`geometry`,customPropertyMapping:{time:{itemType:`uint32`,itemNames:[`time_milisec`]}},fetcher:d}),r=n.scene,i=r.getAttribute(`position`),a=r.getAttribute(`time`),u=(o=i==null?void 0:i.array)==null?new Float32Array:o,f=(s=a==null?void 0:a.array)==null?new Uint32Array:s;e.content.data={uri:m,byteLength:(c=n.byteLength)==null?0:c,memoryUsage:(l=n.memoryUsage)==null?0:l,positionArray:u,timeArray:f,object:null},e.content.loadState=`READY`}catch(t){console.warn(`[GaussianSplattingEntranceAnimationPlugin] trajectory ply 加载失败,将使用 3DGS AABB 回退`,t),e.content.data=void 0,e.content.loadState=`FAILED`}})}computeGSSceneBounds(){let e=new Tn,t=new Tn;return this.five.scene.traverse(n=>{let r=n;(r==null?void 0:r.boundingBox)instanceof Tn&&!r.boundingBox.isEmpty()&&(t.copy(r.boundingBox),r.matrixWorld&&t.applyMatrix4(r.matrixWorld),e.union(t))}),e.isEmpty()?null:e}getCameraCurve(){return r(this,void 0,void 0,function*(){var e,t,n,r,i,a,o,s,c,l;let u=(r=(n=(t=(e=this.five.model.viewLayers)==null?void 0:e[0])==null?void 0:t.trajectories)==null?void 0:n[0])==null?(s=(o=(a=(i=this.five.model.viewLayers)==null?void 0:i[0])==null?void 0:a.scene)==null?void 0:o.trajectories)==null?void 0:s[0]:r,d=null,f=null;if(u&&(yield this.loadTrajectoryDataIfNeeded(u),(c=u.content)!=null&&c.data&&((l=u.content.data.positionArray)==null?void 0:l.length)>=6&&(d=this.extractKeyframes(u),d.length>=2?f=this.computeAABB2D(d):d=null)),!d||!f){let e=this.computeGSSceneBounds();if(!e)throw Error(`未找到可用于计算入场曲线的 3DGS 边界或轨迹`);f={min:new at(e.min.x,e.min.z),max:new at(e.max.x,e.max.z)};let t=(f.min.x+f.max.x)/2,n=(f.min.y+f.max.y)/2,r=(e.min.y+e.max.y)/2,i=Math.max(f.max.x-f.min.x,f.max.y-f.min.y)*.5;d=[];let a=0,o=null;for(let e=0;e<16;e++){let s=e/16*Math.PI*2,c=new D(t+Math.cos(s)*i,r,n+Math.sin(s)*i);o&&(a+=c.distanceTo(o)),d.push({position:c,location:a}),o=c}}this.keyframes=d,this.boundingAABB=f;let p=this.curveHeight,m=new D((f.min.x+f.max.x)/2,p,(f.min.y+f.max.y)/2),h=(f.max.x-f.min.x)/2,g=(f.max.y-f.min.y)/2,_=Math.sqrt(h*h+g*g),v=e=>{let t=new D().subVectors(e,m);return t.length()<.001&&t.set(1,0,0),m.clone().add(t.normalize().multiplyScalar(_))},y=new D(d[0].position.x,p,d[0].position.z),b=v(y),x=new D().subVectors(m,y).normalize(),S=new _r(y,x),C=new _r(m,new D(-x.z,0,x.x).normalize()),ee=this.findClosestKeyframeToRay(C,d),te=v(new D(ee.x,p,ee.z)),ne=this.findClosestKeyframeToRay(S,d);return new pi([b,te,v(new D(ne.x,p,ne.z))],!1,`centripetal`,.5)})}setBounding(e,t,n){let r=this.findRenderMesh();r.material.aggregationBoundsMin.copy(e),r.material.aggregationBoundsMax.copy(t),this.boundsSet=!0}setBounds(){if(!this.boundingAABB)throw Error(`请先调用 getCameraCurve 计算轨迹边界`);let e=this.boundingAABB,t=this.findRenderMesh(),n=new D(e.min.x,0,e.min.y),r=new D(e.max.x,3,e.max.y);t.material.aggregationBoundsMin.copy(n),t.material.aggregationBoundsMax.copy(r),this.boundsSet=!0}normalizedPointDuration(){let e=this.pointDuration;return e<=0?.01:Math.min(e<=1?e:e/this.duration,1)}resetToPointCloud(){return r(this,void 0,void 0,function*(){this.boundingAABB||(yield this.getCameraCurve()),this.setBounds();let e=this.findRenderMesh().material;e.aggregationEnabled=!0,e.aggregationProgress=0,e.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0})}startAggregation(){if(!this.boundsSet)throw Error(`请先调用 setBounds 设置聚合边界`);let e=this.findRenderMesh().material;e.aggregationEnabled=!0,e.aggregationProgress=0,e.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let n=performance.now(),r=this.duration;this.cancelAnimation=t.AnimationFrameLoop.shared.add(()=>{let t=performance.now()-n,i=Math.min(t/r,1);e.aggregationProgress=i*i*(3-2*i),this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0,i>=1&&(e.aggregationEnabled=!1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null))})}playEntrance(){return r(this,void 0,void 0,function*(){let e=yield this.getCameraCurve(),n=this.boundingAABB,r=new D((n.min.x+n.max.x)/2,this.curveHeight,(n.min.y+n.max.y)/2),i=e.getPointAt(0),a=new t.Camera(90).copy(this.five.camera);a.position.copy(i),a.lookAt(r),a.computePose(0),this.five.setState(Object.assign({},a.pose)),this.setBounds();let o=this.findRenderMesh().material;o.aggregationEnabled=!0,o.aggregationProgress=0,o.aggregationPointDuration=this.normalizedPointDuration(),this.five.needsRender=!0;let s=this.duration,c=performance.now();return new Promise(n=>{this.cancelAnimation=t.AnimationFrameLoop.shared.add(()=>{let t=performance.now()-c,i=Math.min(t/s,1),l=i*i*(3-2*i);o.aggregationProgress=l,this.five.modelSceneNeedsRender=!0;let u=e.getPointAt(l);a.position.copy(u),a.lookAt(r),a.computePose(0),this.five.setState(Object.assign({},a.pose)),this.five.needsRender=!0,i>=1&&(o.aggregationEnabled=!1,o.aggregationProgress=1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null),n())})})})}};e.BackgroundPlugin=c,Object.defineProperty(e,"BasePlugin",{enumerable:!0,get:function(){return o}}),e.CSS2DPlugin=Kw,e.CSS3DPlugin=rT,e.FloorplanPlugin=aj,e.GaussianSplattingEntranceAnimationPlugin=(e,t)=>new sj(e,t),e.Object3DHelperController=hw,e.Object3DHelperPlugin=gw,e.PanoAnimePlugin=Pw,e.formatFloorplanJson=WA});