@kite3d/engine 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/authoring.d.ts +54 -0
  2. package/dist/authoring.js +165 -0
  3. package/dist/authoring.js.map +1 -0
  4. package/dist/authoringValidation.d.ts +110 -0
  5. package/dist/authoringValidation.js +488 -0
  6. package/dist/authoringValidation.js.map +1 -0
  7. package/dist/defaults.d.ts +2 -0
  8. package/dist/fileTypes.d.ts +5 -0
  9. package/dist/fileTypes.js +51 -0
  10. package/dist/fileTypes.js.map +1 -0
  11. package/dist/importMap.d.ts +15 -0
  12. package/dist/importMap.js +62 -0
  13. package/dist/importMap.js.map +1 -0
  14. package/dist/index.d.ts +15 -0
  15. package/dist/index.js +2756 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/migrations.js +5 -0
  18. package/dist/migrations.js.map +1 -0
  19. package/dist/paths.d.ts +9 -0
  20. package/dist/paths.js +13 -0
  21. package/dist/paths.js.map +1 -0
  22. package/dist/plugins/GeneratorComponent.d.ts +40 -0
  23. package/dist/plugins/HtmlUiComponent.d.ts +52 -0
  24. package/dist/plugins/HtmlUiComponent.example.d.ts +0 -0
  25. package/dist/plugins/cannon/Cannon3DBodyComponent.d.ts +27 -0
  26. package/dist/plugins/cannon/Cannon3DShapeComponent.d.ts +57 -0
  27. package/dist/plugins/cannon/CannonPhysicsPlugin.d.ts +63 -0
  28. package/dist/plugins/cannon/CannonRagdollComponent.d.ts +148 -0
  29. package/dist/plugins/cannon/helper.d.ts +24 -0
  30. package/dist/plugins/cannon/threeToCannon.d.ts +63 -0
  31. package/dist/plugins/cannon/utils.d.ts +9 -0
  32. package/dist/projectFormat.js +108 -0
  33. package/dist/projectFormat.js.map +1 -0
  34. package/dist/runtime/createGame.d.ts +29 -0
  35. package/dist/runtime/index.d.ts +18 -0
  36. package/dist/runtime/migrations.d.ts +5 -0
  37. package/dist/runtime/nestedAssets.d.ts +26 -0
  38. package/dist/runtime/projectFormat.d.ts +83 -0
  39. package/dist/runtime/version.d.ts +1 -0
  40. package/dist/runtime.js +72835 -0
  41. package/dist/runtime.js.map +1 -0
  42. package/dist/sceneSerialization.d.ts +17 -0
  43. package/dist/sceneSerialization.js +174 -0
  44. package/dist/sceneSerialization.js.map +1 -0
  45. package/dist/scripts.d.ts +17 -0
  46. package/dist/version.js +7 -0
  47. package/dist/version.js.map +1 -0
  48. package/package.json +86 -0
  49. package/src/authoring.ts +293 -0
  50. package/src/authoringValidation.ts +815 -0
  51. package/src/defaults.ts +277 -0
  52. package/src/fileTypes.ts +53 -0
  53. package/src/importMap.ts +105 -0
  54. package/src/index.ts +15 -0
  55. package/src/paths.ts +9 -0
  56. package/src/plugins/GeneratorComponent.ts +275 -0
  57. package/src/plugins/HtmlUiComponent.example.ts +202 -0
  58. package/src/plugins/HtmlUiComponent.md +219 -0
  59. package/src/plugins/HtmlUiComponent.ts +320 -0
  60. package/src/plugins/cannon/Cannon3DBodyComponent.ts +227 -0
  61. package/src/plugins/cannon/Cannon3DShapeComponent.ts +258 -0
  62. package/src/plugins/cannon/CannonPhysicsPlugin.ts +409 -0
  63. package/src/plugins/cannon/CannonRagdollComponent.ts +1170 -0
  64. package/src/plugins/cannon/helper.ts +255 -0
  65. package/src/plugins/cannon/threeToCannon.ts +441 -0
  66. package/src/plugins/cannon/utils.ts +185 -0
  67. package/src/runtime/createGame.ts +337 -0
  68. package/src/runtime/index.ts +19 -0
  69. package/src/runtime/migrations.ts +6 -0
  70. package/src/runtime/nestedAssets.ts +226 -0
  71. package/src/runtime/projectFormat.ts +233 -0
  72. package/src/runtime/version.ts +3 -0
  73. package/src/sceneSerialization.ts +289 -0
  74. package/src/scripts.ts +52 -0
package/dist/index.js ADDED
@@ -0,0 +1,2756 @@
1
+ import * as xe from "threepipe";
2
+ import { EntityComponentPlugin as L, Object3DComponent as oa, Vector3 as F, literalStrings as Sa, Quaternion as C, BufferAttribute as se, BufferGeometry as ia, Box3 as ce, ConvexHull as Pe, Mesh as xa, MathUtils as Ae, SphereGeometry as Fa, BoxGeometry as Ea, PlaneGeometry as Ya, LineMaterial2 as De, Wireframe as Y, WireframeGeometry3 as X, CylinderGeometry as Me, Float32BufferAttribute as Da, Object3DWidgetsPlugin as ne, AHelperWidget as Ie, Group as Fe, MeshStandardMaterial as Ee, Object3D as Ne, uiFolderContainer as Ba, generateUUID as Ce, AViewerPluginSync as Se, Matrix4 as Xa, FrameFadePlugin as Be, uiInput as Le, uiMonitor as ze, uiNumber as oe, ThreeSerialization as La, TypeSystem as Re, serialize as de, uiToggle as re, uiConfig as he, copyObject3DUserData as Ue, getPartialProps as Ge, setPartialProps as _e, ThreeViewer as Te, GBufferPlugin as Oe, PopmotionPlugin as Qe, GLTFAnimationPlugin as We, GLTFMeshOptDecodePlugin as qe, KTX2LoadPlugin as Ke, KTXLoadPlugin as He, PLYLoadPlugin as Je, Rhino3dmLoadPlugin as Ve, STLLoadPlugin as Ye, USDZLoadPlugin as Xe } from "threepipe";
3
+ export * from "threepipe";
4
+ import { getAuthoringMetadata as ma, setAuthoringMetadata as le } from "./authoring.js";
5
+ import { KITE3D_AUTHORING_METADATA_KEY as jb, KITE3D_RUNTIME_METADATA_KEY as yb, RuntimeObjectOwner as kb, getRuntimeObjectMetadata as wb, getTrackedRuntimeObjects as vb, isRuntimeObject as xb } from "./authoring.js";
6
+ import { Vec3 as y, Quaternion as da, Box as K, Cylinder as Ze, Sphere as fe, ConvexPolyhedron as $e, Trimesh as at, Body as N, Shape as q, ConeTwistConstraint as Q, Material as za, World as pe, ContactMaterial as ge } from "cannon-es";
7
+ import { installGameHooks as et, runtimeCleanupReport as tt } from "./authoringValidation.js";
8
+ import { authoringQualityReport as Ab, persistenceReport as Db, publishGameTelemetry as Mb, registerGameValidation as Ib, semanticSceneSnapshot as Fb } from "./authoringValidation.js";
9
+ import { parsePackageJSON as bt, parsePackageJsonSettingsConfig as it, parseAssetsJSONManifest as st, assetUrlPrefix as Ma, isDependencyModuleSpecifier as me } from "./projectFormat.js";
10
+ import { readProjectGeneratorStates as Nb, settingsKey as Cb, updateProjectGeneratorState as Sb, validateSceneSource as Bb } from "./projectFormat.js";
11
+ import { RUNTIME_VERSION as zb } from "./version.js";
12
+ import { PROJECT_MIGRATIONS as Ub } from "./migrations.js";
13
+ import { serializeSceneGltf as _b, serializeSceneGltfDocument as Tb } from "./sceneSerialization.js";
14
+ export * from "uiconfig.js";
15
+ export * from "ts-browser-helpers";
16
+ import { RUNTIME_SPECIFIERS as qb, dependencyImportMap as Kb, projectDependencies as Hb, projectPluginNames as Jb } from "./importMap.js";
17
+ import { extensionMimeTypes as Yb, mimeToExt as Xb, mimeTypeForPath as Zb, typesExts as $b } from "./fileTypes.js";
18
+ import { BACKUPS_DIRECTORY as ei, CONSOLE_PATH as ti, DEPLOYS_PATH as bi, JOURNAL_PATH as ii, KITE3D_DIRECTORY as si, KITE3D_SERVER_CLIENT_ID as ci, RUNNING_DIRECTORY as ni, STATE_PATH as oi, THUMBS_DIRECTORY as di } from "./paths.js";
19
+ (function() {
20
+ var t = "b9H79TebbbeJq9Geueu9Geub9Gbb9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiKLdilevlevlooroowwvwbDDbelve9Weiiviebeoweuec:W;kekr;RiOo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbe8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbdE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UbiY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbl8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbv8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UboE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbra9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbwL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbDK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbqL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbkE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbPa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9Wbsa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbzK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbHl79IV9RbODwebcekdQXq:g9sLdbk;3keYu8Jjjjjbcjo9Rgv8Kjjjjbcbhodnalcefae0mbabcbRb:S:kjjbc:GeV86bbavcjdfcbcjdzNjjjb8AdnaiTmbavcjdfadalz:tjjjb8Akabaefhrabcefhwavalfcbcbcjdal9RalcFe0EzNjjjb8Aavavcjdfalz:tjjjbhDcj;abal9UhodndndndndnalTmbaoc;WFbGgecjdaecjd6Ehqcbhkdninakai9pmiaDcjlfcbcjdzNjjjb8Aaqaiak9Rakaqfai6Egxcsfgecl4cifcd4hmadakal2fhPdndndndndnaec9WGgsTmbcbhzcehHaPhOawhAxekdnaxTmbcbhAcehHaPhCinaDaAfRbbhXaDcjlfheaChoaxhQinaeaoRbbgLaX9RgXcetaX;acr4786bbaoalfhoaecefheaLhXaQcufgQmbkaraw9Ram6miawcbamzNjjjbgeTmiaCcefhCaeamfhwaAcefgAal6hHaAal9hmbxvkkaraw9Ram6mvawcbamzNjjjb8AceheinawgXamfhwalaegoSmldnaraw9Ram6mbaocefheawcbamzNjjjb8AaXmekkaoal6hHxekindnaxTmbaDazfRbbhXaDcjlfheaOhoaxhQinaeaoRbbgLaX9RgXcetaX;acr4786bbaoalfhoaecefheaLhXaQcufgQmbkkaraA9Ram6mearaAcbamzNjjjbgKamfgw9RcK6mdcbhYaDcjlfhAinaDcjlfaYfh8AcwhCczhLcehQindndnaQce9hmbcuhoa8ARbbmecbhodninaogecsSmeaecefhoaAaefcefRbbTmbkkcucbaecs6EhoxekaQcetc;:FFFeGhocuaQtcu7cFeGhXcbheinaoaXaAaefRbb9nfhoaecefgecz9hmbkkaoaLaoaL6geEhLaQaCaeEhCaQcetgQcw6mbkdndndndnaCcufPdiebkaKaYco4fgeaeRbbcdciaCclSEaYci4coGtV86bbaCcw9hmeawa8A8Pbb83bbawcwfa8Acwf8Pbb83bbawczfhwxdkaKaYco4fgeaeRbbceaYci4coGtV86bbkdncwaC9TgEmbinawcb86bbawcefhwxbkkcuaCtcu7h8Acbh3aAh5ina5heaEhQcbhoinaeRbbgLa8AcFeGgXaLaX6EaoaCtVhoaecefheaQcufgQmbkawao86bba5aEfh5awcefhwa3aEfg3cz6mbkcbheindnaAaefRbbgoaX6mbawao86bbawcefhwkaecefgecz9hmbkkdnaYczfgYas9pmbaAczfhAaraw9RcL0mekkaYas6meawTmeaOcefhOazcefgzal6hHawhAazalSmixbkkcbhwaHceGTmexikcbhwaHceGmdkaDaPaxcufal2falz:tjjjb8AaxakfhkawmbkcbhoxokcbhoxvkaiTmekcbhoaraw9Ralcaalca0E6mialc8F9nmexdkcbhoaecufca6mdkawcbcaal9RgezNjjjbaefhwkawaDcjdfalz:tjjjbalfab9Rhokavcjof8Kjjjjbaok9heeuaecaaeca0Eabcj;abae9Uc;WFbGgdcjdadcjd6Egdfcufad9Uae2adcl4cifcd4adV2fcefkmbcbabBd:S:kjjbk;rse3u8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaici9UgocHfae0mbabcbyd:C:kjjbgrc;GeV86bbalc;abfcFecjezNjjjb8AalcUfgw9cu83ibalc8WfgD9cu83ibalcyfgq9cu83ibalcafgk9cu83ibalcKfgx9cu83ibalczfgm9cu83ibal9cu83iwal9cu83ibabaefc9WfhPabcefgsaofhednaiTmbcmcsarcb9kgzEhHcbhOcbhAcbhCcbhXcbhQindnaeaP9nmbcbhvxikaQcufhvadaCcdtfgoydbhLaocwfydbhKaoclfydbhYcbh8Adndninalc;abfavcsGcitfgoydlhEdndndnaoydbgoaL9hmbaEaYSmekdnaoaY9hmbaEaK9hmba8Acefh8AxekaoaK9hmeaEaL9hmea8Acdfh8Aka8Ac870mdaXcufhvada8AciGcx2goc:y1jjbfydbaCfcdtfydbhEadaocN1jjbfydbaCfcdtfydbhKadaoc:q1jjbfydbaCfcdtfydbhLcbhodnindnalavcsGcdtfydbaE9hmbaohYxdkcuhYavcufhvaocefgocz9hmbkkaEaOSgvaYce9iaYaH9oVgoGh3dndndndndncbcsavEaYaoEgvcs9hmbarce9imbaEaEaAaEcefaASgvEgAcefSmecmcsavEhvkasava8Acdtc;WeGV86bbavcs9hmeaEaA9Rgvcetavc8F917hvinaeavcFb0crtavcFbGV86bbaecefheavcje6hoavcr4hvaoTmbkaEhAxdkcPhvasa8AcdtcPV86bbaEhAkavTmbavaH9imekalaXcdtfaEBdbaXcefcsGhXkaOa3fhOalc;abfaQcitfgvaKBdlavaEBdbalc;abfaQcefcsGgvcitfgoaEBdlaoaLBdbavcefhoxikavcufhva8Aclfg8Ac;ab9hmbkkdnadceaKaOScetaYaOSEcx2gvc:q1jjbfydbaCfcdtfydbgLTadavcN1jjbfydbaCfcdtfydbg8AceSGadavc:y1jjbfydbaCfcdtfydbgYcdSGaOcb9hGazGg5ce9hmbaw9cu83ibaD9cu83ibaq9cu83ibak9cu83ibax9cu83ibam9cu83ibal9cu83iwal9cu83ibcbhOkcbhEaXcufgvhodnindnalaocsGcdtfydba8A9hmbaEhKxdkcuhKaocufhoaEcefgEcz9hmbkkcbhodnindnalavcsGcdtfydbaY9hmbaohExdkcuhEavcufhvaocefgocz9hmbkkaOaLaOSg8Efh3dndnaKcm0mbaKcefhKxekcbcsa8Aa3SgvEhKa3avfh3kdndnaEcm0mbaEcefhExekcbcsaYa3SgvEhEa3avfh3kc9:cua8EEh8FaEaKcltVhocbhvdndndninavcj1jjbfRbbaocFeGSmeavcefgvcz9hmbxdkka5aLaO9havcm0VVmbasavc;WeV86bbxekasa8F86bbaeao86bbaecefhekdna8EmbaLaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaLhAkdnaKcs9hmba8AaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka8AhAkdnaEcs9hmbaYaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaYhAkalaXcdtfaLBdbaXcefcsGhvdndnaKPzbeeeeeeeeeeeeeebekalavcdtfa8ABdbaXcdfcsGhvkdndnaEPzbeeeeeeeeeeeeeebekalavcdtfaYBdbavcefcsGhvkalc;abfaQcitfgoaLBdlaoa8ABdbalc;abfaQcefcsGcitfgoa8ABdlaoaYBdbalc;abfaQcdfcsGcitfgoaYBdlaoaLBdbaQcifhoavhXa3hOkascefhsaocsGhQaCcifgCai6mbkkcbhvaeaP0mbcbhvinaeavfavcj1jjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meceadtae6mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd:C:kjjbk:ydewu8Jjjjjbcz9Rhlcbhvdnaicvfae0mbcbhvabcbRb:C:kjjbc;qeV86bbal9cb83iwabcefhoabaefc98fhrdnaiTmbcbhwcbhDindnaoar6mbcbskadaDcdtfydbgqalcwfawaqav9Rgvavc8F91gv7av9Rc507gwcdtfgkydb9Rgvc8E91c9:Gavcdt7awVhvinaoavcFb0gecrtavcFbGV86bbavcr4hvaocefhoaembkakaqBdbaqhvaDcefgDai9hmbkkcbhvaoar0mbaocbBbbaoab9RclfhvkavkBeeucbhddninadcefgdc8F0meceadtae6mbkkadcwfcFeGcr9Uab2cvfk:dvli99dui99ludnaeTmbcuadcetcuftcu7:Yhvdndncuaicuftcu7:YgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhralcxfIdbhqdndnakJbbbb9GTmbaxhkxekJbbjZar:l:tgkak:maxJbbbb9GEhkJbbjZax:l:tgxax:marJbbbb9GEhrkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEavNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohmxekcjjjj94hmkdndnakJbbj:;akJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;akJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaifgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaDfgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkalczfhlaiclfhiaDcwfhDaecufgembkkk;klld99eud99eudnaeTmbdndncuaicuftcu7:YgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicdfciGcdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk:Hvdxue998Jjjjjbcjd9Rgo8Kjjjjbadcd4hrdndndndnavcd9hmbadcl6mearcearce0EhwaohDinaDc:CuBdbaDclfhDawcufgwmbkaeTmiadcl6mdarcearce0EhqarcdthkalhxcbhminaohDaxhwaqhPinaDaDydbgsawydbgzcL4cFeGc:cufcbazEgzasaz9kEBdbawclfhwaDclfhDaPcufgPmbkaxakfhxamcefgmae9hmbkkaeTmdxekaeTmekavcb9hadcl6gqVhHarcearce0Ehkarcdthrceai9Rhmcbhdindndndnavce9hmbaqmdc:CuhwalhDakhPinawaDydbgscL4cFeGc:cufcbasEgsawas9kEhwaDclfhDaPcufgPmbxdkkc:CuhwaHmbaohDalhPakhsinaDaPydbgzcL4cFeGgxc8Aaxc8A9kEc:cufcbazEBdbaPclfhPaDclfhDascufgsmbkkaqmbcbhDakhsinawhPdnavceSmbaoaDfydbhPkdndnalaDfIdbgOcjjj;8iamaPfgPcLt9R::NJbbbZJbbb:;aOJbbbb9GEMgO:lJbbb9p9DTmbaO:Ohzxekcjjjj94hzkabaDfazcFFFrGaPcKtVBdbaDclfhDascufgsmbkkabarfhbalarfhladcefgdae9hmbkkaocjdf8KjjjjbkFkdCui998Jjjjjbc:Gd9Rgv8Kjjjjbavc:4efcbc;KbzNjjjb8AcbhodnadTmbcbhoaiTmbdnabae9hmbavcuadcdtgoadcFFFFi0Ecbyd:K:kjjbHjjjjbbgeBd:4eavceBd:ydaeabaoz:tjjjb8Akavc:OefcwfcbBdbav9cb83i:Oeavc:Oefaeadaiavc:4efz:njjjbcuaicdtgraicFFFFi0Egwcbyd:K:kjjbHjjjjbbhoavc:4efavyd:ydgDcdtfaoBdbavaDcefgqBd:ydaoavyd:Oegkarz:tjjjbhxavc:4efaqcdtfadci9Ugmcbyd:K:kjjbHjjjjbbgoBdbavaDcdfgrBd:ydaocbamzNjjjbhPavc:4efarcdtfawcbyd:K:kjjbHjjjjbbgsBdbavaDcifgqBd:ydaxhoashrinaralIdbalaoydbgwcwawcw6Ecdtfc;ebfIdbMUdbaoclfhoarclfhraicufgimbkavc:4efaqcdtfcuamcdtadcFFFF970Ecbyd:K:kjjbHjjjjbbgqBdbavaDclfBd:yddnadci6mbamceamce0EhiaehoaqhrinarasaoydbcdtfIdbasaoclfydbcdtfIdbMasaocwfydbcdtfIdbMUdbaocxfhoarclfhraicufgimbkkavc;qbfhzavhoavyd:SehHavyd:WehOcbhwcbhrcbhAcehCinaohXcihQaearci2gLcdtfgocwfydbhdaoydbhDabaAcx2fgiclfaoclfydbgKBdbaiaDBdbaicwfadBdbaParfce86bbazadBdwazaKBdlazaDBdbaqarcdtfcbBdbdnawTmbcihQaXhiinazaQcdtfaiydbgoBdbaQaoaD9haoaK9hGaoad9hGfhQaiclfhiawcufgwmbkkaAcefhAaxaDcdtfgoaoydbcufBdbaxaKcdtfgoaoydbcufBdbaxadcdtfgoaoydbcufBdbcbhwinaOaHaeawaLfcdtfydbcdtgifydbcdtfgKhoakaifgDydbgdhidnadTmbdninaoydbarSmeaoclfhoaicufgiTmdxbkkaoadcdtaKfc98fydbBdbaDaDydbcufBdbkawcefgwci9hmbkdndndnaQTmbcuhrJbbbbhYcbhDavyd:SehKavyd:WehLindndnakazaDcdtfydbcdtgofydbgimbaDcefhDxekaDcs0hwasaofgdIdbh8AadalcbaDcefgDawEcdtfIdbalaxaofydbgwcwawcw6Ecdtfc;ebfIdbMgEUdbaEa8A:thEaicdthiaLaKaofydbcdtfhoinaqaoydbgwcdtfgdaEadIdbMg8AUdba8AaYaYa8A9DgdEhYawaradEhraoclfhoaic98fgimbkkaDaQ9hmbkarcu9hmekaCam9pmeindnaPaCfRbbmbaChrxdkamaCcefgC9hmbxdkkaQczaQcz6EhwazhoaXhzarcu9hmekkavyd:ydhokaocdtavc:4effc98fhrdninaoTmearydbcbyd:G:kjjbH:bjjjbbarc98fhraocufhoxbkkavc:Gdf8Kjjjjbk;UlevucuaicdtgvaicFFFFi0Egocbyd:K:kjjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd:K:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd:K:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavzNjjjb8Aadci9UhwdnadTmbabydbhoaehladhrinaoalydbcdtfgvavydbcefBdbalclfhlarcufgrmbkkdnaiTmbabydbhlabydlhrcbhvaihoinaravBdbarclfhralydbavfhvalclfhlaocufgombkkdnadci6mbawceawce0EhDabydlhrabydwhvcbhlinaecwfydbhoaeclfydbhdaraeydbcdtfgwawydbgwcefBdbavawcdtfalBdbaradcdtfgdadydbgdcefBdbavadcdtfalBdbaraocdtfgoaoydbgocefBdbavaocdtfalBdbaecxfheaDalcefgl9hmbkkdnaiTmbabydlheabydbhlinaeaeydbalydb9RBdbalclfhlaeclfheaicufgimbkkkQbabaeadaic:01jjbz:mjjjbkQbabaeadaic:C:jjjbz:mjjjbk9DeeuabcFeaicdtzNjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk;:kivuo99lu8Jjjjjbcj;Hb9Rgl8Kjjjjbcbhvalc1;Gbfcbc;KbzNjjjb8AalcuadcdtadcFFFFi0Egocbyd:K:kjjbHjjjjbbgrBd19GalceBd;O9Galcwfcbyd:m:kjjbBdbalcb8Pd:e:kjjb83ibalc;W;Gbfcwfcbyd:y:kjjbBdbalcb8Pd:q:kjjb83i;W9Gaicd4hwdndnadmbJFFuFhDJFFuuhqJFFuuhkJFFuFhxJFFuuhmJFFuFhPxekawcdthsaehzincbhiinalaifgHazaifIdbgDaHIdbgxaxaD9EEUdbalc;W;GbfaifgHaDaHIdbgxaxaD9DEUdbaiclfgicx9hmbkazasfhzavcefgvad9hmbkalIdwhqalId;49GhDalIdlhkalId;09GhxalIdbhmalId;W9GhPkdndnadTmbJbbbbJbbjZaPam:tJbbbb:xgPaxak:tgxaxaP9DEgxaDaq:tgDaDax9DEgD:vaDJbbbb9BEhDawcdthsarhHadhzindndnaDaeIdbam:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcv2c;j:KM;jbGhvdndnaDaeclfIdbak:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcq2cM;j:KMeGavVhvdndnaDaecwfIdbaq:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaHavaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcC2c:KM;j:KdGVBdbaeasfheaHclfhHazcufgzmbkalcbcj;GbzNjjjbhiarhHadheinaiaHydbgzcFrGcx2fgvavydbcefBdbaiazcq4cFrGcx2fgvavydlcefBdlaiazcC4cFrGcx2fgzazydwcefBdwaHclfhHaecufgembxdkkalcbcj;GbzNjjjb8AkcbhHcbhzcbhecbhvinalaHfgiydbhsaiazBdbaicwfgwydbhOawavBdbaiclfgiydbhwaiaeBdbasazfhzaOavfhvawaefheaHcxfgHcj;Gb9hmbkcbhialaocbyd:K:kjjbHjjjjbbgzBd:m9GdnadTmbabhHinaHaiBdbaHclfhHadaicefgi9hmbkadTmbabhiadhHinalaraiydbgecdtfydbcFrGcx2fgvavydbgvcefBdbazavcdtfaeBdbaiclfhiaHcufgHmbkazhiadhHinalaraiydbgecdtfydbcq4cFrGcx2fgvavydlgvcefBdlabavcdtfaeBdbaiclfhiaHcufgHmbkabhiadhHinalaraiydbgecdtfydbcC4cFrGcx2fgvavydwgvcefBdwazavcdtfaeBdbaiclfhiaHcufgHmbkadTmbcbhiinabazydbcdtfaiBdbazclfhzadaicefgi9hmbkkclhidninaic98Smealc1;Gbfaifydbcbyd:G:kjjbH:bjjjbbaic98fhixbkkalcj;Hbf8Kjjjjbk9teiucbcbyd:O:kjjbgeabcifc98GfgbBd:O:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:O:kjjbgeabcrfc94GfgbBd:O:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:O:kjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:O:kjjbfgdBd:O:kjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akkk:6ddbcjwk:Cdb4:h9w9N94:P:gW:j9O:ye9Pbbbbbbebbbdbbbebbbdbbbbbbbdbbbbbbbebbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc:Cqkzebbbebbbdbbb8WWbb", a = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]);
21
+ if (typeof WebAssembly != "object")
22
+ return {
23
+ supported: !1
24
+ };
25
+ var e, b = WebAssembly.instantiate(s(t), {}).then(function(m) {
26
+ e = m.instance, e.exports.__wasm_call_ctors(), e.exports.meshopt_encodeVertexVersion(0), e.exports.meshopt_encodeIndexVersion(1);
27
+ });
28
+ function s(m) {
29
+ for (var o = new Uint8Array(m.length), c = 0; c < m.length; ++c) {
30
+ var d = m.charCodeAt(c);
31
+ o[c] = d > 96 ? d - 97 : d > 64 ? d - 39 : d + 4;
32
+ }
33
+ for (var r = 0, c = 0; c < m.length; ++c)
34
+ o[r++] = o[c] < 60 ? a[o[c]] : (o[c] - 60) * 64 + o[++c];
35
+ return o.buffer.slice(0, r);
36
+ }
37
+ function i(m) {
38
+ if (!m)
39
+ throw new Error("Assertion failed");
40
+ }
41
+ function n(m) {
42
+ return new Uint8Array(m.buffer, m.byteOffset, m.byteLength);
43
+ }
44
+ function l(m, o, c, d) {
45
+ var r = e.exports.sbrk, h = r(o.length * 4), f = r(c * 4), g = new Uint8Array(e.exports.memory.buffer), u = n(o);
46
+ g.set(u, h), d && d(h, h, o.length, c);
47
+ var w = m(f, h, o.length, c);
48
+ g = new Uint8Array(e.exports.memory.buffer);
49
+ var v = new Uint32Array(c);
50
+ new Uint8Array(v.buffer).set(g.subarray(f, f + c * 4)), u.set(g.subarray(h, h + o.length * 4)), r(h - r(0));
51
+ for (var A = 0; A < o.length; ++A)
52
+ o[A] = v[o[A]];
53
+ return [v, w];
54
+ }
55
+ function p(m, o, c, d) {
56
+ var r = e.exports.sbrk, h = r(c * 4), f = r(c * d), g = new Uint8Array(e.exports.memory.buffer);
57
+ g.set(n(o), f), m(h, f, c, d), g = new Uint8Array(e.exports.memory.buffer);
58
+ var u = new Uint32Array(c);
59
+ return new Uint8Array(u.buffer).set(g.subarray(h, h + c * 4)), r(h - r(0)), u;
60
+ }
61
+ function j(m, o, c, d, r) {
62
+ var h = e.exports.sbrk, f = h(o), g = h(d * r), u = new Uint8Array(e.exports.memory.buffer);
63
+ u.set(n(c), g);
64
+ var w = m(f, o, g, d, r), v = new Uint8Array(w);
65
+ return v.set(u.subarray(f, f + w)), h(f - h(0)), v;
66
+ }
67
+ function P(m) {
68
+ for (var o = 0, c = 0; c < m.length; ++c) {
69
+ var d = m[c];
70
+ o = o < d ? d : o;
71
+ }
72
+ return o;
73
+ }
74
+ function k(m, o) {
75
+ if (i(o == 2 || o == 4), o == 4)
76
+ return new Uint32Array(m.buffer, m.byteOffset, m.byteLength / 4);
77
+ var c = new Uint16Array(m.buffer, m.byteOffset, m.byteLength / 2);
78
+ return new Uint32Array(c);
79
+ }
80
+ function M(m, o, c, d, r, h, f) {
81
+ var g = e.exports.sbrk, u = g(c * d), w = g(c * h), v = new Uint8Array(e.exports.memory.buffer);
82
+ v.set(n(o), w), m(u, c, d, r, w, f);
83
+ var A = new Uint8Array(c * d);
84
+ return A.set(v.subarray(u, u + c * d)), g(u - g(0)), A;
85
+ }
86
+ return {
87
+ ready: b,
88
+ supported: !0,
89
+ reorderMesh: function(m, o, c) {
90
+ var d = o ? c ? e.exports.meshopt_optimizeVertexCacheStrip : e.exports.meshopt_optimizeVertexCache : void 0;
91
+ return l(e.exports.meshopt_optimizeVertexFetchRemap, m, P(m) + 1, d);
92
+ },
93
+ reorderPoints: function(m, o) {
94
+ return i(m instanceof Float32Array), i(m.length % o == 0), i(o >= 3), p(e.exports.meshopt_spatialSortRemap, m, m.length / o, o * 4);
95
+ },
96
+ encodeVertexBuffer: function(m, o, c) {
97
+ i(c > 0 && c <= 256), i(c % 4 == 0);
98
+ var d = e.exports.meshopt_encodeVertexBufferBound(o, c);
99
+ return j(e.exports.meshopt_encodeVertexBuffer, d, m, o, c);
100
+ },
101
+ encodeIndexBuffer: function(m, o, c) {
102
+ i(c == 2 || c == 4), i(o % 3 == 0);
103
+ var d = k(m, c), r = e.exports.meshopt_encodeIndexBufferBound(o, P(d) + 1);
104
+ return j(e.exports.meshopt_encodeIndexBuffer, r, d, o, 4);
105
+ },
106
+ encodeIndexSequence: function(m, o, c) {
107
+ i(c == 2 || c == 4);
108
+ var d = k(m, c), r = e.exports.meshopt_encodeIndexSequenceBound(o, P(d) + 1);
109
+ return j(e.exports.meshopt_encodeIndexSequence, r, d, o, 4);
110
+ },
111
+ encodeGltfBuffer: function(m, o, c, d) {
112
+ var r = {
113
+ ATTRIBUTES: this.encodeVertexBuffer,
114
+ TRIANGLES: this.encodeIndexBuffer,
115
+ INDICES: this.encodeIndexSequence
116
+ };
117
+ return i(r[d]), r[d](m, o, c);
118
+ },
119
+ encodeFilterOct: function(m, o, c, d) {
120
+ return i(c == 4 || c == 8), i(d >= 1 && d <= 16), M(e.exports.meshopt_encodeFilterOct, m, o, c, d, 16);
121
+ },
122
+ encodeFilterQuat: function(m, o, c, d) {
123
+ return i(c == 8), i(d >= 4 && d <= 16), M(e.exports.meshopt_encodeFilterQuat, m, o, c, d, 16);
124
+ },
125
+ encodeFilterExp: function(m, o, c, d, r) {
126
+ i(c > 0 && c % 4 == 0), i(d >= 1 && d <= 24);
127
+ var h = {
128
+ Separate: 0,
129
+ SharedVector: 1,
130
+ SharedComponent: 2
131
+ };
132
+ return M(e.exports.meshopt_encodeFilterExp, m, o, c, d, c, r ? h[r] : 1);
133
+ }
134
+ };
135
+ })();
136
+ var ct = (function() {
137
+ var t = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;d8Yqdbk:yzeHu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhlaicefhodnadTmbalc;WFbGglcjdalcjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxdndndndnalc9WGgmTmbcbhPcehsawcjdfhzaohHinaraH9Rax6midnaraHaxfgo9RcK6mbczhlcbhOinalgic9WfgAawcj;cbffhldndndndndnaHaAco4fRbbaOcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgAco4gCaCciSgCE86bbawcj;cbfaifglcGfaoclfaCfgCRbbaAcl4ciGgXaXciSgXE86bbalcVfaCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc7faCaXfgCRbbaAciGgAaAciSgAE86bbalctfaCaAfgCRbbaoRbegAco4gXaXciSgXE86bbalc91faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc4faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc93faCaXfgCRbbaAciGgAaAciSgAE86bbalc94faCaAfgCRbbaoRbdgAco4gXaXciSgXE86bbalc95faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc96faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc97faCaXfgCRbbaAciGgAaAciSgAE86bbalc98faCaAfgARbbaoRbigoco4gCaCciSgCE86bbalc99faAaCfgARbbaocl4ciGgCaCciSgCE86bbalc9:faAaCfgARbbaocd4ciGgCaCciSgCE86bbalcufaAaCfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgAcl4gCaCcsSgCE86bbawcj;cbfaifglcGfaocwfaCfgCRbbaAcsGgAaAcsSgAE86bbalcVfaCaAfgARbbaoRbegCcl4gXaXcsSgXE86bbalc7faAaXfgARbbaCcsGgCaCcsSgCE86bbalctfaAaCfgARbbaoRbdgCcl4gXaXcsSgXE86bbalc91faAaXfgARbbaCcsGgCaCcsSgCE86bbalc4faAaCfgARbbaoRbigCcl4gXaXcsSgXE86bbalc93faAaXfgARbbaCcsGgCaCcsSgCE86bbalc94faAaCfgARbbaoRblgCcl4gXaXcsSgXE86bbalc95faAaXfgARbbaCcsGgCaCcsSgCE86bbalc96faAaCfgARbbaoRbvgCcl4gXaXcsSgXE86bbalc97faAaXfgARbbaCcsGgCaCcsSgCE86bbalc98faAaCfgARbbaoRbogCcl4gXaXcsSgXE86bbalc99faAaXfgARbbaCcsGgCaCcsSgCE86bbalc9:faAaCfgARbbaoRbrgocl4gCaCcsSgCE86bbalcufaAaCfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaOcdfhOaiczfhlarao9RcL0mekkaiam6miaoTmidnakTmbawaPfRbbhOawcj;cbfhlazhiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkkazcefhzaPcefgPad6hsaohHaPad9hmexvkkcbhoasceGmdxikaoaxad2fhXdnakTmbcbhmcehsawcjdfhCinarao9Rax6miaoTmdaoaxfhoawamfRbbhOawcj;cbfhlaChiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkaCcefhCamcefgmad6hsamad9hmbkaXhoxikcbhlcehsinarao9Rax6mdaoTmeaoaxfhoalcefglad6hsadal9hmbkaXhoxdkcbhoasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekcbc99arao9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;xzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabaiavcdfciGfcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabaiavcufciGfcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabaiavciGfcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb", a = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;b9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;e8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincbhHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAcd0hHalhOaAcefgAclSmdxekkcbhlaHceGTmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;tzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnaval9pmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb", e = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11, 7, 0, 65, 0, 253, 15, 26, 11]), b = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]);
138
+ if (typeof WebAssembly != "object")
139
+ return {
140
+ supported: !1
141
+ };
142
+ var s = WebAssembly.validate(e) ? a : t, i, n = WebAssembly.instantiate(l(s), {}).then(function(r) {
143
+ i = r.instance, i.exports.__wasm_call_ctors();
144
+ });
145
+ function l(r) {
146
+ for (var h = new Uint8Array(r.length), f = 0; f < r.length; ++f) {
147
+ var g = r.charCodeAt(f);
148
+ h[f] = g > 96 ? g - 97 : g > 64 ? g - 39 : g + 4;
149
+ }
150
+ for (var u = 0, f = 0; f < r.length; ++f)
151
+ h[u++] = h[f] < 60 ? b[h[f]] : (h[f] - 60) * 64 + h[++f];
152
+ return h.buffer.slice(0, u);
153
+ }
154
+ function p(r, h, f, g, u, w, v) {
155
+ var A = r.exports.sbrk, x = g + 3 & -4, D = A(x * u), I = A(w.length), E = new Uint8Array(r.exports.memory.buffer);
156
+ E.set(w, I);
157
+ var S = h(D, g, u, I, w.length);
158
+ if (S == 0 && v && v(D, x, u), f.set(E.subarray(D, D + g * u)), A(D - A(0)), S != 0)
159
+ throw new Error("Malformed buffer data: " + S);
160
+ }
161
+ var j = {
162
+ NONE: "",
163
+ OCTAHEDRAL: "meshopt_decodeFilterOct",
164
+ QUATERNION: "meshopt_decodeFilterQuat",
165
+ EXPONENTIAL: "meshopt_decodeFilterExp"
166
+ }, P = {
167
+ ATTRIBUTES: "meshopt_decodeVertexBuffer",
168
+ TRIANGLES: "meshopt_decodeIndexBuffer",
169
+ INDICES: "meshopt_decodeIndexSequence"
170
+ }, k = [], M = 0;
171
+ function m(r) {
172
+ var h = {
173
+ object: new Worker(r),
174
+ pending: 0,
175
+ requests: {}
176
+ };
177
+ return h.object.onmessage = function(f) {
178
+ var g = f.data;
179
+ h.pending -= g.count, h.requests[g.id][g.action](g.value), delete h.requests[g.id];
180
+ }, h;
181
+ }
182
+ function o(r) {
183
+ for (var h = "self.ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(l(s)) + "]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = " + d.name + ";" + p.toString() + d.toString(), f = new Blob([h], { type: "text/javascript" }), g = URL.createObjectURL(f), u = k.length; u < r; ++u)
184
+ k[u] = m(g);
185
+ for (var u = r; u < k.length; ++u)
186
+ k[u].object.postMessage({});
187
+ k.length = r, URL.revokeObjectURL(g);
188
+ }
189
+ function c(r, h, f, g, u) {
190
+ for (var w = k[0], v = 1; v < k.length; ++v)
191
+ k[v].pending < w.pending && (w = k[v]);
192
+ return new Promise(function(A, x) {
193
+ var D = new Uint8Array(f), I = ++M;
194
+ w.pending += r, w.requests[I] = { resolve: A, reject: x }, w.object.postMessage({ id: I, count: r, size: h, source: D, mode: g, filter: u }, [D.buffer]);
195
+ });
196
+ }
197
+ function d(r) {
198
+ var h = r.data;
199
+ if (!h.id)
200
+ return self.close();
201
+ self.ready.then(function(f) {
202
+ try {
203
+ var g = new Uint8Array(h.count * h.size);
204
+ p(f, f.exports[h.mode], g, h.count, h.size, h.source, f.exports[h.filter]), self.postMessage({ id: h.id, count: h.count, action: "resolve", value: g }, [g.buffer]);
205
+ } catch (u) {
206
+ self.postMessage({ id: h.id, count: h.count, action: "reject", value: u });
207
+ }
208
+ });
209
+ }
210
+ return {
211
+ ready: n,
212
+ supported: !0,
213
+ useWorkers: function(r) {
214
+ o(r);
215
+ },
216
+ decodeVertexBuffer: function(r, h, f, g, u) {
217
+ p(i, i.exports.meshopt_decodeVertexBuffer, r, h, f, g, i.exports[j[u]]);
218
+ },
219
+ decodeIndexBuffer: function(r, h, f, g) {
220
+ p(i, i.exports.meshopt_decodeIndexBuffer, r, h, f, g);
221
+ },
222
+ decodeIndexSequence: function(r, h, f, g) {
223
+ p(i, i.exports.meshopt_decodeIndexSequence, r, h, f, g);
224
+ },
225
+ decodeGltfBuffer: function(r, h, f, g, u, w) {
226
+ p(i, i.exports[P[u]], r, h, f, g, i.exports[j[w]]);
227
+ },
228
+ decodeGltfBufferAsync: function(r, h, f, g, u) {
229
+ return k.length > 0 ? c(r, h, f, P[g], j[u]) : n.then(function() {
230
+ var w = new Uint8Array(r * h);
231
+ return p(i, i.exports[P[g]], w, r, h, f, i.exports[j[u]]), w;
232
+ });
233
+ }
234
+ };
235
+ })();
236
+ (function() {
237
+ var t = "b9H79Tebbbe9Ek9Geueu9Geub9Gbb9GPuuuuuuuuuuu99uueu9Gvuuuuub9Gluuuub9Gquuuuuuu99uueu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9GiuuueuizsdilvoirwDbqqbeqlve9Weiiviebeoweuec:G;jekr:Tewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bl8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bvQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7boX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2Wbra9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbwl79IV9RbDDwebcekdxmq::9Usdbk;i6iKuY99Ou8Jjjjjbc;W;ab9RgP8KjjjjbaPcwfcbc;Kbz:ljjjb8AaPcualcefgscdtascFFFFi0Ecbyd1:jjjbHjjjjbbgzBdwaPceBd9OaPazBdbaPcuadcitadcFFFFe0Ecbyd1:jjjbHjjjjbbgHBdxaPcdBd9OaPaHBdlaPaeadalcbz:cjjjbaPcualcdtgOalcFFFFi0EgAcbyd1:jjjbHjjjjbbgCBdzaPciBd9OaPaAcbyd1:jjjbHjjjjbbgXBdCaPclBd9Oalcd4alfhQcehLinaLgscethLasaQ6mbkcbhKaPcuascdtgLascFFFFi0Ecbyd1:jjjbHjjjjbbgQBdKaPcvBd9OaQcFeaLz:ljjjbhYdnalTmbavcd4h8AascufhEinaiaKa8A2cdtfg3ydlgscH4as7c:F:b:DD2a3ydbgscH4as7c;D;O:B8J27a3ydwgscH4as7c:3F;N8N27hQcbhsdndninaYaQaEGgQcdtfg5ydbgLcuSmeaiaLa8A2cdtfa3cxz:ojjjbTmdascefgsaQfhQasaE9nmbxdkka5aKBdbaKhLkaCaKcdtfaLBdbaKcefgKal9hmbkcbhsaXhLinaLasBdbaLclfhLalascefgs9hmbkcbhsaChLaXhQindnasaLydbgESmbaQaXaEcdtfgEydbBdbaEasBdbkaLclfhLaQclfhQalascefgs9hmbkkcbh8EaYcbyd:m:jjjbH:bjjjbbaPclBd9OaPalcbyd1:jjjbHjjjjbbgEBdKaPcvBd9OaPaAcbyd1:jjjbHjjjjbbgsBd3aPcoBd9OaPaAcbyd1:jjjbHjjjjbbgLBdaaPcrBd9OascFeaOz:ljjjbh8FaLcFeaOz:ljjjbhadnalTmbaHcwfhhindnaza8EgQcefg8Ecdtfydbg3azaQcdtgsfydbgLSmba3aL9RhOaHaLcitfhgaaasfh8Ja8FasfhKcbh8Aindndnaga8Acitfydbg5aQ9hmbaKaQBdba8JaQBdbxekdnaza5cdtg8KfgsclfydbgLasydbgsSmbaHascitg3fydbaQSmeaLas9Rh8Lascu7aLfhYaha3fhLcbhsinaYasSmeascefhsaLydbh3aLcwfhLa3aQ9hmbkasa8L6mekaaa8KfgsaQa5asydbcuSEBdbaKa5aQaKydbcuSEBdbka8Acefg8AaO9hmbkka8Eal9hmbkaChLaXhQaah3a8Fh8AcbhsindndnasaLydbg59hmbdnasaQydbg59hmba8Aydbh5dna3ydbgYcu9hmba5cu9hmbaEasfcb86bbxikaEasfhKdnasaYSmbasa5SmbaKce86bbxikaKcl86bbxdkdnasaXa5cdtgYfydb9hmbdna3ydbgKcuSmbasaKSmba8AydbgOcuSmbasaOSmbaaaYfydbggcuSmbaga5Smba8FaYfydbgYcuSmbaYa5SmbdnaCaKcdtfydbaCaYcdtfydb9hmbaCaOcdtfydbaCagcdtfydb9hmbaEasfcd86bbxlkaEasfcl86bbxikaEasfcl86bbxdkaEasfcl86bbxekaEasfaEa5fRbb86bbkaLclfhLaQclfhQa3clfh3a8Aclfh8Aalascefgs9hmbkaxceGTmbaEhsalhLindnasRbbce9hmbascl86bbkascefhsaLcufgLmbkkcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh8JaPcwfaPyd9Ogscdtfa8JBdbaPascefgOBd9Oa8Jaialavz:djjjbdndnaDmbcbhvxekcbh5aPcwfaOcdtfcuaDal2gLcdtaLcFFFFi0Ecbyd1:jjjbHjjjjbbgvBdbaPascdfgOBd9OalTmbarcd4cdthYaDcdthKavh8AinaohsawhLa8AhQaDh3inaQasIdbaLIdbNUdbasclfhsaLclfhLaQclfhQa3cufg3mbkaoaYfhoa8AaKfh8Aa5cefg5al9hmbkkaPcwfaOcdtfcualc8S2gsalc;D;O;f8U0EgQcbyd1:jjjbHjjjjbbgLBdbaPaOcefg3Bd9OaLcbasz:ljjjbh8EdndndnaDTmbaPcwfa3cdtfaQcbyd1:jjjbHjjjjbbgoBdbaPaOcdfgLBd9Oaocbasz:ljjjb8AaPcwfaLcdtfcuaDal2gscltgLascFFFFb0Ecbyd1:jjjbHjjjjbbgwBdbaPaOcifBd9OawcbaLz:ljjjb8AadmexdkcbhocbhwadTmekcbh8AaehLindna8JaLclfydbg5cx2fgsIdba8JaLydbgYcx2fgQIdbg8M:tg8Na8JaLcwfydbgKcx2fg3IdlaQIdlgy:tg8PNa3Idba8M:tgIasIdlay:tg8RN:tg8Sa8SNa8Ra3IdwaQIdwgR:tg8UNa8PasIdwaR:tg8RN:tg8Pa8PNa8RaINa8Ua8NN:tg8Na8NNMM:rgIJbbbb9ETmba8SaI:vh8Sa8NaI:vh8Na8PaI:vh8Pka8EaCaYcdtfydbc8S2fgsa8PaI:rgIa8PNNg8RasIdbMUdbasa8NaIa8NNg8VNg8UasIdlMUdlasa8SaIa8SNg8WNg8XasIdwMUdwasa8Va8PNg8VasIdxMUdxasa8Wa8PNg8YasIdzMUdzasa8Wa8NNg8WasIdCMUdCasa8PaIa8SaRNa8Pa8MNaya8NNMM:mgyNg8MNg8PasIdKMUdKasa8Na8MNg8NasId3MUd3asa8Sa8MNg8SasIdaMUdaasa8MayNg8MasId8KMUd8KasaIasIdyMUdya8EaCa5cdtfydbc8S2fgsa8RasIdbMUdbasa8UasIdlMUdlasa8XasIdwMUdwasa8VasIdxMUdxasa8YasIdzMUdzasa8WasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asa8SasIdaMUdaasa8MasId8KMUd8KasaIasIdyMUdya8EaCaKcdtfydbc8S2fgsa8RasIdbMUdbasa8UasIdlMUdlasa8XasIdwMUdwasa8VasIdxMUdxasa8YasIdzMUdzasa8WasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asa8SasIdaMUdaasa8MasId8KMUd8KasaIasIdyMUdyaLcxfhLa8Acifg8Aad6mbkcbh5aehYincbhLinaEaeaLc:G1jjbfydba5fcdtfydbgQfRbbhsdndnaEaYaLfydbg3fRbbg8Ac99fcFeGcpe0mbasceSmbascd9hmekdna8AcufcFeGce0mba8Fa3cdtfydbaQ9hmekdnascufcFeGce0mbaaaQcdtfydba39hmekdna8Acv2asfc:W1jjbfRbbTmbaCaQcdtfydbaCa3cdtfydb0mekJbbacJbbjZasceSEhIa8AceShOa8JaeaLc:K1jjbfydba5fcdtfydbcx2fhsdna8JaQcx2fg8AIdwa8Ja3cx2fgKIdwgy:tg8Pa8PNa8AIdbaKIdbgR:tg8Na8NNa8AIdlaKIdlg8R:tg8Sa8SNMM:rg8MJbbbb9ETmba8Pa8M:vh8Pa8Sa8M:vh8Sa8Na8M:vh8NkJbbacaIaOEh8WdnasIdway:tgIa8PaIa8PNasIdbaR:tg8Xa8NNa8SasIdla8R:tg8VNMMg8UN:tgIaINa8Xa8Na8UN:tg8Pa8PNa8Va8Sa8UN:tg8Na8NNMM:rg8SJbbbb9ETmbaIa8S:vhIa8Na8S:vh8Na8Pa8S:vh8Pka8EaCa3cdtfydbc8S2fgsa8Pa8Wa8MNg8Sa8PNNg8UasIdbMUdbasa8Na8Sa8NNg8WNg8XasIdlMUdlasaIa8SaINg8MNg8VasIdwMUdwasa8Wa8PNg8WasIdxMUdxasa8Ma8PNg8YasIdzMUdzasa8Ma8NNg8ZasIdCMUdCasa8Pa8SaIayNa8PaRNa8Ra8NNMM:mgyNg8MNg8PasIdKMUdKasa8Na8MNg8NasId3MUd3asaIa8MNgIasIdaMUdaasa8MayNg8MasId8KMUd8Kasa8SasIdyMUdya8EaCaQcdtfydbc8S2fgsa8UasIdbMUdbasa8XasIdlMUdlasa8VasIdwMUdwasa8WasIdxMUdxasa8YasIdzMUdzasa8ZasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asaIasIdaMUdaasa8MasId8KMUd8Kasa8SasIdyMUdykaLclfgLcx9hmbkaYcxfhYa5cifg5ad6mbkaDTmbcbhYinJbbbbhRa8JaeaYcdtfgsclfydbgKcx2fgLIdwa8JasydbgOcx2fgQIdwg8V:tg8Na8NNaLIdbaQIdbg8Y:tgIaINaLIdlaQIdlg8Z:tg8Sa8SNMMg8Wa8Jascwfydbggcx2fgsIdwa8V:tg8MNa8Na8Na8MNaIasIdba8Y:tgyNa8SasIdla8Z:tg8RNMMg8PN:tJbbbbJbbjZa8Wa8Ma8MNayayNa8Ra8RNMMg8XNa8Pa8PN:tg8U:va8UJbbbb9BEg8UNh80a8Xa8NNa8Ma8PN:ta8UNh81a8Wa8RNa8Sa8PN:ta8UNhBa8Xa8SNa8Ra8PN:ta8UNh83a8WayNaIa8PN:ta8UNhUa8XaINaya8PN:ta8UNh85aIa8RNaya8SN:tg8Pa8PNa8Sa8MNa8Ra8NN:tg8Pa8PNa8NayNa8MaIN:tg8Pa8PNMM:r:rh8PavaOaD2cdtfhLavagaD2cdtfhQavaKaD2cdtfh3a8V:mh86a8Z:mh87a8Y:mh88cbh8AaDh5Jbbbbh8RJbbbbh8UJbbbbh8WJbbbbh8XJbbbbh8VJbbbbh8YJbbbbh8ZJbbbbh89Jbbbbh8:inaPc;Wbfa8Afgscwfa8Pa81a3IdbaLIdbg8M:tg8SNa80aQIdba8M:tgyNMg8NNUdbasclfa8Pa83a8SNaBayNMgINUdbasa8Pa85a8SNaUayNMg8SNUdbascxfa8Pa86a8NNa87aINa8Ma88a8SNMMMg8MNUdba8Pa8NaINNa8XMh8Xa8Pa8Na8SNNa8VMh8Va8PaIa8SNNa8YMh8Ya8Pa8Ma8MNNaRMhRa8Pa8Na8MNNa8RMh8Ra8PaIa8MNNa8UMh8Ua8Pa8Sa8MNNa8WMh8Wa8Pa8Na8NNNa8ZMh8Za8PaIaINNa89Mh89a8Pa8Sa8SNNa8:Mh8:aLclfhLa3clfh3aQclfhQa8Aczfh8Aa5cufg5mbkaoaCaOcdtfydbgLc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyaoaCaKcdtfydbgKc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyaoaCagcdtfydbgOc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyawaLaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkawaKaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkawaOaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkaYcifgYad6mbkkdnabaeSmbabaeadcdtz:kjjjb8AkaPydbhZcbhsdnalTmbaZclfhsaZydbh3aEhLalh8AcbhQincbasydbg5a39RaLRbbcpeGEaQfhQaLcefhLasclfhsa5h3a8Acufg8AmbkaQce4hskcuadas9Rcifgrcx2arc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh8LaPcwfaPyd9Ogscdtfa8LBdbaPascefgLBd9OaPcwfaLcdtfcuarcdtarcFFFFi0Ecbyd1:jjjbHjjjjbbgxBdbaPascdfgLBd9OaPcwfaLcdtfaAcbyd1:jjjbHjjjjbbgHBdbaPascifgLBd9OaPcwfaLcdtfalcbyd1:jjjbHjjjjbbgnBdbaPasclfBd9OJbbbbh8Ydnadaq9nmbdnarci6mbakakNh8VaDclthca8Lcwfh9cJbbbbh8YinaPabadghalaCz:cjjjbabhOcbhzcbhKincbhsindnaCaOasfydbgQcdtgYfydbg8AaCabasc;m1jjbfydbaKfcdtfydbgLcdtfydbg5SmbaEaLfRbbgecv2aEaQfRbbg3fc;G1jjbfRbbg8Ka3cv2aefggc;G1jjbfRbbgiVcFeGTmbdnagc:W1jjbfRbbTmba5a8A0mekdna3ae9hmba3cufcFeGce0mba8FaYfydbaL9hmeka8Lazcx2fg3aLaQaicFeGg8AEBdla3aQaLa8AEBdba3a8Aa8KGcb9hBdwazcefhzkasclfgscx9hmbkdnaKcifgKah9pmbaOcxfhOazcifar9nmekkdnazmbahhdxikcbheinJbbbbJbbjZa8EaCa8Laecx2fg3ydlg8Aa3ydbg5a3ydwgLEgKcdtfydbg8Kc8S2gifgsIdyg8P:va8PJbbbb9BEasIdwa8Ja5a8AaLEgYcx2fgLIdwg8SNasIdzaLIdbg8MNasIdaMg8Pa8PMMa8SNasIdlaLIdlgyNasIdCa8SNasId3Mg8Pa8PMMayNasIdba8MNasIdxayNasIdKMg8Pa8PMMa8MNasId8KMMM:lNh8WJbbbbJbbjZa8EaCa5cdtfydbgdc8S2gQfgsIdyg8P:va8PJbbbb9BEasIdwa8Ja8Acx2fgLIdwgINasIdzaLIdbgRNasIdaMg8Pa8PMMaINasIdlaLIdlg8RNasIdCaINasId3Mg8Pa8PMMa8RNasIdbaRNasIdxa8RNasIdKMg8Pa8PMMaRNasId8KMMM:lNh8Xa3cwfhOa3clfhgdnaDTmbaoaQfgQIdwaINaQIdzaRNaQIdaMg8Pa8PMMaINaQIdla8RNaQIdCaINaQId3Mg8Pa8PMMa8RNaQIdbaRNaQIdxa8RNaQIdKMg8Pa8PMMaRNaQId8KMMMh8Nava8AaD2cdtfhLawadaD2cltfhsaQIdyh8UaDhQinaLIdbg8PJbbb;aNascxfIdbaIascwfIdbNaRasIdbNa8RasclfIdbNMMMNa8Pa8PNa8UNa8NMMh8NaLclfhLasczfhsaQcufgQmbkaoaifgQIdwa8SNaQIdza8MNaQIdaMg8Pa8PMMa8SNaQIdlayNaQIdCa8SNaQId3Mg8Pa8PMMayNaQIdba8MNaQIdxayNaQIdKMg8Pa8PMMa8MNaQId8KMMMhIavaYaD2cdtfhLawa8KaD2cltfhsaQIdyhRaDhQinaLIdbg8PJbbb;aNascxfIdba8SascwfIdbNa8MasIdbNayasclfIdbNMMMNa8Pa8PNaRNaIMMhIaLclfhLasczfhsaQcufgQmbka8WaI:lMh8Wa8Xa8N:lMh8Xkaga8AaYa8Xa8W9FgsEBdba3a5aKasEBdbaOa8Xa8WasEUdbaecefgeaz9hmbkaPc;Wbfcbcj;abz:ljjjb8Aa9chsazhLinaPc;WbfasydbcO4c;8ZGfgQaQydbcefBdbascxfhsaLcufgLmbkcbhscbhLinaPc;WbfasfgQydbh3aQaLBdba3aLfhLasclfgscj;ab9hmbkcbhsa9chLinaPc;WbfaLydbcO4c;8ZGfgQaQydbgQcefBdbaxaQcdtfasBdbaLcxfhLazascefgs9hmbkahaq9RgQci9UhJdnalTmbcbhsaHhLinaLasBdbaLclfhLalascefgs9hmbkkcbh9eancbalz:ljjjbhTaQcO9UhSaJce4h9haPydlh9icbhicbhgdnina8Laxagcdtfydbcx2fgOIdwg8Na8V9EmeaiaJ9pmeJFFuuh8Pdna9haz9pmba8Laxa9hcdtfydbcx2fIdwJbb;aZNh8Pkdna8Na8P9ETmbaiaS0mdkdnaTaCaOydlg6cdtg9kfydbg3fg0RbbaTaCaOydbgKcdtg9mfydbg9nfg9oRbbVmbdnaZa9ncdtfgsclfydbgLasydbgsSmbaLas9Rh5a9iascitfhsa8Ja3cx2fgYcwfhdaYclfhAa8Ja9ncx2fg8Kcwfh9pa8Kclfh9qcbhLcehednindnaHasydbcdtfydbgQa3SmbaHasclfydbcdtfydbg8Aa3SmbaQa8ASmba8Ja8Acx2fg8AIdba8JaQcx2fgQIdbgI:tg8Pa9qIdbaQIdlg8S:tg8MNa8KIdbaI:tgya8AIdla8S:tg8NN:ta8PaAIdba8S:tgRNaYIdbaI:tg8Ra8NN:tNa8Na9pIdbaQIdwg8S:tg8UNa8Ma8AIdwa8S:tgIN:ta8NadIdba8S:tg8SNaRaIN:tNaIayNa8Ua8PN:taIa8RNa8Sa8PN:tNMMJbbbb9FmdkascwfhsaLcefgLa56hea5aL9hmbkkaeceGTmba9hcefh9hxeka8Ea3c8S2gQfgsa8Ea9nc8S2g8AfgLIdbasIdbMUdbasaLIdlasIdlMUdlasaLIdwasIdwMUdwasaLIdxasIdxMUdxasaLIdzasIdzMUdzasaLIdCasIdCMUdCasaLIdKasIdKMUdKasaLId3asId3MUd3asaLIdaasIdaMUdaasaLId8KasId8KMUd8KasaLIdyasIdyMUdydnaDTmbaoaQfgsaoa8AfgLIdbasIdbMUdbasaLIdlasIdlMUdlasaLIdwasIdwMUdwasaLIdxasIdxMUdxasaLIdzasIdzMUdzasaLIdCasIdCMUdCasaLIdKasIdKMUdKasaLId3asId3MUd3asaLIdaasIdaMUdaasaLId8KasId8KMUd8KasaLIdyasIdyMUdyaca9n2heaca32hYawhLaDh8AinaLaYfgsaLaefgQIdbasIdbMUdbasclfg5aQclfIdba5IdbMUdbascwfg5aQcwfIdba5IdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa8Acufg8AmbkkaOcwfhLdndndndnaEaKfgQRbbc9:fPdebdkaKhsinaHascdtgsfa3BdbaXasfydbgsaK9hmbxikkaXa9kfydbhsaXa9mfydbhKaHa9mfa6Bdbash6kaHaKcdtfa6Bdbka9oce86bba0ce86bbaLIdbg8Pa8Ya8Ya8P9DEh8Ya9ecefh9ececdaQRbbceSEaifhikagcefggaz9hmbkkdna9embahhdxikdnalTmbcbhLa8FhsindnasydbgQcuSmbdnaLaHaQcdtg3fydbgQ9hmba8Fa3fydbhQkasaQBdbkasclfhsalaLcefgL9hmbkcbhLaahsindnasydbgQcuSmbdnaLaHaQcdtg3fydbgQ9hmbaaa3fydbhQkasaQBdbkasclfhsalaLcefgL9hmbkkcbhdabhscbh8AindnaHasydbcdtfydbgLaHasclfydbcdtfydbgQSmbaLaHascwfydbcdtfydbg3SmbaQa3Smbabadcdtfg5aLBdba5clfaQBdba5cwfa3Bdbadcifhdkascxfhsa8Acifg8Aah6mbkadaq9nmdxbkkaPabadalaCz:cjjjbkdnamTmbama8Y:rUdbkaPyd9OgscdtaPcwffc98fhCdninasTmeaCydbcbyd:m:jjjbH:bjjjbbaCc98fhCascufhsxbkkaPc;W;abf8Kjjjjbadk;:ieouabydlhvabydbclfcbaicdtz:ljjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbarcearce0EhdinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfheadcufgdmbkkabydbcbBdbk:Zldouv998Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdnadTmbaicd4hvdnabTmbavcdthocbhraehwinabarcx2fgiaearav2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinalczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbalaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkawaofhwarcefgrad9hmbxdkkavcdthrcbhwincbhiinalczfaifgDaeaifIdbgqaDIdbgkakaq9EEUdbalaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkaearfheawcefgwad9hmbkkdnabTmbadTmbJbbbbJbbjZalIdbalIdzgk:tJbbbb:xgqalIdlalIdCgx:tgmamaq9DEgqalIdwalIdKgm:tgPaPaq9DEgq:vaqJbbbb9BEhqinabaqabIdbak:tNUdbabclfgiaqaiIdbax:tNUdbabcwfgiaqaiIdbam:tNUdbabcxfhbadcufgdmbkkk8KbabaeadaialavcbcbcbcbaoarawaDz:bjjjbk8KbabaeadaialavaoarawaDaqakaxamz:bjjjbk;lOowud99wue99iul998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcwfcbc;Kbz:ljjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgqBdwawceBd9Oaqaeadaiz:djjjbawcuadcdtadcFFFFi0Egkcbyd1:jjjbHjjjjbbgxBdxawcdBd9Oadcd4adfhmceheinaegicetheaiam6mbkcbhmawcuaicdtgPaicFFFFi0Ecbyd1:jjjbHjjjjbbgsBdzawciBd9Odndnar:Zgz:rJbbbZMgH:lJbbb9p9DTmbaH:Ohexekcjjjj94hekaicufhOc:bwhAcbhCcbhXadhQinaChLaeaAgKcufaeaK9iEamgDcefaeaD9kEhYdndnadTmbaYcuf:YhHaqhiaxheadhmindndnaiIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhAxekcjjjj94hAkaAcCthAdndnaiclfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcqtaAVhAdndnaicwfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaeaAaCVBdbaicxfhiaeclfheamcufgmmbkascFeaPz:ljjjbhEcbh3cbh5indnaEaxa5cdtfydbgAcm4aA7c:v;t;h;Ev2gics4ai7aOGgmcdtfgCydbgecuSmbaeaASmbcehiinaEamaifaOGgmcdtfgCydbgecuSmeaicefhiaeaA9hmbkkaCaABdba3aecuSfh3a5cefg5ad9hmbxdkkascFeaPz:ljjjb8Acbh3kaDaYa3ar0giEhmaLa3aiEhCdna3arSmbaYaKaiEgAam9Rcd9imbdndnaXcl0mbdnaQ:ZgHaL:Zg8A:taY:Yg8EaD:Y:tg8Fa8EaK:Y:tgaa3:Zghaz:tNNNaHaz:taaNa8Aah:tNa8Aaz:ta8FNahaH:tNM:va8EMJbbbZMgH:lJbbb9p9DTmbaH:Ohexdkcjjjj94hexekamaAfcd9Theka3aQaiEhQaXcefgXcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd1:jjjbHjjjjbbg5BdCawclBd9OdndnadTmbamcuf:YhHaqhiaxheadhmindndnaiIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhAxekcjjjj94hAkaAcCthAdndnaiclfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcqtaAVhAdndnaicwfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaeaAaCVBdbaicxfhiaeclfheamcufgmmbkascFeaPz:ljjjbhEcbhDcbh3inaxa3cdtgYfydbgAcm4aA7c:v;t;h;Ev2gics4ai7hecbhidndninaEaeaOGgmcdtfgCydbgecuSmednaxaecdtgCfydbaASmbaicefgiamfheaiaO9nmekka5aCfydbhixekaCa3BdbaDhiaDcefhDka5aYfaiBdba3cefg3ad9hmbkcuaDc32giaDc;j:KM;jb0EhexekascFeaPz:ljjjb8AcbhDcbhekawaecbyd1:jjjbHjjjjbbgeBdKawcvBd9Oaecbaiz:ljjjbhOavcd4hxdnadTmbaxcdth3a5hmalhAaqheadhEinaOamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaAc;81jjbalEgCIdbaiIdxMUdxaiaCIdlaiIdzMUdzaiaCIdwaiIdCMUdCaiaiIdKJbbjZMUdKamclfhmaAa3fhAaecxfheaEcufgEmbkkdnaDTmbaOcxfhiaDheinaictfgmamIdbJbbbbJbbjZaicxfIdbgH:vaHJbbbb9BEgHNUdbaic94fgmaHamIdbNUdbaic98fgmaHamIdbNUdbaiaHaiIdbNUdbaiclfgmaHamIdbNUdbaicwfgmaHamIdbNUdbaic3fhiaecufgembkkcbhAawcuaDcdtgYaDcFFFFi0Egicbyd1:jjjbHjjjjbbgeBd3awcoBd9Oawaicbyd1:jjjbHjjjjbbgEBdaaecFeaYz:ljjjbh3dnadTmbaoaoNh8Aaxcdthxalheina8Aaec;81jjbalEgmIdwaOa5ydbgCc32fgiIdC:tgHaHNamIdbaiIdx:tgHaHNamIdlaiIdz:tgHaHNMMNaqcwfIdbaiIdw:tgHaHNaqIdbaiIdb:tgHaHNaqclfIdbaiIdl:tgHaHNMMMhHdndna3aCcdtgifgmydbcuSmbaEaifIdbaH9ETmekamaABdbaEaifaHUdbka5clfh5aeaxfheaqcxfhqadaAcefgA9hmbkkaba3aYz:kjjjb8AcrhikaicdthiinaiTmeaic98fgiawcwffydbcbyd:m:jjjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Qdidui99ducbhi8Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgoaDIdbgrarao9EEUdbaladfgDaoaDIdbgrarao9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkavJbbbb:xgvaoaoav9DEgoararao9DEk9DeeuabcFeaicdtz:ljjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcifc98GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcrfc94GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:q:jjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:q:jjjbfgdBd:q:jjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk6eiucbhidnadTmbdninabRbbglaeRbbgv9hmeaecefheabcefhbadcufgdmbxdkkalav9Rhikaikk:Iedbcjwk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbebbbdbbbbbbbebbbeeebeebebbeeebebbbbbebebbbbbebbbdbbbbbbbbbbbbbbbeeeeebebbbbbebbbbbeebbbbbbbbbbbbbbbbbbbbbc1Dkxebbbdbbb:G9Kbb", a = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]);
238
+ if (typeof WebAssembly != "object")
239
+ return {
240
+ supported: !1
241
+ };
242
+ var e, b = WebAssembly.instantiate(s(t), {}).then(function(o) {
243
+ e = o.instance, e.exports.__wasm_call_ctors();
244
+ });
245
+ function s(o) {
246
+ for (var c = new Uint8Array(o.length), d = 0; d < o.length; ++d) {
247
+ var r = o.charCodeAt(d);
248
+ c[d] = r > 96 ? r - 97 : r > 64 ? r - 39 : r + 4;
249
+ }
250
+ for (var h = 0, d = 0; d < o.length; ++d)
251
+ c[h++] = c[d] < 60 ? a[c[d]] : (c[d] - 60) * 64 + c[++d];
252
+ return c.buffer.slice(0, h);
253
+ }
254
+ function i(o) {
255
+ if (!o)
256
+ throw new Error("Assertion failed");
257
+ }
258
+ function n(o) {
259
+ return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);
260
+ }
261
+ function l(o, c, d) {
262
+ var r = e.exports.sbrk, h = r(c.length * 4), f = r(d * 4), g = new Uint8Array(e.exports.memory.buffer), u = n(c);
263
+ g.set(u, h);
264
+ var w = o(f, h, c.length, d);
265
+ g = new Uint8Array(e.exports.memory.buffer);
266
+ var v = new Uint32Array(d);
267
+ new Uint8Array(v.buffer).set(g.subarray(f, f + d * 4)), u.set(g.subarray(h, h + c.length * 4)), r(h - r(0));
268
+ for (var A = 0; A < c.length; ++A)
269
+ c[A] = v[c[A]];
270
+ return [v, w];
271
+ }
272
+ function p(o) {
273
+ for (var c = 0, d = 0; d < o.length; ++d) {
274
+ var r = o[d];
275
+ c = c < r ? r : c;
276
+ }
277
+ return c;
278
+ }
279
+ function j(o, c, d, r, h, f, g, u, w) {
280
+ var v = e.exports.sbrk, A = v(4), x = v(d * 4), D = v(h * f), I = v(d * 4), E = new Uint8Array(e.exports.memory.buffer);
281
+ E.set(n(r), D), E.set(n(c), I);
282
+ var S = o(x, I, d, D, h, f, g, u, w, A);
283
+ E = new Uint8Array(e.exports.memory.buffer);
284
+ var R = new Uint32Array(S);
285
+ n(R).set(E.subarray(x, x + S * 4));
286
+ var U = new Float32Array(1);
287
+ return n(U).set(E.subarray(A, A + 4)), v(A - v(0)), [R, U[0]];
288
+ }
289
+ function P(o, c, d, r, h, f, g, u, w, v, A, x) {
290
+ var D = e.exports.sbrk, I = D(4), E = D(d * 4), S = D(h * f), R = D(h * u), U = D(w.length * 4), ta = D(d * 4), B = new Uint8Array(e.exports.memory.buffer);
291
+ B.set(n(r), S), B.set(n(g), R), B.set(n(w), U), B.set(n(c), ta);
292
+ var Z = o(E, ta, d, S, h, f, R, u, U, w.length, v, A, x, I);
293
+ B = new Uint8Array(e.exports.memory.buffer);
294
+ var G = new Uint32Array(Z);
295
+ n(G).set(B.subarray(E, E + Z * 4));
296
+ var ra = new Float32Array(1);
297
+ return n(ra).set(B.subarray(I, I + 4)), D(I - D(0)), [G, ra[0]];
298
+ }
299
+ function k(o, c, d, r) {
300
+ var h = e.exports.sbrk, f = h(d * r), g = new Uint8Array(e.exports.memory.buffer);
301
+ g.set(n(c), f);
302
+ var u = o(f, d, r);
303
+ return h(f - h(0)), u;
304
+ }
305
+ function M(o, c, d, r, h, f, g, u) {
306
+ var w = e.exports.sbrk, v = w(u * 4), A = w(d * r), x = w(d * f), D = new Uint8Array(e.exports.memory.buffer);
307
+ D.set(n(c), A), h && D.set(n(h), x);
308
+ var I = o(v, A, d, r, x, f, g, u);
309
+ D = new Uint8Array(e.exports.memory.buffer);
310
+ var E = new Uint32Array(I);
311
+ return n(E).set(D.subarray(v, v + I * 4)), w(v - w(0)), E;
312
+ }
313
+ var m = {
314
+ LockBorder: 1
315
+ };
316
+ return {
317
+ ready: b,
318
+ supported: !0,
319
+ // set this to true to be able to use simplifyPoints and simplifyWithAttributes
320
+ // note that these functions are experimental and may change interface/behavior in a way that will require revising calling code
321
+ useExperimentalFeatures: !1,
322
+ compactMesh: function(o) {
323
+ i(o instanceof Uint32Array || o instanceof Int32Array || o instanceof Uint16Array || o instanceof Int16Array), i(o.length % 3 == 0);
324
+ var c = o.BYTES_PER_ELEMENT == 4 ? o : new Uint32Array(o);
325
+ return l(e.exports.meshopt_optimizeVertexFetchRemap, c, p(o) + 1);
326
+ },
327
+ simplify: function(o, c, d, r, h, f) {
328
+ i(o instanceof Uint32Array || o instanceof Int32Array || o instanceof Uint16Array || o instanceof Int16Array), i(o.length % 3 == 0), i(c instanceof Float32Array), i(c.length % d == 0), i(d >= 3), i(r >= 0 && r <= o.length), i(r % 3 == 0), i(h >= 0 && h <= 1);
329
+ for (var g = 0, u = 0; u < (f ? f.length : 0); ++u)
330
+ g |= m[f[u]];
331
+ var w = o.BYTES_PER_ELEMENT == 4 ? o : new Uint32Array(o), v = j(e.exports.meshopt_simplify, w, o.length, c, c.length / d, d * 4, r, h, g);
332
+ return v[0] = o instanceof Uint32Array ? v[0] : new o.constructor(v[0]), v;
333
+ },
334
+ simplifyWithAttributes: function(o, c, d, r, h, f, g, u, w) {
335
+ i(this.useExperimentalFeatures), i(o instanceof Uint32Array || o instanceof Int32Array || o instanceof Uint16Array || o instanceof Int16Array), i(o.length % 3 == 0), i(c instanceof Float32Array), i(c.length % d == 0), i(d >= 3), i(r instanceof Float32Array), i(r.length % h == 0), i(h >= 0), i(g >= 0 && g <= o.length), i(g % 3 == 0), i(u >= 0 && u <= 1), i(Array.isArray(f)), i(h >= f.length), i(f.length <= 16);
336
+ for (var v = 0, A = 0; A < (w ? w.length : 0); ++A)
337
+ v |= m[w[A]];
338
+ var x = o.BYTES_PER_ELEMENT == 4 ? o : new Uint32Array(o), D = P(e.exports.meshopt_simplifyWithAttributes, x, o.length, c, c.length / d, d * 4, r, h * 4, new Float32Array(f), g, u, v);
339
+ return D[0] = o instanceof Uint32Array ? D[0] : new o.constructor(D[0]), D;
340
+ },
341
+ getScale: function(o, c) {
342
+ return i(o instanceof Float32Array), i(o.length % c == 0), i(c >= 3), k(e.exports.meshopt_simplifyScale, o, o.length / c, c * 4);
343
+ },
344
+ simplifyPoints: function(o, c, d, r, h, f) {
345
+ return i(this.useExperimentalFeatures), i(o instanceof Float32Array), i(o.length % c == 0), i(c >= 3), i(d >= 0 && d <= o.length / c), r ? (i(r instanceof Float32Array), i(r.length % h == 0), i(h >= 3), i(o.length / c == r.length / h), M(e.exports.meshopt_simplifyPoints, o, o.length / c, c * 4, r, h * 4, f, d)) : M(e.exports.meshopt_simplifyPoints, o, o.length / c, c * 4, void 0, 0, 0, d);
346
+ }
347
+ };
348
+ })();
349
+ function nt(t) {
350
+ const a = [], e = [];
351
+ for (const [b, s] of Object.entries(t))
352
+ dt(s) && a.push({ name: b, value: s }), rt(s) && e.push({ name: b, value: s });
353
+ return { plugins: a, components: e };
354
+ }
355
+ async function ot(t, a) {
356
+ const e = { plugins: [], components: [] }, b = t.getPlugin(L);
357
+ if (!b) throw new Error("EntityComponentPlugin must be added before project scripts");
358
+ for (const s of a) {
359
+ const i = nt(s);
360
+ e.plugins.push(...i.plugins), e.components.push(...i.components);
361
+ }
362
+ for (const s of e.components) {
363
+ const i = b.componentTypes.get(s.value.ComponentType);
364
+ i !== s.value && (i && b.removeComponentType(i), await b.addComponentType(s.value));
365
+ }
366
+ for (const s of e.plugins)
367
+ t.getPlugin(s.value) || await t.addPlugin(s.value);
368
+ return e;
369
+ }
370
+ function dt(t) {
371
+ return typeof t == "function" && typeof t.PluginType == "string";
372
+ }
373
+ function rt(t) {
374
+ return typeof t == "function" && typeof t.ComponentType == "string";
375
+ }
376
+ const ht = ["world", "screen", "viewport"], ka = class ka extends oa {
377
+ constructor() {
378
+ super(), this.enabled = !0, this.htmlData = "<div>Hello World</div>", this.width = -1, this.height = -1, this.scrollable = !1, this.interactable = !0, this.visible = !0, this.appendToBody = !1, this.positionMode = "world", this.offsetX = 0, this.offsetY = 0, this.zIndex = 1e3, this._worldPosition = new F(), this._objectUpdate = (a) => {
379
+ if (a.source === "HtmlUiComponent") return;
380
+ const e = (a == null ? void 0 : a.change) ?? (a == null ? void 0 : a.key);
381
+ (!e || e === "position" || e === "transform" || e === "quaternion" || e === "visible" || e === "controls") && this.positionMode === "world" && this._updateElementPosition();
382
+ }, this.onStateChange("htmlData", (a) => {
383
+ this.element && (this.element.innerHTML = a);
384
+ }), this.onStateChange("width", (a) => {
385
+ var e, b;
386
+ this.element && (this.element.style.width = a < 0 ? "auto" : `${a}px`, (b = (e = this.object).setDirty) == null || b.call(e, { source: "HtmlUiComponent" }));
387
+ }), this.onStateChange("height", (a) => {
388
+ var e, b;
389
+ this.element && (this.element.style.height = a < 0 ? "auto" : `${a}px`, (b = (e = this.object).setDirty) == null || b.call(e, { source: "HtmlUiComponent" }));
390
+ }), this.onStateChange("scrollable", (a) => {
391
+ var e, b;
392
+ this.element && (this.element.style.overflow = a ? "auto" : "hidden", (b = (e = this.object).setDirty) == null || b.call(e, { source: "HtmlUiComponent" }));
393
+ }), this.onStateChange("interactable", (a) => {
394
+ var e, b;
395
+ this.element && (this.element.style.pointerEvents = a ? "auto" : "none", (b = (e = this.object).setDirty) == null || b.call(e, { source: "HtmlUiComponent" }));
396
+ }), this.onStateChange("visible", (a) => {
397
+ var e, b;
398
+ this.element && (this.element.style.display = a ? "block" : "none", (b = (e = this.object).setDirty) == null || b.call(e, { source: "HtmlUiComponent" }));
399
+ }), this.onStateChange("positionMode", () => {
400
+ var a, e;
401
+ this.element && (this._updateElementPosition(), (e = (a = this.object).setDirty) == null || e.call(a, { source: "HtmlUiComponent" }));
402
+ }), this.onStateChange("offsetX", () => {
403
+ var a, e;
404
+ this.element && (this._updateElementPosition(), (e = (a = this.object).setDirty) == null || e.call(a, { source: "HtmlUiComponent" }));
405
+ }), this.onStateChange("offsetY", () => {
406
+ var a, e;
407
+ this.element && (this._updateElementPosition(), (e = (a = this.object).setDirty) == null || e.call(a, { source: "HtmlUiComponent" }));
408
+ }), this.onStateChange("zIndex", (a) => {
409
+ var e, b;
410
+ this.element && (this.element.style.zIndex = `${a}`, (b = (e = this.object).setDirty) == null || b.call(e, { source: "HtmlUiComponent" }));
411
+ }), this.onStateChange("appendToBody", (a) => {
412
+ var b, s, i, n;
413
+ if (!this.element) return;
414
+ this.element.parentNode && this.element.parentNode.removeChild(this.element), (a ? document.body : ((s = (b = this.ctx) == null ? void 0 : b.viewer) == null ? void 0 : s.container) || document.body).appendChild(this.element), (n = (i = this.object).setDirty) == null || n.call(i, { source: "HtmlUiComponent" });
415
+ });
416
+ }
417
+ init(a, e) {
418
+ var s, i;
419
+ super.init(a, e), this.element = document.createElement("div"), this.element.className = "threepipe-html-ui", this.element.style.position = "absolute", this.element.style.width = this.width < 0 ? "auto" : `${this.width}px`, this.element.style.height = this.height < 0 ? "auto" : `${this.height}px`, this.element.style.overflow = this.scrollable ? "auto" : "hidden", this.element.style.pointerEvents = this.interactable ? "auto" : "none", this.element.style.zIndex = `${this.zIndex}`, this.element.style.display = this.visible ? "block" : "none", this.element.style.boxSizing = "border-box", this.element.innerHTML = this.htmlData, (this.appendToBody ? document.body : ((i = (s = this.ctx) == null ? void 0 : s.viewer) == null ? void 0 : i.container) || document.body).appendChild(this.element), a.addEventListener("objectUpdate", this._objectUpdate), this.ctx.viewer.scene.addEventListener("mainCameraUpdate", this._objectUpdate), this._updateElementPosition();
420
+ }
421
+ destroy() {
422
+ return this._stopPositionTracking(), this.object.removeEventListener("objectUpdate", this._objectUpdate), this.ctx.viewer.scene.removeEventListener("mainCameraUpdate", this._objectUpdate), this.element && this.element.parentNode && this.element.parentNode.removeChild(this.element), this.element = null, super.destroy();
423
+ }
424
+ _stopPositionTracking() {
425
+ this._animationFrameId !== void 0 && (cancelAnimationFrame(this._animationFrameId), this._animationFrameId = void 0);
426
+ }
427
+ preFrame({ resized: a }) {
428
+ !this.element || !this.enabled || this.positionMode !== "screen" && (!a && this.positionMode === "viewport" || !a && this.positionMode === "world" || this._updateElementPosition());
429
+ }
430
+ _updateElementPosition() {
431
+ if (this.element)
432
+ switch (this.positionMode) {
433
+ case "world":
434
+ this._updateWorldPosition();
435
+ break;
436
+ case "screen":
437
+ this._updateScreenPosition();
438
+ break;
439
+ case "viewport":
440
+ this._updateViewportPosition();
441
+ break;
442
+ }
443
+ }
444
+ _updateWorldPosition() {
445
+ var n, l, p, j, P;
446
+ this.object.getWorldPosition(this._worldPosition);
447
+ const a = (p = (l = (n = this.ctx) == null ? void 0 : n.viewer) == null ? void 0 : l.scene) == null ? void 0 : p.mainCamera;
448
+ if (!a) return;
449
+ const e = (P = (j = this.ctx) == null ? void 0 : j.viewer) == null ? void 0 : P.canvas;
450
+ if (!e) return;
451
+ const b = this._worldPosition.clone();
452
+ b.project(a);
453
+ const s = (b.x * 0.5 + 0.5) * e.clientWidth, i = (b.y * -0.5 + 0.5) * e.clientHeight;
454
+ this.element.style.left = `${s + this.offsetX}px`, this.element.style.top = `${i + this.offsetY}px`, this.element.style.transform = "translate(-50%, -50%)";
455
+ }
456
+ _updateScreenPosition() {
457
+ this.element.style.left = `${this.offsetX}px`, this.element.style.top = `${this.offsetY}px`, this.element.style.transform = "none";
458
+ }
459
+ _updateViewportPosition() {
460
+ var s, i;
461
+ const a = (i = (s = this.ctx) == null ? void 0 : s.viewer) == null ? void 0 : i.canvas;
462
+ if (!a) return;
463
+ const e = this.offsetX / 100 * a.clientWidth, b = this.offsetY / 100 * a.clientHeight;
464
+ this.element.style.left = `${e}px`, this.element.style.top = `${b}px`, this.element.style.transform = "none";
465
+ }
466
+ /**
467
+ * Update the HTML content programmatically
468
+ */
469
+ setHtml(a) {
470
+ this.htmlData = a;
471
+ }
472
+ /**
473
+ * Set the position
474
+ */
475
+ setPosition(a, e) {
476
+ this.offsetX = a, this.offsetY = e;
477
+ }
478
+ /**
479
+ * Set the size
480
+ */
481
+ setSize(a, e) {
482
+ this.width = a, this.height = e;
483
+ }
484
+ /**
485
+ * Show the element
486
+ */
487
+ show() {
488
+ this.visible = !0;
489
+ }
490
+ /**
491
+ * Hide the element
492
+ */
493
+ hide() {
494
+ this.visible = !1;
495
+ }
496
+ };
497
+ ka.ComponentType = "HtmlUiComponent", ka.StateProperties = [
498
+ "enabled",
499
+ {
500
+ key: "htmlData",
501
+ type: "string",
502
+ uiConfig: {
503
+ multiline: !0,
504
+ rows: 5,
505
+ autoResize: !0
506
+ }
507
+ },
508
+ "width",
509
+ "height",
510
+ "scrollable",
511
+ "interactable",
512
+ {
513
+ key: "positionMode",
514
+ type: Sa(ht)
515
+ },
516
+ "offsetX",
517
+ "offsetY",
518
+ "zIndex",
519
+ "visible",
520
+ "appendToBody"
521
+ ];
522
+ let Na = ka;
523
+ const ga = /* @__PURE__ */ new WeakMap();
524
+ let lt = 0;
525
+ const wa = class wa extends oa {
526
+ constructor() {
527
+ super(...arguments), this.module = "", this.params = {}, this.runRevision = 0;
528
+ }
529
+ static configureViewer(a, e) {
530
+ ga.set(a, {
531
+ base: typeof e.base == "string" ? new URL(e.base) : e.base,
532
+ onError: e.onError,
533
+ pending: /* @__PURE__ */ new Set()
534
+ });
535
+ }
536
+ static async waitForViewer(a) {
537
+ const e = ga.get(a);
538
+ for (; e != null && e.pending.size; ) await Promise.all([...e.pending]);
539
+ }
540
+ init(a, e) {
541
+ super.init(a, e);
542
+ const b = () => {
543
+ this.run().catch((s) => kt(this.ctx.viewer, s));
544
+ };
545
+ this.onStateChange("module", b), this.onStateChange("params", b), b();
546
+ }
547
+ async run() {
548
+ const a = this.ctx.viewer, e = ga.get(a);
549
+ if (!e) throw new Error("Generator viewer is not configured");
550
+ const b = ++this.runRevision, s = ft({
551
+ node: this.object,
552
+ params: this.params,
553
+ viewer: a,
554
+ module: this.module,
555
+ base: e.base,
556
+ revision: ++lt,
557
+ isCurrent: () => b === this.runRevision
558
+ }).then(() => {
559
+ b === this.runRevision && a.setDirty(this);
560
+ }).finally(() => e.pending.delete(s));
561
+ e.pending.add(s), await s;
562
+ }
563
+ async bake() {
564
+ var i;
565
+ await this.run();
566
+ const a = this.object, e = a.children.filter((n) => n.userData.kite3dGenerated === !0), b = {
567
+ module: this.module,
568
+ params: JSON.parse(JSON.stringify(this.params)),
569
+ ts: (/* @__PURE__ */ new Date()).toISOString()
570
+ };
571
+ for (const n of e) pt(n);
572
+ this.ctx.ecp.removeComponent(a, this.uuid);
573
+ const s = ma(a);
574
+ return (s == null ? void 0 : s.role) === "generator" && !s.sourceId && le(a, {
575
+ role: "direct",
576
+ id: s.id,
577
+ ...s.allowCameraInside !== void 0 ? { allowCameraInside: s.allowCameraInside } : {}
578
+ }), a.userData.kite3dBakedFrom = b, a._sChildren = [...a.children], (i = a.setDirty) == null || i.call(a, { change: "userData.kite3dBakedFrom", source: "kite3d bake" }), e.length;
579
+ }
580
+ destroy() {
581
+ return this.runRevision += 1, ue(this.object), super.destroy();
582
+ }
583
+ };
584
+ wa.ComponentType = "Generator", wa.StateProperties = ["module", "params"];
585
+ let sa = wa;
586
+ async function ft({
587
+ node: t,
588
+ params: a,
589
+ viewer: e,
590
+ module: b,
591
+ base: s,
592
+ revision: i = 0,
593
+ isCurrent: n
594
+ }) {
595
+ if (ue(t), !b) return [];
596
+ const l = gt(t), p = ut(b, s);
597
+ i && p.searchParams.set("kite3d-generator", String(i));
598
+ const j = await yt(p.href);
599
+ if (typeof j.default != "function")
600
+ throw new Error(`Generator module must have a default generate function: ${b}`);
601
+ const P = new Set(t.children), k = await j.default({
602
+ node: t,
603
+ params: a,
604
+ viewer: e,
605
+ engine: xe
606
+ }), M = jt(k);
607
+ for (const [o, c] of M.entries())
608
+ c.parent !== t && (Za(c, l.id, o), t.add(c));
609
+ const m = t.children.filter((o) => !P.has(o));
610
+ if (n && !n()) {
611
+ for (const o of m) je(o);
612
+ return [];
613
+ }
614
+ return m.forEach((o, c) => Za(o, l.id, c)), m;
615
+ }
616
+ function ue(t) {
617
+ for (const a of [...t.children])
618
+ a.userData.kite3dGenerated === !0 && je(a);
619
+ }
620
+ function Za(t, a, e = 0) {
621
+ let b = 0;
622
+ t.traverse((s) => {
623
+ s.userData.kite3dGenerated = !0, s.userData.excludeFromExport = !0, a && (s.userData.kite3dAuthoring = {
624
+ role: "generator",
625
+ id: `${a}:preview:${e}:${b++}`,
626
+ sourceId: a
627
+ });
628
+ });
629
+ }
630
+ function pt(t) {
631
+ t.traverse((a) => {
632
+ delete a.userData.kite3dGenerated, delete a.userData.excludeFromExport;
633
+ const e = ma(a);
634
+ (e == null ? void 0 : e.role) === "generator" && e.sourceId && delete a.userData.kite3dAuthoring;
635
+ });
636
+ }
637
+ function gt(t) {
638
+ const a = ma(t);
639
+ if ((a == null ? void 0 : a.role) === "generator" && !a.sourceId) return a;
640
+ const e = typeof t.userData.gltfUUID == "string" && t.userData.gltfUUID.trim() ? t.userData.gltfUUID.trim() : (a == null ? void 0 : a.id) || mt(t);
641
+ return le(t, { role: "generator", id: e }), ma(t);
642
+ }
643
+ function mt(t) {
644
+ var e;
645
+ const a = [];
646
+ for (let b = t; b != null && b.parent; b = b.parent) {
647
+ const s = b.parent.children.indexOf(b);
648
+ if (a.push(`${b.name || b.type}:${s}`), (e = b.parent.userData) != null && e.rootSceneModelRoot) break;
649
+ }
650
+ return `generator:${a.reverse().join("/")}`;
651
+ }
652
+ function je(t) {
653
+ t.removeFromParent();
654
+ const a = /* @__PURE__ */ new Set();
655
+ t.traverse((e) => {
656
+ const b = e;
657
+ Ia(b.geometry, a);
658
+ const s = Array.isArray(b.material) ? b.material : [b.material];
659
+ for (const i of s)
660
+ if (!(!i || typeof i != "object")) {
661
+ for (const n of Object.values(i))
662
+ n && typeof n == "object" && "isTexture" in n && Ia(n, a);
663
+ Ia(i, a);
664
+ }
665
+ });
666
+ }
667
+ function Ia(t, a) {
668
+ var e;
669
+ !t || typeof t != "object" || a.has(t) || (a.add(t), (e = t.dispose) == null || e.call(t));
670
+ }
671
+ function ut(t, a) {
672
+ if (!t || t.startsWith("/") || /^[a-z][a-z\d+.-]*:/i.test(t))
673
+ throw new Error(`Generator module must be a project-relative path: ${t}`);
674
+ const e = new URL(t, a);
675
+ if (e.origin !== a.origin)
676
+ throw new Error(`Generator module must be same-origin: ${e.href}`);
677
+ return e;
678
+ }
679
+ function jt(t) {
680
+ if (!t) return [];
681
+ const a = Array.isArray(t) ? t : [t], e = [];
682
+ for (const b of a) {
683
+ if (!(b != null && b.isObject3D))
684
+ throw new Error("Generator output must be an Object3D, an array of Object3D values, or undefined");
685
+ e.push(b);
686
+ }
687
+ return e;
688
+ }
689
+ async function yt(t) {
690
+ return import(
691
+ /* @vite-ignore */
692
+ t
693
+ );
694
+ }
695
+ function kt(t, a) {
696
+ var b;
697
+ const e = (b = ga.get(t)) == null ? void 0 : b.onError;
698
+ e ? e(a) : console.error("[kite3d] Generator error", a);
699
+ }
700
+ const wt = new F(), fa = new F(), vt = new C();
701
+ function ua(t) {
702
+ const a = Pt(t);
703
+ if (a.length === 0) return null;
704
+ if (a.length === 1)
705
+ return $a(a[0]);
706
+ let e;
707
+ const b = [];
708
+ for (; e = a.pop(); )
709
+ b.push(At($a(e)));
710
+ return xt(b);
711
+ }
712
+ function $a(t) {
713
+ const a = t.geometry.clone();
714
+ return t.updateMatrixWorld(), t.matrixWorld.decompose(wt, vt, fa), a.scale(fa.x, fa.y, fa.z), a;
715
+ }
716
+ function xt(t) {
717
+ let a = 0;
718
+ for (let s = 0; s < t.length; s++) {
719
+ const i = t[s].attributes.position;
720
+ i && i.itemSize === 3 && (a += i.count);
721
+ }
722
+ const e = new Float32Array(a * 3);
723
+ let b = 0;
724
+ for (let s = 0; s < t.length; s++) {
725
+ const i = t[s].attributes.position;
726
+ if (i && i.itemSize === 3)
727
+ for (let n = 0; n < i.count; n++)
728
+ e[b++] = i.getX(n), e[b++] = i.getY(n), e[b++] = i.getZ(n);
729
+ }
730
+ return new ia().setAttribute("position", new se(e, 3));
731
+ }
732
+ function ye(t) {
733
+ const a = t.attributes.position, e = new Float32Array(a.count * 3);
734
+ for (let b = 0; b < a.count; b++)
735
+ e[b * 3] = a.getX(b), e[b * 3 + 1] = a.getY(b), e[b * 3 + 2] = a.getZ(b);
736
+ return e;
737
+ }
738
+ function Pt(t) {
739
+ const a = [];
740
+ return t.traverse(function(e) {
741
+ e.isMesh && a.push(e);
742
+ }), a;
743
+ }
744
+ function pa(t, a) {
745
+ switch (a) {
746
+ case "x":
747
+ return t.x;
748
+ case "y":
749
+ return t.y;
750
+ case "z":
751
+ return t.z;
752
+ }
753
+ throw new Error(`Unexpected component ${a}`);
754
+ }
755
+ function At(t, a = 1e-4) {
756
+ a = Math.max(a, Number.EPSILON);
757
+ const e = {}, b = t.getIndex(), s = t.getAttribute("position"), i = b ? b.count : s.count;
758
+ let n = 0;
759
+ const l = [], p = [], j = Math.log10(1 / a), P = Math.pow(10, j);
760
+ for (let m = 0; m < i; m++) {
761
+ const o = b ? b.getX(m) : m;
762
+ let c = "";
763
+ c += `${~~(s.getX(o) * P)},`, c += `${~~(s.getY(o) * P)},`, c += `${~~(s.getZ(o) * P)},`, c in e ? l.push(e[c]) : (p.push(s.getX(o)), p.push(s.getY(o)), p.push(s.getZ(o)), e[c] = n, l.push(n), n++);
764
+ }
765
+ const k = new se(
766
+ new Float32Array(p),
767
+ s.itemSize,
768
+ s.normalized
769
+ ), M = new ia();
770
+ return M.setAttribute("position", k), M.setIndex(l), M;
771
+ }
772
+ const ae = Math.PI / 2;
773
+ var _ = /* @__PURE__ */ ((t) => (t.BOX = "Box", t.CYLINDER = "Cylinder", t.SPHERE = "Sphere", t.HULL = "ConvexPolyhedron", t.MESH = "Trimesh", t))(_ || {});
774
+ const ke = function(t, a = {}) {
775
+ let e;
776
+ if (a.type === "Box")
777
+ return te(t);
778
+ if (a.type === "Cylinder")
779
+ return Bt(t, a);
780
+ if (a.type === "Sphere")
781
+ return Rt(t, a);
782
+ if (a.type === "ConvexPolyhedron")
783
+ return Ct(t);
784
+ if (a.type === "Trimesh")
785
+ return e = ua(t), e ? Ut(e) : null;
786
+ if (a.type)
787
+ throw new Error(`[CANNON.getShapeParameters] Invalid type "${a.type}".`);
788
+ if (e = ua(t), !e) return null;
789
+ switch (e.type) {
790
+ case "BoxGeometry":
791
+ case "BoxBufferGeometry":
792
+ return ee(e);
793
+ case "CylinderGeometry":
794
+ case "CylinderBufferGeometry":
795
+ return St(e);
796
+ case "PlaneGeometry":
797
+ case "PlaneBufferGeometry":
798
+ return Lt(e);
799
+ case "SphereGeometry":
800
+ case "SphereBufferGeometry":
801
+ return zt(e);
802
+ case "TubeGeometry":
803
+ case "BufferGeometry":
804
+ return te(t);
805
+ default:
806
+ return console.warn(
807
+ 'Unrecognized geometry: "%s". Using bounding box as shape.',
808
+ e.type
809
+ ), ee(e);
810
+ }
811
+ }, Dt = function(t, a = {}, e) {
812
+ if (e = e || ke(t, a), !e)
813
+ return null;
814
+ const { type: b, params: s, offset: i, orientation: n } = e;
815
+ let l;
816
+ return b === "Box" ? l = Mt(s) : b === "Cylinder" ? l = It(s) : b === "Sphere" ? l = Ft(s) : b === "ConvexPolyhedron" ? l = Et(s) : l = Nt(s), {
817
+ shape: l,
818
+ offset: i,
819
+ orientation: n
820
+ };
821
+ };
822
+ function Mt(t) {
823
+ const { x: a, y: e, z: b } = t;
824
+ return new K(new y(a || 0.025, e || 0.025, b || 0.025));
825
+ }
826
+ function It(t) {
827
+ const { radiusTop: a, radiusBottom: e, height: b, segments: s } = t, i = new Ze(a, e, b, s);
828
+ return i.radiusTop = e, i.radiusBottom = e, i.height = b, i.numSegments = s, i;
829
+ }
830
+ function Ft(t) {
831
+ return new fe(t.radius);
832
+ }
833
+ function Et(t) {
834
+ const { faces: a, vertices: e } = t, b = [];
835
+ for (let i = 0; i < e.length; i += 3)
836
+ b.push(new y(
837
+ e[i],
838
+ e[i + 1],
839
+ e[i + 2]
840
+ ));
841
+ return new $e({
842
+ faces: a,
843
+ vertices: b
844
+ });
845
+ }
846
+ function Nt(t) {
847
+ const { vertices: a, indices: e } = t;
848
+ return new at(
849
+ a,
850
+ e
851
+ );
852
+ }
853
+ function ee(t) {
854
+ if (!ye(t).length) return null;
855
+ t.computeBoundingBox();
856
+ const e = t.boundingBox;
857
+ return {
858
+ type: "Box",
859
+ params: {
860
+ x: (e.max.x - e.min.x) / 2,
861
+ y: (e.max.y - e.min.y) / 2,
862
+ z: (e.max.z - e.min.z) / 2
863
+ }
864
+ };
865
+ }
866
+ function te(t) {
867
+ const a = t.clone();
868
+ a.quaternion.set(0, 0, 0, 1), a.updateMatrixWorld();
869
+ const e = new ce().setFromObject(a);
870
+ if (!isFinite(e.min.lengthSq())) return null;
871
+ const b = e.translate(a.position.negate()).getCenter(new F());
872
+ return {
873
+ type: "Box",
874
+ params: {
875
+ x: (e.max.x - e.min.x) / 2,
876
+ y: (e.max.y - e.min.y) / 2,
877
+ z: (e.max.z - e.min.z) / 2
878
+ },
879
+ offset: b.lengthSq() ? new y(b.x, b.y, b.z) : void 0
880
+ };
881
+ }
882
+ function Ct(t) {
883
+ const a = ua(t);
884
+ if (!a) return null;
885
+ const e = 1e-4;
886
+ for (let i = 0; i < a.attributes.position.count; i++)
887
+ a.attributes.position.setXYZ(
888
+ i,
889
+ a.attributes.position.getX(i) + (Math.random() - 0.5) * e,
890
+ a.attributes.position.getY(i) + (Math.random() - 0.5) * e,
891
+ a.attributes.position.getZ(i) + (Math.random() - 0.5) * e
892
+ );
893
+ const [b, s] = Gt(new Pe().setFromObject(new xa(a)));
894
+ return {
895
+ type: "ConvexPolyhedron",
896
+ params: {
897
+ vertices: new Float32Array(b),
898
+ faces: s
899
+ }
900
+ };
901
+ }
902
+ function St(t) {
903
+ const a = t.parameters;
904
+ return {
905
+ type: "Cylinder",
906
+ params: {
907
+ radiusTop: a.radiusTop,
908
+ radiusBottom: a.radiusBottom,
909
+ height: a.height,
910
+ segments: a.radialSegments
911
+ },
912
+ orientation: new da().setFromEuler(Ae.degToRad(-90), 0, 0, "XYZ").normalize()
913
+ };
914
+ }
915
+ function Bt(t, a) {
916
+ const e = ["x", "y", "z"], b = a.cylinderAxis || "y", s = e.splice(e.indexOf(b), 1) && e, i = new ce().setFromObject(t);
917
+ if (!isFinite(i.min.lengthSq())) return null;
918
+ const n = i.max[b] - i.min[b], l = 0.5 * Math.max(
919
+ pa(i.max, s[0]) - pa(i.min, s[0]),
920
+ pa(i.max, s[1]) - pa(i.min, s[1])
921
+ ), p = b === "y" ? ae : 0, j = b === "z" ? ae : 0;
922
+ return {
923
+ type: "Cylinder",
924
+ params: {
925
+ radiusTop: l,
926
+ radiusBottom: l,
927
+ height: n,
928
+ segments: 12
929
+ },
930
+ orientation: new da().setFromEuler(p, j, 0, "XYZ").normalize(),
931
+ offset: new y(
932
+ (i.max.x + i.min.x) / 2,
933
+ (i.max.y + i.min.y) / 2,
934
+ (i.max.z + i.min.z) / 2
935
+ )
936
+ };
937
+ }
938
+ function Lt(t) {
939
+ t.computeBoundingBox();
940
+ const a = t.boundingBox;
941
+ return {
942
+ type: "Box",
943
+ params: {
944
+ x: (a.max.x - a.min.x) / 2 || 0.1,
945
+ y: (a.max.y - a.min.y) / 2 || 0.1,
946
+ z: (a.max.z - a.min.z) / 2 || 0.1
947
+ }
948
+ };
949
+ }
950
+ function zt(t) {
951
+ return {
952
+ type: "Sphere",
953
+ params: { radius: t.parameters.radius }
954
+ };
955
+ }
956
+ function Rt(t, a) {
957
+ if (a.sphereRadius)
958
+ return {
959
+ type: "Sphere",
960
+ params: { radius: a.sphereRadius }
961
+ };
962
+ const e = ua(t);
963
+ if (!e) return null;
964
+ e.computeBoundingSphere();
965
+ const b = e.boundingSphere;
966
+ return !b || !isFinite(b.radius) ? null : {
967
+ type: "Sphere",
968
+ params: { radius: e.boundingSphere.radius }
969
+ // offset: localPosition.lengthSq()
970
+ // ? new Vec3(localPosition.x, localPosition.y, localPosition.z)
971
+ // : undefined,
972
+ };
973
+ }
974
+ function Ut(t) {
975
+ const a = ye(t);
976
+ if (!a.length) return null;
977
+ const e = new Uint32Array(a.length);
978
+ for (let b = 0; b < a.length; b++)
979
+ e[b] = b;
980
+ return {
981
+ type: "Trimesh",
982
+ params: {
983
+ vertices: a,
984
+ indices: e
985
+ }
986
+ };
987
+ }
988
+ function Gt(t) {
989
+ const a = t.faces.map((n) => {
990
+ const l = [];
991
+ let p = n.edge;
992
+ do {
993
+ const j = p.head(), P = t.vertices.indexOf(j);
994
+ P >= 0 && l.push(P), p = p.next;
995
+ } while (p !== n.edge);
996
+ return l;
997
+ }), e = Array.from(new Set(a.flat())).sort(), b = [];
998
+ for (let n = 0; n < e.length; n++)
999
+ b.push(
1000
+ t.vertices[e[n]].point.x,
1001
+ t.vertices[e[n]].point.y,
1002
+ t.vertices[e[n]].point.z
1003
+ );
1004
+ const s = /* @__PURE__ */ new Map();
1005
+ for (let n = 0; n < e.length; n++)
1006
+ s.set(e[n], n);
1007
+ const i = [];
1008
+ for (let n = 0; n < a.length; n++)
1009
+ i.push([
1010
+ s.get(a[n][0]),
1011
+ s.get(a[n][1]),
1012
+ s.get(a[n][2])
1013
+ ]);
1014
+ return [b, i];
1015
+ }
1016
+ const _t = ["static", "dynamic", "kinematic"], va = class va extends oa {
1017
+ constructor() {
1018
+ super(), this.mass = 1, this.type = "dynamic", this.isTrigger = !1, this.material = new T(), this._objectUpdate = (a) => {
1019
+ if (a.source === "Cannon3DBodyComponent" || a.source === "CannonPhysicsPlugin") return;
1020
+ const e = (a == null ? void 0 : a.change) ?? (a == null ? void 0 : a.key);
1021
+ (!e || e === "position" || e === "transform" || e === "quaternion") && this.resetTransform(e);
1022
+ }, this.shapeRefs = [], this.onStateChange("mass", (a) => {
1023
+ var e, b;
1024
+ this.body && (this.body.mass = a, this.updateMassProperties(), (b = (e = this.object).setDirty) == null || b.call(e, { source: "Cannon3DBodyComponent" }));
1025
+ }), this.onStateChange("type", (a) => {
1026
+ var e, b;
1027
+ this.body && (this.body.type = this._typeToCannon(a), this.updateMassProperties(), (b = (e = this.object).setDirty) == null || b.call(e, { source: "Cannon3DBodyComponent" }));
1028
+ }), this.onStateChange("isTrigger", (a) => {
1029
+ var e, b;
1030
+ this.body && (this.body.isTrigger = a, (b = (e = this.object).setDirty) == null || b.call(e, { source: "Cannon3DBodyComponent" }));
1031
+ }), this.onStateChange("material", (a) => {
1032
+ var e, b, s, i;
1033
+ this.body && (this.body.material = a, (b = (e = this.uiConfig) == null ? void 0 : e.uiRefresh) == null || b.call(e), (i = (s = this.object).setDirty) == null || i.call(s, { source: "Cannon3DBodyComponent" }));
1034
+ });
1035
+ }
1036
+ _typeToCannon(a) {
1037
+ return a === "static" ? N.STATIC : a === "dynamic" ? N.DYNAMIC : a === "kinematic" ? N.KINEMATIC : N.STATIC;
1038
+ }
1039
+ updateMassProperties() {
1040
+ if (this.body)
1041
+ try {
1042
+ this.body.updateMassProperties();
1043
+ } catch (a) {
1044
+ console.error("[Cannon3DBodyComponent] updateMassProperties error", a);
1045
+ }
1046
+ }
1047
+ updateBoundingRadius() {
1048
+ if (this.body)
1049
+ try {
1050
+ this.body.updateBoundingRadius();
1051
+ } catch (a) {
1052
+ console.error("[Cannon3DBodyComponent] updateBoundingRadius error", a);
1053
+ }
1054
+ }
1055
+ init(a, e) {
1056
+ super.init(a, e);
1057
+ const b = this.ctx.plugin(z);
1058
+ this.body = new N(), this.body.material = this.material, this.body.mass = this.mass, this.body.type = this._typeToCannon(this.type), this.body.isTrigger = this.isTrigger, this.updateMassProperties(), this.resetTransform(), a.addEventListener("objectUpdate", this._objectUpdate), b.addBody(this), a.traverseModels && a.traverseModels((s) => {
1059
+ L.GetComponents(s, ca).forEach((i) => {
1060
+ this.addShape(i, !1);
1061
+ });
1062
+ }, { widgets: !1, visible: !1 }), this.shapeRefs.length && this.refreshShapes();
1063
+ }
1064
+ destroy() {
1065
+ return this.shapeRefs.forEach((e) => {
1066
+ this.removeShape(e, !1);
1067
+ }), this.refreshShapes(!1), this.object.removeEventListener("objectUpdate", this._objectUpdate), this.ctx.plugin(z).removeBody(this), this.body = null, super.destroy();
1068
+ }
1069
+ // update({time}: IAnimationLoopEvent) {
1070
+ //
1071
+ // }
1072
+ resetTransform(a) {
1073
+ (!a || a === "position" || a === "transform") && this.body.position.set(...this.object.getWorldPosition(new F()).toArray()), (!a || a === "quaternion" || a === "transform") && this.body.quaternion.set(...this.object.getWorldQuaternion(new C()).toArray()), this.body.angularVelocity.set(0, 0, 0), this.body.velocity.set(0, 0, 0);
1074
+ }
1075
+ addShape(a, e = !0) {
1076
+ if (!this.shapeRefs.includes(a)) {
1077
+ if (a.bodyRef && a.bodyRef !== this)
1078
+ return;
1079
+ this.shapeRefs.push(a), a.bodyRef = this, e && this.refreshShapes();
1080
+ }
1081
+ }
1082
+ removeShape(a, e = !0) {
1083
+ const b = this.shapeRefs.indexOf(a);
1084
+ b !== -1 && (a.bodyRef === this && (a.bodyRef = void 0), this.shapeRefs.splice(b, 1), e && this.refreshShapes());
1085
+ }
1086
+ refreshShapes(a = !0) {
1087
+ var n, l;
1088
+ let e = !1;
1089
+ for (const p of this.body.shapes)
1090
+ if (!this.shapeRefs.find((j) => j.result.shape === p)) {
1091
+ const j = this.body.shapes.indexOf(p);
1092
+ j !== -1 && (this.body.shapes.splice(j, 1), this.body.shapeOffsets.splice(j, 1), this.body.shapeOrientations.splice(j, 1), p.body = null, e = !0);
1093
+ }
1094
+ const b = this.object;
1095
+ b.updateMatrixWorld(!0);
1096
+ const s = b.getWorldPosition(new F()), i = b.getWorldQuaternion(new C());
1097
+ for (const p of this.shapeRefs)
1098
+ if (!this.body.shapes.includes(p.result.shape)) {
1099
+ const j = p.result.shape;
1100
+ this.body.shapes.push(j);
1101
+ const P = new y(), k = new da();
1102
+ p.result.offset && (P.x += p.result.offset.x, P.y += p.result.offset.y, P.z += p.result.offset.z), p.result.orientation && (k.x = p.result.orientation.x, k.y = p.result.orientation.y, k.z = p.result.orientation.z, k.w = p.result.orientation.w);
1103
+ const M = p.object;
1104
+ if (b !== M) {
1105
+ M.updateMatrixWorld(!0);
1106
+ const m = M.getWorldPosition(new F());
1107
+ P.x += m.x - s.x, P.y += m.y - s.y, P.z += m.z - s.z;
1108
+ const c = M.getWorldQuaternion(new C()).multiply(i.invert());
1109
+ k.x = c.x, k.y = c.y, k.z = c.z, k.w = c.w;
1110
+ }
1111
+ this.body.shapeOffsets.push(P), this.body.shapeOrientations.push(k), j.body = this.body, e = !0;
1112
+ }
1113
+ a && e && (this.updateMassProperties(), this.updateBoundingRadius(), this.body.aabbNeedsUpdate = !0, (l = (n = this.object).setDirty) == null || l.call(n, { source: "Cannon3DBodyComponent" }));
1114
+ }
1115
+ };
1116
+ va.ComponentType = "Cannon3DBodyComponent", va.StateProperties = ["mass", {
1117
+ key: "type",
1118
+ type: Sa(_t)
1119
+ }, "isTrigger", "material"];
1120
+ let ja = va;
1121
+ function Tt() {
1122
+ const a = new y(), e = new y(), b = new y();
1123
+ new da();
1124
+ const s = new Fa(1), i = new Ea(1, 1, 1), n = new Ya(10, 10, 10, 10), l = new De({
1125
+ color: 65280,
1126
+ linewidth: 3,
1127
+ // in world units with size attenuation, pixels otherwise
1128
+ vertexColors: !1,
1129
+ worldUnits: !1,
1130
+ dashed: !1,
1131
+ alphaToCoverage: !0,
1132
+ toneMapped: !1,
1133
+ transparent: !0,
1134
+ depthTest: !0,
1135
+ depthWrite: !1,
1136
+ allowOverride: !1
1137
+ });
1138
+ l.userData.renderToGBuffer = !1, l.userData.renderToDepth = !1, n.translate(0, 0, 1e-4);
1139
+ function p(c) {
1140
+ const d = new ia(), r = [];
1141
+ for (let f = 0; f < c.vertices.length; f++) {
1142
+ const g = c.vertices[f];
1143
+ r.push(g.x, g.y, g.z);
1144
+ }
1145
+ d.setAttribute("position", new Da(r, 3));
1146
+ const h = [];
1147
+ for (let f = 0; f < c.faces.length; f++) {
1148
+ const g = c.faces[f], u = g[0];
1149
+ for (let w = 1; w < g.length - 1; w++) {
1150
+ const v = g[w], A = g[w + 1];
1151
+ h.push(u, v, A);
1152
+ }
1153
+ }
1154
+ return d.setIndex(h), d.computeBoundingSphere(), d.computeVertexNormals(), d;
1155
+ }
1156
+ function j(c) {
1157
+ const d = new ia(), r = [], h = a, f = e, g = b;
1158
+ for (let u = 0; u < c.indices.length / 3; u++)
1159
+ c.getTriangleVertices(u, h, f, g), r.push(h.x, h.y, h.z), r.push(f.x, f.y, f.z), r.push(g.x, g.y, g.z);
1160
+ return d.setAttribute("position", new Da(r, 3)), d.computeBoundingSphere(), d.computeVertexNormals(), d;
1161
+ }
1162
+ function P(c) {
1163
+ const d = new ia(), r = c.elementSize || 1, h = c.data.flatMap((g, u) => g.flatMap((w, v) => [u * r, v * r, w])), f = [];
1164
+ for (let g = 0; g < c.data.length - 1; g++)
1165
+ for (let u = 0; u < c.data[g].length - 1; u++) {
1166
+ const w = c.data[g].length, v = g * w + u;
1167
+ f.push(v + 1, v + w, v + w + 1), f.push(v + w, v + 1, v);
1168
+ }
1169
+ return d.setIndex(f), d.setAttribute("position", new Da(h, 3)), d.computeBoundingSphere(), d.computeVertexNormals(), d;
1170
+ }
1171
+ function k(c) {
1172
+ let d = new xa();
1173
+ const { SPHERE: r, BOX: h, PLANE: f, CYLINDER: g, CONVEXPOLYHEDRON: u, TRIMESH: w, HEIGHTFIELD: v } = q.types;
1174
+ switch (c.type) {
1175
+ case r: {
1176
+ d = new Y(new X(s), l);
1177
+ break;
1178
+ }
1179
+ case h: {
1180
+ d = new Y(new X(i), l);
1181
+ break;
1182
+ }
1183
+ case f: {
1184
+ d = new Y(new X(n), l);
1185
+ break;
1186
+ }
1187
+ case g: {
1188
+ const A = new Me(
1189
+ c.radiusTop,
1190
+ c.radiusBottom,
1191
+ c.height,
1192
+ c.numSegments
1193
+ );
1194
+ d = new Y(new X(A), l), c.geometryId = A.id;
1195
+ break;
1196
+ }
1197
+ case u: {
1198
+ const A = p(c);
1199
+ d = new Y(new X(A), l), c.geometryId = A.id;
1200
+ break;
1201
+ }
1202
+ case w: {
1203
+ const A = j(c);
1204
+ d = new Y(new X(A), l), c.geometryId = A.id;
1205
+ break;
1206
+ }
1207
+ case v: {
1208
+ const A = P(c);
1209
+ d = new Y(new X(A), l), c.geometryId = A.id;
1210
+ break;
1211
+ }
1212
+ }
1213
+ return d;
1214
+ }
1215
+ function M(c, d) {
1216
+ const { SPHERE: r, BOX: h, PLANE: f, CYLINDER: g, CONVEXPOLYHEDRON: u, TRIMESH: w, HEIGHTFIELD: v } = q.types;
1217
+ switch (d.type) {
1218
+ case r: {
1219
+ const { radius: A } = d;
1220
+ c.scale.set(A * 1, A * 1, A * 1);
1221
+ break;
1222
+ }
1223
+ case h: {
1224
+ c.scale.copy(d.halfExtents), c.scale.multiplyScalar(2);
1225
+ break;
1226
+ }
1227
+ case f:
1228
+ break;
1229
+ case g: {
1230
+ c.scale.set(1, 1, 1);
1231
+ break;
1232
+ }
1233
+ case u: {
1234
+ c.scale.set(1, 1, 1);
1235
+ break;
1236
+ }
1237
+ case w: {
1238
+ c.scale.copy(d.scale).multiplyScalar(1);
1239
+ break;
1240
+ }
1241
+ case v: {
1242
+ c.scale.set(1, 1, 1);
1243
+ break;
1244
+ }
1245
+ }
1246
+ }
1247
+ function m(c, d) {
1248
+ if (!c) return !1;
1249
+ const { geometry: r } = c;
1250
+ return r instanceof Fa && d.type === q.types.SPHERE || r instanceof Ea && d.type === q.types.BOX || r instanceof Ya && d.type === q.types.PLANE || // geometry.id === (shape as ComplexShape).geometryId && shape.type === Shape.types.BOX ||
1251
+ // geometry.id === (shape as ComplexShape).geometryId && shape.type === Shape.types.SPHERE ||
1252
+ // geometry.id === (shape as ComplexShape).geometryId && shape.type === Shape.types.PLANE ||
1253
+ r.id === d.geometryId && d.type === q.types.CONVEXPOLYHEDRON || r.id === d.geometryId && d.type === q.types.TRIMESH || r.id === d.geometryId && d.type === q.types.HEIGHTFIELD;
1254
+ }
1255
+ function o(c, d) {
1256
+ return m(c, d) || (c = k(d)), c && M(c, d), c;
1257
+ }
1258
+ return {
1259
+ createConvexPolyhedronGeometry: p,
1260
+ createTrimeshGeometry: j,
1261
+ createHeightfieldGeometry: P,
1262
+ createMesh: k,
1263
+ scaleMesh: M,
1264
+ typeMatch: m,
1265
+ updateMesh: o
1266
+ };
1267
+ }
1268
+ const Ot = Tt(), Ca = {
1269
+ autoBox: _.BOX,
1270
+ autoCylinder: _.CYLINDER,
1271
+ autoSphere: _.SPHERE,
1272
+ autoConvex: _.HULL,
1273
+ autoTrimesh: _.MESH,
1274
+ box: _.BOX,
1275
+ sphere: _.SPHERE,
1276
+ cylinder: _.CYLINDER,
1277
+ convex: _.HULL,
1278
+ trimesh: _.MESH
1279
+ // plane: ShapeType.PLANE,
1280
+ }, Qt = Object.keys(Ca), Wt = {
1281
+ box: { x: 1, y: 1, z: 1 },
1282
+ sphere: { radius: 1 },
1283
+ cylinder: { radiusTop: 1, radiusBottom: 1, height: 1, segments: 8 },
1284
+ convex: { vertices: new Float32Array([1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 0, 0, -1]), faces: [[0, 1, 2, 3], [4, 0, 3], [4, 3, 2], [4, 2, 1], [4, 1, 0]] },
1285
+ trimesh: { vertices: new Float32Array([1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1]), indices: new Uint32Array([0, 1, 2, 0, 3, 1, 0, 2, 3, 1, 3, 2]) }
1286
+ // not for auto
1287
+ }, H = class H extends oa {
1288
+ constructor() {
1289
+ super(), this.result = H.EmptyResult, this.type = "autoBox", this.params = null, this._needsUpdate = !1, this.objectUpdate = (a) => {
1290
+ }, this.childadded = (a) => {
1291
+ this._needsUpdate = !0, a.child.addEventListener("objectUpdate", this.objectUpdate), a.child.addEventListener("childadded", this.childadded), a.child.addEventListener("childremoved", this.childremoved);
1292
+ }, this.childremoved = (a) => {
1293
+ this._needsUpdate = !0, a.child.removeEventListener("objectUpdate", this.objectUpdate), a.child.removeEventListener("childadded", this.childadded), a.child.removeEventListener("childremoved", this.childremoved);
1294
+ }, this.preFrame = () => {
1295
+ this._needsUpdate && (this._needsUpdate = !1, this.refreshShape());
1296
+ }, this.onStateChange("type", () => {
1297
+ const a = Wt[this.type];
1298
+ if (a) {
1299
+ const e = {};
1300
+ Object.entries(a).forEach(([b, s]) => {
1301
+ e[b] = s.slice ? s.slice() : s;
1302
+ }), this.params = {
1303
+ type: Ca[this.type],
1304
+ params: e,
1305
+ offset: new y(),
1306
+ orientation: new da()
1307
+ };
1308
+ } else
1309
+ this.params = null;
1310
+ this.object && this.refreshShape();
1311
+ });
1312
+ }
1313
+ // static IsCompatible(_object: IObject3D) { return true }
1314
+ init(a, e) {
1315
+ super.init(a, e), this.refreshShape(!1);
1316
+ const b = L.GetComponentInParent(a, ja);
1317
+ b && b.addShape(this), this.object.addEventListener("objectUpdate", this.objectUpdate), this.object.addEventListener("childadded", this.childadded), this.object.addEventListener("childremoved", this.childremoved), this.ctx.viewer.addEventListener("preFrame", this.preFrame);
1318
+ }
1319
+ destroy() {
1320
+ return this.bodyRef && (this.bodyRef.removeShape(this, !1), this.bodyRef = void 0), this.object.removeEventListener("objectUpdate", this.objectUpdate), this.ctx.viewer.removeEventListener("preFrame", this.preFrame), this.result = H.EmptyResult, super.destroy();
1321
+ }
1322
+ refreshShape(a = !0) {
1323
+ var s, i, n;
1324
+ if (this.object.__cannonShapes || (this.object.__cannonShapes = []), this.result) {
1325
+ const l = this.object.__cannonShapes.indexOf(this.result);
1326
+ l !== -1 && this.object.__cannonShapes.splice(l, 1);
1327
+ }
1328
+ const e = Ca[this.type], b = this.params ?? (e ? ke(this.object, { type: e }) : null);
1329
+ b ? this.result = Dt(this.object, void 0, b) : this.result = H.EmptyResult, this.object.__cannonShapes.includes(this.result) || this.object.__cannonShapes.push(this.result), a && this.bodyRef && this.bodyRef.refreshShapes(), (i = (s = this.object).setDirty) == null || i.call(s), (n = this.ctx.plugin(ne)) == null || n.refreshObject(this.object);
1330
+ }
1331
+ };
1332
+ H.ComponentType = "Cannon3DShapeComponent", H.StateProperties = [{
1333
+ key: "type",
1334
+ type: Sa(Qt)
1335
+ }], H.EmptyResult = { shape: new K(new y(0.025, 0.025, 0.025)) };
1336
+ let ca = H;
1337
+ class ya extends Ie {
1338
+ constructor(a) {
1339
+ super(a, !1), this.autoUpgradeChildren = !1, this._shapes = [], this._meshes = /* @__PURE__ */ new WeakMap(), this._gp = new Fe(), this.attach(a), this.add(this._gp), this.visible = !1;
1340
+ }
1341
+ update() {
1342
+ var s;
1343
+ super.update(), this._gp.scale.setFromMatrixScale(this.matrixWorld), this._gp.scale.set(
1344
+ 1 / this._gp.scale.x,
1345
+ 1 / this._gp.scale.y,
1346
+ 1 / this._gp.scale.z
1347
+ );
1348
+ const a = ((s = this.object) == null ? void 0 : s.__cannonShapes) || [], e = a.filter((i) => !this._shapes.includes(i)), b = this._shapes.filter((i) => !a.includes(i));
1349
+ if (!(!e.length && !b.length)) {
1350
+ for (const i of b) {
1351
+ const n = this._meshes.get(i.shape);
1352
+ n && (this._gp.remove(n), n.geometry.dispose(), n.material.dispose(), this._meshes.delete(i.shape));
1353
+ }
1354
+ this._shapes = [];
1355
+ for (const i of a) {
1356
+ const n = this._meshes.get(i.shape), l = Ot.updateMesh(n, i.shape);
1357
+ l !== n && l && (this._gp.add(l), n && (n.removeFromParent(), n.geometry.dispose(), n.material.dispose()), this._meshes.set(i.shape, l)), l && (i.offset && l.position.set(i.offset.x, i.offset.y, i.offset.z), i.orientation && l.quaternion.set(i.orientation.x, i.orientation.y, i.orientation.z, i.orientation.w)), this._shapes.push(i);
1358
+ }
1359
+ }
1360
+ }
1361
+ dispose() {
1362
+ this._shapes = [], this.children.forEach((a) => {
1363
+ a instanceof xa && (a.geometry.dispose(), a.material.dispose());
1364
+ }), super.dispose();
1365
+ }
1366
+ static Check(a) {
1367
+ return !!L.GetComponentData(a, ca);
1368
+ }
1369
+ static Create(a) {
1370
+ return new ya(a);
1371
+ }
1372
+ }
1373
+ var qt = Object.getOwnPropertyDescriptor, Kt = (t, a, e, b) => {
1374
+ for (var s = b > 1 ? void 0 : b ? qt(a, e) : a, i = t.length - 1, n; i >= 0; i--)
1375
+ (n = t[i]) && (s = n(s) || s);
1376
+ return s;
1377
+ };
1378
+ let na = class extends oa {
1379
+ constructor() {
1380
+ super(), this.scale = 1, this.angle = Math.PI / 4, this.angleShoulders = Math.PI / 2, this.twistAngle = Math.PI / 8, this.mass = 1, this.autoCreateOnInit = !0, this.hideRagdollMeshes = !1, this.material = new T(), this._bodies = [], this._constraints = [], this._parts = null, this._ragdollConstraints = null, this._cannon = null, this._meshes = [], this._meshContainer = null, this._visualMaterial = null, this._lastObjectPosition = new F(), this._lastObjectQuaternion = new C(), this._initialized = !1, this._isActive = !1, this._characterMeshes = [], this._boneMap = /* @__PURE__ */ new Map(), this._initialBoneQuats = /* @__PURE__ */ new Map(), this._initialBoneWorldQuats = /* @__PURE__ */ new Map(), this._initialBodyQuats = /* @__PURE__ */ new Map(), this._boneNames = {
1381
+ head: ["Head", "mixamorigHead", "head"],
1382
+ neck: ["Neck", "mixamorigNeck", "neck"],
1383
+ spine: ["Spine", "mixamorigSpine", "spine"],
1384
+ spine1: ["Spine1", "mixamorigSpine1", "spine1"],
1385
+ spine2: ["Spine2", "mixamorigSpine2", "spine2"],
1386
+ hips: ["Hips", "mixamorigHips", "hips", "pelvis"],
1387
+ leftUpLeg: ["LeftUpLeg", "mixamorigLeftUpLeg", "left_upper_leg", "LeftThigh"],
1388
+ rightUpLeg: ["RightUpLeg", "mixamorigRightUpLeg", "right_upper_leg", "RightThigh"],
1389
+ leftLeg: ["LeftLeg", "mixamorigLeftLeg", "left_lower_leg", "LeftShin"],
1390
+ rightLeg: ["RightLeg", "mixamorigRightLeg", "right_lower_leg", "RightShin"],
1391
+ leftArm: ["LeftArm", "mixamorigLeftArm", "left_upper_arm", "LeftShoulder"],
1392
+ rightArm: ["RightArm", "mixamorigRightArm", "right_upper_arm", "RightShoulder"],
1393
+ leftForeArm: ["LeftForeArm", "mixamorigLeftForeArm", "left_lower_arm", "LeftElbow"],
1394
+ rightForeArm: ["RightForeArm", "mixamorigRightForeArm", "right_lower_arm", "RightElbow"]
1395
+ }, this._currentObjectPosition = new F(), this._currentObjectQuaternion = new C(), this._deltaQuaternion = new C(), this._invLastQuaternion = new C(), this._tempVec3 = new F(), this._pivotPoint = new F(), this._tempWorldPos = new F(), this._tempWorldQuat = new C(), this.onStateChange("scale", () => this._recreateRagdoll()), this.onStateChange("angle", () => this._updateConstraints()), this.onStateChange("angleShoulders", () => this._updateConstraints()), this.onStateChange("twistAngle", () => this._updateConstraints()), this.onStateChange("mass", () => this._updateMass()), this.onStateChange("hideRagdollMeshes", () => this._updateMeshVisibility());
1396
+ }
1397
+ get bodies() {
1398
+ return this._bodies;
1399
+ }
1400
+ get constraints() {
1401
+ return this._constraints;
1402
+ }
1403
+ get parts() {
1404
+ return this._parts;
1405
+ }
1406
+ get ragdollConstraints() {
1407
+ return this._ragdollConstraints;
1408
+ }
1409
+ /** Returns true if ragdoll physics is currently active */
1410
+ get isActive() {
1411
+ return this._isActive;
1412
+ }
1413
+ init(t, a) {
1414
+ var e;
1415
+ super.init(t, a), this._cannon = this.ctx.plugin(z), this._removeRagdoll(), this._visualMaterial || (this._visualMaterial = new Ee({ color: 8947848 })), this._meshContainer || (this._meshContainer = new Ne(), this._meshContainer.name = `RagdollMeshes_${this.object.uuid}`, (e = this.ctx.viewer) == null || e.scene.add(this._meshContainer)), this._findCharacterMeshes(), this._buildBoneMap(), this.autoCreateOnInit && (this._createRagdoll(), this._deactivateBodies()), this._updateMeshVisibility();
1416
+ }
1417
+ destroy() {
1418
+ var t;
1419
+ return this._removeRagdoll(), this._meshContainer && ((t = this.ctx.viewer) == null || t.scene.remove(this._meshContainer), this._meshContainer = null), this._visualMaterial && (this._visualMaterial.dispose(), this._visualMaterial = null), this._cannon = null, super.destroy();
1420
+ }
1421
+ // Called automatically by the component system each frame
1422
+ preFrame(t) {
1423
+ this._isActive ? this._syncRagdollToBones() : this._syncObjectPosition(), this._updateMeshes();
1424
+ }
1425
+ /**
1426
+ * Syncs the character's bones to match the ragdoll body positions/rotations.
1427
+ * Called each frame when ragdoll is active.
1428
+ *
1429
+ * The approach:
1430
+ * 1. Calculate how much the ragdoll body has rotated in world space (delta from initial)
1431
+ * 2. Apply that same world-space delta to the bone's initial world orientation
1432
+ * 3. Convert the new world orientation back to local space for the bone
1433
+ *
1434
+ * Note: Only the root bone (hips) gets position updates. Other bones only get rotation updates
1435
+ * because in a skeleton hierarchy, bone positions are fixed (defined by bone length).
1436
+ */
1437
+ _syncRagdollToBones() {
1438
+ if (!this._parts || this._characterMeshes.length === 0) return;
1439
+ const t = (e, b) => {
1440
+ const s = this._findBone(b);
1441
+ if (!s) return;
1442
+ const i = s.name, n = this._initialBodyQuats.get(e), l = this._initialBoneWorldQuats.get(i);
1443
+ if (!n || !l)
1444
+ return;
1445
+ const p = new C(
1446
+ e.quaternion.x,
1447
+ e.quaternion.y,
1448
+ e.quaternion.z,
1449
+ e.quaternion.w
1450
+ ), j = n.clone().invert(), k = p.clone().multiply(j).clone().multiply(l);
1451
+ if (s.parent) {
1452
+ const M = new C();
1453
+ s.parent.getWorldQuaternion(M);
1454
+ const o = M.clone().invert().clone().multiply(k);
1455
+ s.quaternion.copy(o);
1456
+ } else
1457
+ s.quaternion.copy(k);
1458
+ }, a = this._findBone(this._boneNames.hips);
1459
+ if (a && this._parts.pelvis) {
1460
+ if (this._tempWorldPos.set(
1461
+ this._parts.pelvis.position.x,
1462
+ this._parts.pelvis.position.y,
1463
+ this._parts.pelvis.position.z
1464
+ ), a.parent) {
1465
+ const e = a.parent.matrixWorld.clone().invert();
1466
+ this._tempWorldPos.applyMatrix4(e);
1467
+ }
1468
+ a.position.copy(this._tempWorldPos), t(this._parts.pelvis, this._boneNames.hips);
1469
+ }
1470
+ t(this._parts.head, this._boneNames.head), t(this._parts.upperBody, this._boneNames.spine2), t(this._parts.upperLeftLeg, this._boneNames.leftUpLeg), t(this._parts.upperRightLeg, this._boneNames.rightUpLeg), t(this._parts.lowerLeftLeg, this._boneNames.leftLeg), t(this._parts.lowerRightLeg, this._boneNames.rightLeg), t(this._parts.upperLeftArm, this._boneNames.leftArm), t(this._parts.upperRightArm, this._boneNames.rightArm), t(this._parts.lowerLeftArm, this._boneNames.leftForeArm), t(this._parts.lowerRightArm, this._boneNames.rightForeArm);
1471
+ for (const e of this._characterMeshes)
1472
+ e.skeleton && e.skeleton.update();
1473
+ }
1474
+ _syncObjectPosition() {
1475
+ if (!this._initialized || this._bodies.length === 0) return;
1476
+ this.object.getWorldPosition(this._currentObjectPosition), this.object.getWorldQuaternion(this._currentObjectQuaternion);
1477
+ const t = this._currentObjectPosition.x - this._lastObjectPosition.x, a = this._currentObjectPosition.y - this._lastObjectPosition.y, e = this._currentObjectPosition.z - this._lastObjectPosition.z;
1478
+ if (!this._currentObjectQuaternion.equals(this._lastObjectQuaternion)) {
1479
+ this._invLastQuaternion.copy(this._lastObjectQuaternion).invert(), this._deltaQuaternion.copy(this._currentObjectQuaternion).multiply(this._invLastQuaternion), this._pivotPoint.copy(this._lastObjectPosition);
1480
+ for (const s of this._bodies) {
1481
+ this._tempVec3.set(
1482
+ s.position.x - this._pivotPoint.x,
1483
+ s.position.y - this._pivotPoint.y,
1484
+ s.position.z - this._pivotPoint.z
1485
+ ), this._tempVec3.applyQuaternion(this._deltaQuaternion), s.position.x = this._pivotPoint.x + this._tempVec3.x, s.position.y = this._pivotPoint.y + this._tempVec3.y, s.position.z = this._pivotPoint.z + this._tempVec3.z;
1486
+ const i = new C(
1487
+ s.quaternion.x,
1488
+ s.quaternion.y,
1489
+ s.quaternion.z,
1490
+ s.quaternion.w
1491
+ );
1492
+ i.premultiply(this._deltaQuaternion), s.quaternion.set(i.x, i.y, i.z, i.w);
1493
+ }
1494
+ this._lastObjectQuaternion.copy(this._currentObjectQuaternion);
1495
+ }
1496
+ if (t !== 0 || a !== 0 || e !== 0) {
1497
+ for (const s of this._bodies)
1498
+ s.position.x += t, s.position.y += a, s.position.z += e;
1499
+ this._lastObjectPosition.copy(this._currentObjectPosition);
1500
+ }
1501
+ }
1502
+ _updateMeshes() {
1503
+ if (!(!this._parts || this._meshes.length === 0))
1504
+ for (let t = 0; t < this._bodies.length && t < this._meshes.length; t++) {
1505
+ const a = this._bodies[t], e = this._meshes[t];
1506
+ e.position.set(a.position.x, a.position.y, a.position.z), e.quaternion.set(
1507
+ a.quaternion.x,
1508
+ a.quaternion.y,
1509
+ a.quaternion.z,
1510
+ a.quaternion.w
1511
+ );
1512
+ }
1513
+ }
1514
+ _recreateRagdoll() {
1515
+ var t, a;
1516
+ this._cannon && (this._removeRagdoll(), this._createRagdoll(), (a = (t = this.object).setDirty) == null || a.call(t, { source: "CannonRagdollComponent" }));
1517
+ }
1518
+ _updateMass() {
1519
+ var t, a;
1520
+ for (const e of this._bodies)
1521
+ e.mass = this.mass, e.updateMassProperties();
1522
+ (a = (t = this.object).setDirty) == null || a.call(t, { source: "CannonRagdollComponent" });
1523
+ }
1524
+ _updateConstraints() {
1525
+ this._recreateRagdoll();
1526
+ }
1527
+ _createRagdoll() {
1528
+ if (!this._cannon) return;
1529
+ const t = this.scale, a = this.angle, e = this.angleShoulders, b = this.twistAngle, s = 0.5 * t, i = 0.4 * t, n = 0.4 * t, l = 0.2 * t, p = 0.2 * t, j = 0.1 * t, P = 0.25 * t, k = 0.6 * t, M = 0.4 * t, m = 0.5 * t, o = 0.2 * t, c = 0.2 * t, d = 0.5 * t, r = new fe(P), h = new K(
1530
+ new y(i * 0.5, l * 0.5, l * 0.5)
1531
+ ), f = new K(
1532
+ new y(n * 0.5, p * 0.5, p * 0.5)
1533
+ ), g = new K(
1534
+ new y(s * 0.5, k * 0.5, p * 0.5)
1535
+ ), u = new K(
1536
+ new y(s * 0.5, M * 0.5, p * 0.5)
1537
+ ), w = new K(
1538
+ new y(o * 0.5, m * 0.5, p * 0.5)
1539
+ ), v = new K(
1540
+ new y(c * 0.5, d * 0.5, p * 0.5)
1541
+ ), A = this.object.getWorldPosition(new F()), x = this.object.getWorldQuaternion(new C()), D = (O) => {
1542
+ const ba = O.clone().applyQuaternion(x);
1543
+ return new y(
1544
+ A.x + ba.x,
1545
+ A.y + ba.y,
1546
+ A.z + ba.z
1547
+ );
1548
+ }, I = (O, ba = !1) => {
1549
+ var Va;
1550
+ let Pa;
1551
+ if (ba)
1552
+ Pa = new Fa(P, 16, 16);
1553
+ else {
1554
+ const Aa = O.shapes[0];
1555
+ Pa = new Ea(
1556
+ Aa.halfExtents.x * 2,
1557
+ Aa.halfExtents.y * 2,
1558
+ Aa.halfExtents.z * 2
1559
+ );
1560
+ }
1561
+ const la = new xa(Pa, this._visualMaterial);
1562
+ return la.position.set(O.position.x, O.position.y, O.position.z), (Va = this._meshContainer) == null || Va.add(la), this._meshes.push(la), la;
1563
+ }, E = new N({
1564
+ mass: this.mass,
1565
+ position: D(new F(s / 2, d / 2, 0)),
1566
+ material: this.material
1567
+ }), S = new N({
1568
+ mass: this.mass,
1569
+ position: D(new F(-s / 2, d / 2, 0)),
1570
+ material: this.material
1571
+ });
1572
+ E.addShape(v), S.addShape(v), E.quaternion.set(x.x, x.y, x.z, x.w), S.quaternion.set(x.x, x.y, x.z, x.w), this._bodies.push(E, S), I(E), I(S);
1573
+ const R = new N({
1574
+ mass: this.mass,
1575
+ position: D(new F(s / 2, d + m / 2, 0)),
1576
+ material: this.material
1577
+ }), U = new N({
1578
+ mass: this.mass,
1579
+ position: D(new F(-s / 2, d + m / 2, 0)),
1580
+ material: this.material
1581
+ });
1582
+ R.addShape(w), U.addShape(w), R.quaternion.set(x.x, x.y, x.z, x.w), U.quaternion.set(x.x, x.y, x.z, x.w), this._bodies.push(R, U), I(R), I(U);
1583
+ const ta = d + m + M / 2, B = new N({
1584
+ mass: this.mass,
1585
+ position: D(new F(0, ta, 0)),
1586
+ material: this.material
1587
+ });
1588
+ B.addShape(u), B.quaternion.set(x.x, x.y, x.z, x.w), this._bodies.push(B), I(B);
1589
+ const Z = ta + M / 2 + k / 2, G = new N({
1590
+ mass: this.mass,
1591
+ position: D(new F(0, Z, 0)),
1592
+ material: this.material
1593
+ });
1594
+ G.addShape(g), G.quaternion.set(x.x, x.y, x.z, x.w), this._bodies.push(G), I(G);
1595
+ const ra = Z + k / 2 + P + j, $ = new N({
1596
+ mass: this.mass,
1597
+ position: D(new F(0, ra, 0)),
1598
+ material: this.material
1599
+ });
1600
+ $.addShape(r), $.quaternion.set(x.x, x.y, x.z, x.w), this._bodies.push($), I($, !0);
1601
+ const ha = Z + k / 2, J = new N({
1602
+ mass: this.mass,
1603
+ position: D(new F(s / 2 + i / 2, ha, 0)),
1604
+ material: this.material
1605
+ }), V = new N({
1606
+ mass: this.mass,
1607
+ position: D(new F(-s / 2 - i / 2, ha, 0)),
1608
+ material: this.material
1609
+ });
1610
+ J.addShape(h), V.addShape(h), J.quaternion.set(x.x, x.y, x.z, x.w), V.quaternion.set(x.x, x.y, x.z, x.w), this._bodies.push(J, V), I(J), I(V);
1611
+ const aa = new N({
1612
+ mass: this.mass,
1613
+ position: D(new F(
1614
+ s / 2 + i + n / 2,
1615
+ ha,
1616
+ 0
1617
+ )),
1618
+ material: this.material
1619
+ }), ea = new N({
1620
+ mass: this.mass,
1621
+ position: D(new F(
1622
+ -s / 2 - i - n / 2,
1623
+ ha,
1624
+ 0
1625
+ )),
1626
+ material: this.material
1627
+ });
1628
+ aa.addShape(f), ea.addShape(f), aa.quaternion.set(x.x, x.y, x.z, x.w), ea.quaternion.set(x.x, x.y, x.z, x.w), this._bodies.push(aa, ea), I(aa), I(ea), this._parts = {
1629
+ lowerLeftLeg: E,
1630
+ lowerRightLeg: S,
1631
+ upperLeftLeg: R,
1632
+ upperRightLeg: U,
1633
+ pelvis: B,
1634
+ upperBody: G,
1635
+ head: $,
1636
+ upperLeftArm: J,
1637
+ upperRightArm: V,
1638
+ lowerLeftArm: aa,
1639
+ lowerRightArm: ea
1640
+ };
1641
+ for (const O of this._bodies)
1642
+ this._cannon.world.addBody(O);
1643
+ const Ga = new Q($, G, {
1644
+ pivotA: new y(0, -P - j / 2, 0),
1645
+ pivotB: new y(0, k / 2, 0),
1646
+ axisA: y.UNIT_Y,
1647
+ axisB: y.UNIT_Y,
1648
+ angle: a,
1649
+ twistAngle: b
1650
+ });
1651
+ this._constraints.push(Ga);
1652
+ const _a = new Q(E, R, {
1653
+ pivotA: new y(0, d / 2, 0),
1654
+ pivotB: new y(0, -m / 2, 0),
1655
+ axisA: y.UNIT_Y,
1656
+ axisB: y.UNIT_Y,
1657
+ angle: a,
1658
+ twistAngle: b
1659
+ }), Ta = new Q(S, U, {
1660
+ pivotA: new y(0, d / 2, 0),
1661
+ pivotB: new y(0, -m / 2, 0),
1662
+ axisA: y.UNIT_Y,
1663
+ axisB: y.UNIT_Y,
1664
+ angle: a,
1665
+ twistAngle: b
1666
+ });
1667
+ this._constraints.push(_a, Ta);
1668
+ const Oa = new Q(R, B, {
1669
+ pivotA: new y(0, m / 2, 0),
1670
+ pivotB: new y(s / 2, -M / 2, 0),
1671
+ axisA: y.UNIT_Y,
1672
+ axisB: y.UNIT_Y,
1673
+ angle: a,
1674
+ twistAngle: b
1675
+ }), Qa = new Q(U, B, {
1676
+ pivotA: new y(0, m / 2, 0),
1677
+ pivotB: new y(-s / 2, -M / 2, 0),
1678
+ axisA: y.UNIT_Y,
1679
+ axisB: y.UNIT_Y,
1680
+ angle: a,
1681
+ twistAngle: b
1682
+ });
1683
+ this._constraints.push(Oa, Qa);
1684
+ const Wa = new Q(B, G, {
1685
+ pivotA: new y(0, M / 2, 0),
1686
+ pivotB: new y(0, -k / 2, 0),
1687
+ axisA: y.UNIT_Y,
1688
+ axisB: y.UNIT_Y,
1689
+ angle: a,
1690
+ twistAngle: b
1691
+ });
1692
+ this._constraints.push(Wa);
1693
+ const qa = new Q(G, J, {
1694
+ pivotA: new y(s / 2, k / 2, 0),
1695
+ pivotB: new y(-i / 2, 0, 0),
1696
+ axisA: y.UNIT_Z,
1697
+ axisB: y.UNIT_Z,
1698
+ angle: e,
1699
+ twistAngle: b
1700
+ }), Ka = new Q(G, V, {
1701
+ pivotA: new y(-s / 2, k / 2, 0),
1702
+ pivotB: new y(i / 2, 0, 0),
1703
+ axisA: y.UNIT_Z,
1704
+ axisB: y.UNIT_Z,
1705
+ angle: e,
1706
+ twistAngle: b
1707
+ });
1708
+ this._constraints.push(qa, Ka);
1709
+ const Ha = new Q(aa, J, {
1710
+ pivotA: new y(-n / 2, 0, 0),
1711
+ pivotB: new y(i / 2, 0, 0),
1712
+ axisA: y.UNIT_Z,
1713
+ axisB: y.UNIT_Z,
1714
+ angle: a,
1715
+ twistAngle: b
1716
+ }), Ja = new Q(ea, V, {
1717
+ pivotA: new y(n / 2, 0, 0),
1718
+ pivotB: new y(-i / 2, 0, 0),
1719
+ axisA: y.UNIT_Z,
1720
+ axisB: y.UNIT_Z,
1721
+ angle: a,
1722
+ twistAngle: b
1723
+ });
1724
+ this._constraints.push(Ha, Ja), this._ragdollConstraints = {
1725
+ neckJoint: Ga,
1726
+ leftKneeJoint: _a,
1727
+ rightKneeJoint: Ta,
1728
+ leftHipJoint: Oa,
1729
+ rightHipJoint: Qa,
1730
+ spineJoint: Wa,
1731
+ leftShoulder: qa,
1732
+ rightShoulder: Ka,
1733
+ leftElbowJoint: Ha,
1734
+ rightElbowJoint: Ja
1735
+ };
1736
+ for (const O of this._constraints)
1737
+ this._cannon.world.addConstraint(O);
1738
+ this.object.getWorldPosition(this._lastObjectPosition), this.object.getWorldQuaternion(this._lastObjectQuaternion), this._initialized = !0;
1739
+ }
1740
+ _removeRagdoll() {
1741
+ var t, a, e;
1742
+ for (const b of this._constraints)
1743
+ (t = this._cannon) == null || t.world.removeConstraint(b);
1744
+ this._constraints = [], this._ragdollConstraints = null;
1745
+ for (const b of this._bodies)
1746
+ (a = this._cannon) == null || a.world.removeBody(b);
1747
+ this._bodies = [], this._parts = null;
1748
+ for (const b of this._meshes)
1749
+ b.geometry.dispose(), (e = this._meshContainer) == null || e.remove(b);
1750
+ this._meshes = [];
1751
+ }
1752
+ /**
1753
+ * Reset the ragdoll to its initial position relative to the object
1754
+ */
1755
+ resetPosition() {
1756
+ var d, r;
1757
+ if (!this._parts) return;
1758
+ const t = this.object.getWorldPosition(new F()), a = this.scale, e = 0.5 * a, b = 0.5 * a, s = 0.5 * a, i = 0.4 * a, n = 0.6 * a, l = 0.25 * a, p = 0.1 * a, j = 0.4 * a, P = 0.4 * a, k = (h, f) => {
1759
+ h.position.copy(f), h.velocity.set(0, 0, 0), h.angularVelocity.set(0, 0, 0), h.quaternion.set(0, 0, 0, 1);
1760
+ };
1761
+ k(this._parts.lowerLeftLeg, new y(
1762
+ t.x + e / 2,
1763
+ t.y + b / 2,
1764
+ t.z
1765
+ )), k(this._parts.lowerRightLeg, new y(
1766
+ t.x - e / 2,
1767
+ t.y + b / 2,
1768
+ t.z
1769
+ )), k(this._parts.upperLeftLeg, new y(
1770
+ t.x + e / 2,
1771
+ t.y + b + s / 2,
1772
+ t.z
1773
+ )), k(this._parts.upperRightLeg, new y(
1774
+ t.x - e / 2,
1775
+ t.y + b + s / 2,
1776
+ t.z
1777
+ ));
1778
+ const M = t.y + b + s + i / 2;
1779
+ k(this._parts.pelvis, new y(t.x, M, t.z));
1780
+ const m = M + i / 2 + n / 2;
1781
+ k(this._parts.upperBody, new y(t.x, m, t.z));
1782
+ const o = m + n / 2 + l + p;
1783
+ k(this._parts.head, new y(t.x, o, t.z));
1784
+ const c = m + n / 2;
1785
+ k(this._parts.upperLeftArm, new y(
1786
+ t.x + e / 2 + j / 2,
1787
+ c,
1788
+ t.z
1789
+ )), k(this._parts.upperRightArm, new y(
1790
+ t.x - e / 2 - j / 2,
1791
+ c,
1792
+ t.z
1793
+ )), k(this._parts.lowerLeftArm, new y(
1794
+ t.x + e / 2 + j + P / 2,
1795
+ c,
1796
+ t.z
1797
+ )), k(this._parts.lowerRightArm, new y(
1798
+ t.x - e / 2 - j - P / 2,
1799
+ c,
1800
+ t.z
1801
+ )), (r = (d = this.object).setDirty) == null || r.call(d, { source: "CannonRagdollComponent" });
1802
+ }
1803
+ /**
1804
+ * Apply an impulse to all bodies
1805
+ */
1806
+ applyImpulse(t, a) {
1807
+ for (const e of this._bodies)
1808
+ e.applyImpulse(t, a || e.position);
1809
+ }
1810
+ /**
1811
+ * Apply an impulse to a specific body part
1812
+ */
1813
+ applyImpulseToPart(t, a, e) {
1814
+ if (!this._parts) return;
1815
+ const b = this._parts[t];
1816
+ b && b.applyImpulse(a, e || b.position);
1817
+ }
1818
+ _updateMeshVisibility() {
1819
+ this._meshContainer && (this._meshContainer.visible = !this.hideRagdollMeshes);
1820
+ }
1821
+ _findCharacterMeshes() {
1822
+ this._characterMeshes = [], this.object.traverse((t) => {
1823
+ t.isSkinnedMesh && this._characterMeshes.push(t);
1824
+ });
1825
+ }
1826
+ _buildBoneMap() {
1827
+ this._boneMap.clear(), this.object.traverse((t) => {
1828
+ if (t.isBone) {
1829
+ const a = t;
1830
+ this._boneMap.set(a.name, a), this._boneMap.set(a.name.toLowerCase(), a);
1831
+ }
1832
+ });
1833
+ }
1834
+ _findBone(t) {
1835
+ for (const a of t) {
1836
+ const e = this._boneMap.get(a) || this._boneMap.get(a.toLowerCase());
1837
+ if (e) return e;
1838
+ }
1839
+ return null;
1840
+ }
1841
+ _getBoneWorldPosition(t) {
1842
+ return t.getWorldPosition(this._tempWorldPos), this._tempWorldPos.clone();
1843
+ }
1844
+ _getBoneWorldQuaternion(t) {
1845
+ return t.getWorldQuaternion(this._tempWorldQuat), this._tempWorldQuat.clone();
1846
+ }
1847
+ start() {
1848
+ super.start(), setTimeout(() => {
1849
+ this.activate();
1850
+ }, 2e3);
1851
+ }
1852
+ /**
1853
+ * Activates the ragdoll physics simulation.
1854
+ * Call this when the character should start ragdolling (e.g., on death).
1855
+ * @param impulse Optional initial impulse to apply (e.g., from bullet impact)
1856
+ * @param impactPoint Optional world point where impulse is applied
1857
+ */
1858
+ activate(t, a) {
1859
+ this._isActive || (this._parts || this._createRagdoll(), this._storeInitialBoneQuats(), this._storeInitialBodyQuats(), this._activateBodies(), this._meshContainer && (this._meshContainer.visible = !this.hideRagdollMeshes), t && this._parts && (this._parts.pelvis.applyImpulse(t, new y(0, 0, 0)), this._parts.upperBody.applyImpulse(t, new y(0, 0, 0)), this._parts.head.applyImpulse(t, new y(0, 0, 0))), this._isActive = !0);
1860
+ }
1861
+ /**
1862
+ * Store initial bone quaternions (both local and world space) for rotation offset calculation
1863
+ */
1864
+ _storeInitialBoneQuats() {
1865
+ this._initialBoneQuats.clear(), this._initialBoneWorldQuats.clear();
1866
+ const t = (a) => {
1867
+ const e = this._findBone(a);
1868
+ if (e) {
1869
+ this._initialBoneQuats.set(e.name, e.quaternion.clone());
1870
+ const b = new C();
1871
+ e.getWorldQuaternion(b), this._initialBoneWorldQuats.set(e.name, b);
1872
+ }
1873
+ };
1874
+ t(this._boneNames.head), t(this._boneNames.spine2), t(this._boneNames.hips), t(this._boneNames.leftUpLeg), t(this._boneNames.rightUpLeg), t(this._boneNames.leftLeg), t(this._boneNames.rightLeg), t(this._boneNames.leftArm), t(this._boneNames.rightArm), t(this._boneNames.leftForeArm), t(this._boneNames.rightForeArm);
1875
+ }
1876
+ /**
1877
+ * Store initial body quaternions (world space) for rotation offset calculation
1878
+ */
1879
+ _storeInitialBodyQuats() {
1880
+ this._initialBodyQuats.clear();
1881
+ for (const t of this._bodies)
1882
+ this._initialBodyQuats.set(t, new C(
1883
+ t.quaternion.x,
1884
+ t.quaternion.y,
1885
+ t.quaternion.z,
1886
+ t.quaternion.w
1887
+ ));
1888
+ }
1889
+ /**
1890
+ * Deactivates the ragdoll and restores the character.
1891
+ * Call this to reset the character to normal state.
1892
+ */
1893
+ deactivate() {
1894
+ this._isActive && (this._deactivateBodies(), this._setCharacterVisible(!0), this._meshContainer && (this._meshContainer.visible = !1), this._isActive = !1);
1895
+ }
1896
+ _matchBonesToRagdoll() {
1897
+ if (!this._parts) return;
1898
+ const t = (a, e) => {
1899
+ const b = this._findBone(e);
1900
+ if (b) {
1901
+ const s = this._getBoneWorldPosition(b), i = this._getBoneWorldQuaternion(b);
1902
+ a.position.set(s.x, s.y, s.z), a.quaternion.set(i.x, i.y, i.z, i.w), a.velocity.set(0, 0, 0), a.angularVelocity.set(0, 0, 0);
1903
+ }
1904
+ };
1905
+ t(this._parts.head, this._boneNames.head), t(this._parts.upperBody, this._boneNames.spine2), t(this._parts.pelvis, this._boneNames.hips), t(this._parts.upperLeftLeg, this._boneNames.leftUpLeg), t(this._parts.upperRightLeg, this._boneNames.rightUpLeg), t(this._parts.lowerLeftLeg, this._boneNames.leftLeg), t(this._parts.lowerRightLeg, this._boneNames.rightLeg), t(this._parts.upperLeftArm, this._boneNames.leftArm), t(this._parts.upperRightArm, this._boneNames.rightArm), t(this._parts.lowerLeftArm, this._boneNames.leftForeArm), t(this._parts.lowerRightArm, this._boneNames.rightForeArm);
1906
+ }
1907
+ _activateBodies() {
1908
+ for (const t of this._bodies)
1909
+ t.type = N.DYNAMIC, t.mass = this.mass, t.updateMassProperties(), t.wakeUp();
1910
+ }
1911
+ _deactivateBodies() {
1912
+ for (const t of this._bodies)
1913
+ t.type = N.KINEMATIC, t.mass = 0, t.velocity.set(0, 0, 0), t.angularVelocity.set(0, 0, 0);
1914
+ }
1915
+ _setCharacterVisible(t) {
1916
+ for (const a of this._characterMeshes)
1917
+ a.visible = t;
1918
+ }
1919
+ _findClosestBody(t) {
1920
+ let a = null, e = 1 / 0;
1921
+ for (const b of this._bodies) {
1922
+ const s = b.position.x - t.x, i = b.position.y - t.y, n = b.position.z - t.z, l = s * s + i * i + n * n;
1923
+ l < e && (e = l, a = b);
1924
+ }
1925
+ return a;
1926
+ }
1927
+ };
1928
+ na.ComponentType = "CannonRagdollComponent";
1929
+ na.StateProperties = [
1930
+ "scale",
1931
+ "angle",
1932
+ "angleShoulders",
1933
+ "twistAngle",
1934
+ "mass",
1935
+ "autoCreateOnInit",
1936
+ "hideRagdollMeshes"
1937
+ ];
1938
+ na = Kt([
1939
+ Ba("Ragdoll")
1940
+ ], na);
1941
+ var Ht = Object.defineProperty, Jt = Object.getOwnPropertyDescriptor, W = (t, a, e, b) => {
1942
+ for (var s = b > 1 ? void 0 : b ? Jt(a, e) : a, i = t.length - 1, n; i >= 0; i--)
1943
+ (n = t[i]) && (s = (b ? n(a, e, s) : n(s)) || s);
1944
+ return b && s && Ht(a, e, s), s;
1945
+ };
1946
+ let T = class extends za {
1947
+ constructor() {
1948
+ super(...arguments), this.uuid = Ce();
1949
+ }
1950
+ };
1951
+ W([
1952
+ Le()
1953
+ ], T.prototype, "name", 2);
1954
+ W([
1955
+ ze()
1956
+ ], T.prototype, "uuid", 2);
1957
+ W([
1958
+ oe()
1959
+ ], T.prototype, "friction", 2);
1960
+ W([
1961
+ oe()
1962
+ ], T.prototype, "restitution", 2);
1963
+ T = W([
1964
+ Ba("Cannon Material")
1965
+ ], T);
1966
+ La.MakeSerializable(za, "CannonMaterial", ["friction", "restitution"]);
1967
+ La.MakeSerializable(T, "CannonMaterial", ["name", "uuid", "friction", "restitution"]);
1968
+ La.MakeSerializable(ge, "CannonContactMaterial", [
1969
+ /* 'materials', */
1970
+ "friction",
1971
+ "restitution",
1972
+ "contactEquationStiffness",
1973
+ "contactEquationRelaxation",
1974
+ "frictionEquationStiffness",
1975
+ "frictionEquationRelaxation"
1976
+ ]);
1977
+ Re.AddClass({
1978
+ key: "CannonMaterial",
1979
+ getId(t) {
1980
+ return t.uuid;
1981
+ },
1982
+ getLabel(t) {
1983
+ return t ? t.name : "Cannon Material";
1984
+ },
1985
+ setName(t, a) {
1986
+ t.name = a;
1987
+ },
1988
+ ctor: T
1989
+ });
1990
+ let z = class extends Se {
1991
+ // @uiButton('Make Root Bodies')
1992
+ // makeRootBodies = () => {
1993
+ // this._viewer?.scene.modelRoot.children.forEach((child) => {
1994
+ // this.makeBody(child)
1995
+ // })
1996
+ // }
1997
+ // stepMultiple = () => {
1998
+ // console.log(this.enabled, this.nextSteps)
1999
+ // if (this.enabled) return
2000
+ // this.nextSteps = 100
2001
+ // // this.enabled = true
2002
+ // // this._viewer?.doOnce('postFrame', () => {
2003
+ // // // Step the physics world
2004
+ // // for (let i = 0; i < 100; i++) {
2005
+ // // this._world.step(0.1)
2006
+ // // }
2007
+ // // // this._viewer?.doOnce('postFrame', () => {
2008
+ // // // this.enabled = false
2009
+ // // // })
2010
+ // // })
2011
+ // // this._viewer?.setDirty()
2012
+ // }
2013
+ constructor(t = !0, a = !1) {
2014
+ super(), this._world = new pe(), this.enabled = !0, this.running = !0, this.nextSteps = 0, this.stepPhysics = {
2015
+ stepCount: 100,
2016
+ delta: 0.1,
2017
+ step: () => {
2018
+ this.nextSteps = this.stepPhysics.stepCount;
2019
+ }
2020
+ }, this.defaultMaterial = new T("default"), this.dependencies = [L], this._v1 = new F(), this._v2 = new F(), this._s2 = new F(), this._q1 = new C(), this._q2 = new C(), this._m1 = new Xa(), this._m2 = new Xa(), this.frameFadeToggled = !1, this._preFrame = (b) => {
2021
+ const s = this._viewer;
2022
+ if (!s || this.isDisabled()) return;
2023
+ const i = s.getPlugin(Be);
2024
+ if (!this.running)
2025
+ if (this.nextSteps > 0) this.running = !0;
2026
+ else {
2027
+ i && this.frameFadeToggled && (i.enable(z.PluginType), this.frameFadeToggled = !1), this._dirty = !1;
2028
+ return;
2029
+ }
2030
+ i && !this.frameFadeToggled && i.disable(z.PluginType);
2031
+ try {
2032
+ if (this.nextSteps > 0)
2033
+ for (let l = 0; l < this.stepPhysics.stepCount; l++)
2034
+ this._world.step(this.stepPhysics.delta);
2035
+ else
2036
+ this._world.fixedStep();
2037
+ } catch (l) {
2038
+ console.error("[CannonPhysicsPlugin] Error stepping physics world"), console.error(l);
2039
+ }
2040
+ this._dirty = !1;
2041
+ let n = !1;
2042
+ for (const l of this.bodyComponents.values()) {
2043
+ if (l.mass === 0) continue;
2044
+ const p = l.object, j = l.body;
2045
+ p && (n = !1, p.updateWorldMatrix(!0, !1), p.getWorldPosition(this._v2), p.getWorldQuaternion(this._q2), p.getWorldScale(this._s2), this._v1.copy(j.position), !n && this._v2.manhattanDistanceTo(this._v1) > 0 && (n = !0), this._q1.copy(j.quaternion), !n && this._q2.angleTo(this._q1) > 0 && (n = !0), n && (this._m1.compose(this._v1, this._q1, this._s2), p.parent ? (this._m2.copy(p.parent.matrixWorld).invert(), this._m2.multiply(this._m1), this._m2.decompose(this._v1, this._q1, this._s2), p.position.copy(this._v1), p.quaternion.copy(this._q1), p.setDirty && p.setDirty({ change: "transform", source: "CannonPhysicsPlugin" })) : console.error("[CannonPhysicsPlugin] Mesh has no parent, cannot set world transform", p)));
2046
+ }
2047
+ this._dirty = n, s.setDirty(), s.renderManager.resetShadows(), this.nextSteps > 0 && (this.running = !1, this.nextSteps = 0);
2048
+ }, this._onRemove = [], this._objectAdd = (b) => {
2049
+ var l, p;
2050
+ const s = b.object;
2051
+ ((l = s == null ? void 0 : s.userData) == null ? void 0 : l.physicsMass) === void 0 || !((p = this._viewer) != null && p.getPlugin(L)) || L.GetComponentData(s, this.componentTypes.body);
2052
+ }, this._objectRemove = (b) => {
2053
+ var i;
2054
+ const s = b.object;
2055
+ (i = s == null ? void 0 : s.userData) != null && i.physicsMass;
2056
+ }, this.componentTypes = {
2057
+ body: ja,
2058
+ shape: ca,
2059
+ ragdoll: na
2060
+ }, this.bodyComponents = /* @__PURE__ */ new Set(), this.cannonBodies = /* @__PURE__ */ new WeakMap(), this.enabled = t, this.running = a, this.defaultMaterial.friction = 0, this.defaultMaterial.restitution = 0, this._world.defaultMaterial = this.defaultMaterial, this._world.defaultContactMaterial.materials = [this.defaultMaterial, this.defaultMaterial];
2061
+ const e = {};
2062
+ this._world.addEventListener("beginContact", (b) => {
2063
+ const s = this.cannonBodies.get(b.bodyA), i = this.cannonBodies.get(b.bodyB);
2064
+ if (!s || !i) {
2065
+ console.warn("[CannonPhysicsPlugin] Contact bodies not managed by plugin", b.bodyA, b.bodyB);
2066
+ return;
2067
+ }
2068
+ e.object = i.object, e.body = i, L.ObjectDispatch(s.object, "onBeginContact", e), e.object = s.object, e.body = s, L.ObjectDispatch(i.object, "onBeginContact", e);
2069
+ }), this._world.addEventListener("endContact", (b) => {
2070
+ const s = this.cannonBodies.get(b.bodyA), i = this.cannonBodies.get(b.bodyB);
2071
+ if (!s || !i) {
2072
+ console.warn("[CannonPhysicsPlugin] Contact bodies not managed by plugin", b.bodyA, b.bodyB);
2073
+ return;
2074
+ }
2075
+ e.object = i.object, e.body = i, L.ObjectDispatch(s.object, "onEndContact", e), e.object = s.object, e.body = s, L.ObjectDispatch(i.object, "onEndContact", e);
2076
+ }), this._world.gravity.set(0, -9.81, 0);
2077
+ }
2078
+ get world() {
2079
+ return this._world;
2080
+ }
2081
+ async onAdded(t) {
2082
+ super.onAdded(t);
2083
+ const a = t.on("preFrame", {
2084
+ order: -1,
2085
+ // before most things
2086
+ callback: this._preFrame
2087
+ });
2088
+ a && this._onRemove.push(a), Object.values(this.componentTypes).forEach((e) => {
2089
+ var b;
2090
+ (b = t.getPlugin(L)) == null || b.addComponentType(e);
2091
+ }), t.object3dManager.getObjects().forEach((e) => this._objectAdd({ object: e })), t.object3dManager.addEventListener("objectAdd", this._objectAdd), t.object3dManager.addEventListener("objectRemove", this._objectRemove), t.forPlugin(ne, (e) => {
2092
+ e.helpers.push(ya);
2093
+ }, (e) => {
2094
+ const b = e.helpers.indexOf(ya);
2095
+ b >= 0 && e.helpers.splice(b, 1);
2096
+ });
2097
+ }
2098
+ onRemove(t) {
2099
+ this._onRemove.forEach((a) => a()), Object.values(this.componentTypes).forEach((a) => {
2100
+ var e;
2101
+ (e = t.getPlugin(L)) == null || e.removeComponentType(a);
2102
+ }), t.object3dManager.removeEventListener("objectAdd", this._objectAdd), t.object3dManager.removeEventListener("objectRemove", this._objectRemove), t.object3dManager.getObjects().forEach((a) => this._objectRemove({ object: a })), super.onRemove(t);
2103
+ }
2104
+ addBody(t) {
2105
+ this.bodyComponents.has(t) || (this.bodyComponents.add(t), this._world.addBody(t.body), this.cannonBodies.set(t.body, t));
2106
+ }
2107
+ removeBody(t) {
2108
+ this.bodyComponents.has(t) && (this.bodyComponents.delete(t), this._world.removeBody(t.body), this.cannonBodies.delete(t.body));
2109
+ }
2110
+ };
2111
+ z.PluginType = "CannonPhysicsPlugin";
2112
+ z.CannonTypes = {
2113
+ Body: N,
2114
+ Shape: q,
2115
+ World: pe,
2116
+ Material: za,
2117
+ ContactMaterial: ge
2118
+ };
2119
+ W([
2120
+ de(),
2121
+ re()
2122
+ ], z.prototype, "enabled", 2);
2123
+ W([
2124
+ re("Running", (t) => ({ onChange: () => {
2125
+ } }))
2126
+ ], z.prototype, "running", 2);
2127
+ W([
2128
+ he()
2129
+ ], z.prototype, "stepPhysics", 2);
2130
+ W([
2131
+ he(),
2132
+ de()
2133
+ ], z.prototype, "defaultMaterial", 2);
2134
+ z = W([
2135
+ Ba("Physics")
2136
+ ], z);
2137
+ const Vt = ["visible", "name", "position", "quaternion", "scale"], Yt = ["name"], Xt = [
2138
+ "position",
2139
+ "quaternion",
2140
+ "scale",
2141
+ "visible",
2142
+ "castShadow",
2143
+ "receiveShadow",
2144
+ "frustumCulled",
2145
+ "renderOrder"
2146
+ ];
2147
+ class Zt {
2148
+ constructor(a, e) {
2149
+ this.viewer = a, this.onError = e, this.cache = /* @__PURE__ */ new Map(), this.pending = /* @__PURE__ */ new Set(), this.onProcessRaw = (b) => {
2150
+ const s = b.data;
2151
+ if (!(s != null && s.isObject3D)) return;
2152
+ const i = this.loadObjectDependencies(s);
2153
+ this.track(i);
2154
+ }, this.importer = a.assetManager.importer, this.importer.addEventListener("processRaw", this.onProcessRaw);
2155
+ }
2156
+ dispose() {
2157
+ this.importer.removeEventListener("processRaw", this.onProcessRaw), this.cache.clear(), this.pending.clear();
2158
+ }
2159
+ async loadObjectDependencies(a) {
2160
+ if (!a.traverse) return;
2161
+ const e = [], b = /* @__PURE__ */ new Set();
2162
+ a.traverse((n) => {
2163
+ e.push(n);
2164
+ const l = n.material;
2165
+ l && (Array.isArray(l) ? l : [l]).forEach((j) => (j == null ? void 0 : j.isMaterial) && b.add(j));
2166
+ });
2167
+ const s = [];
2168
+ for (const n of e) {
2169
+ if (!this.isEmbeddedReference(n)) continue;
2170
+ if (n._loadingPromise) {
2171
+ s.push(n._loadingPromise.then(() => {
2172
+ }));
2173
+ continue;
2174
+ }
2175
+ n.userData.sProperties.length || (n.userData.sProperties = [...Vt]), n._sChildren || (n._sChildren = []);
2176
+ const l = this.loadReference(n);
2177
+ n._loadingPromise = l, s.push(l);
2178
+ }
2179
+ for (const n of b) {
2180
+ if (!this.isEmbeddedReference(n)) continue;
2181
+ if (n._loadingPromise) {
2182
+ s.push(n._loadingPromise.then(() => {
2183
+ }));
2184
+ continue;
2185
+ }
2186
+ n.userData.sProperties.length || (n.userData.sProperties = [...Yt]);
2187
+ const l = this.loadReference(n);
2188
+ n._loadingPromise = l, s.push(l);
2189
+ }
2190
+ if (!s.length) return;
2191
+ const i = Promise.allSettled(s).then((n) => {
2192
+ for (const l of n)
2193
+ l.status === "rejected" && this.onError(l.reason);
2194
+ });
2195
+ a._loadingPromise = i, this.track(i), await i;
2196
+ }
2197
+ async waitForPending() {
2198
+ for (; this.pending.size; )
2199
+ await Promise.all([...this.pending]);
2200
+ }
2201
+ isEmbeddedReference(a) {
2202
+ var b;
2203
+ return typeof ((b = a.userData) == null ? void 0 : b.rootPath) == "string" && !a.__rootPath && !a.userData.rootPathRefresh && Array.isArray(a.userData.sProperties);
2204
+ }
2205
+ loadAsset(a, e) {
2206
+ let b = this.cache.get(a);
2207
+ return b || (b = this.importer.importSingle(a, e || {}), this.cache.set(a, b)), b;
2208
+ }
2209
+ async loadReference(a) {
2210
+ const e = a.userData.rootPath, b = await this.loadAsset(e, a.userData.rootPathOptions);
2211
+ if (!b) throw new Error(`Unable to load nested asset from ${e}`);
2212
+ b._loadingPromise && await b._loadingPromise;
2213
+ const s = a, i = a;
2214
+ if (s.isObject3D && b.isObject3D) {
2215
+ this.updateObject(b, s);
2216
+ return;
2217
+ }
2218
+ if (i.isMaterial && b.isMaterial) {
2219
+ this.updateMaterial(b, i);
2220
+ return;
2221
+ }
2222
+ throw new Error(`Nested asset at ${e} does not match its reference type`);
2223
+ }
2224
+ updateObject(a, e) {
2225
+ var l;
2226
+ if (e._sChildren)
2227
+ for (const p of [...e.children])
2228
+ e._sChildren.includes(p) || p.removeFromParent();
2229
+ for (const p of a.children) {
2230
+ const j = we(p);
2231
+ j.userData.excludeFromExport = !0, e.add(j);
2232
+ }
2233
+ const b = e.userData.sProperties, s = e.name, i = e.visible;
2234
+ for (const p of Xt) {
2235
+ if (b.includes(p)) continue;
2236
+ const j = a[p], P = e[p];
2237
+ j && P && j.isVector3 || j && P && j.isQuaternion ? P.copy(j) : j !== void 0 && Object.assign(e, { [p]: j });
2238
+ }
2239
+ const n = e.userData;
2240
+ e.userData = {}, Ue(e.userData, a.userData, ["uuid", "sProperties"]), Object.assign(e.userData, n), e.name = s, e.visible = i, e.userData.uuid = e.uuid, e.userData.sProperties = b, (l = e.setDirty) == null || l.call(e, { source: "RuntimeNestedAssetLoader" });
2241
+ }
2242
+ updateMaterial(a, e) {
2243
+ const b = e.userData.sProperties, s = Ge(e, b), i = e.name;
2244
+ e.setValues(a), e.name = i, _e(s, e), e.userData.uuid = e.uuid, e.userData.sProperties = b;
2245
+ }
2246
+ track(a) {
2247
+ this.pending.add(a);
2248
+ const e = () => this.pending.delete(a);
2249
+ a.then(e, e);
2250
+ }
2251
+ }
2252
+ function we(t) {
2253
+ const a = t.clone(!1), e = t, b = a;
2254
+ b._tpRootPath = e._tpRootPath, b._tpRootUid = e._tpRootUid || t.uuid, delete a.userData.cloneParent;
2255
+ for (const s of t.children) a.add(we(s));
2256
+ return a;
2257
+ }
2258
+ function lb(t) {
2259
+ return ve(t, !0);
2260
+ }
2261
+ function fb(t) {
2262
+ return ve(t, !1);
2263
+ }
2264
+ async function ve({
2265
+ base: t,
2266
+ canvas: a,
2267
+ onError: e,
2268
+ fileRevisions: b = {},
2269
+ moduleRevision: s
2270
+ }, i) {
2271
+ const n = cb(e);
2272
+ let l, p, j, P;
2273
+ try {
2274
+ const k = ib(t), [M, m] = await Promise.all([
2275
+ ie(new URL("package.json", k)),
2276
+ ie(new URL("assets.json", k))
2277
+ ]), o = bt(M), c = await it(o), d = st(m), r = {
2278
+ packageJson: o,
2279
+ config: c,
2280
+ assetsManifest: d,
2281
+ mainScene: o.mainScene
2282
+ }, h = new L(!1), f = new z(!0, !1);
2283
+ L.AddObjectUiConfig = !1, window.MeshoptDecoder = ct, l = new Te({
2284
+ canvas: a,
2285
+ ...c.viewer,
2286
+ assetManager: {
2287
+ simpleCache: !1,
2288
+ storage: !1
2289
+ },
2290
+ plugins: [
2291
+ h,
2292
+ new Oe(),
2293
+ f,
2294
+ new Qe(),
2295
+ new We(),
2296
+ new qe(!1),
2297
+ new Ke(),
2298
+ new He(),
2299
+ new Je(),
2300
+ new Ve(),
2301
+ new Ye(),
2302
+ new Xe()
2303
+ ]
2304
+ }), l.timeline.endTime = 0, P = et(), h.addComponentType(Na), h.addComponentType(sa), sa.configureViewer(l, { base: k, onError: n });
2305
+ const g = eb(k, d);
2306
+ l.assetManager.importer.addURLModifier(g), j = () => l == null ? void 0 : l.assetManager.importer.removeURLModifier(g), p = new Zt(l, n), await ab(l, r, k, b, s), await $t(l, r, k, b, s);
2307
+ const u = new URL(r.mainScene, k).href, w = await l.load(u, { importAsModelRoot: !0 });
2308
+ if (!(w != null && w.isObject3D))
2309
+ throw new Error(`The main scene did not load as an Object3D: ${u}`);
2310
+ if (await p.loadObjectDependencies(w), await p.waitForPending(), await sa.waitForViewer(l), i) {
2311
+ l.timeline.reset(), l.timeline.start(), h.start(), f.running = !0;
2312
+ const D = Ra("main.js", k, b, s), I = await Ua(D.href);
2313
+ if (I.main !== void 0) {
2314
+ if (typeof I.main != "function")
2315
+ throw new Error('main.js export "main" must be a function');
2316
+ await I.main({ viewer: l });
2317
+ }
2318
+ }
2319
+ const v = l;
2320
+ let A = !1, x;
2321
+ return {
2322
+ viewer: v,
2323
+ project: r,
2324
+ registerGameValidation: P.registerGameValidation,
2325
+ publishGameTelemetry: P.publishGameTelemetry,
2326
+ runGameValidation: P.runGameValidation,
2327
+ dispose() {
2328
+ return A || (A = !0, h.stop(), f.running = !1, v.timeline.stop(), x = tt(v), p == null || p.dispose(), j == null || j(), P == null || P.dispose(), v.dispose()), x;
2329
+ }
2330
+ };
2331
+ } catch (k) {
2332
+ throw p == null || p.dispose(), j == null || j(), P == null || P.dispose(), l == null || l.dispose(), n(k), k;
2333
+ }
2334
+ }
2335
+ async function $t(t, a, e, b, s) {
2336
+ const { config: i, packageJson: n } = a;
2337
+ for (const l of i.plugins) {
2338
+ if (l.active === !1) continue;
2339
+ const p = tb(l, n, e, b, s), j = await Ua(p), P = bb(j, l);
2340
+ t.getPlugin(P) || await t.addPlugin(P, ...l.params || []);
2341
+ }
2342
+ }
2343
+ async function ab(t, a, e, b, s) {
2344
+ const { config: i, packageJson: n } = a, l = [];
2345
+ for (const p of i.scripts) {
2346
+ if (p.active === !1) continue;
2347
+ const j = me(p.import, n) ? p.import : Ra(p.import, e, b, s).href;
2348
+ l.push(await Ua(j));
2349
+ }
2350
+ await ot(t, l);
2351
+ }
2352
+ function eb(t, a) {
2353
+ const e = `${Ma}@`;
2354
+ return (b) => {
2355
+ if (b.startsWith(e)) {
2356
+ const s = b.slice(e.length).split("/", 1)[0], i = a.files[s];
2357
+ if (!(i != null && i.path)) throw new Error(`Unknown asset id in URL: ${s}`);
2358
+ return new URL(i.path, t).href;
2359
+ }
2360
+ return b.startsWith(Ma) ? new URL(b.slice(Ma.length), t).href : b;
2361
+ };
2362
+ }
2363
+ function tb(t, a, e, b, s) {
2364
+ return me(t.import, a) ? t.import : Ra(t.import, e, b, s).href;
2365
+ }
2366
+ function Ra(t, a, e, b) {
2367
+ const s = sb(new URL(t, a), a), i = t.replace(/^\.\//, ""), n = e[i];
2368
+ return n && s.searchParams.set("v", n), b && s.searchParams.set("r", b), s;
2369
+ }
2370
+ function bb(t, a) {
2371
+ const e = a.className || "default", b = t[e];
2372
+ if (be(b)) return b;
2373
+ if (!a.className) {
2374
+ const s = Object.values(t).filter(be);
2375
+ if (s.length === 1) return s[0];
2376
+ }
2377
+ throw new Error(`Cannot find plugin export "${e}" in ${a.import}`);
2378
+ }
2379
+ function be(t) {
2380
+ return typeof t == "function" && typeof t.PluginType == "string";
2381
+ }
2382
+ async function Ua(t) {
2383
+ return import(
2384
+ /* @vite-ignore */
2385
+ t
2386
+ );
2387
+ }
2388
+ async function ie(t) {
2389
+ const a = await fetch(t);
2390
+ if (!a.ok) throw new Error(`Failed to fetch ${t.href}: ${a.status} ${a.statusText}`);
2391
+ return a.text();
2392
+ }
2393
+ function ib(t) {
2394
+ if (!t.endsWith("/")) throw new Error('createGame base must end in "/"');
2395
+ const a = new URL(t);
2396
+ if (!a.protocol.startsWith("http")) throw new Error("createGame base must be an absolute HTTP(S) URL");
2397
+ return a;
2398
+ }
2399
+ function sb(t, a) {
2400
+ if (t.origin !== a.origin)
2401
+ throw new Error(`Project modules must be same-origin: ${t.href}`);
2402
+ return t;
2403
+ }
2404
+ function cb(t) {
2405
+ return (a) => {
2406
+ console.error("[kite3d] Runtime error", a), t == null || t(a);
2407
+ };
2408
+ }
2409
+ const pb = {
2410
+ plugins: [
2411
+ {
2412
+ import: "threepipe",
2413
+ className: "SSAAPlugin"
2414
+ },
2415
+ {
2416
+ import: "threepipe",
2417
+ className: "AssetExporterPlugin"
2418
+ },
2419
+ {
2420
+ import: "threepipe",
2421
+ className: "TransformAnimationPlugin"
2422
+ },
2423
+ {
2424
+ import: "threepipe",
2425
+ className: "DepthBufferPlugin"
2426
+ },
2427
+ {
2428
+ import: "threepipe",
2429
+ className: "NormalBufferPlugin"
2430
+ },
2431
+ {
2432
+ import: "threepipe",
2433
+ className: "FullScreenPlugin"
2434
+ },
2435
+ {
2436
+ import: "threepipe",
2437
+ className: "ObjectConstraintsPlugin"
2438
+ },
2439
+ {
2440
+ import: "threepipe",
2441
+ className: "TransformControlsPlugin"
2442
+ },
2443
+ {
2444
+ import: "threepipe",
2445
+ className: "AssetExporterPlugin"
2446
+ },
2447
+ {
2448
+ import: "threepipe",
2449
+ className: "ClearcoatTintPlugin"
2450
+ },
2451
+ {
2452
+ import: "threepipe",
2453
+ className: "FragmentClippingExtensionPlugin"
2454
+ },
2455
+ {
2456
+ import: "threepipe",
2457
+ className: "NoiseBumpMaterialPlugin"
2458
+ },
2459
+ {
2460
+ import: "threepipe",
2461
+ className: "CustomBumpMapPlugin"
2462
+ },
2463
+ {
2464
+ import: "threepipe",
2465
+ className: "ParallaxMappingPlugin",
2466
+ params: [
2467
+ !1
2468
+ ]
2469
+ },
2470
+ {
2471
+ import: "threepipe",
2472
+ className: "GLTFKHRMaterialVariantsPlugin"
2473
+ },
2474
+ {
2475
+ import: "threepipe",
2476
+ className: "VirtualCamerasPlugin"
2477
+ },
2478
+ {
2479
+ import: "threepipe",
2480
+ className: "RenderTargetPreviewPlugin",
2481
+ params: [
2482
+ !1
2483
+ ]
2484
+ },
2485
+ {
2486
+ import: "threepipe",
2487
+ className: "HDRiGroundPlugin",
2488
+ params: [
2489
+ !1,
2490
+ !0
2491
+ ]
2492
+ },
2493
+ {
2494
+ import: "threepipe",
2495
+ className: "VignettePlugin",
2496
+ params: [
2497
+ !1
2498
+ ]
2499
+ },
2500
+ {
2501
+ import: "threepipe",
2502
+ className: "ChromaticAberrationPlugin",
2503
+ params: [
2504
+ !1
2505
+ ]
2506
+ },
2507
+ {
2508
+ import: "threepipe",
2509
+ className: "FilmicGrainPlugin",
2510
+ params: [
2511
+ !1
2512
+ ]
2513
+ },
2514
+ {
2515
+ import: "threepipe",
2516
+ className: "SSAOPlugin",
2517
+ params: [
2518
+ 1009,
2519
+ 1
2520
+ ]
2521
+ },
2522
+ {
2523
+ import: "threepipe",
2524
+ className: "ContactShadowGroundPlugin"
2525
+ },
2526
+ {
2527
+ import: "threepipe",
2528
+ className: "DeviceOrientationControlsPlugin"
2529
+ },
2530
+ {
2531
+ import: "threepipe",
2532
+ className: "PointerLockControlsPlugin"
2533
+ },
2534
+ {
2535
+ import: "threepipe",
2536
+ className: "ThreeFirstPersonControlsPlugin"
2537
+ },
2538
+ {
2539
+ import: "threepipe",
2540
+ className: "MeshOptSimplifyModifierPlugin",
2541
+ params: [
2542
+ !1
2543
+ ]
2544
+ },
2545
+ {
2546
+ import: "@threepipe/webgi-plugins",
2547
+ className: "AnisotropyPlugin"
2548
+ },
2549
+ {
2550
+ import: "@threepipe/webgi-plugins",
2551
+ className: "BloomPlugin"
2552
+ },
2553
+ {
2554
+ import: "@threepipe/webgi-plugins",
2555
+ className: "SSReflectionPlugin"
2556
+ },
2557
+ {
2558
+ import: "@threepipe/webgi-plugins",
2559
+ className: "TemporalAAPlugin"
2560
+ },
2561
+ {
2562
+ import: "@threepipe/webgi-plugins",
2563
+ className: "VelocityBufferPlugin",
2564
+ params: [1009, !1]
2565
+ },
2566
+ {
2567
+ import: "@threepipe/webgi-plugins",
2568
+ className: "DepthOfFieldPlugin",
2569
+ params: [!1]
2570
+ },
2571
+ {
2572
+ import: "@threepipe/webgi-plugins",
2573
+ className: "SSContactShadowsPlugin",
2574
+ params: [!1]
2575
+ },
2576
+ {
2577
+ import: "@threepipe/webgi-plugins",
2578
+ className: "OutlinePlugin",
2579
+ params: [!1]
2580
+ },
2581
+ {
2582
+ import: "@threepipe/webgi-plugins",
2583
+ className: "SSGIPlugin",
2584
+ params: [void 0, 1, !1]
2585
+ },
2586
+ // GLTFDracoExportPlugin, GLTFSpecGlossinessConverterPlugin
2587
+ {
2588
+ import: "@threepipe/plugin-gltf-transform",
2589
+ className: "GLTFDracoExportPlugin"
2590
+ },
2591
+ {
2592
+ import: "@threepipe/plugin-gltf-transform",
2593
+ className: "GLTFSpecGlossinessConverterPlugin"
2594
+ },
2595
+ // MaterialConfiguratorPlugin, SwitchNodePlugin
2596
+ {
2597
+ import: "@threepipe/plugin-configurator",
2598
+ className: "MaterialConfiguratorPlugin"
2599
+ },
2600
+ {
2601
+ import: "@threepipe/plugin-configurator",
2602
+ className: "SwitchNodePlugin"
2603
+ },
2604
+ ...["B3DMLoadPlugin", "CMPTLoadPlugin", "DeepZoomImageLoadPlugin", "EnvironmentControlsPlugin", "GlobeControlsPlugin", "I3DMLoadPlugin", "PNTSLoadPlugin", "TilesRendererPlugin"].map((t) => ({
2605
+ import: "@threepipe/plugin-3d-tiles-renderer",
2606
+ className: t
2607
+ })),
2608
+ {
2609
+ import: "@threepipe/plugin-assimpjs",
2610
+ className: "AssimpJsPlugin",
2611
+ params: [!1]
2612
+ },
2613
+ {
2614
+ import: "@threepipe/plugin-path-tracing",
2615
+ className: "ThreeGpuPathTracerPlugin",
2616
+ params: [!1]
2617
+ },
2618
+ {
2619
+ import: "@threepipe/plugin-blend-importer",
2620
+ className: "BlendLoadPlugin"
2621
+ },
2622
+ {
2623
+ import: "@threepipe/plugin-network",
2624
+ className: "TransfrSharePlugin"
2625
+ },
2626
+ {
2627
+ import: "@threepipe/plugin-troika-text",
2628
+ className: "TroikaTextPlugin"
2629
+ },
2630
+ ...[
2631
+ "TDSLoadPlugin",
2632
+ "ThreeMFLoadPlugin",
2633
+ "ColladaLoadPlugin",
2634
+ "AMFLoadPlugin",
2635
+ "GCodeLoadPlugin",
2636
+ "BVHLoadPlugin",
2637
+ "VOXLoadPlugin",
2638
+ "MDDLoadPlugin",
2639
+ "PCDLoadPlugin",
2640
+ "TiltLoadPlugin",
2641
+ "VRMLLoadPlugin",
2642
+ "LDrawLoadPlugin",
2643
+ "VTKLoadPlugin",
2644
+ "XYZLoadPlugin"
2645
+ ].map((t) => ({
2646
+ import: "@threepipe/plugins-extra-importers",
2647
+ className: t
2648
+ }))
2649
+ ],
2650
+ dependencies: [{
2651
+ key: "@threepipe/webgi-plugins",
2652
+ version: "0.6.1"
2653
+ }, {
2654
+ key: "@threepipe/plugin-gltf-transform",
2655
+ version: "latest"
2656
+ }, {
2657
+ key: "@threepipe/plugin-configurator",
2658
+ version: "latest"
2659
+ }, {
2660
+ key: "@threepipe/plugin-3d-tiles-renderer",
2661
+ version: "latest"
2662
+ }, {
2663
+ key: "@threepipe/plugin-assimpjs",
2664
+ version: "latest"
2665
+ }, {
2666
+ key: "@threepipe/plugin-path-tracing",
2667
+ version: "latest"
2668
+ }, {
2669
+ key: "@threepipe/plugin-blend-importer",
2670
+ version: "latest"
2671
+ }, {
2672
+ key: "@threepipe/plugin-network",
2673
+ version: "latest"
2674
+ }, {
2675
+ key: "@threepipe/plugin-troika-text",
2676
+ version: "latest"
2677
+ }, {
2678
+ key: "@threepipe/plugins-extra-importers",
2679
+ version: "latest"
2680
+ }],
2681
+ scripts: [],
2682
+ viewer: {}
2683
+ };
2684
+ export {
2685
+ ei as BACKUPS_DIRECTORY,
2686
+ ti as CONSOLE_PATH,
2687
+ ja as Cannon3DBodyComponent,
2688
+ ca as Cannon3DShapeComponent,
2689
+ ya as Cannon3DShapeHelper,
2690
+ T as CannonMaterial2,
2691
+ z as CannonPhysicsPlugin,
2692
+ na as CannonRagdollComponent,
2693
+ bi as DEPLOYS_PATH,
2694
+ sa as GeneratorComponent,
2695
+ Na as HtmlUiComponent,
2696
+ ii as JOURNAL_PATH,
2697
+ jb as KITE3D_AUTHORING_METADATA_KEY,
2698
+ si as KITE3D_DIRECTORY,
2699
+ yb as KITE3D_RUNTIME_METADATA_KEY,
2700
+ ci as KITE3D_SERVER_CLIENT_ID,
2701
+ Ub as PROJECT_MIGRATIONS,
2702
+ ni as RUNNING_DIRECTORY,
2703
+ qb as RUNTIME_SPECIFIERS,
2704
+ zb as RUNTIME_VERSION,
2705
+ Zt as RuntimeNestedAssetLoader,
2706
+ kb as RuntimeObjectOwner,
2707
+ oi as STATE_PATH,
2708
+ di as THUMBS_DIRECTORY,
2709
+ Ma as assetUrlPrefix,
2710
+ Ab as authoringQualityReport,
2711
+ Wt as cannonShapeTypeParams,
2712
+ Qt as cannonShapeTypes,
2713
+ lb as createGame,
2714
+ fb as createStoppedGame,
2715
+ Kb as dependencyImportMap,
2716
+ pb as emptyProjectSettings,
2717
+ Yb as extensionMimeTypes,
2718
+ ma as getAuthoringMetadata,
2719
+ wb as getRuntimeObjectMetadata,
2720
+ vb as getTrackedRuntimeObjects,
2721
+ et as installGameHooks,
2722
+ rt as isComponentType,
2723
+ me as isDependencyModuleSpecifier,
2724
+ dt as isPluginType,
2725
+ xb as isRuntimeObject,
2726
+ Za as markGenerated,
2727
+ Xb as mimeToExt,
2728
+ Zb as mimeTypeForPath,
2729
+ st as parseAssetsJSONManifest,
2730
+ bt as parsePackageJSON,
2731
+ it as parsePackageJsonSettingsConfig,
2732
+ Db as persistenceReport,
2733
+ _t as physicsBodyType,
2734
+ Hb as projectDependencies,
2735
+ Jb as projectPluginNames,
2736
+ Mb as publishGameTelemetry,
2737
+ Nb as readProjectGeneratorStates,
2738
+ Ib as registerGameValidation,
2739
+ ot as registerScripts,
2740
+ ue as removeGeneratedChildren,
2741
+ ut as resolveGeneratorModule,
2742
+ ft as runGenerator,
2743
+ tt as runtimeCleanupReport,
2744
+ Fb as semanticSceneSnapshot,
2745
+ _b as serializeSceneGltf,
2746
+ Tb as serializeSceneGltfDocument,
2747
+ le as setAuthoringMetadata,
2748
+ Cb as settingsKey,
2749
+ Ca as typeToCannon,
2750
+ $b as typesExts,
2751
+ ht as uiPositionMode,
2752
+ Sb as updateProjectGeneratorState,
2753
+ Bb as validateSceneSource,
2754
+ nt as walkScriptExports
2755
+ };
2756
+ //# sourceMappingURL=index.js.map