@jdultra/threedtiles 11.1.13 → 12.0.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.
@@ -0,0 +1,3667 @@
1
+ var mA = Object.defineProperty;
2
+ var QA = (n, e, a) => e in n ? mA(n, e, { enumerable: !0, configurable: !0, writable: !0, value: a }) : n[e] = a;
3
+ var fa = (n, e, a) => QA(n, typeof e != "symbol" ? e + "" : e, a);
4
+ import * as m from "three";
5
+ import { Vector3 as H, Box3 as Ha, Sphere as qa, Matrix3 as wA, BufferGeometry as ba, BufferAttribute as fe, TrianglesDrawMode as yA, TriangleFanDrawMode as ia, TriangleStripDrawMode as Ja, Loader as da, LoaderUtils as De, FileLoader as ce, Color as se, LinearSRGBColorSpace as q, SpotLight as kA, PointLight as xA, DirectionalLight as DA, MeshBasicMaterial as ye, SRGBColorSpace as $, MeshPhysicalMaterial as Y, Vector2 as Oa, Matrix4 as Le, Quaternion as Ka, InstancedMesh as jA, InstancedBufferAttribute as MA, Object3D as Va, TextureLoader as RA, ImageBitmapLoader as FA, InterleavedBuffer as SA, InterleavedBufferAttribute as TA, LinearFilter as Me, LinearMipmapLinearFilter as ga, RepeatWrapping as sa, NearestFilter as za, PointsMaterial as LA, Material as ve, LineBasicMaterial as GA, MeshStandardMaterial as ua, DoubleSide as vA, PropertyBinding as UA, SkinnedMesh as NA, Mesh as _A, LineSegments as PA, Line as HA, LineLoop as qA, Points as JA, Group as Ue, PerspectiveCamera as OA, MathUtils as KA, OrthographicCamera as VA, Skeleton as zA, AnimationClip as YA, Bone as WA, InterpolateLinear as Ya, ColorManagement as ra, NearestMipmapNearestFilter as XA, LinearMipmapNearestFilter as ZA, NearestMipmapLinearFilter as $A, ClampToEdgeWrapping as et, MirroredRepeatWrapping as at, InterpolateDiscrete as At, FrontSide as tt, Texture as Ba, VectorKeyframeTrack as Ca, NumberKeyframeTrack as Ea, QuaternionKeyframeTrack as pa, Interpolant as it, CompressedCubeTexture as st, CompressedArrayTexture as rt, CompressedTexture as ma, RGBAFormat as le, RGBA_ASTC_4x4_Format as Wa, RGB_BPTC_UNSIGNED_Format as nt, RGBA_BPTC_Format as ot, RGBA_ETC2_EAC_Format as ct, RGBA_PVRTC_4BPPV1_Format as bt, RGBA_S3TC_DXT5_Format as dt, RGB_ETC1_Format as gt, RGB_ETC2_Format as ht, RGB_PVRTC_4BPPV1_Format as lt, RGBA_S3TC_DXT1_Format as It, UnsignedByteType as W, HalfFloatType as Ie, FloatType as je, DataTexture as ft, Data3DTexture as ut, NoColorSpace as Bt, RGFormat as ke, RedFormat as xe, RGBA_ASTC_6x6_Format as Qa } from "three";
6
+ class Qi {
7
+ constructor() {
8
+ this.cullMap = [], this.cullMaterial = new m.MeshBasicMaterial({ vertexColors: !0 }), this.cullMaterial.side = m.FrontSide, this.cullTarget = this._createCullTarget(), this.cullPixels = new Uint8Array(4 * this.cullTarget.width * this.cullTarget.height);
9
+ }
10
+ setSide(e) {
11
+ this.cullMaterial.side = e;
12
+ }
13
+ _createCullTarget() {
14
+ const e = new m.WebGLRenderTarget(Math.floor(0.05 * window.innerWidth), Math.floor(0.05 * window.innerHeight));
15
+ return e.texture.format = m.RGBAFormat, e.texture.colorSpace = m.LinearSRGBColorSpace, e.texture.minFilter = m.NearestFilter, e.texture.magFilter = m.NearestFilter, e.texture.generateMipmaps = !1, e.stencilBuffer = !1, e.depthBuffer = !0, e.depthTexture = new m.DepthTexture(), e.depthTexture.format = m.DepthFormat, e.depthTexture.type = m.UnsignedShortType, e;
16
+ }
17
+ update(e, a, A) {
18
+ let t = a.getRenderTarget(), i = e.overrideMaterial;
19
+ e.overrideMaterial = this.cullMaterial, a.setRenderTarget(this.cullTarget), a.render(e, A), e.overrideMaterial = i, a.setRenderTarget(t), a.readRenderTargetPixels(this.cullTarget, 0, 0, this.cullTarget.width, this.cullTarget.height, this.cullPixels), this.cullMap = [];
20
+ for (let s = 0; s < this.cullPixels.length; s += 4) {
21
+ const r = m.MathUtils.clamp(this.cullPixels[s], 0, 255) << 16 ^ m.MathUtils.clamp(this.cullPixels[s + 1], 0, 255) << 8 ^ m.MathUtils.clamp(this.cullPixels[s + 2], 0, 255);
22
+ this.cullMap[r] = !0;
23
+ }
24
+ }
25
+ hasID(e) {
26
+ return this.cullMap[e];
27
+ }
28
+ }
29
+ class te {
30
+ constructor(e) {
31
+ this.center = new H(e[0], e[1], e[2]);
32
+ var a = new H(e[3], e[4], e[4]), A = new H(e[6], e[7], e[8]), t = new H(e[9], e[10], e[11]);
33
+ this.halfWidth = a.length(), this.halfHeight = A.length(), this.halfDepth = t.length(), this.aabb = new Ha();
34
+ const i = new H(), s = [-1, 1];
35
+ for (let r of s) for (let b of s) for (let o of s) i.copy(this.center).addScaledVector(a, r).addScaledVector(A, b).addScaledVector(t, o), this.aabb.expandByPoint(i);
36
+ a.normalize(), A.normalize(), t.normalize(), this.sphere = new qa(this.center, Math.sqrt(this.halfWidth * this.halfWidth + this.halfHeight * this.halfHeight + this.halfDepth * this.halfDepth)), this.matrixToOBBCoordinateSystem = new wA(), this.matrixToOBBCoordinateSystem.set(a.x, a.y, a.z, A.x, A.y, A.z, t.x, t.y, t.z);
37
+ }
38
+ inFrustum(e) {
39
+ return e.intersectsSphere(this.sphere);
40
+ }
41
+ distanceToPoint(e) {
42
+ let a = e.clone();
43
+ a.sub(this.center), a.applyMatrix3(this.matrixToOBBCoordinateSystem);
44
+ let A = Math.max(0, Math.max(-this.halfWidth - a.x, a.x - this.halfWidth)), t = Math.max(0, Math.max(-this.halfHeight - a.y, a.y - this.halfHeight)), i = Math.max(0, Math.max(-this.halfDepth - a.z, a.z - this.halfDepth));
45
+ return Math.sqrt(A * A + t * t + i * i);
46
+ }
47
+ }
48
+ /**
49
+ * @copyright 2021 Aaron Zhao <yujianzhao2013@gmail.com>
50
+ * @license MIT
51
+ * Heap implementation using 1-d array
52
+ * Children is index of 2n + 1 and 2n + 2 where n is the parent index
53
+ * Parent is math.floor((m - 1) / 2) where m is is the child index
54
+ * @class Heap
55
+ */
56
+ var Ct = class {
57
+ constructor(n, e) {
58
+ if (this._data = [], this._comparator = function(a, A) {
59
+ return a >= A;
60
+ }, n != null) {
61
+ if (!Array.isArray(n)) throw Error("Constructor expects data to be an array");
62
+ this._data = n;
63
+ }
64
+ if (e != null) {
65
+ if (typeof e != "function") throw Error("Constructor expects comparator to be a function");
66
+ this._comparator = e;
67
+ }
68
+ }
69
+ peek() {
70
+ return this.size() < 1 ? null : this._data[0];
71
+ }
72
+ pop() {
73
+ if (this.size() < 1) return null;
74
+ const n = this._data[0];
75
+ return this.swap(this.size() - 1, 0), this._data.pop(), this.heapifyDown(0), n;
76
+ }
77
+ replaceTop(n) {
78
+ if (this.size() < 1) return null;
79
+ const e = this._data[0];
80
+ return this._data[0] = n, this.heapifyDown(0), e;
81
+ }
82
+ push(n) {
83
+ this._data.push(n), this.heapifyUp(this._data.length - 1);
84
+ }
85
+ size() {
86
+ return this._data.length;
87
+ }
88
+ swap(n, e) {
89
+ const a = this._data[n];
90
+ this._data[n] = this._data[e], this._data[e] = a;
91
+ }
92
+ heapifyUp(n) {
93
+ if (n === 0) return;
94
+ const e = Math.floor((n - 1) / 2);
95
+ this._comparator(this._data[n], this._data[e]) || (this.swap(n, e), this.heapifyUp(e));
96
+ }
97
+ heapifyDown(n) {
98
+ const e = 2 * n + 1, a = 2 * n + 2;
99
+ if (e >= this._data.length) return;
100
+ const A = a < this._data.length && !this._comparator(this._data[a], this._data[e]) ? a : e;
101
+ this._comparator(this._data[n], this._data[A]) && (this.swap(n, A), this.heapifyDown(A));
102
+ }
103
+ };
104
+ /**
105
+ * @copyright 2021 Aaron Zhao <yujianzhao2013@gmail.com>
106
+ * @license MIT
107
+ * FIFO queue data structure
108
+ * @class Queue
109
+ */
110
+ var Et = class {
111
+ constructor(n, e) {
112
+ if (this._data = [], this._head = 0, this._cap = null, n != null) {
113
+ if (!Array.isArray(n)) throw Error("Constructor expects data to be an array");
114
+ this._data = n;
115
+ }
116
+ if (e != null) {
117
+ if (typeof e != "number") throw Error("Constructor expects capacity to be a number");
118
+ this._cap = e;
119
+ }
120
+ }
121
+ enqueue(n) {
122
+ return !(this._cap != null && this.size() >= this._cap) && (this._data.push(n), !0);
123
+ }
124
+ dequeue() {
125
+ if (this.size() === 0) return null;
126
+ const n = this._data[this._head];
127
+ return this._head += 1, 2 * this._head >= this._data.length && (this._data = this._data.slice(this._head), this._head = 0), n;
128
+ }
129
+ peek(n = !1) {
130
+ return this.size() > 0 ? n ? this._data[this._data.length - 1] : this._data[this._head] : null;
131
+ }
132
+ size() {
133
+ return this._data.length - this._head;
134
+ }
135
+ updateCapacity(n) {
136
+ this._cap = n;
137
+ }
138
+ reset() {
139
+ this._data = [], this._head = 0;
140
+ }
141
+ forEach(n) {
142
+ for (let e = this._head; e < this._data.length; e += 1) n(this._data[e], e - this._head);
143
+ }
144
+ toArray() {
145
+ return this._data.slice(this._head);
146
+ }
147
+ };
148
+ /**
149
+ * @copyright 2021 Aaron Zhao <yujianzhao2013@gmail.com>
150
+ * @license MIT
151
+ * Linked hash map data structure
152
+ * @class LinkedHashMap
153
+ */
154
+ var Xa = { Heap: Ct, Queue: Et, LinkedHashMap: class {
155
+ constructor() {
156
+ this._data = /* @__PURE__ */ new Map(), this._link = /* @__PURE__ */ new Map(), this._head = void 0, this._tail = void 0;
157
+ }
158
+ put(n, e, a = !1) {
159
+ this.has(n) ? this._data.set(n, e) : (this._data.set(n, e), this._link.set(n, { previous: void 0, next: void 0 }), this._head == null ? (this._head = n, this._tail = n) : a ? (this._link.get(this._head).previous = n, this._link.get(n).next = this._head, this._head = n) : (this._link.get(this._tail).next = n, this._link.get(n).previous = this._tail, this._tail = n));
160
+ }
161
+ head() {
162
+ return { key: this._head, value: this.get(this._head), next: () => this.next(this._head), previous: () => null };
163
+ }
164
+ tail() {
165
+ return { key: this._tail, value: this.get(this._tail), next: () => null, previous: () => this.previous(this._tail) };
166
+ }
167
+ get(n) {
168
+ return this._data.get(n);
169
+ }
170
+ previousKey(n) {
171
+ const e = this._link.get(n);
172
+ return e != null ? e.previous : void 0;
173
+ }
174
+ previousValue(n) {
175
+ return this.get(this.previousKey(n));
176
+ }
177
+ previous(n) {
178
+ const e = this.previousKey(n);
179
+ return { key: e, value: this.get(e), next: () => this.next(e), previous: () => this.previous(e) };
180
+ }
181
+ nextKey(n) {
182
+ const e = this._link.get(n);
183
+ return e != null ? e.next : void 0;
184
+ }
185
+ nextValue(n) {
186
+ return this.get(this.nextKey(n));
187
+ }
188
+ next(n) {
189
+ const e = this.nextKey(n);
190
+ return { key: e, value: this.get(e), next: () => this.next(e), previous: () => this.previous(e) };
191
+ }
192
+ remove(n) {
193
+ const e = this._data.get(n);
194
+ if (e != null) if (this.size() === 1) this.reset();
195
+ else {
196
+ if (n === this._head) {
197
+ const a = this._link.get(this._head);
198
+ this._link.get(a.next).previous = null, this._head = a.next;
199
+ } else if (n === this._tail) {
200
+ const a = this._link.get(this._tail);
201
+ this._link.get(a.previous).next = null, this._tail = a.previous;
202
+ } else {
203
+ const a = this._link.get(n), A = this._link.get(a.previous), t = this._link.get(a.next);
204
+ A.next = a.next, t.previous = a.previous;
205
+ }
206
+ this._link.delete(n), this._data.delete(n);
207
+ }
208
+ return e;
209
+ }
210
+ has(n) {
211
+ return this._data.has(n);
212
+ }
213
+ size() {
214
+ return this._data.size;
215
+ }
216
+ reset() {
217
+ this._data.clear(), this._link.clear(), this._head = void 0, this._tail = void 0;
218
+ }
219
+ keys() {
220
+ return this._data.keys();
221
+ }
222
+ values() {
223
+ return this._data.values();
224
+ }
225
+ entries() {
226
+ return this._data.entries();
227
+ }
228
+ toArray(n = "orderByInsert") {
229
+ if (n !== "orderByInsert") {
230
+ const e = [];
231
+ let a = this._head;
232
+ for (; a != null; ) e.push({ key: a, value: this.get(a) }), a = this.nextKey(a);
233
+ return e;
234
+ }
235
+ return Array.from(this.keys()).map((e) => ({ key: e, value: this.get(e) }));
236
+ }
237
+ } };
238
+ const pt = new TextDecoder();
239
+ class Za {
240
+ constructor(e, a, A, t) {
241
+ this.buffer = e, this.binOffset = a + A, this.binLength = t;
242
+ let i = null;
243
+ if (A !== 0) try {
244
+ const s = new Uint8Array(e, a, A);
245
+ i = JSON.parse(pt.decode(s));
246
+ } catch {
247
+ i = {};
248
+ }
249
+ else i = {};
250
+ this.header = i;
251
+ }
252
+ getKeys() {
253
+ return Object.keys(this.header);
254
+ }
255
+ getData(e, a, A = null, t = null) {
256
+ const i = this.header;
257
+ if (!(e in i)) return null;
258
+ const s = i[e];
259
+ if (s instanceof Object) {
260
+ if (Array.isArray(s)) return s;
261
+ {
262
+ const { buffer: r, binOffset: b, binLength: o } = this, d = s.byteOffset || 0, c = s.type || t, g = s.componentType || A;
263
+ if ("type" in s && t && s.type !== t) throw new Error("FeatureTable: Specified type does not match expected type.");
264
+ let l, h;
265
+ switch (c) {
266
+ case "SCALAR":
267
+ l = 1;
268
+ break;
269
+ case "VEC2":
270
+ l = 2;
271
+ break;
272
+ case "VEC3":
273
+ l = 3;
274
+ break;
275
+ case "VEC4":
276
+ l = 4;
277
+ break;
278
+ default:
279
+ throw new Error(`FeatureTable : Feature type not provided for "${e}".`);
280
+ }
281
+ const f = b + d, I = a * l;
282
+ switch (g) {
283
+ case "BYTE":
284
+ h = new Int8Array(r, f, I);
285
+ break;
286
+ case "UNSIGNED_BYTE":
287
+ h = new Uint8Array(r, f, I);
288
+ break;
289
+ case "SHORT":
290
+ h = new Int16Array(r, f, I);
291
+ break;
292
+ case "UNSIGNED_SHORT":
293
+ h = new Uint16Array(r, f, I);
294
+ break;
295
+ case "INT":
296
+ h = new Int32Array(r, f, I);
297
+ break;
298
+ case "UNSIGNED_INT":
299
+ h = new Uint32Array(r, f, I);
300
+ break;
301
+ case "FLOAT":
302
+ h = new Float32Array(r, f, I);
303
+ break;
304
+ case "DOUBLE":
305
+ h = new Float64Array(r, f, I);
306
+ break;
307
+ default:
308
+ throw new Error(`FeatureTable : Feature component type not provided for "${e}".`);
309
+ }
310
+ if (f + I * h.BYTES_PER_ELEMENT > b + o) throw new Error("FeatureTable: Feature data read outside binary body length.");
311
+ return h;
312
+ }
313
+ }
314
+ return s;
315
+ }
316
+ }
317
+ class mt extends Za {
318
+ constructor(e, a, A, t, i) {
319
+ super(e, A, t, i), this.batchSize = a;
320
+ }
321
+ getData(e, a = null, A = null) {
322
+ return super.getData(e, this.batchSize, a, A);
323
+ }
324
+ }
325
+ function wa(n) {
326
+ let e, a, A, t = -1, i = 0;
327
+ for (let o = 0; o < n.length; ++o) {
328
+ const d = n[o];
329
+ if (e === void 0 && (e = d.array.constructor), e !== d.array.constructor) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."), null;
330
+ if (a === void 0 && (a = d.itemSize), a !== d.itemSize) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."), null;
331
+ if (A === void 0 && (A = d.normalized), A !== d.normalized) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."), null;
332
+ if (t === -1 && (t = d.gpuType), t !== d.gpuType) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."), null;
333
+ i += d.count * a;
334
+ }
335
+ const s = new e(i), r = new fe(s, a, A);
336
+ let b = 0;
337
+ for (let o = 0; o < n.length; ++o) {
338
+ const d = n[o];
339
+ if (d.isInterleavedBufferAttribute) {
340
+ const c = b / a;
341
+ for (let g = 0, l = d.count; g < l; g++) for (let h = 0; h < a; h++) {
342
+ const f = d.getComponent(g, h);
343
+ r.setComponent(g + c, h, f);
344
+ }
345
+ } else s.set(d.array, b);
346
+ b += d.count * a;
347
+ }
348
+ return t !== void 0 && (r.gpuType = t), r;
349
+ }
350
+ function ya(n, e) {
351
+ if (e === yA) return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), n;
352
+ if (e === ia || e === Ja) {
353
+ let a = n.getIndex();
354
+ if (a === null) {
355
+ const s = [], r = n.getAttribute("position");
356
+ if (r === void 0) return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), n;
357
+ for (let b = 0; b < r.count; b++) s.push(b);
358
+ n.setIndex(s), a = n.getIndex();
359
+ }
360
+ const A = a.count - 2, t = [];
361
+ if (e === ia) for (let s = 1; s <= A; s++) t.push(a.getX(0)), t.push(a.getX(s)), t.push(a.getX(s + 1));
362
+ else for (let s = 0; s < A; s++) s % 2 == 0 ? (t.push(a.getX(s)), t.push(a.getX(s + 1)), t.push(a.getX(s + 2))) : (t.push(a.getX(s + 2)), t.push(a.getX(s + 1)), t.push(a.getX(s)));
363
+ t.length / 3 !== A && console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");
364
+ const i = n.clone();
365
+ return i.setIndex(t), i.clearGroups(), i;
366
+ }
367
+ return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", e), n;
368
+ }
369
+ class $a {
370
+ constructor(e) {
371
+ fa(this, "checkLoaderInitialized", async () => new Promise((e) => {
372
+ const a = setInterval(() => {
373
+ this.gltfLoader.hasDracoLoader && !this.gltfLoader.dracoLoader || this.gltfLoader.hasKTX2Loader && !this.gltfLoader.ktx2Loader || (clearInterval(a), e());
374
+ }, 10);
375
+ }));
376
+ this.gltfLoader = e, this.tempMatrix = new m.Matrix4(), this.zUpToYUpMatrix = new m.Matrix4(), this.zUpToYUpMatrix.set(1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1);
377
+ }
378
+ parseB3DM(e, a, A, t) {
379
+ const i = this, s = new DataView(e), r = String.fromCharCode(s.getUint8(0)) + String.fromCharCode(s.getUint8(1)) + String.fromCharCode(s.getUint8(2)) + String.fromCharCode(s.getUint8(3));
380
+ console.assert(r === "b3dm");
381
+ const b = s.getUint32(8, !0);
382
+ console.assert(b === e.byteLength);
383
+ const o = s.getUint32(12, !0), d = s.getUint32(16, !0), c = s.getUint32(20, !0), g = s.getUint32(24, !0), l = new Za(e, 28, o, d), h = 28 + o + d;
384
+ new mt(e, l.getData("BATCH_LENGTH"), h, c, g);
385
+ const f = h + c + g, I = new Uint8Array(e, f, b - f).slice().buffer;
386
+ return new Promise(async (B, u) => {
387
+ await this.checkLoaderInitialized(), this.gltfLoader.parse(I, null, (E) => {
388
+ const C = l.getData("RTC_CENTER");
389
+ C ? (this.tempMatrix.makeTranslation(C[0], C[1], C[2]), E.scene.applyMatrix4(this.tempMatrix)) : E.userData.gltfExtensions && E.userData.gltfExtensions.CESIUM_RTC && (this.tempMatrix.makeTranslation(E.userData.gltfExtensions.CESIUM_RTC.center[0], E.userData.gltfExtensions.CESIUM_RTC.center[1], E.userData.gltfExtensions.CESIUM_RTC.center[2]), E.scene.applyMatrix4(this.tempMatrix)), A && E.scene.applyMatrix4(i.zUpToYUpMatrix), E.scene.asset = E.asset, E.scene.traverse((D) => {
390
+ D.isMesh && (t && D.applyMatrix4(i.zUpToYUpMatrix), a && a(D));
391
+ }), B(E.scene);
392
+ }, (E) => {
393
+ console.error(E);
394
+ });
395
+ });
396
+ }
397
+ parseB3DMInstanced(e, a, A, t, i) {
398
+ return this.parseB3DM(e, a, t, i).then((s) => {
399
+ let r, b = [], o = [];
400
+ s.updateWorldMatrix(!1, !0), s.traverse((c) => {
401
+ c.isMesh && (c.geometry.applyMatrix4(c.matrixWorld), b.push(c.geometry), o.push(c.material));
402
+ });
403
+ let d = function(c) {
404
+ let g = /* @__PURE__ */ new Set();
405
+ return c.forEach((h) => {
406
+ for (let f in h.attributes) g.add(f);
407
+ }), c.forEach((h) => {
408
+ g.forEach((f) => {
409
+ if (!h.attributes[f]) {
410
+ const I = function(u) {
411
+ switch (u) {
412
+ case "position":
413
+ case "normal":
414
+ case "color":
415
+ return 3;
416
+ case "uv":
417
+ case "uv2":
418
+ return 2;
419
+ default:
420
+ throw new Error(`Unknown attribute ${u}`);
421
+ }
422
+ }(f), B = new Float32Array(I * h.getAttribute("position").count).fill(0);
423
+ h.setAttribute(f, new m.BufferAttribute(B, I));
424
+ }
425
+ });
426
+ }), function(h, f = !1) {
427
+ const I = h[0].index !== null, B = new Set(Object.keys(h[0].attributes)), u = new Set(Object.keys(h[0].morphAttributes)), E = {}, C = {}, D = h[0].morphTargetsRelative, y = new ba();
428
+ let w = 0;
429
+ for (let p = 0; p < h.length; ++p) {
430
+ const Q = h[p];
431
+ let k = 0;
432
+ if (I !== (Q.index !== null)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."), null;
433
+ for (const x in Q.attributes) {
434
+ if (!B.has(x)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + '. All geometries must have compatible attributes; make sure "' + x + '" attribute exists among all geometries, or in none of them.'), null;
435
+ E[x] === void 0 && (E[x] = []), E[x].push(Q.attributes[x]), k++;
436
+ }
437
+ if (k !== B.size) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". Make sure all geometries have the same number of attributes."), null;
438
+ if (D !== Q.morphTargetsRelative) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". .morphTargetsRelative must be consistent throughout all geometries."), null;
439
+ for (const x in Q.morphAttributes) {
440
+ if (!u.has(x)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". .morphAttributes must be consistent throughout all geometries."), null;
441
+ C[x] === void 0 && (C[x] = []), C[x].push(Q.morphAttributes[x]);
442
+ }
443
+ if (f) {
444
+ let x;
445
+ if (I) x = Q.index.count;
446
+ else {
447
+ if (Q.attributes.position === void 0) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". The geometry must have either an index or a position attribute"), null;
448
+ x = Q.attributes.position.count;
449
+ }
450
+ y.addGroup(w, x, p), w += x;
451
+ }
452
+ }
453
+ if (I) {
454
+ let p = 0;
455
+ const Q = [];
456
+ for (let k = 0; k < h.length; ++k) {
457
+ const x = h[k].index;
458
+ for (let R = 0; R < x.count; ++R) Q.push(x.getX(R) + p);
459
+ p += h[k].attributes.position.count;
460
+ }
461
+ y.setIndex(Q);
462
+ }
463
+ for (const p in E) {
464
+ const Q = wa(E[p]);
465
+ if (!Q) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + p + " attribute."), null;
466
+ y.setAttribute(p, Q);
467
+ }
468
+ for (const p in C) {
469
+ const Q = C[p][0].length;
470
+ if (Q === 0) break;
471
+ y.morphAttributes = y.morphAttributes || {}, y.morphAttributes[p] = [];
472
+ for (let k = 0; k < Q; ++k) {
473
+ const x = [];
474
+ for (let U = 0; U < C[p].length; ++U) x.push(C[p][U][k]);
475
+ const R = wa(x);
476
+ if (!R) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + p + " morphAttribute."), null;
477
+ y.morphAttributes[p].push(R);
478
+ }
479
+ }
480
+ return y;
481
+ }(c, !0);
482
+ }(b);
483
+ return r = new m.InstancedMesh(d, o, A), r.baseMatrix = new m.Matrix4().identity(), r;
484
+ });
485
+ }
486
+ }
487
+ class eA extends da {
488
+ constructor(e) {
489
+ super(e), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register(function(a) {
490
+ return new xt(a);
491
+ }), this.register(function(a) {
492
+ return new Dt(a);
493
+ }), this.register(function(a) {
494
+ return new vt(a);
495
+ }), this.register(function(a) {
496
+ return new Ut(a);
497
+ }), this.register(function(a) {
498
+ return new Nt(a);
499
+ }), this.register(function(a) {
500
+ return new Mt(a);
501
+ }), this.register(function(a) {
502
+ return new Rt(a);
503
+ }), this.register(function(a) {
504
+ return new Ft(a);
505
+ }), this.register(function(a) {
506
+ return new St(a);
507
+ }), this.register(function(a) {
508
+ return new kt(a);
509
+ }), this.register(function(a) {
510
+ return new Tt(a);
511
+ }), this.register(function(a) {
512
+ return new jt(a);
513
+ }), this.register(function(a) {
514
+ return new Gt(a);
515
+ }), this.register(function(a) {
516
+ return new Lt(a);
517
+ }), this.register(function(a) {
518
+ return new wt(a);
519
+ }), this.register(function(a) {
520
+ return new _t(a);
521
+ }), this.register(function(a) {
522
+ return new Pt(a);
523
+ });
524
+ }
525
+ load(e, a, A, t) {
526
+ const i = this;
527
+ let s;
528
+ if (this.resourcePath !== "") s = this.resourcePath;
529
+ else if (this.path !== "") {
530
+ const o = De.extractUrlBase(e);
531
+ s = De.resolveURL(o, this.path);
532
+ } else s = De.extractUrlBase(e);
533
+ this.manager.itemStart(e);
534
+ const r = function(o) {
535
+ t ? t(o) : console.error(o), i.manager.itemError(e), i.manager.itemEnd(e);
536
+ }, b = new ce(this.manager);
537
+ b.setPath(this.path), b.setResponseType("arraybuffer"), b.setRequestHeader(this.requestHeader), b.setWithCredentials(this.withCredentials), b.load(e, function(o) {
538
+ try {
539
+ i.parse(o, s, function(d) {
540
+ a(d), i.manager.itemEnd(e);
541
+ }, r);
542
+ } catch (d) {
543
+ r(d);
544
+ }
545
+ }, A, r);
546
+ }
547
+ setDRACOLoader(e) {
548
+ return this.dracoLoader = e, this;
549
+ }
550
+ setKTX2Loader(e) {
551
+ return this.ktx2Loader = e, this;
552
+ }
553
+ setMeshoptDecoder(e) {
554
+ return this.meshoptDecoder = e, this;
555
+ }
556
+ register(e) {
557
+ return this.pluginCallbacks.indexOf(e) === -1 && this.pluginCallbacks.push(e), this;
558
+ }
559
+ unregister(e) {
560
+ return this.pluginCallbacks.indexOf(e) !== -1 && this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e), 1), this;
561
+ }
562
+ parse(e, a, A, t) {
563
+ let i;
564
+ const s = {}, r = {}, b = new TextDecoder();
565
+ if (typeof e == "string") i = JSON.parse(e);
566
+ else if (e instanceof ArrayBuffer)
567
+ if (b.decode(new Uint8Array(e, 0, 4)) === aA) {
568
+ try {
569
+ s[j.KHR_BINARY_GLTF] = new Jt(e);
570
+ } catch (d) {
571
+ return void (t && t(d));
572
+ }
573
+ i = JSON.parse(s[j.KHR_BINARY_GLTF].content);
574
+ } else i = JSON.parse(b.decode(e));
575
+ else i = e;
576
+ if (i.asset === void 0 || i.asset.version[0] < 2) return void (t && t(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));
577
+ const o = new ti(i, { path: a || this.resourcePath || "", crossOrigin: this.crossOrigin, requestHeader: this.requestHeader, manager: this.manager, ktx2Loader: this.ktx2Loader, meshoptDecoder: this.meshoptDecoder });
578
+ o.fileLoader.setRequestHeader(this.requestHeader);
579
+ for (let d = 0; d < this.pluginCallbacks.length; d++) {
580
+ const c = this.pluginCallbacks[d](o);
581
+ c.name || console.error("THREE.GLTFLoader: Invalid plugin found: missing name"), r[c.name] = c, s[c.name] = !0;
582
+ }
583
+ if (i.extensionsUsed) for (let d = 0; d < i.extensionsUsed.length; ++d) {
584
+ const c = i.extensionsUsed[d], g = i.extensionsRequired || [];
585
+ switch (c) {
586
+ case j.KHR_MATERIALS_UNLIT:
587
+ s[c] = new yt();
588
+ break;
589
+ case j.KHR_DRACO_MESH_COMPRESSION:
590
+ s[c] = new Ot(i, this.dracoLoader);
591
+ break;
592
+ case j.KHR_TEXTURE_TRANSFORM:
593
+ s[c] = new Kt();
594
+ break;
595
+ case j.KHR_MESH_QUANTIZATION:
596
+ s[c] = new Vt();
597
+ break;
598
+ default:
599
+ g.indexOf(c) >= 0 && r[c] === void 0 && console.warn('THREE.GLTFLoader: Unknown extension "' + c + '".');
600
+ }
601
+ }
602
+ o.setExtensions(s), o.setPlugins(r), o.parse(A, t);
603
+ }
604
+ parseAsync(e, a) {
605
+ const A = this;
606
+ return new Promise(function(t, i) {
607
+ A.parse(e, a, t, i);
608
+ });
609
+ }
610
+ }
611
+ function Qt() {
612
+ let n = {};
613
+ return { get: function(e) {
614
+ return n[e];
615
+ }, add: function(e, a) {
616
+ n[e] = a;
617
+ }, remove: function(e) {
618
+ delete n[e];
619
+ }, removeAll: function() {
620
+ n = {};
621
+ } };
622
+ }
623
+ const j = { KHR_BINARY_GLTF: "KHR_binary_glTF", KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", KHR_MATERIALS_IOR: "KHR_materials_ior", KHR_MATERIALS_SHEEN: "KHR_materials_sheen", KHR_MATERIALS_SPECULAR: "KHR_materials_specular", KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", KHR_MATERIALS_UNLIT: "KHR_materials_unlit", KHR_MATERIALS_VOLUME: "KHR_materials_volume", KHR_TEXTURE_BASISU: "KHR_texture_basisu", KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", EXT_MATERIALS_BUMP: "EXT_materials_bump", EXT_TEXTURE_WEBP: "EXT_texture_webp", EXT_TEXTURE_AVIF: "EXT_texture_avif", EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" };
624
+ class wt {
625
+ constructor(e) {
626
+ this.parser = e, this.name = j.KHR_LIGHTS_PUNCTUAL, this.cache = { refs: {}, uses: {} };
627
+ }
628
+ _markDefs() {
629
+ const e = this.parser, a = this.parser.json.nodes || [];
630
+ for (let A = 0, t = a.length; A < t; A++) {
631
+ const i = a[A];
632
+ i.extensions && i.extensions[this.name] && i.extensions[this.name].light !== void 0 && e._addNodeRef(this.cache, i.extensions[this.name].light);
633
+ }
634
+ }
635
+ _loadLight(e) {
636
+ const a = this.parser, A = "light:" + e;
637
+ let t = a.cache.get(A);
638
+ if (t) return t;
639
+ const i = a.json, s = ((i.extensions && i.extensions[this.name] || {}).lights || [])[e];
640
+ let r;
641
+ const b = new se(16777215);
642
+ s.color !== void 0 && b.setRGB(s.color[0], s.color[1], s.color[2], q);
643
+ const o = s.range !== void 0 ? s.range : 0;
644
+ switch (s.type) {
645
+ case "directional":
646
+ r = new DA(b), r.target.position.set(0, 0, -1), r.add(r.target);
647
+ break;
648
+ case "point":
649
+ r = new xA(b), r.distance = o;
650
+ break;
651
+ case "spot":
652
+ r = new kA(b), r.distance = o, s.spot = s.spot || {}, s.spot.innerConeAngle = s.spot.innerConeAngle !== void 0 ? s.spot.innerConeAngle : 0, s.spot.outerConeAngle = s.spot.outerConeAngle !== void 0 ? s.spot.outerConeAngle : Math.PI / 4, r.angle = s.spot.outerConeAngle, r.penumbra = 1 - s.spot.innerConeAngle / s.spot.outerConeAngle, r.target.position.set(0, 0, -1), r.add(r.target);
653
+ break;
654
+ default:
655
+ throw new Error("THREE.GLTFLoader: Unexpected light type: " + s.type);
656
+ }
657
+ return r.position.set(0, 0, 0), r.decay = 2, Z(r, s), s.intensity !== void 0 && (r.intensity = s.intensity), r.name = a.createUniqueName(s.name || "light_" + e), t = Promise.resolve(r), a.cache.add(A, t), t;
658
+ }
659
+ getDependency(e, a) {
660
+ if (e === "light") return this._loadLight(a);
661
+ }
662
+ createNodeAttachment(e) {
663
+ const a = this, A = this.parser, t = A.json.nodes[e], i = (t.extensions && t.extensions[this.name] || {}).light;
664
+ return i === void 0 ? null : this._loadLight(i).then(function(s) {
665
+ return A._getNodeRef(a.cache, i, s);
666
+ });
667
+ }
668
+ }
669
+ class yt {
670
+ constructor() {
671
+ this.name = j.KHR_MATERIALS_UNLIT;
672
+ }
673
+ getMaterialType() {
674
+ return ye;
675
+ }
676
+ extendParams(e, a, A) {
677
+ const t = [];
678
+ e.color = new se(1, 1, 1), e.opacity = 1;
679
+ const i = a.pbrMetallicRoughness;
680
+ if (i) {
681
+ if (Array.isArray(i.baseColorFactor)) {
682
+ const s = i.baseColorFactor;
683
+ e.color.setRGB(s[0], s[1], s[2], q), e.opacity = s[3];
684
+ }
685
+ i.baseColorTexture !== void 0 && t.push(A.assignTexture(e, "map", i.baseColorTexture, $));
686
+ }
687
+ return Promise.all(t);
688
+ }
689
+ }
690
+ class kt {
691
+ constructor(e) {
692
+ this.parser = e, this.name = j.KHR_MATERIALS_EMISSIVE_STRENGTH;
693
+ }
694
+ extendMaterialParams(e, a) {
695
+ const A = this.parser.json.materials[e];
696
+ if (!A.extensions || !A.extensions[this.name]) return Promise.resolve();
697
+ const t = A.extensions[this.name].emissiveStrength;
698
+ return t !== void 0 && (a.emissiveIntensity = t), Promise.resolve();
699
+ }
700
+ }
701
+ class xt {
702
+ constructor(e) {
703
+ this.parser = e, this.name = j.KHR_MATERIALS_CLEARCOAT;
704
+ }
705
+ getMaterialType(e) {
706
+ const a = this.parser.json.materials[e];
707
+ return a.extensions && a.extensions[this.name] ? Y : null;
708
+ }
709
+ extendMaterialParams(e, a) {
710
+ const A = this.parser, t = A.json.materials[e];
711
+ if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
712
+ const i = [], s = t.extensions[this.name];
713
+ if (s.clearcoatFactor !== void 0 && (a.clearcoat = s.clearcoatFactor), s.clearcoatTexture !== void 0 && i.push(A.assignTexture(a, "clearcoatMap", s.clearcoatTexture)), s.clearcoatRoughnessFactor !== void 0 && (a.clearcoatRoughness = s.clearcoatRoughnessFactor), s.clearcoatRoughnessTexture !== void 0 && i.push(A.assignTexture(a, "clearcoatRoughnessMap", s.clearcoatRoughnessTexture)), s.clearcoatNormalTexture !== void 0 && (i.push(A.assignTexture(a, "clearcoatNormalMap", s.clearcoatNormalTexture)), s.clearcoatNormalTexture.scale !== void 0)) {
714
+ const r = s.clearcoatNormalTexture.scale;
715
+ a.clearcoatNormalScale = new Oa(r, r);
716
+ }
717
+ return Promise.all(i);
718
+ }
719
+ }
720
+ class Dt {
721
+ constructor(e) {
722
+ this.parser = e, this.name = j.KHR_MATERIALS_DISPERSION;
723
+ }
724
+ getMaterialType(e) {
725
+ const a = this.parser.json.materials[e];
726
+ return a.extensions && a.extensions[this.name] ? Y : null;
727
+ }
728
+ extendMaterialParams(e, a) {
729
+ const A = this.parser.json.materials[e];
730
+ if (!A.extensions || !A.extensions[this.name]) return Promise.resolve();
731
+ const t = A.extensions[this.name];
732
+ return a.dispersion = t.dispersion !== void 0 ? t.dispersion : 0, Promise.resolve();
733
+ }
734
+ }
735
+ class jt {
736
+ constructor(e) {
737
+ this.parser = e, this.name = j.KHR_MATERIALS_IRIDESCENCE;
738
+ }
739
+ getMaterialType(e) {
740
+ const a = this.parser.json.materials[e];
741
+ return a.extensions && a.extensions[this.name] ? Y : null;
742
+ }
743
+ extendMaterialParams(e, a) {
744
+ const A = this.parser, t = A.json.materials[e];
745
+ if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
746
+ const i = [], s = t.extensions[this.name];
747
+ return s.iridescenceFactor !== void 0 && (a.iridescence = s.iridescenceFactor), s.iridescenceTexture !== void 0 && i.push(A.assignTexture(a, "iridescenceMap", s.iridescenceTexture)), s.iridescenceIor !== void 0 && (a.iridescenceIOR = s.iridescenceIor), a.iridescenceThicknessRange === void 0 && (a.iridescenceThicknessRange = [100, 400]), s.iridescenceThicknessMinimum !== void 0 && (a.iridescenceThicknessRange[0] = s.iridescenceThicknessMinimum), s.iridescenceThicknessMaximum !== void 0 && (a.iridescenceThicknessRange[1] = s.iridescenceThicknessMaximum), s.iridescenceThicknessTexture !== void 0 && i.push(A.assignTexture(a, "iridescenceThicknessMap", s.iridescenceThicknessTexture)), Promise.all(i);
748
+ }
749
+ }
750
+ class Mt {
751
+ constructor(e) {
752
+ this.parser = e, this.name = j.KHR_MATERIALS_SHEEN;
753
+ }
754
+ getMaterialType(e) {
755
+ const a = this.parser.json.materials[e];
756
+ return a.extensions && a.extensions[this.name] ? Y : null;
757
+ }
758
+ extendMaterialParams(e, a) {
759
+ const A = this.parser, t = A.json.materials[e];
760
+ if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
761
+ const i = [];
762
+ a.sheenColor = new se(0, 0, 0), a.sheenRoughness = 0, a.sheen = 1;
763
+ const s = t.extensions[this.name];
764
+ if (s.sheenColorFactor !== void 0) {
765
+ const r = s.sheenColorFactor;
766
+ a.sheenColor.setRGB(r[0], r[1], r[2], q);
767
+ }
768
+ return s.sheenRoughnessFactor !== void 0 && (a.sheenRoughness = s.sheenRoughnessFactor), s.sheenColorTexture !== void 0 && i.push(A.assignTexture(a, "sheenColorMap", s.sheenColorTexture, $)), s.sheenRoughnessTexture !== void 0 && i.push(A.assignTexture(a, "sheenRoughnessMap", s.sheenRoughnessTexture)), Promise.all(i);
769
+ }
770
+ }
771
+ class Rt {
772
+ constructor(e) {
773
+ this.parser = e, this.name = j.KHR_MATERIALS_TRANSMISSION;
774
+ }
775
+ getMaterialType(e) {
776
+ const a = this.parser.json.materials[e];
777
+ return a.extensions && a.extensions[this.name] ? Y : null;
778
+ }
779
+ extendMaterialParams(e, a) {
780
+ const A = this.parser, t = A.json.materials[e];
781
+ if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
782
+ const i = [], s = t.extensions[this.name];
783
+ return s.transmissionFactor !== void 0 && (a.transmission = s.transmissionFactor), s.transmissionTexture !== void 0 && i.push(A.assignTexture(a, "transmissionMap", s.transmissionTexture)), Promise.all(i);
784
+ }
785
+ }
786
+ class Ft {
787
+ constructor(e) {
788
+ this.parser = e, this.name = j.KHR_MATERIALS_VOLUME;
789
+ }
790
+ getMaterialType(e) {
791
+ const a = this.parser.json.materials[e];
792
+ return a.extensions && a.extensions[this.name] ? Y : null;
793
+ }
794
+ extendMaterialParams(e, a) {
795
+ const A = this.parser, t = A.json.materials[e];
796
+ if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
797
+ const i = [], s = t.extensions[this.name];
798
+ a.thickness = s.thicknessFactor !== void 0 ? s.thicknessFactor : 0, s.thicknessTexture !== void 0 && i.push(A.assignTexture(a, "thicknessMap", s.thicknessTexture)), a.attenuationDistance = s.attenuationDistance || 1 / 0;
799
+ const r = s.attenuationColor || [1, 1, 1];
800
+ return a.attenuationColor = new se().setRGB(r[0], r[1], r[2], q), Promise.all(i);
801
+ }
802
+ }
803
+ class St {
804
+ constructor(e) {
805
+ this.parser = e, this.name = j.KHR_MATERIALS_IOR;
806
+ }
807
+ getMaterialType(e) {
808
+ const a = this.parser.json.materials[e];
809
+ return a.extensions && a.extensions[this.name] ? Y : null;
810
+ }
811
+ extendMaterialParams(e, a) {
812
+ const A = this.parser.json.materials[e];
813
+ if (!A.extensions || !A.extensions[this.name]) return Promise.resolve();
814
+ const t = A.extensions[this.name];
815
+ return a.ior = t.ior !== void 0 ? t.ior : 1.5, Promise.resolve();
816
+ }
817
+ }
818
+ class Tt {
819
+ constructor(e) {
820
+ this.parser = e, this.name = j.KHR_MATERIALS_SPECULAR;
821
+ }
822
+ getMaterialType(e) {
823
+ const a = this.parser.json.materials[e];
824
+ return a.extensions && a.extensions[this.name] ? Y : null;
825
+ }
826
+ extendMaterialParams(e, a) {
827
+ const A = this.parser, t = A.json.materials[e];
828
+ if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
829
+ const i = [], s = t.extensions[this.name];
830
+ a.specularIntensity = s.specularFactor !== void 0 ? s.specularFactor : 1, s.specularTexture !== void 0 && i.push(A.assignTexture(a, "specularIntensityMap", s.specularTexture));
831
+ const r = s.specularColorFactor || [1, 1, 1];
832
+ return a.specularColor = new se().setRGB(r[0], r[1], r[2], q), s.specularColorTexture !== void 0 && i.push(A.assignTexture(a, "specularColorMap", s.specularColorTexture, $)), Promise.all(i);
833
+ }
834
+ }
835
+ class Lt {
836
+ constructor(e) {
837
+ this.parser = e, this.name = j.EXT_MATERIALS_BUMP;
838
+ }
839
+ getMaterialType(e) {
840
+ const a = this.parser.json.materials[e];
841
+ return a.extensions && a.extensions[this.name] ? Y : null;
842
+ }
843
+ extendMaterialParams(e, a) {
844
+ const A = this.parser, t = A.json.materials[e];
845
+ if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
846
+ const i = [], s = t.extensions[this.name];
847
+ return a.bumpScale = s.bumpFactor !== void 0 ? s.bumpFactor : 1, s.bumpTexture !== void 0 && i.push(A.assignTexture(a, "bumpMap", s.bumpTexture)), Promise.all(i);
848
+ }
849
+ }
850
+ class Gt {
851
+ constructor(e) {
852
+ this.parser = e, this.name = j.KHR_MATERIALS_ANISOTROPY;
853
+ }
854
+ getMaterialType(e) {
855
+ const a = this.parser.json.materials[e];
856
+ return a.extensions && a.extensions[this.name] ? Y : null;
857
+ }
858
+ extendMaterialParams(e, a) {
859
+ const A = this.parser, t = A.json.materials[e];
860
+ if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
861
+ const i = [], s = t.extensions[this.name];
862
+ return s.anisotropyStrength !== void 0 && (a.anisotropy = s.anisotropyStrength), s.anisotropyRotation !== void 0 && (a.anisotropyRotation = s.anisotropyRotation), s.anisotropyTexture !== void 0 && i.push(A.assignTexture(a, "anisotropyMap", s.anisotropyTexture)), Promise.all(i);
863
+ }
864
+ }
865
+ class vt {
866
+ constructor(e) {
867
+ this.parser = e, this.name = j.KHR_TEXTURE_BASISU;
868
+ }
869
+ loadTexture(e) {
870
+ const a = this.parser, A = a.json, t = A.textures[e];
871
+ if (!t.extensions || !t.extensions[this.name]) return null;
872
+ const i = t.extensions[this.name], s = a.options.ktx2Loader;
873
+ if (!s) {
874
+ if (A.extensionsRequired && A.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");
875
+ return null;
876
+ }
877
+ return a.loadTextureImage(e, i.source, s);
878
+ }
879
+ }
880
+ class Ut {
881
+ constructor(e) {
882
+ this.parser = e, this.name = j.EXT_TEXTURE_WEBP, this.isSupported = null;
883
+ }
884
+ loadTexture(e) {
885
+ const a = this.name, A = this.parser, t = A.json, i = t.textures[e];
886
+ if (!i.extensions || !i.extensions[a]) return null;
887
+ const s = i.extensions[a], r = t.images[s.source];
888
+ let b = A.textureLoader;
889
+ if (r.uri) {
890
+ const o = A.options.manager.getHandler(r.uri);
891
+ o !== null && (b = o);
892
+ }
893
+ return this.detectSupport().then(function(o) {
894
+ if (o) return A.loadTextureImage(e, s.source, b);
895
+ if (t.extensionsRequired && t.extensionsRequired.indexOf(a) >= 0) throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");
896
+ return A.loadTexture(e);
897
+ });
898
+ }
899
+ detectSupport() {
900
+ return this.isSupported || (this.isSupported = new Promise(function(e) {
901
+ const a = new Image();
902
+ a.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA", a.onload = a.onerror = function() {
903
+ e(a.height === 1);
904
+ };
905
+ })), this.isSupported;
906
+ }
907
+ }
908
+ class Nt {
909
+ constructor(e) {
910
+ this.parser = e, this.name = j.EXT_TEXTURE_AVIF, this.isSupported = null;
911
+ }
912
+ loadTexture(e) {
913
+ const a = this.name, A = this.parser, t = A.json, i = t.textures[e];
914
+ if (!i.extensions || !i.extensions[a]) return null;
915
+ const s = i.extensions[a], r = t.images[s.source];
916
+ let b = A.textureLoader;
917
+ if (r.uri) {
918
+ const o = A.options.manager.getHandler(r.uri);
919
+ o !== null && (b = o);
920
+ }
921
+ return this.detectSupport().then(function(o) {
922
+ if (o) return A.loadTextureImage(e, s.source, b);
923
+ if (t.extensionsRequired && t.extensionsRequired.indexOf(a) >= 0) throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");
924
+ return A.loadTexture(e);
925
+ });
926
+ }
927
+ detectSupport() {
928
+ return this.isSupported || (this.isSupported = new Promise(function(e) {
929
+ const a = new Image();
930
+ a.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=", a.onload = a.onerror = function() {
931
+ e(a.height === 1);
932
+ };
933
+ })), this.isSupported;
934
+ }
935
+ }
936
+ class _t {
937
+ constructor(e) {
938
+ this.name = j.EXT_MESHOPT_COMPRESSION, this.parser = e;
939
+ }
940
+ loadBufferView(e) {
941
+ const a = this.parser.json, A = a.bufferViews[e];
942
+ if (A.extensions && A.extensions[this.name]) {
943
+ const t = A.extensions[this.name], i = this.parser.getDependency("buffer", t.buffer), s = this.parser.options.meshoptDecoder;
944
+ if (!s || !s.supported) {
945
+ if (a.extensionsRequired && a.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");
946
+ return null;
947
+ }
948
+ return i.then(function(r) {
949
+ const b = t.byteOffset || 0, o = t.byteLength || 0, d = t.count, c = t.byteStride, g = new Uint8Array(r, b, o);
950
+ return s.decodeGltfBufferAsync ? s.decodeGltfBufferAsync(d, c, g, t.mode, t.filter).then(function(l) {
951
+ return l.buffer;
952
+ }) : s.ready.then(function() {
953
+ const l = new ArrayBuffer(d * c);
954
+ return s.decodeGltfBuffer(new Uint8Array(l), d, c, g, t.mode, t.filter), l;
955
+ });
956
+ });
957
+ }
958
+ return null;
959
+ }
960
+ }
961
+ class Pt {
962
+ constructor(e) {
963
+ this.name = j.EXT_MESH_GPU_INSTANCING, this.parser = e;
964
+ }
965
+ createNodeMesh(e) {
966
+ const a = this.parser.json, A = a.nodes[e];
967
+ if (!A.extensions || !A.extensions[this.name] || A.mesh === void 0) return null;
968
+ const t = a.meshes[A.mesh];
969
+ for (const b of t.primitives) if (b.mode !== N.TRIANGLES && b.mode !== N.TRIANGLE_STRIP && b.mode !== N.TRIANGLE_FAN && b.mode !== void 0) return null;
970
+ const i = A.extensions[this.name].attributes, s = [], r = {};
971
+ for (const b in i) s.push(this.parser.getDependency("accessor", i[b]).then((o) => (r[b] = o, r[b])));
972
+ return s.length < 1 ? null : (s.push(this.parser.createNodeMesh(e)), Promise.all(s).then((b) => {
973
+ const o = b.pop(), d = o.isGroup ? o.children : [o], c = b[0].count, g = [];
974
+ for (const l of d) {
975
+ const h = new Le(), f = new H(), I = new Ka(), B = new H(1, 1, 1), u = new jA(l.geometry, l.material, c);
976
+ for (let E = 0; E < c; E++) r.TRANSLATION && f.fromBufferAttribute(r.TRANSLATION, E), r.ROTATION && I.fromBufferAttribute(r.ROTATION, E), r.SCALE && B.fromBufferAttribute(r.SCALE, E), u.setMatrixAt(E, h.compose(f, I, B));
977
+ for (const E in r) if (E === "_COLOR_0") {
978
+ const C = r[E];
979
+ u.instanceColor = new MA(C.array, C.itemSize, C.normalized);
980
+ } else E !== "TRANSLATION" && E !== "ROTATION" && E !== "SCALE" && l.geometry.setAttribute(E, r[E]);
981
+ Va.prototype.copy.call(u, l), this.parser.assignFinalMaterial(u), g.push(u);
982
+ }
983
+ return o.isGroup ? (o.clear(), o.add(...g), o) : g[0];
984
+ }));
985
+ }
986
+ }
987
+ const aA = "glTF", Ht = 1313821514, qt = 5130562;
988
+ class Jt {
989
+ constructor(e) {
990
+ this.name = j.KHR_BINARY_GLTF, this.content = null, this.body = null;
991
+ const a = new DataView(e, 0, 12), A = new TextDecoder();
992
+ if (this.header = { magic: A.decode(new Uint8Array(e.slice(0, 4))), version: a.getUint32(4, !0), length: a.getUint32(8, !0) }, this.header.magic !== aA) throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");
993
+ if (this.header.version < 2) throw new Error("THREE.GLTFLoader: Legacy binary file detected.");
994
+ const t = this.header.length - 12, i = new DataView(e, 12);
995
+ let s = 0;
996
+ for (; s < t; ) {
997
+ const r = i.getUint32(s, !0);
998
+ s += 4;
999
+ const b = i.getUint32(s, !0);
1000
+ if (s += 4, b === Ht) {
1001
+ const o = new Uint8Array(e, 12 + s, r);
1002
+ this.content = A.decode(o);
1003
+ } else if (b === qt) {
1004
+ const o = 12 + s;
1005
+ this.body = e.slice(o, o + r);
1006
+ }
1007
+ s += r;
1008
+ }
1009
+ if (this.content === null) throw new Error("THREE.GLTFLoader: JSON content not found.");
1010
+ }
1011
+ }
1012
+ class Ot {
1013
+ constructor(e, a) {
1014
+ if (!a) throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");
1015
+ this.name = j.KHR_DRACO_MESH_COMPRESSION, this.json = e, this.dracoLoader = a, this.dracoLoader.preload();
1016
+ }
1017
+ decodePrimitive(e, a) {
1018
+ const A = this.json, t = this.dracoLoader, i = e.extensions[this.name].bufferView, s = e.extensions[this.name].attributes, r = {}, b = {}, o = {};
1019
+ for (const d in s) {
1020
+ const c = na[d] || d.toLowerCase();
1021
+ r[c] = s[d];
1022
+ }
1023
+ for (const d in e.attributes) {
1024
+ const c = na[d] || d.toLowerCase();
1025
+ if (s[d] !== void 0) {
1026
+ const g = A.accessors[e.attributes[d]], l = ue[g.componentType];
1027
+ o[c] = l.name, b[c] = g.normalized === !0;
1028
+ }
1029
+ }
1030
+ return a.getDependency("bufferView", i).then(function(d) {
1031
+ return new Promise(function(c, g) {
1032
+ t.decodeDracoFile(d, function(l) {
1033
+ for (const h in l.attributes) {
1034
+ const f = l.attributes[h], I = b[h];
1035
+ I !== void 0 && (f.normalized = I);
1036
+ }
1037
+ c(l);
1038
+ }, r, o, q, g);
1039
+ });
1040
+ });
1041
+ }
1042
+ }
1043
+ class Kt {
1044
+ constructor() {
1045
+ this.name = j.KHR_TEXTURE_TRANSFORM;
1046
+ }
1047
+ extendTexture(e, a) {
1048
+ return (a.texCoord !== void 0 && a.texCoord !== e.channel || a.offset !== void 0 || a.rotation !== void 0 || a.scale !== void 0) && (e = e.clone(), a.texCoord !== void 0 && (e.channel = a.texCoord), a.offset !== void 0 && e.offset.fromArray(a.offset), a.rotation !== void 0 && (e.rotation = a.rotation), a.scale !== void 0 && e.repeat.fromArray(a.scale), e.needsUpdate = !0), e;
1049
+ }
1050
+ }
1051
+ class Vt {
1052
+ constructor() {
1053
+ this.name = j.KHR_MESH_QUANTIZATION;
1054
+ }
1055
+ }
1056
+ class AA extends it {
1057
+ constructor(e, a, A, t) {
1058
+ super(e, a, A, t);
1059
+ }
1060
+ copySampleValue_(e) {
1061
+ const a = this.resultBuffer, A = this.sampleValues, t = this.valueSize, i = e * t * 3 + t;
1062
+ for (let s = 0; s !== t; s++) a[s] = A[i + s];
1063
+ return a;
1064
+ }
1065
+ interpolate_(e, a, A, t) {
1066
+ const i = this.resultBuffer, s = this.sampleValues, r = this.valueSize, b = 2 * r, o = 3 * r, d = t - a, c = (A - a) / d, g = c * c, l = g * c, h = e * o, f = h - o, I = -2 * l + 3 * g, B = l - g, u = 1 - I, E = B - g + c;
1067
+ for (let C = 0; C !== r; C++) {
1068
+ const D = s[f + C + r], y = s[f + C + b] * d, w = s[h + C + r], p = s[h + C] * d;
1069
+ i[C] = u * D + E * y + I * w + B * p;
1070
+ }
1071
+ return i;
1072
+ }
1073
+ }
1074
+ const zt = new Ka();
1075
+ class Yt extends AA {
1076
+ interpolate_(e, a, A, t) {
1077
+ const i = super.interpolate_(e, a, A, t);
1078
+ return zt.fromArray(i).normalize().toArray(i), i;
1079
+ }
1080
+ }
1081
+ const N = { FLOAT: 5126, FLOAT_MAT3: 35675, FLOAT_MAT4: 35676, FLOAT_VEC2: 35664, FLOAT_VEC3: 35665, FLOAT_VEC4: 35666, LINEAR: 9729, REPEAT: 10497, SAMPLER_2D: 35678, POINTS: 0, LINES: 1, LINE_LOOP: 2, LINE_STRIP: 3, TRIANGLES: 4, TRIANGLE_STRIP: 5, TRIANGLE_FAN: 6, UNSIGNED_BYTE: 5121, UNSIGNED_SHORT: 5123 }, ue = { 5120: Int8Array, 5121: Uint8Array, 5122: Int16Array, 5123: Uint16Array, 5125: Uint32Array, 5126: Float32Array }, ka = { 9728: za, 9729: Me, 9984: XA, 9985: ZA, 9986: $A, 9987: ga }, xa = { 33071: et, 33648: at, 10497: sa }, Ne = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT2: 4, MAT3: 9, MAT4: 16 }, na = { POSITION: "position", NORMAL: "normal", TANGENT: "tangent", TEXCOORD_0: "uv", TEXCOORD_1: "uv1", TEXCOORD_2: "uv2", TEXCOORD_3: "uv3", COLOR_0: "color", WEIGHTS_0: "skinWeight", JOINTS_0: "skinIndex" }, ee = { scale: "scale", translation: "position", rotation: "quaternion", weights: "morphTargetInfluences" }, Wt = { CUBICSPLINE: void 0, LINEAR: Ya, STEP: At }, Xt = "OPAQUE", Zt = "MASK", $t = "BLEND";
1082
+ function re(n, e, a) {
1083
+ for (const A in a.extensions) n[A] === void 0 && (e.userData.gltfExtensions = e.userData.gltfExtensions || {}, e.userData.gltfExtensions[A] = a.extensions[A]);
1084
+ }
1085
+ function Z(n, e) {
1086
+ e.extras !== void 0 && (typeof e.extras == "object" ? Object.assign(n.userData, e.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + e.extras));
1087
+ }
1088
+ function ei(n, e) {
1089
+ if (n.updateMorphTargets(), e.weights !== void 0) for (let a = 0, A = e.weights.length; a < A; a++) n.morphTargetInfluences[a] = e.weights[a];
1090
+ if (e.extras && Array.isArray(e.extras.targetNames)) {
1091
+ const a = e.extras.targetNames;
1092
+ if (n.morphTargetInfluences.length === a.length) {
1093
+ n.morphTargetDictionary = {};
1094
+ for (let A = 0, t = a.length; A < t; A++) n.morphTargetDictionary[a[A]] = A;
1095
+ } else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.");
1096
+ }
1097
+ }
1098
+ function ai(n) {
1099
+ let e;
1100
+ const a = n.extensions && n.extensions[j.KHR_DRACO_MESH_COMPRESSION];
1101
+ if (e = a ? "draco:" + a.bufferView + ":" + a.indices + ":" + _e(a.attributes) : n.indices + ":" + _e(n.attributes) + ":" + n.mode, n.targets !== void 0) for (let A = 0, t = n.targets.length; A < t; A++) e += ":" + _e(n.targets[A]);
1102
+ return e;
1103
+ }
1104
+ function _e(n) {
1105
+ let e = "";
1106
+ const a = Object.keys(n).sort();
1107
+ for (let A = 0, t = a.length; A < t; A++) e += a[A] + ":" + n[a[A]] + ";";
1108
+ return e;
1109
+ }
1110
+ function oa(n) {
1111
+ switch (n) {
1112
+ case Int8Array:
1113
+ return 1 / 127;
1114
+ case Uint8Array:
1115
+ return 1 / 255;
1116
+ case Int16Array:
1117
+ return 1 / 32767;
1118
+ case Uint16Array:
1119
+ return 1 / 65535;
1120
+ default:
1121
+ throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
1122
+ }
1123
+ }
1124
+ const Ai = new Le();
1125
+ class ti {
1126
+ constructor(e = {}, a = {}) {
1127
+ this.json = e, this.extensions = {}, this.plugins = {}, this.options = a, this.cache = new Qt(), this.associations = /* @__PURE__ */ new Map(), this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { refs: {}, uses: {} }, this.cameraCache = { refs: {}, uses: {} }, this.lightCache = { refs: {}, uses: {} }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {};
1128
+ let A = !1, t = -1, i = !1, s = -1;
1129
+ if (typeof navigator < "u") {
1130
+ const r = navigator.userAgent;
1131
+ A = /^((?!chrome|android).)*safari/i.test(r) === !0;
1132
+ const b = r.match(/Version\/(\d+)/);
1133
+ t = A && b ? parseInt(b[1], 10) : -1, i = r.indexOf("Firefox") > -1, s = i ? r.match(/Firefox\/([0-9]+)\./)[1] : -1;
1134
+ }
1135
+ typeof createImageBitmap > "u" || A && t < 17 || i && s < 98 ? this.textureLoader = new RA(this.options.manager) : this.textureLoader = new FA(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new ce(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), this.options.crossOrigin === "use-credentials" && this.fileLoader.setWithCredentials(!0);
1136
+ }
1137
+ setExtensions(e) {
1138
+ this.extensions = e;
1139
+ }
1140
+ setPlugins(e) {
1141
+ this.plugins = e;
1142
+ }
1143
+ parse(e, a) {
1144
+ const A = this, t = this.json, i = this.extensions;
1145
+ this.cache.removeAll(), this.nodeCache = {}, this._invokeAll(function(s) {
1146
+ return s._markDefs && s._markDefs();
1147
+ }), Promise.all(this._invokeAll(function(s) {
1148
+ return s.beforeRoot && s.beforeRoot();
1149
+ })).then(function() {
1150
+ return Promise.all([A.getDependencies("scene"), A.getDependencies("animation"), A.getDependencies("camera")]);
1151
+ }).then(function(s) {
1152
+ const r = { scene: s[0][t.scene || 0], scenes: s[0], animations: s[1], cameras: s[2], asset: t.asset, parser: A, userData: {} };
1153
+ return re(i, r, t), Z(r, t), Promise.all(A._invokeAll(function(b) {
1154
+ return b.afterRoot && b.afterRoot(r);
1155
+ })).then(function() {
1156
+ for (const b of r.scenes) b.updateMatrixWorld();
1157
+ e(r);
1158
+ });
1159
+ }).catch(a);
1160
+ }
1161
+ _markDefs() {
1162
+ const e = this.json.nodes || [], a = this.json.skins || [], A = this.json.meshes || [];
1163
+ for (let t = 0, i = a.length; t < i; t++) {
1164
+ const s = a[t].joints;
1165
+ for (let r = 0, b = s.length; r < b; r++) e[s[r]].isBone = !0;
1166
+ }
1167
+ for (let t = 0, i = e.length; t < i; t++) {
1168
+ const s = e[t];
1169
+ s.mesh !== void 0 && (this._addNodeRef(this.meshCache, s.mesh), s.skin !== void 0 && (A[s.mesh].isSkinnedMesh = !0)), s.camera !== void 0 && this._addNodeRef(this.cameraCache, s.camera);
1170
+ }
1171
+ }
1172
+ _addNodeRef(e, a) {
1173
+ a !== void 0 && (e.refs[a] === void 0 && (e.refs[a] = e.uses[a] = 0), e.refs[a]++);
1174
+ }
1175
+ _getNodeRef(e, a, A) {
1176
+ if (e.refs[a] <= 1) return A;
1177
+ const t = A.clone(), i = (s, r) => {
1178
+ const b = this.associations.get(s);
1179
+ b != null && this.associations.set(r, b);
1180
+ for (const [o, d] of s.children.entries()) i(d, r.children[o]);
1181
+ };
1182
+ return i(A, t), t.name += "_instance_" + e.uses[a]++, t;
1183
+ }
1184
+ _invokeOne(e) {
1185
+ const a = Object.values(this.plugins);
1186
+ a.push(this);
1187
+ for (let A = 0; A < a.length; A++) {
1188
+ const t = e(a[A]);
1189
+ if (t) return t;
1190
+ }
1191
+ return null;
1192
+ }
1193
+ _invokeAll(e) {
1194
+ const a = Object.values(this.plugins);
1195
+ a.unshift(this);
1196
+ const A = [];
1197
+ for (let t = 0; t < a.length; t++) {
1198
+ const i = e(a[t]);
1199
+ i && A.push(i);
1200
+ }
1201
+ return A;
1202
+ }
1203
+ getDependency(e, a) {
1204
+ const A = e + ":" + a;
1205
+ let t = this.cache.get(A);
1206
+ if (!t) {
1207
+ switch (e) {
1208
+ case "scene":
1209
+ t = this.loadScene(a);
1210
+ break;
1211
+ case "node":
1212
+ t = this._invokeOne(function(i) {
1213
+ return i.loadNode && i.loadNode(a);
1214
+ });
1215
+ break;
1216
+ case "mesh":
1217
+ t = this._invokeOne(function(i) {
1218
+ return i.loadMesh && i.loadMesh(a);
1219
+ });
1220
+ break;
1221
+ case "accessor":
1222
+ t = this.loadAccessor(a);
1223
+ break;
1224
+ case "bufferView":
1225
+ t = this._invokeOne(function(i) {
1226
+ return i.loadBufferView && i.loadBufferView(a);
1227
+ });
1228
+ break;
1229
+ case "buffer":
1230
+ t = this.loadBuffer(a);
1231
+ break;
1232
+ case "material":
1233
+ t = this._invokeOne(function(i) {
1234
+ return i.loadMaterial && i.loadMaterial(a);
1235
+ });
1236
+ break;
1237
+ case "texture":
1238
+ t = this._invokeOne(function(i) {
1239
+ return i.loadTexture && i.loadTexture(a);
1240
+ });
1241
+ break;
1242
+ case "skin":
1243
+ t = this.loadSkin(a);
1244
+ break;
1245
+ case "animation":
1246
+ t = this._invokeOne(function(i) {
1247
+ return i.loadAnimation && i.loadAnimation(a);
1248
+ });
1249
+ break;
1250
+ case "camera":
1251
+ t = this.loadCamera(a);
1252
+ break;
1253
+ default:
1254
+ if (t = this._invokeOne(function(i) {
1255
+ return i != this && i.getDependency && i.getDependency(e, a);
1256
+ }), !t) throw new Error("Unknown type: " + e);
1257
+ }
1258
+ this.cache.add(A, t);
1259
+ }
1260
+ return t;
1261
+ }
1262
+ getDependencies(e) {
1263
+ let a = this.cache.get(e);
1264
+ if (!a) {
1265
+ const A = this, t = this.json[e + (e === "mesh" ? "es" : "s")] || [];
1266
+ a = Promise.all(t.map(function(i, s) {
1267
+ return A.getDependency(e, s);
1268
+ })), this.cache.add(e, a);
1269
+ }
1270
+ return a;
1271
+ }
1272
+ loadBuffer(e) {
1273
+ const a = this.json.buffers[e], A = this.fileLoader;
1274
+ if (a.type && a.type !== "arraybuffer") throw new Error("THREE.GLTFLoader: " + a.type + " buffer type is not supported.");
1275
+ if (a.uri === void 0 && e === 0) return Promise.resolve(this.extensions[j.KHR_BINARY_GLTF].body);
1276
+ const t = this.options;
1277
+ return new Promise(function(i, s) {
1278
+ A.load(De.resolveURL(a.uri, t.path), i, void 0, function() {
1279
+ s(new Error('THREE.GLTFLoader: Failed to load buffer "' + a.uri + '".'));
1280
+ });
1281
+ });
1282
+ }
1283
+ loadBufferView(e) {
1284
+ const a = this.json.bufferViews[e];
1285
+ return this.getDependency("buffer", a.buffer).then(function(A) {
1286
+ const t = a.byteLength || 0, i = a.byteOffset || 0;
1287
+ return A.slice(i, i + t);
1288
+ });
1289
+ }
1290
+ loadAccessor(e) {
1291
+ const a = this, A = this.json, t = this.json.accessors[e];
1292
+ if (t.bufferView === void 0 && t.sparse === void 0) {
1293
+ const s = Ne[t.type], r = ue[t.componentType], b = t.normalized === !0, o = new r(t.count * s);
1294
+ return Promise.resolve(new fe(o, s, b));
1295
+ }
1296
+ const i = [];
1297
+ return t.bufferView !== void 0 ? i.push(this.getDependency("bufferView", t.bufferView)) : i.push(null), t.sparse !== void 0 && (i.push(this.getDependency("bufferView", t.sparse.indices.bufferView)), i.push(this.getDependency("bufferView", t.sparse.values.bufferView))), Promise.all(i).then(function(s) {
1298
+ const r = s[0], b = Ne[t.type], o = ue[t.componentType], d = o.BYTES_PER_ELEMENT, c = d * b, g = t.byteOffset || 0, l = t.bufferView !== void 0 ? A.bufferViews[t.bufferView].byteStride : void 0, h = t.normalized === !0;
1299
+ let f, I;
1300
+ if (l && l !== c) {
1301
+ const B = Math.floor(g / l), u = "InterleavedBuffer:" + t.bufferView + ":" + t.componentType + ":" + B + ":" + t.count;
1302
+ let E = a.cache.get(u);
1303
+ E || (f = new o(r, B * l, t.count * l / d), E = new SA(f, l / d), a.cache.add(u, E)), I = new TA(E, b, g % l / d, h);
1304
+ } else f = r === null ? new o(t.count * b) : new o(r, g, t.count * b), I = new fe(f, b, h);
1305
+ if (t.sparse !== void 0) {
1306
+ const B = Ne.SCALAR, u = ue[t.sparse.indices.componentType], E = t.sparse.indices.byteOffset || 0, C = t.sparse.values.byteOffset || 0, D = new u(s[1], E, t.sparse.count * B), y = new o(s[2], C, t.sparse.count * b);
1307
+ r !== null && (I = new fe(I.array.slice(), I.itemSize, I.normalized)), I.normalized = !1;
1308
+ for (let w = 0, p = D.length; w < p; w++) {
1309
+ const Q = D[w];
1310
+ if (I.setX(Q, y[w * b]), b >= 2 && I.setY(Q, y[w * b + 1]), b >= 3 && I.setZ(Q, y[w * b + 2]), b >= 4 && I.setW(Q, y[w * b + 3]), b >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
1311
+ }
1312
+ I.normalized = h;
1313
+ }
1314
+ return I;
1315
+ });
1316
+ }
1317
+ loadTexture(e) {
1318
+ const a = this.json, A = this.options, t = a.textures[e].source, i = a.images[t];
1319
+ let s = this.textureLoader;
1320
+ if (i.uri) {
1321
+ const r = A.manager.getHandler(i.uri);
1322
+ r !== null && (s = r);
1323
+ }
1324
+ return this.loadTextureImage(e, t, s);
1325
+ }
1326
+ loadTextureImage(e, a, A) {
1327
+ const t = this, i = this.json, s = i.textures[e], r = i.images[a], b = (r.uri || r.bufferView) + ":" + s.sampler;
1328
+ if (this.textureCache[b]) return this.textureCache[b];
1329
+ const o = this.loadImageSource(a, A).then(function(d) {
1330
+ d.flipY = !1, d.name = s.name || r.name || "", d.name === "" && typeof r.uri == "string" && r.uri.startsWith("data:image/") === !1 && (d.name = r.uri);
1331
+ const c = (i.samplers || {})[s.sampler] || {};
1332
+ return d.magFilter = ka[c.magFilter] || Me, d.minFilter = ka[c.minFilter] || ga, d.wrapS = xa[c.wrapS] || sa, d.wrapT = xa[c.wrapT] || sa, d.generateMipmaps = !d.isCompressedTexture && d.minFilter !== za && d.minFilter !== Me, t.associations.set(d, { textures: e }), d;
1333
+ }).catch(function() {
1334
+ return null;
1335
+ });
1336
+ return this.textureCache[b] = o, o;
1337
+ }
1338
+ loadImageSource(e, a) {
1339
+ const A = this, t = this.json, i = this.options;
1340
+ if (this.sourceCache[e] !== void 0) return this.sourceCache[e].then((c) => c.clone());
1341
+ const s = t.images[e], r = self.URL || self.webkitURL;
1342
+ let b = s.uri || "", o = !1;
1343
+ if (s.bufferView !== void 0) b = A.getDependency("bufferView", s.bufferView).then(function(c) {
1344
+ o = !0;
1345
+ const g = new Blob([c], { type: s.mimeType });
1346
+ return b = r.createObjectURL(g), b;
1347
+ });
1348
+ else if (s.uri === void 0) throw new Error("THREE.GLTFLoader: Image " + e + " is missing URI and bufferView");
1349
+ const d = Promise.resolve(b).then(function(c) {
1350
+ return new Promise(function(g, l) {
1351
+ let h = g;
1352
+ a.isImageBitmapLoader === !0 && (h = function(f) {
1353
+ const I = new Ba(f);
1354
+ I.needsUpdate = !0, g(I);
1355
+ }), a.load(De.resolveURL(c, i.path), h, void 0, l);
1356
+ });
1357
+ }).then(function(c) {
1358
+ var g;
1359
+ return o === !0 && r.revokeObjectURL(b), Z(c, s), c.userData.mimeType = s.mimeType || ((g = s.uri).search(/\.jpe?g($|\?)/i) > 0 || g.search(/^data\:image\/jpeg/) === 0 ? "image/jpeg" : g.search(/\.webp($|\?)/i) > 0 || g.search(/^data\:image\/webp/) === 0 ? "image/webp" : g.search(/\.ktx2($|\?)/i) > 0 || g.search(/^data\:image\/ktx2/) === 0 ? "image/ktx2" : "image/png"), c;
1360
+ }).catch(function(c) {
1361
+ throw console.error("THREE.GLTFLoader: Couldn't load texture", b), c;
1362
+ });
1363
+ return this.sourceCache[e] = d, d;
1364
+ }
1365
+ assignTexture(e, a, A, t) {
1366
+ const i = this;
1367
+ return this.getDependency("texture", A.index).then(function(s) {
1368
+ if (!s) return null;
1369
+ if (A.texCoord !== void 0 && A.texCoord > 0 && ((s = s.clone()).channel = A.texCoord), i.extensions[j.KHR_TEXTURE_TRANSFORM]) {
1370
+ const r = A.extensions !== void 0 ? A.extensions[j.KHR_TEXTURE_TRANSFORM] : void 0;
1371
+ if (r) {
1372
+ const b = i.associations.get(s);
1373
+ s = i.extensions[j.KHR_TEXTURE_TRANSFORM].extendTexture(s, r), i.associations.set(s, b);
1374
+ }
1375
+ }
1376
+ return t !== void 0 && (s.colorSpace = t), e[a] = s, s;
1377
+ });
1378
+ }
1379
+ assignFinalMaterial(e) {
1380
+ const a = e.geometry;
1381
+ let A = e.material;
1382
+ const t = a.attributes.tangent === void 0, i = a.attributes.color !== void 0, s = a.attributes.normal === void 0;
1383
+ if (e.isPoints) {
1384
+ const r = "PointsMaterial:" + A.uuid;
1385
+ let b = this.cache.get(r);
1386
+ b || (b = new LA(), ve.prototype.copy.call(b, A), b.color.copy(A.color), b.map = A.map, b.sizeAttenuation = !1, this.cache.add(r, b)), A = b;
1387
+ } else if (e.isLine) {
1388
+ const r = "LineBasicMaterial:" + A.uuid;
1389
+ let b = this.cache.get(r);
1390
+ b || (b = new GA(), ve.prototype.copy.call(b, A), b.color.copy(A.color), b.map = A.map, this.cache.add(r, b)), A = b;
1391
+ }
1392
+ if (t || i || s) {
1393
+ let r = "ClonedMaterial:" + A.uuid + ":";
1394
+ t && (r += "derivative-tangents:"), i && (r += "vertex-colors:"), s && (r += "flat-shading:");
1395
+ let b = this.cache.get(r);
1396
+ b || (b = A.clone(), i && (b.vertexColors = !0), s && (b.flatShading = !0), t && (b.normalScale && (b.normalScale.y *= -1), b.clearcoatNormalScale && (b.clearcoatNormalScale.y *= -1)), this.cache.add(r, b), this.associations.set(b, this.associations.get(A))), A = b;
1397
+ }
1398
+ e.material = A;
1399
+ }
1400
+ getMaterialType() {
1401
+ return ua;
1402
+ }
1403
+ loadMaterial(e) {
1404
+ const a = this, A = this.json, t = this.extensions, i = A.materials[e];
1405
+ let s;
1406
+ const r = {}, b = [];
1407
+ if ((i.extensions || {})[j.KHR_MATERIALS_UNLIT]) {
1408
+ const d = t[j.KHR_MATERIALS_UNLIT];
1409
+ s = d.getMaterialType(), b.push(d.extendParams(r, i, a));
1410
+ } else {
1411
+ const d = i.pbrMetallicRoughness || {};
1412
+ if (r.color = new se(1, 1, 1), r.opacity = 1, Array.isArray(d.baseColorFactor)) {
1413
+ const c = d.baseColorFactor;
1414
+ r.color.setRGB(c[0], c[1], c[2], q), r.opacity = c[3];
1415
+ }
1416
+ d.baseColorTexture !== void 0 && b.push(a.assignTexture(r, "map", d.baseColorTexture, $)), r.metalness = d.metallicFactor !== void 0 ? d.metallicFactor : 1, r.roughness = d.roughnessFactor !== void 0 ? d.roughnessFactor : 1, d.metallicRoughnessTexture !== void 0 && (b.push(a.assignTexture(r, "metalnessMap", d.metallicRoughnessTexture)), b.push(a.assignTexture(r, "roughnessMap", d.metallicRoughnessTexture))), s = this._invokeOne(function(c) {
1417
+ return c.getMaterialType && c.getMaterialType(e);
1418
+ }), b.push(Promise.all(this._invokeAll(function(c) {
1419
+ return c.extendMaterialParams && c.extendMaterialParams(e, r);
1420
+ })));
1421
+ }
1422
+ i.doubleSided === !0 && (r.side = vA);
1423
+ const o = i.alphaMode || Xt;
1424
+ if (o === $t ? (r.transparent = !0, r.depthWrite = !1) : (r.transparent = !1, o === Zt && (r.alphaTest = i.alphaCutoff !== void 0 ? i.alphaCutoff : 0.5)), i.normalTexture !== void 0 && s !== ye && (b.push(a.assignTexture(r, "normalMap", i.normalTexture)), r.normalScale = new Oa(1, 1), i.normalTexture.scale !== void 0)) {
1425
+ const d = i.normalTexture.scale;
1426
+ r.normalScale.set(d, d);
1427
+ }
1428
+ if (i.occlusionTexture !== void 0 && s !== ye && (b.push(a.assignTexture(r, "aoMap", i.occlusionTexture)), i.occlusionTexture.strength !== void 0 && (r.aoMapIntensity = i.occlusionTexture.strength)), i.emissiveFactor !== void 0 && s !== ye) {
1429
+ const d = i.emissiveFactor;
1430
+ r.emissive = new se().setRGB(d[0], d[1], d[2], q);
1431
+ }
1432
+ return i.emissiveTexture !== void 0 && s !== ye && b.push(a.assignTexture(r, "emissiveMap", i.emissiveTexture, $)), Promise.all(b).then(function() {
1433
+ const d = new s(r);
1434
+ return i.name && (d.name = i.name), Z(d, i), a.associations.set(d, { materials: e }), i.extensions && re(t, d, i), d;
1435
+ });
1436
+ }
1437
+ createUniqueName(e) {
1438
+ const a = UA.sanitizeNodeName(e || "");
1439
+ return a in this.nodeNamesUsed ? a + "_" + ++this.nodeNamesUsed[a] : (this.nodeNamesUsed[a] = 0, a);
1440
+ }
1441
+ loadGeometries(e) {
1442
+ const a = this, A = this.extensions, t = this.primitiveCache;
1443
+ function i(r) {
1444
+ return A[j.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(r, a).then(function(b) {
1445
+ return Da(b, r, a);
1446
+ });
1447
+ }
1448
+ const s = [];
1449
+ for (let r = 0, b = e.length; r < b; r++) {
1450
+ const o = e[r], d = ai(o), c = t[d];
1451
+ if (c) s.push(c.promise);
1452
+ else {
1453
+ let g;
1454
+ g = o.extensions && o.extensions[j.KHR_DRACO_MESH_COMPRESSION] ? i(o) : Da(new ba(), o, a), t[d] = { primitive: o, promise: g }, s.push(g);
1455
+ }
1456
+ }
1457
+ return Promise.all(s);
1458
+ }
1459
+ loadMesh(e) {
1460
+ const a = this, A = this.json, t = this.extensions, i = A.meshes[e], s = i.primitives, r = [];
1461
+ for (let o = 0, d = s.length; o < d; o++) {
1462
+ const c = s[o].material === void 0 ? ((b = this.cache).DefaultMaterial === void 0 && (b.DefaultMaterial = new ua({ color: 16777215, emissive: 0, metalness: 1, roughness: 1, transparent: !1, depthTest: !0, side: tt })), b.DefaultMaterial) : this.getDependency("material", s[o].material);
1463
+ r.push(c);
1464
+ }
1465
+ var b;
1466
+ return r.push(a.loadGeometries(s)), Promise.all(r).then(function(o) {
1467
+ const d = o.slice(0, o.length - 1), c = o[o.length - 1], g = [];
1468
+ for (let h = 0, f = c.length; h < f; h++) {
1469
+ const I = c[h], B = s[h];
1470
+ let u;
1471
+ const E = d[h];
1472
+ if (B.mode === N.TRIANGLES || B.mode === N.TRIANGLE_STRIP || B.mode === N.TRIANGLE_FAN || B.mode === void 0) u = i.isSkinnedMesh === !0 ? new NA(I, E) : new _A(I, E), u.isSkinnedMesh === !0 && u.normalizeSkinWeights(), B.mode === N.TRIANGLE_STRIP ? u.geometry = ya(u.geometry, Ja) : B.mode === N.TRIANGLE_FAN && (u.geometry = ya(u.geometry, ia));
1473
+ else if (B.mode === N.LINES) u = new PA(I, E);
1474
+ else if (B.mode === N.LINE_STRIP) u = new HA(I, E);
1475
+ else if (B.mode === N.LINE_LOOP) u = new qA(I, E);
1476
+ else {
1477
+ if (B.mode !== N.POINTS) throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + B.mode);
1478
+ u = new JA(I, E);
1479
+ }
1480
+ Object.keys(u.geometry.morphAttributes).length > 0 && ei(u, i), u.name = a.createUniqueName(i.name || "mesh_" + e), Z(u, i), B.extensions && re(t, u, B), a.assignFinalMaterial(u), g.push(u);
1481
+ }
1482
+ for (let h = 0, f = g.length; h < f; h++) a.associations.set(g[h], { meshes: e, primitives: h });
1483
+ if (g.length === 1) return i.extensions && re(t, g[0], i), g[0];
1484
+ const l = new Ue();
1485
+ i.extensions && re(t, l, i), a.associations.set(l, { meshes: e });
1486
+ for (let h = 0, f = g.length; h < f; h++) l.add(g[h]);
1487
+ return l;
1488
+ });
1489
+ }
1490
+ loadCamera(e) {
1491
+ let a;
1492
+ const A = this.json.cameras[e], t = A[A.type];
1493
+ if (t) return A.type === "perspective" ? a = new OA(KA.radToDeg(t.yfov), t.aspectRatio || 1, t.znear || 1, t.zfar || 2e6) : A.type === "orthographic" && (a = new VA(-t.xmag, t.xmag, t.ymag, -t.ymag, t.znear, t.zfar)), A.name && (a.name = this.createUniqueName(A.name)), Z(a, A), Promise.resolve(a);
1494
+ console.warn("THREE.GLTFLoader: Missing camera parameters.");
1495
+ }
1496
+ loadSkin(e) {
1497
+ const a = this.json.skins[e], A = [];
1498
+ for (let t = 0, i = a.joints.length; t < i; t++) A.push(this._loadNodeShallow(a.joints[t]));
1499
+ return a.inverseBindMatrices !== void 0 ? A.push(this.getDependency("accessor", a.inverseBindMatrices)) : A.push(null), Promise.all(A).then(function(t) {
1500
+ const i = t.pop(), s = t, r = [], b = [];
1501
+ for (let o = 0, d = s.length; o < d; o++) {
1502
+ const c = s[o];
1503
+ if (c) {
1504
+ r.push(c);
1505
+ const g = new Le();
1506
+ i !== null && g.fromArray(i.array, 16 * o), b.push(g);
1507
+ } else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', a.joints[o]);
1508
+ }
1509
+ return new zA(r, b);
1510
+ });
1511
+ }
1512
+ loadAnimation(e) {
1513
+ const a = this.json, A = this, t = a.animations[e], i = t.name ? t.name : "animation_" + e, s = [], r = [], b = [], o = [], d = [];
1514
+ for (let c = 0, g = t.channels.length; c < g; c++) {
1515
+ const l = t.channels[c], h = t.samplers[l.sampler], f = l.target, I = f.node, B = t.parameters !== void 0 ? t.parameters[h.input] : h.input, u = t.parameters !== void 0 ? t.parameters[h.output] : h.output;
1516
+ f.node !== void 0 && (s.push(this.getDependency("node", I)), r.push(this.getDependency("accessor", B)), b.push(this.getDependency("accessor", u)), o.push(h), d.push(f));
1517
+ }
1518
+ return Promise.all([Promise.all(s), Promise.all(r), Promise.all(b), Promise.all(o), Promise.all(d)]).then(function(c) {
1519
+ const g = c[0], l = c[1], h = c[2], f = c[3], I = c[4], B = [];
1520
+ for (let u = 0, E = g.length; u < E; u++) {
1521
+ const C = g[u], D = l[u], y = h[u], w = f[u], p = I[u];
1522
+ if (C === void 0) continue;
1523
+ C.updateMatrix && C.updateMatrix();
1524
+ const Q = A._createAnimationTracks(C, D, y, w, p);
1525
+ if (Q) for (let k = 0; k < Q.length; k++) B.push(Q[k]);
1526
+ }
1527
+ return new YA(i, void 0, B);
1528
+ });
1529
+ }
1530
+ createNodeMesh(e) {
1531
+ const a = this.json, A = this, t = a.nodes[e];
1532
+ return t.mesh === void 0 ? null : A.getDependency("mesh", t.mesh).then(function(i) {
1533
+ const s = A._getNodeRef(A.meshCache, t.mesh, i);
1534
+ return t.weights !== void 0 && s.traverse(function(r) {
1535
+ if (r.isMesh) for (let b = 0, o = t.weights.length; b < o; b++) r.morphTargetInfluences[b] = t.weights[b];
1536
+ }), s;
1537
+ });
1538
+ }
1539
+ loadNode(e) {
1540
+ const a = this, A = this.json.nodes[e], t = a._loadNodeShallow(e), i = [], s = A.children || [];
1541
+ for (let b = 0, o = s.length; b < o; b++) i.push(a.getDependency("node", s[b]));
1542
+ const r = A.skin === void 0 ? Promise.resolve(null) : a.getDependency("skin", A.skin);
1543
+ return Promise.all([t, Promise.all(i), r]).then(function(b) {
1544
+ const o = b[0], d = b[1], c = b[2];
1545
+ c !== null && o.traverse(function(g) {
1546
+ g.isSkinnedMesh && g.bind(c, Ai);
1547
+ });
1548
+ for (let g = 0, l = d.length; g < l; g++) o.add(d[g]);
1549
+ return o;
1550
+ });
1551
+ }
1552
+ _loadNodeShallow(e) {
1553
+ const a = this.json, A = this.extensions, t = this;
1554
+ if (this.nodeCache[e] !== void 0) return this.nodeCache[e];
1555
+ const i = a.nodes[e], s = i.name ? t.createUniqueName(i.name) : "", r = [], b = t._invokeOne(function(o) {
1556
+ return o.createNodeMesh && o.createNodeMesh(e);
1557
+ });
1558
+ return b && r.push(b), i.camera !== void 0 && r.push(t.getDependency("camera", i.camera).then(function(o) {
1559
+ return t._getNodeRef(t.cameraCache, i.camera, o);
1560
+ })), t._invokeAll(function(o) {
1561
+ return o.createNodeAttachment && o.createNodeAttachment(e);
1562
+ }).forEach(function(o) {
1563
+ r.push(o);
1564
+ }), this.nodeCache[e] = Promise.all(r).then(function(o) {
1565
+ let d;
1566
+ if (d = i.isBone === !0 ? new WA() : o.length > 1 ? new Ue() : o.length === 1 ? o[0] : new Va(), d !== o[0]) for (let c = 0, g = o.length; c < g; c++) d.add(o[c]);
1567
+ if (i.name && (d.userData.name = i.name, d.name = s), Z(d, i), i.extensions && re(A, d, i), i.matrix !== void 0) {
1568
+ const c = new Le();
1569
+ c.fromArray(i.matrix), d.applyMatrix4(c);
1570
+ } else i.translation !== void 0 && d.position.fromArray(i.translation), i.rotation !== void 0 && d.quaternion.fromArray(i.rotation), i.scale !== void 0 && d.scale.fromArray(i.scale);
1571
+ return t.associations.has(d) || t.associations.set(d, {}), t.associations.get(d).nodes = e, d;
1572
+ }), this.nodeCache[e];
1573
+ }
1574
+ loadScene(e) {
1575
+ const a = this.extensions, A = this.json.scenes[e], t = this, i = new Ue();
1576
+ A.name && (i.name = t.createUniqueName(A.name)), Z(i, A), A.extensions && re(a, i, A);
1577
+ const s = A.nodes || [], r = [];
1578
+ for (let b = 0, o = s.length; b < o; b++) r.push(t.getDependency("node", s[b]));
1579
+ return Promise.all(r).then(function(b) {
1580
+ for (let o = 0, d = b.length; o < d; o++) i.add(b[o]);
1581
+ return t.associations = ((o) => {
1582
+ const d = /* @__PURE__ */ new Map();
1583
+ for (const [c, g] of t.associations) (c instanceof ve || c instanceof Ba) && d.set(c, g);
1584
+ return o.traverse((c) => {
1585
+ const g = t.associations.get(c);
1586
+ g != null && d.set(c, g);
1587
+ }), d;
1588
+ })(i), i;
1589
+ });
1590
+ }
1591
+ _createAnimationTracks(e, a, A, t, i) {
1592
+ const s = [], r = e.name ? e.name : e.uuid, b = [];
1593
+ let o;
1594
+ switch (ee[i.path] === ee.weights ? e.traverse(function(g) {
1595
+ g.morphTargetInfluences && b.push(g.name ? g.name : g.uuid);
1596
+ }) : b.push(r), ee[i.path]) {
1597
+ case ee.weights:
1598
+ o = Ea;
1599
+ break;
1600
+ case ee.rotation:
1601
+ o = pa;
1602
+ break;
1603
+ case ee.position:
1604
+ case ee.scale:
1605
+ o = Ca;
1606
+ break;
1607
+ default:
1608
+ A.itemSize === 1 ? o = Ea : o = Ca;
1609
+ }
1610
+ const d = t.interpolation !== void 0 ? Wt[t.interpolation] : Ya, c = this._getArrayFromAccessor(A);
1611
+ for (let g = 0, l = b.length; g < l; g++) {
1612
+ const h = new o(b[g] + "." + ee[i.path], a.array, c, d);
1613
+ t.interpolation === "CUBICSPLINE" && this._createCubicSplineTrackInterpolant(h), s.push(h);
1614
+ }
1615
+ return s;
1616
+ }
1617
+ _getArrayFromAccessor(e) {
1618
+ let a = e.array;
1619
+ if (e.normalized) {
1620
+ const A = oa(a.constructor), t = new Float32Array(a.length);
1621
+ for (let i = 0, s = a.length; i < s; i++) t[i] = a[i] * A;
1622
+ a = t;
1623
+ }
1624
+ return a;
1625
+ }
1626
+ _createCubicSplineTrackInterpolant(e) {
1627
+ e.createInterpolant = function(a) {
1628
+ return new (this instanceof pa ? Yt : AA)(this.times, this.values, this.getValueSize() / 3, a);
1629
+ }, e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0;
1630
+ }
1631
+ }
1632
+ function Da(n, e, a) {
1633
+ const A = e.attributes, t = [];
1634
+ function i(s, r) {
1635
+ return a.getDependency("accessor", s).then(function(b) {
1636
+ n.setAttribute(r, b);
1637
+ });
1638
+ }
1639
+ for (const s in A) {
1640
+ const r = na[s] || s.toLowerCase();
1641
+ r in n.attributes || t.push(i(A[s], r));
1642
+ }
1643
+ if (e.indices !== void 0 && !n.index) {
1644
+ const s = a.getDependency("accessor", e.indices).then(function(r) {
1645
+ n.setIndex(r);
1646
+ });
1647
+ t.push(s);
1648
+ }
1649
+ return ra.workingColorSpace !== q && "COLOR_0" in A && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ra.workingColorSpace}" not supported.`), Z(n, e), function(s, r, b) {
1650
+ const o = r.attributes, d = new Ha();
1651
+ if (o.POSITION === void 0) return;
1652
+ {
1653
+ const l = b.json.accessors[o.POSITION], h = l.min, f = l.max;
1654
+ if (h === void 0 || f === void 0) return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
1655
+ if (d.set(new H(h[0], h[1], h[2]), new H(f[0], f[1], f[2])), l.normalized) {
1656
+ const I = oa(ue[l.componentType]);
1657
+ d.min.multiplyScalar(I), d.max.multiplyScalar(I);
1658
+ }
1659
+ }
1660
+ const c = r.targets;
1661
+ if (c !== void 0) {
1662
+ const l = new H(), h = new H();
1663
+ for (let f = 0, I = c.length; f < I; f++) {
1664
+ const B = c[f];
1665
+ if (B.POSITION !== void 0) {
1666
+ const u = b.json.accessors[B.POSITION], E = u.min, C = u.max;
1667
+ if (E !== void 0 && C !== void 0) {
1668
+ if (h.setX(Math.max(Math.abs(E[0]), Math.abs(C[0]))), h.setY(Math.max(Math.abs(E[1]), Math.abs(C[1]))), h.setZ(Math.max(Math.abs(E[2]), Math.abs(C[2]))), u.normalized) {
1669
+ const D = oa(ue[u.componentType]);
1670
+ h.multiplyScalar(D);
1671
+ }
1672
+ l.max(h);
1673
+ } else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
1674
+ }
1675
+ }
1676
+ d.expandByVector(l);
1677
+ }
1678
+ s.boundingBox = d;
1679
+ const g = new qa();
1680
+ d.getCenter(g.center), g.radius = d.min.distanceTo(d.max) / 2, s.boundingSphere = g;
1681
+ }(n, e, a), Promise.all(t).then(function() {
1682
+ return e.targets !== void 0 ? function(s, r, b) {
1683
+ let o = !1, d = !1, c = !1;
1684
+ for (let f = 0, I = r.length; f < I; f++) {
1685
+ const B = r[f];
1686
+ if (B.POSITION !== void 0 && (o = !0), B.NORMAL !== void 0 && (d = !0), B.COLOR_0 !== void 0 && (c = !0), o && d && c) break;
1687
+ }
1688
+ if (!o && !d && !c) return Promise.resolve(s);
1689
+ const g = [], l = [], h = [];
1690
+ for (let f = 0, I = r.length; f < I; f++) {
1691
+ const B = r[f];
1692
+ if (o) {
1693
+ const u = B.POSITION !== void 0 ? b.getDependency("accessor", B.POSITION) : s.attributes.position;
1694
+ g.push(u);
1695
+ }
1696
+ if (d) {
1697
+ const u = B.NORMAL !== void 0 ? b.getDependency("accessor", B.NORMAL) : s.attributes.normal;
1698
+ l.push(u);
1699
+ }
1700
+ if (c) {
1701
+ const u = B.COLOR_0 !== void 0 ? b.getDependency("accessor", B.COLOR_0) : s.attributes.color;
1702
+ h.push(u);
1703
+ }
1704
+ }
1705
+ return Promise.all([Promise.all(g), Promise.all(l), Promise.all(h)]).then(function(f) {
1706
+ const I = f[0], B = f[1], u = f[2];
1707
+ return o && (s.morphAttributes.position = I), d && (s.morphAttributes.normal = B), c && (s.morphAttributes.color = u), s.morphTargetsRelative = !0, s;
1708
+ });
1709
+ }(n, e.targets, a) : n;
1710
+ });
1711
+ }
1712
+ const Pe = /* @__PURE__ */ new WeakMap();
1713
+ class tA extends da {
1714
+ constructor(e) {
1715
+ super(e), this.decoderPath = "", this.decoderConfig = {}, this.decoderBinary = null, this.decoderPending = null, this.workerLimit = 4, this.workerPool = [], this.workerNextTaskID = 1, this.workerSourceURL = "", this.defaultAttributeIDs = { position: "POSITION", normal: "NORMAL", color: "COLOR", uv: "TEX_COORD" }, this.defaultAttributeTypes = { position: "Float32Array", normal: "Float32Array", color: "Float32Array", uv: "Float32Array" };
1716
+ }
1717
+ setDecoderPath(e) {
1718
+ return this.decoderPath = e, this;
1719
+ }
1720
+ setDecoderConfig(e) {
1721
+ return this.decoderConfig = e, this;
1722
+ }
1723
+ setWorkerLimit(e) {
1724
+ return this.workerLimit = e, this;
1725
+ }
1726
+ load(e, a, A, t) {
1727
+ const i = new ce(this.manager);
1728
+ i.setPath(this.path), i.setResponseType("arraybuffer"), i.setRequestHeader(this.requestHeader), i.setWithCredentials(this.withCredentials), i.load(e, (s) => {
1729
+ this.parse(s, a, t);
1730
+ }, A, t);
1731
+ }
1732
+ parse(e, a, A = () => {
1733
+ }) {
1734
+ this.decodeDracoFile(e, a, null, null, $, A).catch(A);
1735
+ }
1736
+ decodeDracoFile(e, a, A, t, i = q, s = () => {
1737
+ }) {
1738
+ const r = { attributeIDs: A || this.defaultAttributeIDs, attributeTypes: t || this.defaultAttributeTypes, useUniqueIDs: !!A, vertexColorSpace: i };
1739
+ return this.decodeGeometry(e, r).then(a).catch(s);
1740
+ }
1741
+ decodeGeometry(e, a) {
1742
+ const A = JSON.stringify(a);
1743
+ if (Pe.has(e)) {
1744
+ const b = Pe.get(e);
1745
+ if (b.key === A) return b.promise;
1746
+ if (e.byteLength === 0) throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.");
1747
+ }
1748
+ let t;
1749
+ const i = this.workerNextTaskID++, s = e.byteLength, r = this._getWorker(i, s).then((b) => (t = b, new Promise((o, d) => {
1750
+ t._callbacks[i] = { resolve: o, reject: d }, t.postMessage({ type: "decode", id: i, taskConfig: a, buffer: e }, [e]);
1751
+ }))).then((b) => this._createGeometry(b.geometry));
1752
+ return r.catch(() => !0).then(() => {
1753
+ t && i && this._releaseTask(t, i);
1754
+ }), Pe.set(e, { key: A, promise: r }), r;
1755
+ }
1756
+ _createGeometry(e) {
1757
+ const a = new ba();
1758
+ e.index && a.setIndex(new fe(e.index.array, 1));
1759
+ for (let A = 0; A < e.attributes.length; A++) {
1760
+ const t = e.attributes[A], i = t.name, s = t.array, r = t.itemSize, b = new fe(s, r);
1761
+ i === "color" && (this._assignVertexColorSpace(b, t.vertexColorSpace), b.normalized = !(s instanceof Float32Array)), a.setAttribute(i, b);
1762
+ }
1763
+ return a;
1764
+ }
1765
+ _assignVertexColorSpace(e, a) {
1766
+ if (a !== $) return;
1767
+ const A = new se();
1768
+ for (let t = 0, i = e.count; t < i; t++) A.fromBufferAttribute(e, t), ra.toWorkingColorSpace(A, $), e.setXYZ(t, A.r, A.g, A.b);
1769
+ }
1770
+ _loadLibrary(e, a) {
1771
+ const A = new ce(this.manager);
1772
+ return A.setPath(this.decoderPath), A.setResponseType(a), A.setWithCredentials(this.withCredentials), new Promise((t, i) => {
1773
+ A.load(e, t, void 0, i);
1774
+ });
1775
+ }
1776
+ preload() {
1777
+ return this._initDecoder(), this;
1778
+ }
1779
+ _initDecoder() {
1780
+ if (this.decoderPending) return this.decoderPending;
1781
+ const e = typeof WebAssembly != "object" || this.decoderConfig.type === "js", a = [];
1782
+ return e ? a.push(this._loadLibrary("draco_decoder.js", "text")) : (a.push(this._loadLibrary("draco_wasm_wrapper.js", "text")), a.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer"))), this.decoderPending = Promise.all(a).then((A) => {
1783
+ const t = A[0];
1784
+ e || (this.decoderConfig.wasmBinary = A[1]);
1785
+ const i = ii.toString(), s = ["/* draco decoder */", t, "", "/* worker */", i.substring(i.indexOf("{") + 1, i.lastIndexOf("}"))].join(`
1786
+ `);
1787
+ this.workerSourceURL = URL.createObjectURL(new Blob([s]));
1788
+ }), this.decoderPending;
1789
+ }
1790
+ _getWorker(e, a) {
1791
+ return this._initDecoder().then(() => {
1792
+ if (this.workerPool.length < this.workerLimit) {
1793
+ const t = new Worker(this.workerSourceURL);
1794
+ t._callbacks = {}, t._taskCosts = {}, t._taskLoad = 0, t.postMessage({ type: "init", decoderConfig: this.decoderConfig }), t.onmessage = function(i) {
1795
+ const s = i.data;
1796
+ switch (s.type) {
1797
+ case "decode":
1798
+ t._callbacks[s.id].resolve(s);
1799
+ break;
1800
+ case "error":
1801
+ t._callbacks[s.id].reject(s);
1802
+ break;
1803
+ default:
1804
+ console.error('THREE.DRACOLoader: Unexpected message, "' + s.type + '"');
1805
+ }
1806
+ }, this.workerPool.push(t);
1807
+ } else this.workerPool.sort(function(t, i) {
1808
+ return t._taskLoad > i._taskLoad ? -1 : 1;
1809
+ });
1810
+ const A = this.workerPool[this.workerPool.length - 1];
1811
+ return A._taskCosts[e] = a, A._taskLoad += a, A;
1812
+ });
1813
+ }
1814
+ _releaseTask(e, a) {
1815
+ e._taskLoad -= e._taskCosts[a], delete e._callbacks[a], delete e._taskCosts[a];
1816
+ }
1817
+ debug() {
1818
+ console.log("Task load: ", this.workerPool.map((e) => e._taskLoad));
1819
+ }
1820
+ dispose() {
1821
+ for (let e = 0; e < this.workerPool.length; ++e) this.workerPool[e].terminate();
1822
+ return this.workerPool.length = 0, this.workerSourceURL !== "" && URL.revokeObjectURL(this.workerSourceURL), this;
1823
+ }
1824
+ }
1825
+ function ii() {
1826
+ let n, e;
1827
+ function a(A, t, i, s, r, b) {
1828
+ const o = b.num_components(), d = i.num_points() * o, c = d * r.BYTES_PER_ELEMENT, g = function(f, I) {
1829
+ switch (I) {
1830
+ case Float32Array:
1831
+ return f.DT_FLOAT32;
1832
+ case Int8Array:
1833
+ return f.DT_INT8;
1834
+ case Int16Array:
1835
+ return f.DT_INT16;
1836
+ case Int32Array:
1837
+ return f.DT_INT32;
1838
+ case Uint8Array:
1839
+ return f.DT_UINT8;
1840
+ case Uint16Array:
1841
+ return f.DT_UINT16;
1842
+ case Uint32Array:
1843
+ return f.DT_UINT32;
1844
+ }
1845
+ }(A, r), l = A._malloc(c);
1846
+ t.GetAttributeDataArrayForAllPoints(i, b, g, c, l);
1847
+ const h = new r(A.HEAPF32.buffer, l, d).slice();
1848
+ return A._free(l), { name: s, array: h, itemSize: o };
1849
+ }
1850
+ onmessage = function(A) {
1851
+ const t = A.data;
1852
+ switch (t.type) {
1853
+ case "init":
1854
+ n = t.decoderConfig, e = new Promise(function(r) {
1855
+ n.onModuleLoaded = function(b) {
1856
+ r({ draco: b });
1857
+ }, DracoDecoderModule(n);
1858
+ });
1859
+ break;
1860
+ case "decode":
1861
+ const i = t.buffer, s = t.taskConfig;
1862
+ e.then((r) => {
1863
+ const b = r.draco, o = new b.Decoder();
1864
+ try {
1865
+ const d = function(g, l, h, f) {
1866
+ const I = f.attributeIDs, B = f.attributeTypes;
1867
+ let u, E;
1868
+ const C = l.GetEncodedGeometryType(h);
1869
+ if (C === g.TRIANGULAR_MESH) u = new g.Mesh(), E = l.DecodeArrayToMesh(h, h.byteLength, u);
1870
+ else {
1871
+ if (C !== g.POINT_CLOUD) throw new Error("THREE.DRACOLoader: Unexpected geometry type.");
1872
+ u = new g.PointCloud(), E = l.DecodeArrayToPointCloud(h, h.byteLength, u);
1873
+ }
1874
+ if (!E.ok() || u.ptr === 0) throw new Error("THREE.DRACOLoader: Decoding failed: " + E.error_msg());
1875
+ const D = { index: null, attributes: [] };
1876
+ for (const y in I) {
1877
+ const w = self[B[y]];
1878
+ let p, Q;
1879
+ if (f.useUniqueIDs) Q = I[y], p = l.GetAttributeByUniqueId(u, Q);
1880
+ else {
1881
+ if (Q = l.GetAttributeId(u, g[I[y]]), Q === -1) continue;
1882
+ p = l.GetAttribute(u, Q);
1883
+ }
1884
+ const k = a(g, l, u, y, w, p);
1885
+ y === "color" && (k.vertexColorSpace = f.vertexColorSpace), D.attributes.push(k);
1886
+ }
1887
+ return C === g.TRIANGULAR_MESH && (D.index = function(y, w, p) {
1888
+ const Q = p.num_faces(), k = 3 * Q, x = 4 * k, R = y._malloc(x);
1889
+ w.GetTrianglesUInt32Array(p, x, R);
1890
+ const U = new Uint32Array(y.HEAPF32.buffer, R, k).slice();
1891
+ return y._free(R), { array: U, itemSize: 1 };
1892
+ }(g, l, u)), g.destroy(u), D;
1893
+ }(b, o, new Int8Array(i), s), c = d.attributes.map((g) => g.array.buffer);
1894
+ d.index && c.push(d.index.array.buffer), self.postMessage({ type: "decode", id: t.id, geometry: d }, c);
1895
+ } catch (d) {
1896
+ console.error(d), self.postMessage({ type: "error", id: t.id, error: d.message });
1897
+ } finally {
1898
+ b.destroy(o);
1899
+ }
1900
+ });
1901
+ }
1902
+ };
1903
+ }
1904
+ class si {
1905
+ constructor(e = 4) {
1906
+ this.pool = e, this.queue = [], this.workers = [], this.workersResolve = [], this.workerStatus = 0;
1907
+ }
1908
+ _initWorker(e) {
1909
+ if (!this.workers[e]) {
1910
+ const a = this.workerCreator();
1911
+ a.addEventListener("message", this._onMessage.bind(this, e)), this.workers[e] = a;
1912
+ }
1913
+ }
1914
+ _getIdleWorker() {
1915
+ for (let e = 0; e < this.pool; e++) if (!(this.workerStatus & 1 << e)) return e;
1916
+ return -1;
1917
+ }
1918
+ _onMessage(e, a) {
1919
+ const A = this.workersResolve[e];
1920
+ if (A && A(a), this.queue.length) {
1921
+ const { resolve: t, msg: i, transfer: s } = this.queue.shift();
1922
+ this.workersResolve[e] = t, this.workers[e].postMessage(i, s);
1923
+ } else this.workerStatus ^= 1 << e;
1924
+ }
1925
+ setWorkerCreator(e) {
1926
+ this.workerCreator = e;
1927
+ }
1928
+ setWorkerLimit(e) {
1929
+ this.pool = e;
1930
+ }
1931
+ postMessage(e, a) {
1932
+ return new Promise((A) => {
1933
+ const t = this._getIdleWorker();
1934
+ t !== -1 ? (this._initWorker(t), this.workerStatus |= 1 << t, this.workersResolve[t] = A, this.workers[t].postMessage(e, a)) : this.queue.push({ resolve: A, msg: e, transfer: a });
1935
+ });
1936
+ }
1937
+ dispose() {
1938
+ this.workers.forEach((e) => e.terminate()), this.workersResolve.length = 0, this.workers.length = 0, this.queue.length = 0, this.workerStatus = 0;
1939
+ }
1940
+ }
1941
+ const iA = 9, sA = 15, rA = 16, nA = 22, oA = 37, cA = 43, bA = 76, dA = 83, gA = 97, hA = 100, lA = 103, IA = 109, fA = 165, uA = 166, ha = 1000066e3;
1942
+ class ri {
1943
+ constructor() {
1944
+ this.vkFormat = 0, this.typeSize = 1, this.pixelWidth = 0, this.pixelHeight = 0, this.pixelDepth = 0, this.layerCount = 0, this.faceCount = 1, this.supercompressionScheme = 0, this.levels = [], this.dataFormatDescriptor = [{ vendorId: 0, descriptorType: 0, descriptorBlockSize: 0, versionNumber: 2, colorModel: 0, colorPrimaries: 1, transferFunction: 2, flags: 0, texelBlockDimension: [0, 0, 0, 0], bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0], samples: [] }], this.keyValue = {}, this.globalData = null;
1945
+ }
1946
+ }
1947
+ class Qe {
1948
+ constructor(e, a, A, t) {
1949
+ this._dataView = void 0, this._littleEndian = void 0, this._offset = void 0, this._dataView = new DataView(e.buffer, e.byteOffset + a, A), this._littleEndian = t, this._offset = 0;
1950
+ }
1951
+ _nextUint8() {
1952
+ const e = this._dataView.getUint8(this._offset);
1953
+ return this._offset += 1, e;
1954
+ }
1955
+ _nextUint16() {
1956
+ const e = this._dataView.getUint16(this._offset, this._littleEndian);
1957
+ return this._offset += 2, e;
1958
+ }
1959
+ _nextUint32() {
1960
+ const e = this._dataView.getUint32(this._offset, this._littleEndian);
1961
+ return this._offset += 4, e;
1962
+ }
1963
+ _nextUint64() {
1964
+ const e = this._dataView.getUint32(this._offset, this._littleEndian) + 4294967296 * this._dataView.getUint32(this._offset + 4, this._littleEndian);
1965
+ return this._offset += 8, e;
1966
+ }
1967
+ _nextInt32() {
1968
+ const e = this._dataView.getInt32(this._offset, this._littleEndian);
1969
+ return this._offset += 4, e;
1970
+ }
1971
+ _nextUint8Array(e) {
1972
+ const a = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._offset, e);
1973
+ return this._offset += e, a;
1974
+ }
1975
+ _skip(e) {
1976
+ return this._offset += e, this;
1977
+ }
1978
+ _scan(e, a) {
1979
+ a === void 0 && (a = 0);
1980
+ const A = this._offset;
1981
+ let t = 0;
1982
+ for (; this._dataView.getUint8(this._offset) !== a && t < e; ) t++, this._offset++;
1983
+ return t < e && this._offset++, new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + A, t);
1984
+ }
1985
+ }
1986
+ const L = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10];
1987
+ function ja(n) {
1988
+ return new TextDecoder().decode(n);
1989
+ }
1990
+ let He, X, ca;
1991
+ const qe = { env: { emscripten_notify_memory_growth: function(n) {
1992
+ ca = new Uint8Array(X.exports.memory.buffer);
1993
+ } } };
1994
+ class ni {
1995
+ init() {
1996
+ return He || (He = typeof fetch < "u" ? fetch("data:application/wasm;base64," + Ma).then((e) => e.arrayBuffer()).then((e) => WebAssembly.instantiate(e, qe)).then(this._init) : WebAssembly.instantiate(Buffer.from(Ma, "base64"), qe).then(this._init), He);
1997
+ }
1998
+ _init(e) {
1999
+ X = e.instance, qe.env.emscripten_notify_memory_growth(0);
2000
+ }
2001
+ decode(e, a = 0) {
2002
+ if (!X) throw new Error("ZSTDDecoder: Await .init() before decoding.");
2003
+ const A = e.byteLength, t = X.exports.malloc(A);
2004
+ ca.set(e, t), a = a || Number(X.exports.ZSTD_findDecompressedSize(t, A));
2005
+ const i = X.exports.malloc(a), s = X.exports.ZSTD_decompress(i, a, t, A), r = ca.slice(i, i + s);
2006
+ return X.exports.free(t), X.exports.free(i), r;
2007
+ }
2008
+ }
2009
+ const Ma = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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", Je = /* @__PURE__ */ new WeakMap();
2010
+ let Oe, Ke = 0;
2011
+ class v extends da {
2012
+ constructor(e) {
2013
+ super(e), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new si(), this.workerSourceURL = "", this.workerConfig = null, typeof MSC_TRANSCODER < "u" && console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.');
2014
+ }
2015
+ setTranscoderPath(e) {
2016
+ return this.transcoderPath = e, this;
2017
+ }
2018
+ setWorkerLimit(e) {
2019
+ return this.workerPool.setWorkerLimit(e), this;
2020
+ }
2021
+ async detectSupportAsync(e) {
2022
+ return this.workerConfig = { astcSupported: await e.hasFeatureAsync("texture-compression-astc"), astcHDRSupported: !1, etc1Supported: await e.hasFeatureAsync("texture-compression-etc1"), etc2Supported: await e.hasFeatureAsync("texture-compression-etc2"), dxtSupported: await e.hasFeatureAsync("texture-compression-bc"), bptcSupported: await e.hasFeatureAsync("texture-compression-bptc"), pvrtcSupported: await e.hasFeatureAsync("texture-compression-pvrtc") }, this;
2023
+ }
2024
+ detectSupport(e) {
2025
+ return e.isWebGPURenderer === !0 ? this.workerConfig = { astcSupported: e.hasFeature("texture-compression-astc"), astcHDRSupported: !1, etc1Supported: e.hasFeature("texture-compression-etc1"), etc2Supported: e.hasFeature("texture-compression-etc2"), dxtSupported: e.hasFeature("texture-compression-bc"), bptcSupported: e.hasFeature("texture-compression-bptc"), pvrtcSupported: e.hasFeature("texture-compression-pvrtc") } : this.workerConfig = { astcSupported: e.extensions.has("WEBGL_compressed_texture_astc"), astcHDRSupported: e.extensions.has("WEBGL_compressed_texture_astc") && e.extensions.get("WEBGL_compressed_texture_astc").getSupportedProfiles().includes("hdr"), etc1Supported: e.extensions.has("WEBGL_compressed_texture_etc1"), etc2Supported: e.extensions.has("WEBGL_compressed_texture_etc"), dxtSupported: e.extensions.has("WEBGL_compressed_texture_s3tc"), bptcSupported: e.extensions.has("EXT_texture_compression_bptc"), pvrtcSupported: e.extensions.has("WEBGL_compressed_texture_pvrtc") || e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc") }, this;
2026
+ }
2027
+ init() {
2028
+ if (!this.transcoderPending) {
2029
+ const e = new ce(this.manager);
2030
+ e.setPath(this.transcoderPath), e.setWithCredentials(this.withCredentials);
2031
+ const a = e.loadAsync("basis_transcoder.js"), A = new ce(this.manager);
2032
+ A.setPath(this.transcoderPath), A.setResponseType("arraybuffer"), A.setWithCredentials(this.withCredentials);
2033
+ const t = A.loadAsync("basis_transcoder.wasm");
2034
+ this.transcoderPending = Promise.all([a, t]).then(([i, s]) => {
2035
+ const r = v.BasisWorker.toString(), b = ["/* constants */", "let _EngineFormat = " + JSON.stringify(v.EngineFormat), "let _EngineType = " + JSON.stringify(v.EngineType), "let _TranscoderFormat = " + JSON.stringify(v.TranscoderFormat), "let _BasisFormat = " + JSON.stringify(v.BasisFormat), "/* basis_transcoder.js */", i, "/* worker */", r.substring(r.indexOf("{") + 1, r.lastIndexOf("}"))].join(`
2036
+ `);
2037
+ this.workerSourceURL = URL.createObjectURL(new Blob([b])), this.transcoderBinary = s, this.workerPool.setWorkerCreator(() => {
2038
+ const o = new Worker(this.workerSourceURL), d = this.transcoderBinary.slice(0);
2039
+ return o.postMessage({ type: "init", config: this.workerConfig, transcoderBinary: d }, [d]), o;
2040
+ });
2041
+ }), Ke > 0 && console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."), Ke++;
2042
+ }
2043
+ return this.transcoderPending;
2044
+ }
2045
+ load(e, a, A, t) {
2046
+ if (this.workerConfig === null) throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
2047
+ const i = new ce(this.manager);
2048
+ i.setResponseType("arraybuffer"), i.setWithCredentials(this.withCredentials), i.load(e, (s) => {
2049
+ this.parse(s, a, t);
2050
+ }, A, t);
2051
+ }
2052
+ parse(e, a, A) {
2053
+ if (this.workerConfig === null) throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
2054
+ if (Je.has(e))
2055
+ return Je.get(e).promise.then(a).catch(A);
2056
+ this._createTexture(e).then((t) => a ? a(t) : null).catch(A);
2057
+ }
2058
+ _createTextureFrom(e, a) {
2059
+ const { type: A, error: t, data: { faces: i, width: s, height: r, format: b, type: o, dfdFlags: d } } = e;
2060
+ if (A === "error") return Promise.reject(t);
2061
+ let c;
2062
+ if (a.faceCount === 6) c = new st(i, b, o);
2063
+ else {
2064
+ const g = i[0].mipmaps;
2065
+ c = a.layerCount > 1 ? new rt(g, s, r, a.layerCount, b, o) : new ma(g, s, r, b, o);
2066
+ }
2067
+ return c.minFilter = i[0].mipmaps.length === 1 ? Me : ga, c.magFilter = Me, c.generateMipmaps = !1, c.needsUpdate = !0, c.colorSpace = Ra(a), c.premultiplyAlpha = !!(1 & d), c;
2068
+ }
2069
+ async _createTexture(e, a = {}) {
2070
+ const A = function(r) {
2071
+ const b = new Uint8Array(r.buffer, r.byteOffset, L.length);
2072
+ if (b[0] !== L[0] || b[1] !== L[1] || b[2] !== L[2] || b[3] !== L[3] || b[4] !== L[4] || b[5] !== L[5] || b[6] !== L[6] || b[7] !== L[7] || b[8] !== L[8] || b[9] !== L[9] || b[10] !== L[10] || b[11] !== L[11]) throw new Error("Missing KTX 2.0 identifier.");
2073
+ const o = new ri(), d = 17 * Uint32Array.BYTES_PER_ELEMENT, c = new Qe(r, L.length, d, !0);
2074
+ o.vkFormat = c._nextUint32(), o.typeSize = c._nextUint32(), o.pixelWidth = c._nextUint32(), o.pixelHeight = c._nextUint32(), o.pixelDepth = c._nextUint32(), o.layerCount = c._nextUint32(), o.faceCount = c._nextUint32();
2075
+ const g = c._nextUint32();
2076
+ o.supercompressionScheme = c._nextUint32();
2077
+ const l = c._nextUint32(), h = c._nextUint32(), f = c._nextUint32(), I = c._nextUint32(), B = c._nextUint64(), u = c._nextUint64(), E = new Qe(r, L.length + d, 3 * g * 8, !0);
2078
+ for (let M = 0; M < g; M++) o.levels.push({ levelData: new Uint8Array(r.buffer, r.byteOffset + E._nextUint64(), E._nextUint64()), uncompressedByteLength: E._nextUint64() });
2079
+ const C = new Qe(r, l, h, !0), D = { vendorId: C._skip(4)._nextUint16(), descriptorType: C._nextUint16(), versionNumber: C._nextUint16(), descriptorBlockSize: C._nextUint16(), colorModel: C._nextUint8(), colorPrimaries: C._nextUint8(), transferFunction: C._nextUint8(), flags: C._nextUint8(), texelBlockDimension: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], bytesPlane: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], samples: [] }, y = (D.descriptorBlockSize / 4 - 6) / 4;
2080
+ for (let M = 0; M < y; M++) {
2081
+ const S = { bitOffset: C._nextUint16(), bitLength: C._nextUint8(), channelType: C._nextUint8(), samplePosition: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], sampleLower: -1 / 0, sampleUpper: 1 / 0 };
2082
+ 64 & S.channelType ? (S.sampleLower = C._nextInt32(), S.sampleUpper = C._nextInt32()) : (S.sampleLower = C._nextUint32(), S.sampleUpper = C._nextUint32()), D.samples[M] = S;
2083
+ }
2084
+ o.dataFormatDescriptor.length = 0, o.dataFormatDescriptor.push(D);
2085
+ const w = new Qe(r, f, I, !0);
2086
+ for (; w._offset < I; ) {
2087
+ const M = w._nextUint32(), S = w._scan(M), _ = ja(S);
2088
+ if (o.keyValue[_] = w._nextUint8Array(M - S.byteLength - 1), _.match(/^ktx/i)) {
2089
+ const O = ja(o.keyValue[_]);
2090
+ o.keyValue[_] = O.substring(0, O.lastIndexOf("\0"));
2091
+ }
2092
+ w._skip(M % 4 ? 4 - M % 4 : 0);
2093
+ }
2094
+ if (u <= 0) return o;
2095
+ const p = new Qe(r, B, u, !0), Q = p._nextUint16(), k = p._nextUint16(), x = p._nextUint32(), R = p._nextUint32(), U = p._nextUint32(), Ge = p._nextUint32(), Ce = [];
2096
+ for (let M = 0; M < g; M++) Ce.push({ imageFlags: p._nextUint32(), rgbSliceByteOffset: p._nextUint32(), rgbSliceByteLength: p._nextUint32(), alphaSliceByteOffset: p._nextUint32(), alphaSliceByteLength: p._nextUint32() });
2097
+ const Re = B + p._offset, Ee = Re + x, pe = Ee + R, me = pe + U, Fe = new Uint8Array(r.buffer, r.byteOffset + Re, x), Se = new Uint8Array(r.buffer, r.byteOffset + Ee, R), J = new Uint8Array(r.buffer, r.byteOffset + pe, U), be = new Uint8Array(r.buffer, r.byteOffset + me, Ge);
2098
+ return o.globalData = { endpointCount: Q, selectorCount: k, imageDescs: Ce, endpointsData: Fe, selectorsData: Se, tablesData: J, extendedData: be }, o;
2099
+ }(new Uint8Array(e)), t = A.vkFormat === ha && A.dataFormatDescriptor[0].colorModel === 167;
2100
+ if (!(A.vkFormat === 0 || t && !this.workerConfig.astcHDRSupported)) return async function(r) {
2101
+ const { vkFormat: b } = r;
2102
+ if (Ve[b] === void 0) throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
2103
+ let o;
2104
+ r.supercompressionScheme === 2 && (Oe || (Oe = new Promise(async (g) => {
2105
+ const l = new ni();
2106
+ await l.init(), g(l);
2107
+ })), o = await Oe);
2108
+ const d = [];
2109
+ for (let g = 0; g < r.levels.length; g++) {
2110
+ const l = Math.max(1, r.pixelWidth >> g), h = Math.max(1, r.pixelHeight >> g), f = r.pixelDepth ? Math.max(1, r.pixelDepth >> g) : 0, I = r.levels[g];
2111
+ let B, u;
2112
+ if (r.supercompressionScheme === 0) B = I.levelData;
2113
+ else {
2114
+ if (r.supercompressionScheme !== 2) throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
2115
+ B = o.decode(I.levelData, I.uncompressedByteLength);
2116
+ }
2117
+ u = ze[b] === je ? new Float32Array(B.buffer, B.byteOffset, B.byteLength / Float32Array.BYTES_PER_ELEMENT) : ze[b] === Ie ? new Uint16Array(B.buffer, B.byteOffset, B.byteLength / Uint16Array.BYTES_PER_ELEMENT) : B, d.push({ data: u, width: l, height: h, depth: f });
2118
+ }
2119
+ let c;
2120
+ if (oi.has(Ve[b])) c = r.pixelDepth === 0 ? new ft(d[0].data, r.pixelWidth, r.pixelHeight) : new ut(d[0].data, r.pixelWidth, r.pixelHeight, r.pixelDepth);
2121
+ else {
2122
+ if (r.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");
2123
+ c = new ma(d, r.pixelWidth, r.pixelHeight);
2124
+ }
2125
+ return c.mipmaps = d, c.type = ze[b], c.format = Ve[b], c.colorSpace = Ra(r), c.needsUpdate = !0, Promise.resolve(c);
2126
+ }(A);
2127
+ const i = a, s = this.init().then(() => this.workerPool.postMessage({ type: "transcode", buffer: e, taskConfig: i }, [e])).then((r) => this._createTextureFrom(r.data, A));
2128
+ return Je.set(e, { promise: s }), s;
2129
+ }
2130
+ dispose() {
2131
+ return this.workerPool.dispose(), this.workerSourceURL && URL.revokeObjectURL(this.workerSourceURL), Ke--, this;
2132
+ }
2133
+ }
2134
+ v.BasisFormat = { ETC1S: 0, UASTC: 1, UASTC_HDR: 2 }, v.TranscoderFormat = { ETC1: 0, ETC2: 1, BC1: 2, BC3: 3, BC4: 4, BC5: 5, BC7_M6_OPAQUE_ONLY: 6, BC7_M5: 7, PVRTC1_4_RGB: 8, PVRTC1_4_RGBA: 9, ASTC_4x4: 10, ATC_RGB: 11, ATC_RGBA_INTERPOLATED_ALPHA: 12, RGBA32: 13, RGB565: 14, BGR565: 15, RGBA4444: 16, BC6H: 22, RGB_HALF: 24, RGBA_HALF: 25 }, v.EngineFormat = { RGBAFormat: le, RGBA_ASTC_4x4_Format: Wa, RGB_BPTC_UNSIGNED_Format: nt, RGBA_BPTC_Format: ot, RGBA_ETC2_EAC_Format: ct, RGBA_PVRTC_4BPPV1_Format: bt, RGBA_S3TC_DXT5_Format: dt, RGB_ETC1_Format: gt, RGB_ETC2_Format: ht, RGB_PVRTC_4BPPV1_Format: lt, RGBA_S3TC_DXT1_Format: It }, v.EngineType = { UnsignedByteType: W, HalfFloatType: Ie, FloatType: je }, v.BasisWorker = function() {
2135
+ let n, e, a;
2136
+ const A = _EngineFormat, t = _EngineType, i = _TranscoderFormat, s = _BasisFormat;
2137
+ self.addEventListener("message", function(c) {
2138
+ const g = c.data;
2139
+ switch (g.type) {
2140
+ case "init":
2141
+ n = g.config, l = g.transcoderBinary, e = new Promise((h) => {
2142
+ a = { wasmBinary: l, onRuntimeInitialized: h }, BASIS(a);
2143
+ }).then(() => {
2144
+ a.initializeBasis(), a.KTX2File === void 0 && console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.");
2145
+ });
2146
+ break;
2147
+ case "transcode":
2148
+ e.then(() => {
2149
+ try {
2150
+ const { faces: h, buffers: f, width: I, height: B, hasAlpha: u, format: E, type: C, dfdFlags: D } = function(y) {
2151
+ const w = new a.KTX2File(new Uint8Array(y));
2152
+ function p() {
2153
+ w.close(), w.delete();
2154
+ }
2155
+ if (!w.isValid()) throw p(), new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");
2156
+ let Q;
2157
+ if (w.isUASTC()) Q = s.UASTC;
2158
+ else if (w.isETC1S()) Q = s.ETC1S;
2159
+ else {
2160
+ if (!w.isHDR()) throw new Error("THREE.KTX2Loader: Unknown Basis encoding");
2161
+ Q = s.UASTC_HDR;
2162
+ }
2163
+ const k = w.getWidth(), x = w.getHeight(), R = w.getLayers() || 1, U = w.getLevels(), Ge = w.getFaces(), Ce = w.getHasAlpha(), Re = w.getDFDFlags(), { transcoderFormat: Ee, engineFormat: pe, engineType: me } = function(J, be, M, S) {
2164
+ const _ = b[J];
2165
+ for (let O = 0; O < _.length; O++) {
2166
+ const P = _[O];
2167
+ if (!(P.if && !n[P.if]) && P.basisFormat.includes(J) && !(S && P.transcoderFormat.length < 2) && !(P.needsPowerOfTwo && (!o(be) || !o(M))))
2168
+ return { transcoderFormat: P.transcoderFormat[S ? 1 : 0], engineFormat: P.engineFormat[S ? 1 : 0], engineType: P.engineType[0] };
2169
+ }
2170
+ throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.");
2171
+ }(Q, k, x, Ce);
2172
+ if (!k || !x || !U) throw p(), new Error("THREE.KTX2Loader: Invalid texture");
2173
+ if (!w.startTranscoding()) throw p(), new Error("THREE.KTX2Loader: .startTranscoding failed");
2174
+ const Fe = [], Se = [];
2175
+ for (let J = 0; J < Ge; J++) {
2176
+ const be = [];
2177
+ for (let M = 0; M < U; M++) {
2178
+ const S = [];
2179
+ let _, O;
2180
+ for (let de = 0; de < R; de++) {
2181
+ const ge = w.getImageLevelInfo(M, de, J);
2182
+ J !== 0 || M !== 0 || de !== 0 || ge.origWidth % 4 == 0 && ge.origHeight % 4 == 0 || console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), U > 1 ? (_ = ge.origWidth, O = ge.origHeight) : (_ = ge.width, O = ge.height);
2183
+ let he = new Uint8Array(w.getImageTranscodedSizeInBytes(M, de, 0, Ee));
2184
+ const pA = w.transcodeImage(he, M, de, J, Ee, 0, -1, -1);
2185
+ if (me === t.HalfFloatType && (he = new Uint16Array(he.buffer, he.byteOffset, he.byteLength / Uint16Array.BYTES_PER_ELEMENT)), !pA) throw p(), new Error("THREE.KTX2Loader: .transcodeImage failed.");
2186
+ S.push(he);
2187
+ }
2188
+ const P = d(S);
2189
+ be.push({ data: P, width: _, height: O }), Se.push(P.buffer);
2190
+ }
2191
+ Fe.push({ mipmaps: be, width: k, height: x, format: pe, type: me });
2192
+ }
2193
+ return p(), { faces: Fe, buffers: Se, width: k, height: x, hasAlpha: Ce, dfdFlags: Re, format: pe, type: me };
2194
+ }(g.buffer);
2195
+ self.postMessage({ type: "transcode", id: g.id, data: { faces: h, width: I, height: B, hasAlpha: u, format: E, type: C, dfdFlags: D } }, f);
2196
+ } catch (h) {
2197
+ console.error(h), self.postMessage({ type: "error", id: g.id, error: h.message });
2198
+ }
2199
+ });
2200
+ }
2201
+ var l;
2202
+ });
2203
+ const r = [{ if: "astcSupported", basisFormat: [s.UASTC], transcoderFormat: [i.ASTC_4x4, i.ASTC_4x4], engineFormat: [A.RGBA_ASTC_4x4_Format, A.RGBA_ASTC_4x4_Format], engineType: [t.UnsignedByteType], priorityETC1S: 1 / 0, priorityUASTC: 1, needsPowerOfTwo: !1 }, { if: "bptcSupported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.BC7_M5, i.BC7_M5], engineFormat: [A.RGBA_BPTC_Format, A.RGBA_BPTC_Format], engineType: [t.UnsignedByteType], priorityETC1S: 3, priorityUASTC: 2, needsPowerOfTwo: !1 }, { if: "dxtSupported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.BC1, i.BC3], engineFormat: [A.RGBA_S3TC_DXT1_Format, A.RGBA_S3TC_DXT5_Format], engineType: [t.UnsignedByteType], priorityETC1S: 4, priorityUASTC: 5, needsPowerOfTwo: !1 }, { if: "etc2Supported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.ETC1, i.ETC2], engineFormat: [A.RGB_ETC2_Format, A.RGBA_ETC2_EAC_Format], engineType: [t.UnsignedByteType], priorityETC1S: 1, priorityUASTC: 3, needsPowerOfTwo: !1 }, { if: "etc1Supported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.ETC1], engineFormat: [A.RGB_ETC1_Format], engineType: [t.UnsignedByteType], priorityETC1S: 2, priorityUASTC: 4, needsPowerOfTwo: !1 }, { if: "pvrtcSupported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.PVRTC1_4_RGB, i.PVRTC1_4_RGBA], engineFormat: [A.RGB_PVRTC_4BPPV1_Format, A.RGBA_PVRTC_4BPPV1_Format], engineType: [t.UnsignedByteType], priorityETC1S: 5, priorityUASTC: 6, needsPowerOfTwo: !0 }, { if: "bptcSupported", basisFormat: [s.UASTC_HDR], transcoderFormat: [i.BC6H], engineFormat: [A.RGB_BPTC_UNSIGNED_Format], engineType: [t.HalfFloatType], priorityHDR: 1, needsPowerOfTwo: !1 }, { basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.RGBA32, i.RGBA32], engineFormat: [A.RGBAFormat, A.RGBAFormat], engineType: [t.UnsignedByteType, t.UnsignedByteType], priorityETC1S: 100, priorityUASTC: 100, needsPowerOfTwo: !1 }, { basisFormat: [s.UASTC_HDR], transcoderFormat: [i.RGBA_HALF], engineFormat: [A.RGBAFormat], engineType: [t.HalfFloatType], priorityHDR: 100, needsPowerOfTwo: !1 }], b = { [s.ETC1S]: r.filter((c) => c.basisFormat.includes(s.ETC1S)).sort((c, g) => c.priorityUASTC - g.priorityUASTC), [s.UASTC]: r.filter((c) => c.basisFormat.includes(s.UASTC)).sort((c, g) => c.priorityUASTC - g.priorityUASTC), [s.UASTC_HDR]: r.filter((c) => c.basisFormat.includes(s.UASTC_HDR)).sort((c, g) => c.priorityHDR - g.priorityHDR) };
2204
+ function o(c) {
2205
+ return c <= 2 || !(c & c - 1) && c !== 0;
2206
+ }
2207
+ function d(c) {
2208
+ if (c.length === 1) return c[0];
2209
+ let g = 0;
2210
+ for (let f = 0; f < c.length; f++)
2211
+ g += c[f].byteLength;
2212
+ const l = new Uint8Array(g);
2213
+ let h = 0;
2214
+ for (let f = 0; f < c.length; f++) {
2215
+ const I = c[f];
2216
+ l.set(I, h), h += I.byteLength;
2217
+ }
2218
+ return l;
2219
+ }
2220
+ };
2221
+ const oi = /* @__PURE__ */ new Set([le, ke, xe]), Ve = { [IA]: le, [gA]: le, [oA]: le, [cA]: le, [lA]: ke, [dA]: ke, [rA]: ke, [nA]: ke, [hA]: xe, [bA]: xe, [sA]: xe, [iA]: xe, [ha]: Wa, [uA]: Qa, [fA]: Qa }, ze = { [IA]: je, [gA]: Ie, [oA]: W, [cA]: W, [lA]: je, [dA]: Ie, [rA]: W, [nA]: W, [hA]: je, [bA]: Ie, [sA]: W, [iA]: W, [ha]: Ie, [uA]: W, [fA]: W };
2222
+ function Ra(n) {
2223
+ const e = n.dataFormatDescriptor[0];
2224
+ return e.colorPrimaries === 1 ? e.transferFunction === 2 ? $ : q : e.colorPrimaries === 10 ? e.transferFunction === 2 ? "display-p3" : "display-p3-linear" : (e.colorPrimaries === 0 || console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`), Bt);
2225
+ }
2226
+ async function Fa(n) {
2227
+ const e = n.split("?")[0].split(".").pop(), a = await fetch(n);
2228
+ if (!a.ok) throw new Error(`Failed to fetch ${n}: ${a.statusText}`);
2229
+ if (e === "json") {
2230
+ const A = await a.json();
2231
+ return handleJSONSubtree(A, Sa(n));
2232
+ }
2233
+ if (e === "subtree")
2234
+ return async function(A, t) {
2235
+ const i = new DataView(A), s = i.getBigUint64(8, !0), r = i.getBigUint64(16, !0), b = 24, o = b + Number(s), d = o + (8 - o % 8) % 8, c = d + Number(r), g = A.slice(b, o), l = new TextDecoder().decode(g).trim(), h = JSON.parse(l);
2236
+ if (!h.buffers) throw new Error("subtree has no buffers");
2237
+ const f = h.buffers.map(async (B) => {
2238
+ if (B.uri) {
2239
+ const u = new URL(B.uri, t).href, E = await fetch(u);
2240
+ if (!E.ok) throw new Error(`Failed to fetch binary file ${u}: ${E.statusText}`);
2241
+ return new Uint8Array(await E.arrayBuffer());
2242
+ }
2243
+ return new Uint8Array(A.slice(d, c));
2244
+ }), I = await Promise.all(f);
2245
+ return /* @__PURE__ */ function(B, u) {
2246
+ function E(p, Q) {
2247
+ if (!p) throw new Error("incomplete json subtree");
2248
+ if (p.constant) {
2249
+ if (p.constant == 0) return !1;
2250
+ if (p.constant == 1) return !0;
2251
+ }
2252
+ if (p.bitstream == null) throw new Error('json subtree "tileAvailability" does not specify a bitstream');
2253
+ if (!B.bufferViews || !B.bufferViews[p.bitstream]) throw new Error('json subtree "bufferViews" does not specify a bitstream');
2254
+ const k = B.bufferViews[p.bitstream];
2255
+ return C(u[k.buffer], k.byteOffset, Q);
2256
+ }
2257
+ function C(p, Q, k) {
2258
+ const x = k % 8;
2259
+ return p[Q + Math.floor(k / 8)] >> x & !0;
2260
+ }
2261
+ function D(p) {
2262
+ let Q = 0;
2263
+ return Q = p.z == null ? Ye(p.x, p.y, p.level) : Xe(p.x, p.y, p.z, p.level), E(B.tileAvailability, Q);
2264
+ }
2265
+ function y(p) {
2266
+ let Q = 0;
2267
+ Q = p.z == null ? Ye(p.x, p.y, p.level) : Xe(p.x, p.y, p.z, p.level);
2268
+ const k = [];
2269
+ return B.contentAvailability.forEach((x) => {
2270
+ k.push(E(x, Q));
2271
+ }), k;
2272
+ }
2273
+ function w(p) {
2274
+ let Q = 0;
2275
+ return Q = p.z == null ? Ye(p.x, p.y) : Xe(p.x, p.y, p.z), E(B.childSubtreeAvailability, Q);
2276
+ }
2277
+ return { isTileAvailable: D, isContentAvailable: y, isChildSubtreeAvailable: w };
2278
+ }(h, I);
2279
+ }(await a.arrayBuffer(), Sa(n));
2280
+ throw new Error(`Unsupported file extension: ${e}`);
2281
+ }
2282
+ function Sa(n) {
2283
+ const e = n.split("?")[0];
2284
+ return e.substring(0, e.lastIndexOf("/") + 1);
2285
+ }
2286
+ function Ta(n) {
2287
+ return n = 1431655765 & ((n = 858993459 & ((n = 252645135 & ((n = 16711935 & ((n &= 65535) ^ n << 8)) ^ n << 4)) ^ n << 2)) ^ n << 1);
2288
+ }
2289
+ function Ye(n, e, a) {
2290
+ let A = 0;
2291
+ return a && (A = (Math.pow(4, a) - 1) / 3), A + (Ta(n) | Ta(e) << 1);
2292
+ }
2293
+ function We(n) {
2294
+ return n = 153391689 & ((n = 51130563 & ((n = 50393103 & ((n = 4278190335 & ((n &= 1023) ^ n << 16)) ^ n << 8)) ^ n << 4)) ^ n << 2);
2295
+ }
2296
+ function Xe(n, e, a, A) {
2297
+ let t = 0;
2298
+ return A && (t = (Math.pow(8, A) - 1) / 7), t + (We(n) | We(e) << 1 | We(a) << 2);
2299
+ }
2300
+ const we = /* @__PURE__ */ new Map();
2301
+ async function la(n, e) {
2302
+ if (!n.root || !n.root.implicitTiling) return n;
2303
+ if (!n.root.content && !n.root.contents) throw new Error("implicit tiling requires a Template URI");
2304
+ let a = !0;
2305
+ n.root.implicitTiling.subdivisionScheme && (a = n.root.implicitTiling.subdivisionScheme.toUpperCase() === "QUADTREE");
2306
+ let A = "";
2307
+ n.root.implicitTiling.subtrees && (n.root.implicitTiling.subtrees.uri ? A = n.root.implicitTiling.subtrees.uri : n.root.implicitTiling.subtrees.url && (A = n.root.implicitTiling.subtrees.url));
2308
+ let t = [];
2309
+ n.root.content ? n.root.content.uri ? t.push(n.root.content.uri) : n.root.content.url && t.push(n.root.content.url) : n.root.contents && n.root.contents.forEach((l) => {
2310
+ l.uri ? t.push(l.uri) : l.url && t.push(l.url);
2311
+ });
2312
+ const i = function(l) {
2313
+ const h = l.split("?")[0];
2314
+ return h.substring(0, h.lastIndexOf("/") + 1);
2315
+ }(e);
2316
+ let s;
2317
+ a && (s = A.replace("{level}", 0).replace("{x}", 0).replace("{y}", 0)), a || (s = A.replace("{level}", 0).replace("{x}", 0).replace("{y}", 0).replace("{z}", 0));
2318
+ const r = { level: 0, x: 0, y: 0 }, b = { level: 0, x: 0, y: 0 };
2319
+ a || (r.z = 0, b.z = 0), we.set(s, await Fa(i + s));
2320
+ const o = we.get(s), d = [];
2321
+ o.isContentAvailable(b) && t.forEach((l) => {
2322
+ let h;
2323
+ a && (h = l.replace("{level}", r.level).replace("{x}", r.x).replace("{y}", r.y)), a || (h = l.replace("{level}", r.level).replace("{x}", r.x).replace("{y}", r.y).replace("{z}", r.z)), d.push({ uri: h });
2324
+ });
2325
+ const c = { geometricError: n.root.geometricError, boundingVolume: n.root.boundingVolume, refine: n.root.refine, globalAddress: r, localAddress: b, subtree: o, contents: d, getChildren: async () => g(c) };
2326
+ return { root: c };
2327
+ async function g(l) {
2328
+ const h = [];
2329
+ if (l.localAddress.level == n.root.implicitTiling.availableLevels - 1) return h;
2330
+ if ((l.localAddress.level + 1) % n.root.implicitTiling.subtreeLevels == 0) {
2331
+ const f = Te(l.localAddress), I = Te(l.globalAddress), B = La(a, n.root.boundingVolume, I);
2332
+ for (let u = 0; u < f.length; u++) {
2333
+ const E = f[u], C = I[u];
2334
+ l.subtree.isChildSubtreeAvailable(E) && (a && A.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y), a || A.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y).replace("{z}", C.z)), we.has(s) || we.set(s, await Fa(i + s));
2335
+ const D = we.get(s), y = { level: 0, x: 0, y: 0 };
2336
+ a || (y.z = 0);
2337
+ const w = [];
2338
+ D.isContentAvailable(y) && t.forEach((Q) => {
2339
+ let k;
2340
+ a && (k = Q.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y)), a || (k = Q.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y).replace("{z}", C.z)), w.push({ uri: k });
2341
+ });
2342
+ const p = { geometricError: l.geometricError / 2, boundingVolume: B[u], refine: n.root.refine, globalAddress: C, localAddress: y, subtree: D, contents: w, getChildren: async () => g(p) };
2343
+ h.push(p);
2344
+ }
2345
+ } else {
2346
+ const f = Te(l.localAddress), I = Te(l.globalAddress), B = La(a, n.root.boundingVolume, I);
2347
+ for (let u = 0; u < f.length; u++) {
2348
+ const E = f[u], C = I[u];
2349
+ if (!l.subtree.isTileAvailable(E)) continue;
2350
+ const D = [], y = l.subtree.isContentAvailable(E);
2351
+ for (let p = 0; p < t.length; p++) {
2352
+ if (!y[p]) continue;
2353
+ const Q = t[p];
2354
+ let k;
2355
+ a && (k = Q.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y)), a || (k = Q.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y).replace("{z}", C.z)), D.push({ uri: k });
2356
+ }
2357
+ const w = { geometricError: l.geometricError / 2, boundingVolume: B[u], refine: n.root.refine, globalAddress: C, localAddress: E, subtree: l.subtree, contents: D, getChildren: async () => g(w) };
2358
+ h.push(w);
2359
+ }
2360
+ }
2361
+ return h.length > 0 ? h : void 0;
2362
+ }
2363
+ }
2364
+ function Te(n) {
2365
+ const { level: e, x: a, y: A, z: t } = n, i = e + 1;
2366
+ let s = [];
2367
+ return s = t === void 0 ? [{ level: i, x: 2 * a, y: 2 * A }, { level: i, x: 2 * a + 1, y: 2 * A }, { level: i, x: 2 * a, y: 2 * A + 1 }, { level: i, x: 2 * a + 1, y: 2 * A + 1 }] : [{ level: i, x: 2 * a, y: 2 * A, z: 2 * t }, { level: i, x: 2 * a + 1, y: 2 * A, z: 2 * t }, { level: i, x: 2 * a, y: 2 * A + 1, z: 2 * t }, { level: i, x: 2 * a + 1, y: 2 * A + 1, z: 2 * t }, { level: i, x: 2 * a, y: 2 * A, z: 2 * t + 1 }, { level: i, x: 2 * a + 1, y: 2 * A, z: 2 * t + 1 }, { level: i, x: 2 * a, y: 2 * A + 1, z: 2 * t + 1 }, { level: i, x: 2 * a + 1, y: 2 * A + 1, z: 2 * t + 1 }], s;
2368
+ }
2369
+ function La(n, e, a) {
2370
+ const A = [];
2371
+ for (let t = 0; t < a.length; t++) A.push(ci(n, e, a[t]));
2372
+ return A;
2373
+ }
2374
+ function ci(n, e, a) {
2375
+ if (e.region) return function(A, t, i) {
2376
+ const [s, r, b, o, d, c] = t, g = (b - s) / 2 ** i.level, l = (o - r) / 2 ** i.level, h = A ? 0 : (c - d) / 2 ** i.level, f = s + g * i.x, I = r + l * i.y, B = f + g, u = I + l, E = A ? d : d + h * i.z, C = A ? c : E + h;
2377
+ return { region: [f, I, B, u, E, C] };
2378
+ }(n, e.region, a);
2379
+ if (e.box) return function(A, t, i) {
2380
+ const s = t.slice(0, 3), r = [t.slice(3, 6), t.slice(6, 9), t.slice(9, 12)], b = 1 / Math.pow(2, i.level), o = [b, b, A ? 1 : b], d = r.map((l, h) => l.map((f) => f * o[h])), c = [s[0] - r[0][0] - r[1][0] - r[2][0], s[1] - r[0][1] - r[1][1] - r[2][1], s[2] - r[0][2] - r[1][2] - r[2][2]];
2381
+ return { box: [c[0] + (2 * i.x + 1) * (d[0][0] + d[1][0] + d[2][0]), c[1] + (2 * i.y + 1) * (d[0][1] + d[1][1] + d[2][1]), A ? s[2] : c[2] + (2 * i.z + 1) * (d[0][2] + d[1][2] + d[2][2])].concat(...d) };
2382
+ }(n, e.box, a);
2383
+ throw new Error("Unsupported bounding volume type");
2384
+ }
2385
+ (function() {
2386
+ var n, e = 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]);
2387
+ if (typeof WebAssembly != "object") return { supported: !1 };
2388
+ var a = WebAssembly.instantiate(function(o) {
2389
+ for (var d = new Uint8Array(o.length), c = 0; c < o.length; ++c) {
2390
+ var g = o.charCodeAt(c);
2391
+ d[c] = g > 96 ? g - 97 : g > 64 ? g - 39 : g + 4;
2392
+ }
2393
+ var l = 0;
2394
+ for (c = 0; c < o.length; ++c) d[l++] = d[c] < 60 ? e[d[c]] : 64 * (d[c] - 60) + d[++c];
2395
+ return d.buffer.slice(0, l);
2396
+ }("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"), {}).then(function(o) {
2397
+ (n = o.instance).exports.__wasm_call_ctors(), n.exports.meshopt_encodeVertexVersion(0), n.exports.meshopt_encodeIndexVersion(1);
2398
+ });
2399
+ function A(o) {
2400
+ if (!o) throw new Error("Assertion failed");
2401
+ }
2402
+ function t(o) {
2403
+ return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);
2404
+ }
2405
+ function i(o, d, c, g, l) {
2406
+ var h = n.exports.sbrk, f = h(d), I = h(g * l), B = new Uint8Array(n.exports.memory.buffer);
2407
+ B.set(t(c), I);
2408
+ var u = o(f, d, I, g, l), E = new Uint8Array(u);
2409
+ return E.set(B.subarray(f, f + u)), h(f - h(0)), E;
2410
+ }
2411
+ function s(o) {
2412
+ for (var d = 0, c = 0; c < o.length; ++c)
2413
+ var g = o[c];
2414
+ return d;
2415
+ }
2416
+ function r(o, d) {
2417
+ if (A(d == 2 || d == 4), d == 4) return new Uint32Array(o.buffer, o.byteOffset, o.byteLength / 4);
2418
+ var c = new Uint16Array(o.buffer, o.byteOffset, o.byteLength / 2);
2419
+ return new Uint32Array(c);
2420
+ }
2421
+ function b(o, d, c, g, l, h, f) {
2422
+ var I = n.exports.sbrk, B = I(c * g), u = I(c * h), E = new Uint8Array(n.exports.memory.buffer);
2423
+ E.set(t(d), u), o(B, c, g, l, u, f);
2424
+ var C = new Uint8Array(c * g);
2425
+ return C.set(E.subarray(B, B + c * g)), I(B - I(0)), C;
2426
+ }
2427
+ })();
2428
+ var BA = function() {
2429
+ var n = 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]), e = 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]);
2430
+ if (typeof WebAssembly != "object") return { supported: !1 };
2431
+ var a, A = WebAssembly.validate(n) ? "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" : "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", t = WebAssembly.instantiate(i(A), {}).then(function(l) {
2432
+ (a = l.instance).exports.__wasm_call_ctors();
2433
+ });
2434
+ function i(l) {
2435
+ for (var h = new Uint8Array(l.length), f = 0; f < l.length; ++f) {
2436
+ var I = l.charCodeAt(f);
2437
+ h[f] = I > 96 ? I - 97 : I > 64 ? I - 39 : I + 4;
2438
+ }
2439
+ var B = 0;
2440
+ for (f = 0; f < l.length; ++f) h[B++] = h[f] < 60 ? e[h[f]] : 64 * (h[f] - 60) + h[++f];
2441
+ return h.buffer.slice(0, B);
2442
+ }
2443
+ function s(l, h, f, I, B, u, E) {
2444
+ var C = l.exports.sbrk, D = I + 3 & -4, y = C(D * B), w = C(u.length), p = new Uint8Array(l.exports.memory.buffer);
2445
+ p.set(u, w);
2446
+ var Q = h(y, I, B, w, u.length);
2447
+ if (Q == 0 && E && E(y, D, B), f.set(p.subarray(y, y + I * B)), C(y - C(0)), Q != 0) throw new Error("Malformed buffer data: " + Q);
2448
+ }
2449
+ var r = { NONE: "", OCTAHEDRAL: "meshopt_decodeFilterOct", QUATERNION: "meshopt_decodeFilterQuat", EXPONENTIAL: "meshopt_decodeFilterExp" }, b = { ATTRIBUTES: "meshopt_decodeVertexBuffer", TRIANGLES: "meshopt_decodeIndexBuffer", INDICES: "meshopt_decodeIndexSequence" }, o = [], d = 0;
2450
+ function c(l) {
2451
+ var h = { object: new Worker(l), pending: 0, requests: {} };
2452
+ return h.object.onmessage = function(f) {
2453
+ var I = f.data;
2454
+ h.pending -= I.count, h.requests[I.id][I.action](I.value), delete h.requests[I.id];
2455
+ }, h;
2456
+ }
2457
+ function g(l) {
2458
+ var h = l.data;
2459
+ if (!h.id) return self.close();
2460
+ self.ready.then(function(f) {
2461
+ try {
2462
+ var I = new Uint8Array(h.count * h.size);
2463
+ s(f, f.exports[h.mode], I, h.count, h.size, h.source, f.exports[h.filter]), self.postMessage({ id: h.id, count: h.count, action: "resolve", value: I }, [I.buffer]);
2464
+ } catch (B) {
2465
+ self.postMessage({ id: h.id, count: h.count, action: "reject", value: B });
2466
+ }
2467
+ });
2468
+ }
2469
+ return { ready: t, supported: !0, useWorkers: function(l) {
2470
+ (function(h) {
2471
+ for (var f = "self.ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(i(A)) + "]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = " + g.name + ";" + s.toString() + g.toString(), I = new Blob([f], { type: "text/javascript" }), B = URL.createObjectURL(I), u = o.length; u < h; ++u) o[u] = c(B);
2472
+ for (u = h; u < o.length; ++u) o[u].object.postMessage({});
2473
+ o.length = h, URL.revokeObjectURL(B);
2474
+ })(l);
2475
+ }, decodeVertexBuffer: function(l, h, f, I, B) {
2476
+ s(a, a.exports.meshopt_decodeVertexBuffer, l, h, f, I, a.exports[r[B]]);
2477
+ }, decodeIndexBuffer: function(l, h, f, I) {
2478
+ s(a, a.exports.meshopt_decodeIndexBuffer, l, h, f, I);
2479
+ }, decodeIndexSequence: function(l, h, f, I) {
2480
+ s(a, a.exports.meshopt_decodeIndexSequence, l, h, f, I);
2481
+ }, decodeGltfBuffer: function(l, h, f, I, B, u) {
2482
+ s(a, a.exports[b[B]], l, h, f, I, a.exports[r[u]]);
2483
+ }, decodeGltfBufferAsync: function(l, h, f, I, B) {
2484
+ return o.length > 0 ? function(u, E, C, D, y) {
2485
+ for (var w = o[0], p = 1; p < o.length; ++p) o[p].pending < w.pending && (w = o[p]);
2486
+ return new Promise(function(Q, k) {
2487
+ var x = new Uint8Array(C), R = ++d;
2488
+ w.pending += u, w.requests[R] = { resolve: Q, reject: k }, w.object.postMessage({ id: R, count: u, size: E, source: x, mode: D, filter: y }, [x.buffer]);
2489
+ });
2490
+ }(l, h, f, b[I], r[B]) : t.then(function() {
2491
+ var u = new Uint8Array(l * h);
2492
+ return s(a, a.exports[b[I]], u, l, h, f, a.exports[r[B]]), u;
2493
+ });
2494
+ } };
2495
+ }();
2496
+ (function() {
2497
+ var n, e = 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]);
2498
+ if (typeof WebAssembly != "object") return { supported: !1 };
2499
+ var a = WebAssembly.instantiate(function(r) {
2500
+ for (var b = new Uint8Array(r.length), o = 0; o < r.length; ++o) {
2501
+ var d = r.charCodeAt(o);
2502
+ b[o] = d > 96 ? d - 97 : d > 64 ? d - 39 : d + 4;
2503
+ }
2504
+ var c = 0;
2505
+ for (o = 0; o < r.length; ++o) b[c++] = b[o] < 60 ? e[b[o]] : 64 * (b[o] - 60) + b[++o];
2506
+ return b.buffer.slice(0, c);
2507
+ }("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"), {}).then(function(r) {
2508
+ (n = r.instance).exports.__wasm_call_ctors();
2509
+ });
2510
+ function A(r) {
2511
+ if (!r) throw new Error("Assertion failed");
2512
+ }
2513
+ function t(r) {
2514
+ return new Uint8Array(r.buffer, r.byteOffset, r.byteLength);
2515
+ }
2516
+ function i(r, b, o, d, c, g, l, h) {
2517
+ var f = n.exports.sbrk, I = f(4 * h), B = f(o * d), u = f(o * g), E = new Uint8Array(n.exports.memory.buffer);
2518
+ E.set(t(b), B), c && E.set(t(c), u);
2519
+ var C = r(I, B, o, d, u, g, l, h);
2520
+ new Uint8Array(n.exports.memory.buffer);
2521
+ var D = new Uint32Array(C);
2522
+ return t(D).set(E.subarray(I, I + 4 * C)), f(I - f(0)), D;
2523
+ }
2524
+ var s = { LockBorder: 1 };
2525
+ })();
2526
+ let ne = 0;
2527
+ class bi {
2528
+ constructor(e) {
2529
+ if (this.zUpToYUpMatrix = new m.Matrix4(), this.zUpToYUpMatrix.set(1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1), this.maxCachedItems = 100, this.proxy = e.proxy, e && (this.meshCallback = e.meshCallback, this.pointsCallback = e.pointsCallback, e.maxCachedItems && (this.maxCachedItems = e.maxCachedItems)), this.gltfLoader = new eA(), e && e.dracoLoader) this.gltfLoader.setDRACOLoader(e.dracoLoader), this.hasDracoLoader = !0;
2530
+ else {
2531
+ const a = new tA();
2532
+ a.setDecoderPath("https://storage.googleapis.com/ogc-3d-tiles/draco/"), this.gltfLoader.setDRACOLoader(a), this.gltfLoader.hasDracoLoader = !0;
2533
+ }
2534
+ if (e && e.ktx2Loader) this.gltfLoader.setKTX2Loader(e.ktx2Loader), this.hasKTX2Loader = !0;
2535
+ else if (e && e.renderer) {
2536
+ const a = new v();
2537
+ a.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(e.renderer), this.gltfLoader.setKTX2Loader(a), this.gltfLoader.hasKTX2Loader = !0;
2538
+ }
2539
+ this.gltfLoader.setMeshoptDecoder(BA), this.hasMeshOptDecoder = !0, this.b3dmDecoder = new $a(this.gltfLoader), this.cache = new Xa.LinkedHashMap(), this.register = {}, this.ready = [], this.downloads = [], this.nextReady = [], this.nextDownloads = [];
2540
+ }
2541
+ update() {
2542
+ const e = this;
2543
+ ne < 8 && e._download(), e._loadBatch();
2544
+ }
2545
+ _scheduleDownload(e) {
2546
+ this.downloads.unshift(e);
2547
+ }
2548
+ _download() {
2549
+ if (this.nextDownloads.length != 0 || (this._getNextDownloads(), this.nextDownloads.length != 0)) for (; this.nextDownloads.length > 0; ) {
2550
+ const e = this.nextDownloads.shift();
2551
+ e && e.shouldDoDownload() && e.doDownload();
2552
+ }
2553
+ }
2554
+ _meshReceived(e, a, A, t, i, s, r) {
2555
+ this.ready.unshift([e, a, A, t, i, s, r]);
2556
+ }
2557
+ _loadBatch() {
2558
+ for (this.nextReady.length == 0 && this._getNextReady(); this.nextReady.length > 0; ) {
2559
+ const e = this.nextReady.shift();
2560
+ if (!e) return;
2561
+ const a = e[0], A = e[1], t = e[2], i = a.get(t);
2562
+ i && A[t] && Object.keys(A[t]).forEach((s) => {
2563
+ const r = A[t][s];
2564
+ r && (r(i), A[t][s] = null);
2565
+ }), this.nextReady.length == 0 && this._getNextReady();
2566
+ }
2567
+ }
2568
+ _getNextDownloads() {
2569
+ let e = Number.POSITIVE_INFINITY, a = -1;
2570
+ for (let A = this.downloads.length - 1; A >= 0; A--) this.downloads[A].distanceFunction || this.nextDownloads.push(this.downloads.splice(A, 1)[0]);
2571
+ if (!(this.nextDownloads.length > 0)) {
2572
+ for (let A = this.downloads.length - 1; A >= 0; A--) {
2573
+ const t = this.downloads[A].distanceFunction();
2574
+ t <= e && (e = t, a = A);
2575
+ }
2576
+ if (a >= 0) {
2577
+ const A = this.downloads.splice(a, 1).pop();
2578
+ this.nextDownloads.push(A);
2579
+ const t = A.getSiblings();
2580
+ for (let i = this.downloads.length - 1; i >= 0; i--) t.map((s) => s.uuid).includes(this.downloads[i].uuid) && this.nextDownloads.push(this.downloads.splice(i, 1).pop());
2581
+ }
2582
+ }
2583
+ }
2584
+ _getNextReady() {
2585
+ let e = Number.POSITIVE_INFINITY, a = -1;
2586
+ for (let A = this.ready.length - 1; A >= 0; A--) this.ready[A][3] || this.nextReady.push(this.ready.splice(A, 1)[0]);
2587
+ if (!(this.nextReady.length > 0)) {
2588
+ for (let A = this.ready.length - 1; A >= 0; A--) {
2589
+ const t = this.ready[A][3]() * this.ready[A][5];
2590
+ t <= e && (e = t, a = A);
2591
+ }
2592
+ if (a >= 0) {
2593
+ const A = this.ready.splice(a, 1).pop();
2594
+ this.nextReady.push(A);
2595
+ const t = A[4]();
2596
+ for (let i = this.ready.length - 1; i >= 0; i--) t.map((s) => s.uuid).includes(this.ready[i][6]) && this.nextReady.push(this.ready.splice(i, 1).pop());
2597
+ }
2598
+ }
2599
+ }
2600
+ get(e, a, A, t, i, s, r, b, o, d) {
2601
+ const c = this, g = Ga(A), l = new AbortController();
2602
+ if (e.signal.addEventListener("abort", () => {
2603
+ c.register[g] && Object.keys(c.register[g]).length != 0 || l.abort("user abort");
2604
+ }), !(A.includes(".b3dm") || A.includes(".json") || A.includes(".gltf") || A.includes(".glb"))) return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");
2605
+ if (c.register[g] || (c.register[g] = {}), c.register[g][a] && console.error(" a tile should only be loaded once"), c.register[g][a] = t, c.cache.get(g)) this._meshReceived(c.cache, c.register, g, i, s, r, a);
2606
+ else if (Object.keys(c.register[g]).length == 1) {
2607
+ let h;
2608
+ A.includes(".b3dm") ? h = () => {
2609
+ var f;
2610
+ f = c.proxy ? () => fetch(c.proxy, { method: "POST", body: A, signal: l.signal }) : () => fetch(A, { signal: l.signal }), ne++, f().then((I) => {
2611
+ if (!I.ok) throw console.error("could not load tile with path : " + A), new Error(`couldn't load "${A}". Request failed with status ${I.status} : ${I.statusText}`);
2612
+ return I.arrayBuffer();
2613
+ }).then((I) => this.b3dmDecoder.parseB3DM(I, (B) => {
2614
+ c.meshCallback(B, d);
2615
+ }, b, o)).then((I) => {
2616
+ c.cache.put(g, I), c._checkSize(), this._meshReceived(c.cache, c.register, g, i, s, r, a);
2617
+ }).catch((I) => {
2618
+ console.error(I);
2619
+ }).finally(() => {
2620
+ ne--;
2621
+ });
2622
+ } : A.includes(".glb") || A.includes(".gltf") ? h = () => {
2623
+ var f;
2624
+ f = c.proxy ? () => fetch(c.proxy, { method: "POST", body: A, signal: l.signal }) : () => fetch(A, { signal: l.signal }), ne++, f().then((I) => {
2625
+ if (!I.ok) throw console.error("could not load tile with path : " + A), new Error(`couldn't load "${A}". Request failed with status ${I.status} : ${I.statusText}`);
2626
+ return I.arrayBuffer();
2627
+ }).then(async (I) => {
2628
+ await async function(B) {
2629
+ return new Promise((u) => {
2630
+ const E = setInterval(() => {
2631
+ B.hasDracoLoader && !B.dracoLoader || B.hasKTX2Loader && !B.ktx2Loader || (clearInterval(E), u());
2632
+ }, 10);
2633
+ });
2634
+ }(this.gltfLoader), this.gltfLoader.parse(I, null, (B) => {
2635
+ B.scene.asset = B.asset, b && B.scene.applyMatrix4(this.zUpToYUpMatrix), B.scene.traverse((u) => {
2636
+ u.isMesh && (o && u.applyMatrix4(this.zUpToYUpMatrix), c.meshCallback && c.meshCallback(u, d)), u.isPoints && c.pointsCallback && c.pointsCallback(u, d);
2637
+ }), c.cache.put(g, B.scene), c._checkSize(), c._meshReceived(c.cache, c.register, g, i, s, r, a);
2638
+ });
2639
+ }).catch((I) => {
2640
+ I !== "user abort" && I.code !== 20 && console.error(I);
2641
+ }).finally(() => {
2642
+ ne--;
2643
+ });
2644
+ } : A.includes(".json") && (h = () => {
2645
+ var f;
2646
+ f = c.proxy ? () => fetch(c.proxy, { method: "POST", body: A, signal: l.signal }) : () => fetch(A, { signal: l.signal }), ne++, f().then((I) => {
2647
+ if (!I.ok) throw console.error("could not load tile with path : " + A), new Error(`couldn't load "${A}". Request failed with status ${I.status} : ${I.statusText}`);
2648
+ return I.json();
2649
+ }).then((I) => la(I, A)).then((I) => {
2650
+ c.cache.put(g, I), c._checkSize(), c._meshReceived(c.cache, c.register, g);
2651
+ }).catch((I) => {
2652
+ console.error(I);
2653
+ }).finally(() => {
2654
+ ne--;
2655
+ });
2656
+ }), this._scheduleDownload({ shouldDoDownload: () => !e.signal.aborted && !!c.register[g] && Object.keys(c.register[g]).length > 0, doDownload: h, distanceFunction: i, getSiblings: s, level: r, uuid: a });
2657
+ }
2658
+ }
2659
+ clear() {
2660
+ const e = this.maxCachedItems;
2661
+ this.maxCachedItems = 0, this._checkSize(), this.maxCachedItems = e;
2662
+ }
2663
+ invalidate(e, a) {
2664
+ const A = Ga(e);
2665
+ this.register[A] && delete this.register[A][a];
2666
+ }
2667
+ _checkSize() {
2668
+ const e = this;
2669
+ let a = 0;
2670
+ for (; e.cache.size() > e.maxCachedItems && a < e.cache.size(); ) {
2671
+ a++;
2672
+ const A = e.cache.head(), t = e.register[A.key];
2673
+ t && (Object.keys(t).length > 0 ? (e.cache.remove(A.key), e.cache.put(A.key, A.value)) : (e.cache.remove(A.key), delete e.register[A.key], A.value.traverse((i) => {
2674
+ if (i.material) if (i.material.length) for (let s = 0; s < i.material.length; ++s) i.material[s].dispose();
2675
+ else i.material.dispose();
2676
+ i.geometry && i.geometry.dispose();
2677
+ })));
2678
+ }
2679
+ }
2680
+ }
2681
+ function Ga(n) {
2682
+ for (var e = n.split("/"), a = [], A = 0, t = 0; t < e.length; t++) {
2683
+ var i = e[t];
2684
+ i !== "." && i !== "" && i !== ".." ? a[A++] = i : i === ".." && A > 0 && A--;
2685
+ }
2686
+ if (A === 0) return "/";
2687
+ var s = "";
2688
+ for (t = 0; t < A; t++) s += "/" + a[t];
2689
+ return s;
2690
+ }
2691
+ var Ze, di = new Uint8Array(16);
2692
+ function gi() {
2693
+ if (!Ze && !(Ze = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto < "u" && typeof msCrypto.getRandomValues == "function" && msCrypto.getRandomValues.bind(msCrypto))) throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
2694
+ return Ze(di);
2695
+ }
2696
+ const hi = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
2697
+ for (var F = [], $e = 0; $e < 256; ++$e) F.push(($e + 256).toString(16).substr(1));
2698
+ function li(n) {
2699
+ var e = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0, a = (F[n[e + 0]] + F[n[e + 1]] + F[n[e + 2]] + F[n[e + 3]] + "-" + F[n[e + 4]] + F[n[e + 5]] + "-" + F[n[e + 6]] + F[n[e + 7]] + "-" + F[n[e + 8]] + F[n[e + 9]] + "-" + F[n[e + 10]] + F[n[e + 11]] + F[n[e + 12]] + F[n[e + 13]] + F[n[e + 14]] + F[n[e + 15]]).toLowerCase();
2700
+ if (!function(A) {
2701
+ return typeof A == "string" && hi.test(A);
2702
+ }(a)) throw TypeError("Stringified UUID is invalid");
2703
+ return a;
2704
+ }
2705
+ function CA(n, e, a) {
2706
+ var A = (n = n || {}).random || (n.rng || gi)();
2707
+ return A[6] = 15 & A[6] | 64, A[8] = 63 & A[8] | 128, li(A);
2708
+ }
2709
+ function K(n) {
2710
+ if (typeof n != "string") throw new TypeError("Path must be a string. Received " + JSON.stringify(n));
2711
+ }
2712
+ function va(n, e) {
2713
+ for (var a, A = "", t = 0, i = -1, s = 0, r = 0; r <= n.length; ++r) {
2714
+ if (r < n.length) a = n.charCodeAt(r);
2715
+ else {
2716
+ if (a === 47) break;
2717
+ a = 47;
2718
+ }
2719
+ if (a === 47) {
2720
+ if (!(i === r - 1 || s === 1)) if (i !== r - 1 && s === 2) {
2721
+ if (A.length < 2 || t !== 2 || A.charCodeAt(A.length - 1) !== 46 || A.charCodeAt(A.length - 2) !== 46) {
2722
+ if (A.length > 2) {
2723
+ var b = A.lastIndexOf("/");
2724
+ if (b !== A.length - 1) {
2725
+ b === -1 ? (A = "", t = 0) : t = (A = A.slice(0, b)).length - 1 - A.lastIndexOf("/"), i = r, s = 0;
2726
+ continue;
2727
+ }
2728
+ } else if (A.length === 2 || A.length === 1) {
2729
+ A = "", t = 0, i = r, s = 0;
2730
+ continue;
2731
+ }
2732
+ }
2733
+ e && (A.length > 0 ? A += "/.." : A = "..", t = 2);
2734
+ } else A.length > 0 ? A += "/" + n.slice(i + 1, r) : A = n.slice(i + 1, r), t = r - i - 1;
2735
+ i = r, s = 0;
2736
+ } else a === 46 && s !== -1 ? ++s : s = -1;
2737
+ }
2738
+ return A;
2739
+ }
2740
+ var Be = { resolve: function() {
2741
+ for (var n, e = "", a = !1, A = arguments.length - 1; A >= -1 && !a; A--) {
2742
+ var t;
2743
+ A >= 0 ? t = arguments[A] : (n === void 0 && (n = process.cwd()), t = n), K(t), t.length !== 0 && (e = t + "/" + e, a = t.charCodeAt(0) === 47);
2744
+ }
2745
+ return e = va(e, !a), a ? e.length > 0 ? "/" + e : "/" : e.length > 0 ? e : ".";
2746
+ }, normalize: function(n) {
2747
+ if (K(n), n.length === 0) return ".";
2748
+ var e = n.charCodeAt(0) === 47, a = n.charCodeAt(n.length - 1) === 47;
2749
+ return (n = va(n, !e)).length !== 0 || e || (n = "."), n.length > 0 && a && (n += "/"), e ? "/" + n : n;
2750
+ }, isAbsolute: function(n) {
2751
+ return K(n), n.length > 0 && n.charCodeAt(0) === 47;
2752
+ }, join: function() {
2753
+ if (arguments.length === 0) return ".";
2754
+ for (var n, e = 0; e < arguments.length; ++e) {
2755
+ var a = arguments[e];
2756
+ K(a), a.length > 0 && (n === void 0 ? n = a : n += "/" + a);
2757
+ }
2758
+ return n === void 0 ? "." : Be.normalize(n);
2759
+ }, relative: function(n, e) {
2760
+ if (K(n), K(e), n === e || (n = Be.resolve(n)) === (e = Be.resolve(e))) return "";
2761
+ for (var a = 1; a < n.length && n.charCodeAt(a) === 47; ++a) ;
2762
+ for (var A = n.length, t = A - a, i = 1; i < e.length && e.charCodeAt(i) === 47; ++i) ;
2763
+ for (var s = e.length - i, r = t < s ? t : s, b = -1, o = 0; o <= r; ++o) {
2764
+ if (o === r) {
2765
+ if (s > r) {
2766
+ if (e.charCodeAt(i + o) === 47) return e.slice(i + o + 1);
2767
+ if (o === 0) return e.slice(i + o);
2768
+ } else t > r && (n.charCodeAt(a + o) === 47 ? b = o : o === 0 && (b = 0));
2769
+ break;
2770
+ }
2771
+ var d = n.charCodeAt(a + o);
2772
+ if (d !== e.charCodeAt(i + o)) break;
2773
+ d === 47 && (b = o);
2774
+ }
2775
+ var c = "";
2776
+ for (o = a + b + 1; o <= A; ++o) o !== A && n.charCodeAt(o) !== 47 || (c.length === 0 ? c += ".." : c += "/..");
2777
+ return c.length > 0 ? c + e.slice(i + b) : (i += b, e.charCodeAt(i) === 47 && ++i, e.slice(i));
2778
+ }, _makeLong: function(n) {
2779
+ return n;
2780
+ }, dirname: function(n) {
2781
+ if (K(n), n.length === 0) return ".";
2782
+ for (var e = n.charCodeAt(0), a = e === 47, A = -1, t = !0, i = n.length - 1; i >= 1; --i) if ((e = n.charCodeAt(i)) === 47) {
2783
+ if (!t) {
2784
+ A = i;
2785
+ break;
2786
+ }
2787
+ } else t = !1;
2788
+ return A === -1 ? a ? "/" : "." : a && A === 1 ? "//" : n.slice(0, A);
2789
+ }, basename: function(n, e) {
2790
+ if (e !== void 0 && typeof e != "string") throw new TypeError('"ext" argument must be a string');
2791
+ K(n);
2792
+ var a, A = 0, t = -1, i = !0;
2793
+ if (e !== void 0 && e.length > 0 && e.length <= n.length) {
2794
+ if (e.length === n.length && e === n) return "";
2795
+ var s = e.length - 1, r = -1;
2796
+ for (a = n.length - 1; a >= 0; --a) {
2797
+ var b = n.charCodeAt(a);
2798
+ if (b === 47) {
2799
+ if (!i) {
2800
+ A = a + 1;
2801
+ break;
2802
+ }
2803
+ } else r === -1 && (i = !1, r = a + 1), s >= 0 && (b === e.charCodeAt(s) ? --s == -1 && (t = a) : (s = -1, t = r));
2804
+ }
2805
+ return A === t ? t = r : t === -1 && (t = n.length), n.slice(A, t);
2806
+ }
2807
+ for (a = n.length - 1; a >= 0; --a) if (n.charCodeAt(a) === 47) {
2808
+ if (!i) {
2809
+ A = a + 1;
2810
+ break;
2811
+ }
2812
+ } else t === -1 && (i = !1, t = a + 1);
2813
+ return t === -1 ? "" : n.slice(A, t);
2814
+ }, extname: function(n) {
2815
+ K(n);
2816
+ for (var e = -1, a = 0, A = -1, t = !0, i = 0, s = n.length - 1; s >= 0; --s) {
2817
+ var r = n.charCodeAt(s);
2818
+ if (r !== 47) A === -1 && (t = !1, A = s + 1), r === 46 ? e === -1 ? e = s : i !== 1 && (i = 1) : e !== -1 && (i = -1);
2819
+ else if (!t) {
2820
+ a = s + 1;
2821
+ break;
2822
+ }
2823
+ }
2824
+ return e === -1 || A === -1 || i === 0 || i === 1 && e === A - 1 && e === a + 1 ? "" : n.slice(e, A);
2825
+ }, format: function(n) {
2826
+ if (n === null || typeof n != "object") throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof n);
2827
+ return function(e, a) {
2828
+ var A = a.dir || a.root, t = a.base || (a.name || "") + (a.ext || "");
2829
+ return A ? A === a.root ? A + t : A + e + t : t;
2830
+ }("/", n);
2831
+ }, parse: function(n) {
2832
+ K(n);
2833
+ var e = { root: "", dir: "", base: "", ext: "", name: "" };
2834
+ if (n.length === 0) return e;
2835
+ var a, A = n.charCodeAt(0), t = A === 47;
2836
+ t ? (e.root = "/", a = 1) : a = 0;
2837
+ for (var i = -1, s = 0, r = -1, b = !0, o = n.length - 1, d = 0; o >= a; --o) if ((A = n.charCodeAt(o)) !== 47) r === -1 && (b = !1, r = o + 1), A === 46 ? i === -1 ? i = o : d !== 1 && (d = 1) : i !== -1 && (d = -1);
2838
+ else if (!b) {
2839
+ s = o + 1;
2840
+ break;
2841
+ }
2842
+ return i === -1 || r === -1 || d === 0 || d === 1 && i === r - 1 && i === s + 1 ? r !== -1 && (e.base = e.name = s === 0 && t ? n.slice(1, r) : n.slice(s, r)) : (s === 0 && t ? (e.name = n.slice(1, i), e.base = n.slice(1, r)) : (e.name = n.slice(s, i), e.base = n.slice(s, r)), e.ext = n.slice(i, r)), s > 0 ? e.dir = n.slice(0, s - 1) : t && (e.dir = "/"), e;
2843
+ }, sep: "/", delimiter: ":", win32: null, posix: null };
2844
+ Be.posix = Be;
2845
+ var V, ie = Be;
2846
+ const T = new m.Sphere(new m.Vector3(0, 0, 0), 1);
2847
+ new m.Box3();
2848
+ const ae = new m.Vector3(0, 0, 0), ea = new m.Vector3(0, 0, 0), Ii = new m.Vector3(0, 1, 0), Ua = new m.Quaternion(), z = {};
2849
+ function fi() {
2850
+ var n = [];
2851
+ for (let e in z) z.hasOwnProperty(e) && z[e] > 0 && n.push(e);
2852
+ return n;
2853
+ }
2854
+ class EA extends m.Object3D {
2855
+ constructor(e) {
2856
+ super();
2857
+ const a = this;
2858
+ if (this.contentURL = [], e.domWidth && e.domHeight ? this.rendererSize = new m.Vector2(e.domWidth, e.domHeight) : this.rendererSize = new m.Vector2(1e3, 1e3), this.loadingStrategy = e.loadingStrategy ? e.loadingStrategy.toUpperCase() : "INCREMENTAL", this.distanceBias = Math.max(1e-4, e.distanceBias ? e.distanceBias : 1), this.proxy = e.proxy, this.drawBoundingVolume = !!e.drawBoundingVolume && e.drawBoundingVolume, this.displayErrors = e.displayErrors, this.displayCopyright = e.displayCopyright, e.queryParams && (this.queryParams = { ...e.queryParams }), this.uuid = CA(), e.tileLoader) this.tileLoader = e.tileLoader;
2859
+ else {
2860
+ const i = {};
2861
+ i.meshCallback = e.meshCallback ? e.meshCallback : (s, r) => {
2862
+ s.material.wireframe = !1, s.material.side = m.DoubleSide;
2863
+ }, i.pointsCallback = e.pointsCallback ? e.pointsCallback : (s, r) => {
2864
+ s.material.size = Math.pow(r, 0.33), s.material.sizeAttenuation = !0;
2865
+ }, i.proxy = this.proxy, i.renderer = e.renderer, i.dracoLoader = e.dracoLoader, i.ktx2Loader = e.ktx2Loader, this.tileLoader = new bi(i), this.update = (s) => {
2866
+ this.update(s), this.tileLoader.update();
2867
+ };
2868
+ }
2869
+ if (this.displayCopyright = !!e.displayCopyright, this.geometricErrorMultiplier = e.geometricErrorMultiplier ? e.geometricErrorMultiplier : 1, this.renderer = e.renderer, this.meshCallback = e.meshCallback, this.loadOutsideView = e.loadOutsideView, this.cameraOnLoad = e.cameraOnLoad, this.parentTile = e.parentTile, this.occlusionCullingService = e.occlusionCullingService, this.static = e.static, this.occlusionCullingService && (this.color = new m.Color(), this.color.setHex(16777215 * Math.random()), this.colorID = m.MathUtils.clamp(255 * a.color.r, 0, 255) << 16 ^ m.MathUtils.clamp(255 * a.color.g, 0, 255) << 8 ^ m.MathUtils.clamp(255 * a.color.b, 0, 255)), this.static && (this.matrixAutoUpdate = !1, this.matrixWorldAutoUpdate = !1), this.childrenTiles = [], this.meshContent = [], this.tileContent, this.refine, this.rootPath, this.geometricError, this.boundingVolume, this.json, this.materialVisibility = !1, this.level = e.level ? e.level : 0, this.hasMeshContent = 0, this.hasUnloadedJSONContent = 0, this.centerModel = e.centerModel, this.abortController = new AbortController(), this.onLoadCallback = e.onLoadCallback, e.json) a._setup(e);
2870
+ else if (e.url) {
2871
+ var A = e.url;
2872
+ if (a.queryParams) {
2873
+ var t = "";
2874
+ for (let i in a.queryParams) a.queryParams.hasOwnProperty(i) && (t += "&" + i + "=" + a.queryParams[i]);
2875
+ A.includes("?") ? A += t : A += "?" + t.substring(1);
2876
+ }
2877
+ (a.proxy ? () => fetch(a.proxy, { method: "POST", body: A, signal: a.abortController.signal }) : () => fetch(A, { signal: a.abortController.signal }))().then((i) => {
2878
+ if (!i.ok) throw new Error(`couldn't load "${e.url}". Request failed with status ${i.status} : ${i.statusText}`);
2879
+ i.json().then((s) => la(s, A)).then((s) => {
2880
+ a._setup({ rootPath: ie.dirname(e.url), json: s });
2881
+ });
2882
+ }).catch((i) => {
2883
+ a.displayErrors && Na(i);
2884
+ });
2885
+ }
2886
+ }
2887
+ updateMatrices() {
2888
+ this.updateMatrix(), this.static && this.traverse((e) => {
2889
+ e.isObject3D && (e.matrixWorldAutoUpdate = !0);
2890
+ }), this.updateMatrixWorld(!0), this.static && this.traverse((e) => {
2891
+ e.isObject3D && (e.matrixWorldAutoUpdate = !1);
2892
+ });
2893
+ }
2894
+ setCanvasSize(e, a) {
2895
+ this.rendererSize.set(e, a);
2896
+ }
2897
+ async _setup(e) {
2898
+ const a = this;
2899
+ if (e.json.root ? (a.json = e.json.root, a.json.refine || (a.json.refine = e.json.refine), a.json.geometricError || (a.json.geometricError = e.json.geometricError), a.json.transform || (a.json.transform = e.json.transform), a.json.boundingVolume || (a.json.boundingVolume = e.json.boundingVolume)) : a.json = e.json, a.json.children || (a.json.getChildren ? a.json.children = await a.json.getChildren() : a.json.children = []), a.rootPath = e.json.rootPath ? e.json.rootPath : e.rootPath, a.json.refine ? a.refine = a.json.refine : a.refine = e.parentRefine, a.json.geometricError ? a.geometricError = a.json.geometricError : a.geometricError = e.parentGeometricError, a.json.transform) {
2900
+ let t = new m.Matrix4();
2901
+ t.elements = a.json.transform, a.applyMatrix4(t);
2902
+ }
2903
+ if (a.json.boundingVolume) if (a.json.boundingVolume.box) a.boundingVolume = new te(a.json.boundingVolume.box);
2904
+ else if (a.json.boundingVolume.region) {
2905
+ const t = a.json.boundingVolume.region;
2906
+ a._transformWGS84ToCartesian(t[0], t[1], t[4], ae), a._transformWGS84ToCartesian(t[2], t[3], t[5], ea), ae.lerp(ea, 0.5), a.boundingVolume = new m.Sphere(new m.Vector3(ae.x, ae.y, ae.z), ae.distanceTo(ea));
2907
+ } else if (a.json.boundingVolume.sphere) {
2908
+ const t = a.json.boundingVolume.sphere;
2909
+ a.boundingVolume = new m.Sphere(new m.Vector3(t[0], t[1], t[2]), t[3]);
2910
+ } else a.boundingVolume = e.parentBoundingVolume;
2911
+ else a.boundingVolume = e.parentBoundingVolume;
2912
+ function A(t) {
2913
+ t.uri && t.uri.includes("json") || t.url && t.url.includes("json") ? a.hasUnloadedJSONContent++ : a.hasMeshContent++;
2914
+ }
2915
+ if (a.json.content ? (A(a.json.content), a.hasMeshContent == 0 && (a.level = Math.max(0, a.parentTile ? a.parentTile.level + 0.01 : 0)), a.loadingStrategy === "IMMEDIATE" ? a._load(!0, !1) : a._load()) : a.json.contents && (a.json.contents.forEach((t) => A(t)), a.hasMeshContent == 0 && (a.level = Math.max(0, a.parentTile ? a.parentTile.level + 0.01 : 0)), a.loadingStrategy === "IMMEDIATE" ? a._load(!0, !1) : a._load()), a.centerModel) {
2916
+ const t = new m.Sphere();
2917
+ a.boundingVolume instanceof te ? t.copy(a.boundingVolume.sphere) : a.boundingVolume instanceof m.Sphere && t.copy(a.boundingVolume), this.json.boundingVolume.region && (this._transformWGS84ToCartesian(0.5 * (this.json.boundingVolume.region[0] + this.json.boundingVolume.region[2]), 0.5 * (this.json.boundingVolume.region[1] + this.json.boundingVolume.region[3]), 0.5 * (this.json.boundingVolume.region[4] + this.json.boundingVolume.region[5]), ae), Ua.setFromUnitVectors(ae.normalize(), Ii.normalize()), a.applyQuaternion(Ua)), t.center.applyMatrix4(a.matrix), a.position.sub(t.center), a.updateMatrices();
2918
+ }
2919
+ if (e.onLoadCallback && a.onLoadCallback(a), a.isSetup = !0, a.level > 0 && a.drawBoundingVolume && (a.bbox && console.log("double setup"), this.boundingVolume.aabb)) {
2920
+ let t = this.boundingVolume.aabb.clone();
2921
+ t.applyMatrix4(this.matrixWorld), a.bbox = new m.Box3Helper(t, 16776960), a.add(a.bbox), a.bbox.material.visible = !1;
2922
+ }
2923
+ }
2924
+ _assembleURL(e, a) {
2925
+ e.endsWith("/") || (e += "/");
2926
+ const A = new URL(e);
2927
+ let t = A.pathname.split("/").filter((s) => s !== ""), i = a.split("/").filter((s) => s !== "");
2928
+ for (let s = 1; s <= t.length && !(s >= i.length); s++)
2929
+ if (t.slice(t.length - s, t.length).join("/") === i.slice(0, s).join("/")) {
2930
+ for (let r = 0; r < s; r++) t.pop();
2931
+ break;
2932
+ }
2933
+ for (; i.length > 0 && i[0] === ".."; ) t.pop(), i.shift();
2934
+ return `${A.protocol}//${A.host}/${[...t, ...i].join("/")}`;
2935
+ }
2936
+ _extractQueryParams(e, a) {
2937
+ const A = new URL(e);
2938
+ for (let [t, i] of A.searchParams) a[t] = i;
2939
+ return A.search = "", A.toString();
2940
+ }
2941
+ async _load(e = !0, a = !0) {
2942
+ var A = this;
2943
+ if (!A.deleted) {
2944
+ if (A.json.content) await t(A.json.content, null, e, a);
2945
+ else if (A.json.contents) {
2946
+ let i = A.json.contents.map((s, r) => t(s, r, e, a));
2947
+ Promise.all(i);
2948
+ }
2949
+ }
2950
+ async function t(i, s, r, b) {
2951
+ let o;
2952
+ i.uri ? o = i.uri : i.url && (o = i.url);
2953
+ const d = /^(?:http|https|ftp|tcp|udp):\/\/\S+/;
2954
+ if (d.test(A.rootPath) ? d.test(o) || (o = A._assembleURL(A.rootPath, o)) : ie.isAbsolute(A.rootPath) && (o = A.rootPath + ie.sep + o), o = A._extractQueryParams(o, A.queryParams), A.queryParams) {
2955
+ var c = "";
2956
+ for (let g in A.queryParams) A.queryParams.hasOwnProperty(g) && (c += "&" + g + "=" + A.queryParams[g]);
2957
+ o.includes("?") ? o += c : o += "?" + c.substring(1);
2958
+ }
2959
+ if (o) if (b && (o.includes(".b3dm") || o.includes(".glb") || o.includes(".gltf"))) {
2960
+ A.contentURL.push(o);
2961
+ try {
2962
+ A.tileLoader.get(A.abortController, A.uuid, o, (g) => {
2963
+ A.deleted || (g.asset && g.asset.copyright && (g.asset.copyright.split(";").forEach((l) => {
2964
+ z[l] ? z[l]++ : z[l] = 1;
2965
+ }), A.displayCopyright && aa()), g.traverse((l) => {
2966
+ if ((l.isMesh || l.isPoints) && l.layers.disable(0), l.isMesh && A.occlusionCullingService) {
2967
+ const h = l.geometry.attributes.position, f = [];
2968
+ for (let I = 0; I < h.count; I++) f.push(A.color.r, A.color.g, A.color.b);
2969
+ l.geometry.setAttribute("color", new m.Float32BufferAttribute(f, 3));
2970
+ }
2971
+ }), A.add(g), A.updateMatrices(), A.meshContent.push(g));
2972
+ }, A.cameraOnLoad ? () => {
2973
+ let g = 1;
2974
+ return (A.metric && A.metric < 0 || A.deleted) && (g = 2), A.parentTile ? A.parentTile._calculateDistanceToCamera(A.cameraOnLoad) * g * A.level : A._calculateDistanceToCamera(A.cameraOnLoad) * g * A.level;
2975
+ } : () => 0, () => A._getSiblings(), A.level, !A.json.boundingVolume.region, !!A.json.boundingVolume.region, A.geometricError);
2976
+ } catch (g) {
2977
+ A.displayErrors && Na(g);
2978
+ }
2979
+ } else r && o.includes(".json") && (A.jsonRequested = o, A.tileLoader.get(A.abortController, A.uuid, o, async (g) => {
2980
+ A.deleted || (g.rootPath = ie.dirname(o), A.json.children.push(g), s == null ? delete A.json.content : A.json.contents.splice(s, 1), A.hasUnloadedJSONContent--);
2981
+ }));
2982
+ }
2983
+ }
2984
+ dispose() {
2985
+ const e = this;
2986
+ e.meshContent.forEach((a) => {
2987
+ a && a.asset && a.asset.copyright && (a.asset.copyright.split(";").forEach((A) => {
2988
+ z[A] && z[A]--;
2989
+ }), e.displayCopyright && aa());
2990
+ }), e.bbox && e.bbox.dispose(), e.childrenTiles.forEach((a) => a.dispose()), e.deleted = !0, e.contentURL && (e.contentURL.forEach((a) => {
2991
+ e.tileLoader.invalidate(a, e.uuid);
2992
+ }), e.contentURL = []), e.abortController && e.abortController.abort("tile not needed"), this.parent = null, this.parentTile = null, this.dispatchEvent({ type: "removed" });
2993
+ }
2994
+ _disposeMeshContent() {
2995
+ const e = this;
2996
+ if (!e.deleted) {
2997
+ e.deleted = !0, e.abortController && (e.abortController.abort("tile not needed"), e.abortController = new AbortController());
2998
+ for (let a = e.meshContent.length - 1; a >= 0; a--) {
2999
+ const A = e.meshContent[a];
3000
+ A && A.asset && A.asset.copyright && (A.asset.copyright.split(";").forEach((t) => {
3001
+ z[t] && z[t]--;
3002
+ }), e.displayCopyright && aa()), e.remove(A);
3003
+ }
3004
+ e.meshContent = [], e.contentURL.forEach((a) => {
3005
+ e.tileLoader.invalidate(a, e.uuid);
3006
+ }), e.contentURL = [];
3007
+ }
3008
+ }
3009
+ _disposeChildren() {
3010
+ var e = this;
3011
+ e.childrenTiles.forEach((a) => {
3012
+ a.dispose(), e.remove(a);
3013
+ }), e.childrenTiles = [];
3014
+ }
3015
+ update(e) {
3016
+ const a = new m.Frustum();
3017
+ a.setFromProjectionMatrix(new m.Matrix4().multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse));
3018
+ let A = [0], t = [0], i = [0], s = [0];
3019
+ return this.refine == "REPLACE" ? this.loadingStrategy === "IMMEDIATE" ? (this._updateImmediate(e, a), this._statsImmediate(i, A, s, t)) : (this._update(e, a), this._stats(i, A, s, t)) : (this._update(e, a), this._stats(i, A, s, t)), A > 0 && (s[0] /= A[0]), { numTilesLoaded: A[0], numTilesRendered: t[0], maxLOD: i[0], percentageLoaded: s[0] };
3020
+ }
3021
+ _updateImmediate(e, a) {
3022
+ this._computeMetricRecursive(e, a), this._updateNodeVisibilityImmediate(), this._expandTreeImmediate(e), this.shouldBeVisible = this.metric > 0 || !!this.loadOutsideView, this._shouldBeVisibleUpdateImmediate(), this._trimTreeImmediate(), this._loadMeshImmediate();
3023
+ }
3024
+ _statsImmediate(e, a, A, t) {
3025
+ e[0] = Math.max(e[0], this.level), (this.shouldBeVisible || this.materialVisibility) && (a[0]++, this.materialVisibility && A[0]++), this.materialVisibility && t[0]++, this.childrenTiles.forEach((i) => {
3026
+ i._statsImmediate(e, a, A, t);
3027
+ });
3028
+ }
3029
+ _stats(e, a, A, t) {
3030
+ e[0] = Math.max(e[0], this.level), this.hasMeshContent && (a[0]++, this.meshContent.length == this.hasMeshContent && A[0]++, this.materialVisibility && t[0]++), this.childrenTiles.forEach((i) => {
3031
+ i._stats(e, a, A, t);
3032
+ });
3033
+ }
3034
+ _trimTreeImmediate() {
3035
+ this.metric != null && (this.hasMeshContent && this.shouldBeVisible && this.materialVisibility ? this._disposeChildren() : this.childrenTiles.forEach((e) => {
3036
+ e._trimTreeImmediate();
3037
+ }));
3038
+ }
3039
+ _updateNodeVisibilityImmediate(e = !1) {
3040
+ const a = this;
3041
+ if (a.hasMeshContent) if (a.shouldBeVisible) a.meshContent.length == a.hasMeshContent ? a.materialVisibility ? a.childrenTiles.forEach((A) => {
3042
+ A._updateNodeVisibilityImmediate(!0);
3043
+ }) : (a._changeContentVisibility(!0), a.childrenTiles.forEach((A) => {
3044
+ A._updateNodeVisibilityImmediate(e);
3045
+ })) : a.childrenTiles.forEach((A) => {
3046
+ A._updateNodeVisibilityImmediate(e);
3047
+ });
3048
+ else {
3049
+ if (!a.loadOutsideView && a.metric < 0) return a._changeContentVisibility(!1), a.meshContent.length > 0 && a._disposeMeshContent(), void a.childrenTiles.forEach((A) => {
3050
+ A._updateNodeVisibilityImmediate(!0);
3051
+ });
3052
+ if (a.materialVisibility) if (e) a._changeContentVisibility(!1), a.meshContent.length > 0 && a._disposeMeshContent(), a.childrenTiles.forEach((A) => {
3053
+ A._updateNodeVisibilityImmediate(e);
3054
+ });
3055
+ else {
3056
+ let A = !0;
3057
+ a.childrenTiles.every((t) => !!t._isReadyImmediate() || (A = !1, !1)), A && a.childrenTiles.length > 0 ? (a._changeContentVisibility(!1), a.meshContent.length > 0 && a._disposeMeshContent(), a.childrenTiles.forEach((t) => {
3058
+ t._updateNodeVisibilityImmediate(e);
3059
+ })) : a.childrenTiles.forEach((t) => {
3060
+ t._updateNodeVisibilityImmediate(!0);
3061
+ });
3062
+ }
3063
+ else a.childrenTiles.forEach((A) => {
3064
+ A._updateNodeVisibilityImmediate(e);
3065
+ });
3066
+ }
3067
+ else a.childrenTiles.forEach((A) => {
3068
+ A._updateNodeVisibilityImmediate(e);
3069
+ });
3070
+ }
3071
+ _shouldBeVisibleUpdateImmediate() {
3072
+ const e = this;
3073
+ e.hasMeshContent ? e.metric == null ? e.shouldBeVisible = !1 : e.metric < 0 ? (e.shouldBeVisible = !!e.loadOutsideView, e.childrenTiles.forEach((a) => {
3074
+ a._setShouldNotBeVisibleRecursive();
3075
+ })) : e.metric < e.geometricErrorMultiplier * e.geometricError ? e.hasUnloadedJSONContent || (e.json && e.json.children && e.json.children.length > 0 ? (e.shouldBeVisible = !1, e.childrenTiles.forEach((a) => {
3076
+ a.shouldBeVisible = !0, a._shouldBeVisibleUpdateImmediate();
3077
+ })) : e.shouldBeVisible = !0) : e.childrenTiles.forEach((a) => {
3078
+ a._setShouldNotBeVisibleRecursive();
3079
+ }) : (e.childrenTiles.forEach((a) => {
3080
+ a.shouldBeVisible = !0, a._shouldBeVisibleUpdateImmediate();
3081
+ }), e.shouldBeVisible = !1);
3082
+ }
3083
+ _setShouldNotBeVisibleRecursive() {
3084
+ this.shouldBeVisible = !1, this.childrenTiles.forEach((e) => {
3085
+ e._setShouldNotBeVisibleRecursive();
3086
+ });
3087
+ }
3088
+ _loadMeshImmediate() {
3089
+ const e = this;
3090
+ e.hasMeshContent && e.shouldBeVisible ? e.meshContent.length < e.hasMeshContent && e.contentURL.length == 0 && (e.deleted = !1, e._load(!1, !0)) : e.childrenTiles.forEach((a) => {
3091
+ a._loadMeshImmediate();
3092
+ });
3093
+ }
3094
+ _computeMetricRecursive(e, a) {
3095
+ const A = this;
3096
+ A.metric = -1, A.isSetup && (A.boundingVolume && A.geometricError && (A.metric = A._calculateUpdateMetric(e, a)), A.childrenTiles.forEach((t) => t._computeMetricRecursive(e, a)));
3097
+ }
3098
+ _expandTreeImmediate(e) {
3099
+ const a = this;
3100
+ a.hasUnloadedJSONContent || (a.hasMeshContent ? a.occlusionCullingService && a.hasMeshContent && !a.occlusionCullingService.hasID(a.colorID) || a.metric >= 0 && a.metric < a.geometricErrorMultiplier * a.geometricError && a.json && a.json.children && a.childrenTiles.length < a.json.children.length && a._loadJsonChildren(e) : a.json && a.json.children && a.childrenTiles.length < a.json.children.length && a._loadJsonChildren(e)), a.childrenTiles.forEach((A) => A._expandTreeImmediate(e));
3101
+ }
3102
+ _update(e, a) {
3103
+ const A = this;
3104
+ if (!A.isSetup) return;
3105
+ const t = A.materialVisibility;
3106
+ A.boundingVolume && A.geometricError && (A.metric = A._calculateUpdateMetric(e, a)), A.childrenTiles.forEach((i) => i._update(e, a)), function(i) {
3107
+ if (A.hasMeshContent && !(A.meshContent.length < A.hasMeshContent)) {
3108
+ if (i < 0) return A.inFrustum = !1, void A._changeContentVisibility(!!A.loadOutsideView);
3109
+ if (A.inFrustum = !0, A.childrenTiles.length == 0) return void A._changeContentVisibility(!0);
3110
+ if (i >= A.geometricErrorMultiplier * A.geometricError) A._changeContentVisibility(!0);
3111
+ else if (i < A.geometricErrorMultiplier * A.geometricError && A.refine == "REPLACE") {
3112
+ let s = !0;
3113
+ A.childrenTiles.every((r) => !!r._isReady() || (s = !1, !1)), s ? A._changeContentVisibility(!1) : A._changeContentVisibility(!0);
3114
+ }
3115
+ }
3116
+ }(A.metric), function(i) {
3117
+ i < 0 && A.hasMeshContent || A.occlusionCullingService && A.hasMeshContent && !A.occlusionCullingService.hasID(A.colorID) || (!A.hasMeshContent || i <= A.geometricErrorMultiplier * A.geometricError && A.meshContent.length > 0) && A.json && A.json.children && A.childrenTiles.length != A.json.children.length && A._loadJsonChildren(e);
3118
+ }(A.metric), function(i, s) {
3119
+ if (A.hasMeshContent) {
3120
+ if (!A.inFrustum || A.occlusionCullingService && !s && A.hasMeshContent && A.meshContent.length > 0 && A.materialVisibility && A._areAllChildrenLoadedAndHidden()) return void A._disposeChildren();
3121
+ i >= A.geometricErrorMultiplier * A.geometricError && A._disposeChildren();
3122
+ }
3123
+ }(A.metric, t);
3124
+ }
3125
+ _loadJsonChildren(e) {
3126
+ const a = this;
3127
+ for (let A = a.json.children.length - 1; A >= 0; A--) a.json.children[A].root || a.json.children[A].children || a.json.children[A].getChildren || a.json.children[A].content || a.json.children[A].contents || a.json.children.splice(A, 1);
3128
+ a.json.children.forEach((A) => {
3129
+ let t = new EA({ parentTile: a, queryParams: a.queryParams, parentGeometricError: a.geometricError, parentBoundingVolume: a.boundingVolume, parentRefine: a.refine, json: A, rootPath: a.rootPath, geometricErrorMultiplier: a.geometricErrorMultiplier, loadOutsideView: a.loadOutsideView, level: Math.floor(a.level) + 1, tileLoader: a.tileLoader, cameraOnLoad: e, occlusionCullingService: a.occlusionCullingService, renderer: a.renderer, static: a.static, centerModel: !1, displayErrors: a.displayErrors, displayCopyright: a.displayCopyright, distanceBias: a.distanceBias, loadingStrategy: a.loadingStrategy, drawBoundingVolume: a.drawBoundingVolume });
3130
+ a.childrenTiles.push(t), a.add(t);
3131
+ }), a.updateMatrices(!0);
3132
+ }
3133
+ _areAllChildrenLoadedAndHidden() {
3134
+ let e = !0;
3135
+ const a = this;
3136
+ return this.childrenTiles.every((A) => {
3137
+ if (A.hasMeshContent) {
3138
+ if (A.childrenTiles.length > 0) return e = !1, !1;
3139
+ if (!A.metric < 0) return !0;
3140
+ if (A.materialVisibility || a.occlusionCullingService.hasID(A.colorID)) return e = !1, !1;
3141
+ } else if (!A._areAllChildrenLoadedAndHidden()) return e = !1, !1;
3142
+ return !0;
3143
+ }), e;
3144
+ }
3145
+ _isReady() {
3146
+ if (this.metric == null) return !1;
3147
+ if (this.metric < 0) return !0;
3148
+ if (this.hasUnloadedJSONContent) return !1;
3149
+ if (!this.hasMeshContent && this.json.children.length == 0 && !this.hasUnloadedJSONContent) return !0;
3150
+ if (!this.hasMeshContent || this.meshContent.length == 0 || !this.materialVisibility) {
3151
+ if (this.children.length > 0) {
3152
+ var e = !0;
3153
+ return this.childrenTiles.every((a) => !!a._isReady() || (e = !1, !1)), e;
3154
+ }
3155
+ return !1;
3156
+ }
3157
+ return !this.hasMeshContent || !(this.meshContent.length < this.hasMeshContent) && !!this.materialVisibility;
3158
+ }
3159
+ _isReadyImmediate() {
3160
+ if (this.materialVisibility || !this.loadOutsideView && this.metric < 0) return !0;
3161
+ if (this.childrenTiles.length > 0) {
3162
+ var e = !0;
3163
+ return this.childrenTiles.every((a) => !!a._isReadyImmediate() || (e = !1, !1)), e;
3164
+ }
3165
+ return !1;
3166
+ }
3167
+ _changeContentVisibility(e) {
3168
+ const a = this;
3169
+ a.bbox && (a.bbox.material.visible = e), a.hasMeshContent && a.meshContent.length > 0 && (e ? a.meshContent.forEach((A) => {
3170
+ A.traverse((t) => {
3171
+ (t.isMesh || t.isPoints) && t.layers.enable(0);
3172
+ });
3173
+ }) : a.meshContent.forEach((A) => {
3174
+ A.traverse((t) => {
3175
+ (t.isMesh || t.isPoints) && t.layers.disable(0);
3176
+ });
3177
+ })), a.materialVisibility != e && (a.materialVisibility = e);
3178
+ }
3179
+ _calculateUpdateMetric(e, a) {
3180
+ let A = 0;
3181
+ if (this.boundingVolume instanceof te) {
3182
+ if (T.copy(this.boundingVolume.sphere), T.applyMatrix4(this.matrixWorld), !a.intersectsSphere(T)) return -1;
3183
+ A = Math.max(0, e.position.distanceTo(T.center) - T.radius - e.near);
3184
+ } else {
3185
+ if (!(this.boundingVolume instanceof m.Sphere)) return console.error("unsupported shape"), -1;
3186
+ if (T.copy(this.boundingVolume), T.applyMatrix4(this.matrixWorld), !a.intersectsSphere(T)) return -1;
3187
+ A = Math.max(0, e.position.distanceTo(T.center) - T.radius - e.near);
3188
+ }
3189
+ if (A = Math.pow(A, this.distanceBias), A == 0) return 0;
3190
+ const t = this.matrixWorld.getMaxScaleOnAxis();
3191
+ this.renderer && this.renderer.getDrawingBufferSize(this.rendererSize);
3192
+ let i = this.rendererSize.y, s = e.fov;
3193
+ e.aspect < 1 && (s *= e.aspect, i = this.rendererSize.x);
3194
+ let r = 2 * Math.tan(0.5 * s * 0.017453292519943295) * A;
3195
+ return 16 * window.devicePixelRatio * r / (i * t);
3196
+ }
3197
+ _getSiblings() {
3198
+ const e = this, a = [];
3199
+ if (!e.parentTile) return a;
3200
+ let A = e.parentTile;
3201
+ for (; !A.hasMeshContent && A.parentTile; ) A = A.parentTile;
3202
+ return A.childrenTiles.forEach((t) => {
3203
+ if (t && t != e) {
3204
+ for (; !t.hasMeshContent && t.childrenTiles[0]; ) t = t.childrenTiles[0];
3205
+ a.push(t);
3206
+ }
3207
+ }), a;
3208
+ }
3209
+ _calculateDistanceToCamera(e) {
3210
+ return this.boundingVolume instanceof te ? (T.copy(this.boundingVolume.sphere), T.applyMatrix4(this.matrixWorld)) : this.boundingVolume instanceof m.Sphere ? (T.copy(this.boundingVolume), T.applyMatrix4(this.matrixWorld)) : console.error("unsupported shape"), Math.max(0, e.position.distanceTo(T.center) - T.radius);
3211
+ }
3212
+ setGeometricErrorMultiplier(e) {
3213
+ this.geometricErrorMultiplier = e, this.childrenTiles.forEach((a) => a.setGeometricErrorMultiplier(e));
3214
+ }
3215
+ setDistanceBias(e) {
3216
+ this.distanceBias = e, this.childrenTiles.forEach((a) => a.setDistanceBias(e));
3217
+ }
3218
+ _transformWGS84ToCartesian(e, a, A, t) {
3219
+ const i = 6378137 / Math.sqrt(1 - 0.006694384442042 * Math.pow(Math.sin(a), 2)), s = Math.cos(a), r = Math.cos(e), b = Math.sin(a), o = i + A, d = o * s * r, c = o * s * Math.sin(e), g = (0.993305615557957 * i + A) * b;
3220
+ t.set(d, c, g);
3221
+ }
3222
+ }
3223
+ function Na(n) {
3224
+ var e = document.createElement("div");
3225
+ e.textContent = n, e.style.position = "fixed", e.style.top = "10px", e.style.left = "50%", e.style.transform = "translateX(-50%)", e.style.padding = "10px", e.style.backgroundColor = "#ff8800", e.style.color = "#ffffff", e.style.zIndex = "9999", document.body.appendChild(e), setTimeout(function() {
3226
+ e.remove();
3227
+ }, 8e3);
3228
+ }
3229
+ function aa() {
3230
+ V || ((V = document.createElement("div")).style.position = "fixed", V.style.bottom = "20px", V.style.left = "20px", V.style.color = "white", V.style.textShadow = "2px 2px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000", V.style.padding = "10px", V.style.backgroundColor = "rgba(0, 0, 0, 0.1)", document.body.appendChild(V));
3231
+ const n = fi();
3232
+ let e = "";
3233
+ n.forEach((a) => {
3234
+ e += a + ", ";
3235
+ }), e = e.slice(0, -2), V.textContent = e;
3236
+ }
3237
+ const G = new m.Sphere(new m.Vector3(0, 0, 0), 1), Ae = new m.Vector3(0, 0, 0), Aa = new m.Vector3(0, 0, 0), ui = new m.Vector3(0, 1, 0), ta = new m.Vector2(), _a = new m.Quaternion(), Pa = new m.Matrix4();
3238
+ class Ia extends m.Object3D {
3239
+ constructor(e) {
3240
+ super();
3241
+ const a = this;
3242
+ if (e.queryParams && (this.queryParams = { ...e.queryParams }), this.uuid = CA(), e.tileLoader ? this.tileLoader = e.tileLoader : console.error("an instanced tileset must be provided an InstancedTilesetLoader"), this.master = e.master, this.loadOutsideView = e.loadOutsideView, this.cameraOnLoad = e.cameraOnLoad, this.parentTile = e.parentTile, this.distanceBias = Math.max(1e-4, e.distanceBias ? e.distanceBias : 1), this.childrenTiles = [], this.jsonChildren = [], this.meshContent = /* @__PURE__ */ new Set(), this.static = e.static, this.static && (this.matrixAutoUpdate = !1, this.matrixWorldAutoUpdate = !1), this.tileContent, this.refinement, this.rootPath, this.geometricError, this.boundingVolume, this.json, this.materialVisibility = !1, this.inFrustum = !0, this.level = e.level ? e.level : 0, this.hasMeshContent = 0, this.hasUnloadedJSONContent = 0, this.centerModel = e.centerModel, this.deleted = !1, this.abortController = new AbortController(), e.json) this.rootPath = e.json.rootPath ? e.json.rootPath : e.rootPath, e.json.children && (this.jsonChildren = e.json.children), a.setup(e);
3243
+ else if (e.url) {
3244
+ this.loadJson = (i, s) => {
3245
+ const r = ie.dirname(s);
3246
+ a.setup({ rootPath: r, json: i, onLoadCallback: e.onLoadCallback });
3247
+ };
3248
+ var A = e.url;
3249
+ if (a.queryParams) {
3250
+ var t = "";
3251
+ for (let i in a.queryParams) a.queryParams.hasOwnProperty(i) && (t += "&" + i + "=" + a.queryParams[i]);
3252
+ A.includes("?") ? A += t : A += "?" + t.substring(1);
3253
+ }
3254
+ a.tileLoader.get(a.abortController, A, a.uuid, a);
3255
+ }
3256
+ }
3257
+ async setup(e) {
3258
+ const a = this;
3259
+ e.json.root ? (a.json = e.json.root, !a.json.children && a.json.getChildren && (a.json.children = await a.json.getChildren()), a.jsonChildren = a.json.children, a.json.refinement || (a.json.refinement = e.json.refinement), a.json.geometricError || (a.json.geometricError = e.json.geometricError), a.json.transform || (a.json.transform = e.json.transform), a.json.boundingVolume || (a.json.boundingVolume = e.json.boundingVolume)) : (a.json = e.json, !a.json.children && a.json.getChildren && (a.json.children = await a.json.getChildren(), a.jsonChildren = a.json.children)), a.rootPath = e.json.rootPath ? e.json.rootPath : e.rootPath, a.json.refinement ? a.refinement = a.json.refinement : a.refinement = e.parentRefinement, a.json.geometricError ? a.geometricError = a.json.geometricError : a.geometricError = e.parentGeometricError;
3260
+ let A = new m.Matrix4();
3261
+ if (a.json.transform && !a.centerModel && (A.elements = a.json.transform), a.applyMatrix4(A), a.parentTile && a.parentTile.matrix && (a.matrix.premultiply(a.parentTile.matrix), a.matrix.decompose(a.position, a.quaternion, a.scale)), a.matrixWorldNeedsUpdate = !0, a.updateWorldMatrix(!0, !0), a.json.boundingVolume) if (a.json.boundingVolume.box) a.boundingVolume = new te(a.json.boundingVolume.box);
3262
+ else if (a.json.boundingVolume.region) {
3263
+ const i = a.json.boundingVolume.region;
3264
+ a.transformWGS84ToCartesian(i[0], i[1], i[4], Ae), a.transformWGS84ToCartesian(i[2], i[3], i[5], Aa), Ae.lerp(Aa, 0.5), a.boundingVolume = new m.Sphere(new m.Vector3(Ae.x, Ae.y, Ae.z), Ae.distanceTo(Aa));
3265
+ } else if (a.json.boundingVolume.sphere) {
3266
+ const i = a.json.boundingVolume.sphere;
3267
+ a.boundingVolume = new m.Sphere(new m.Vector3(i[0], i[1], i[2]), i[3]);
3268
+ } else a.boundingVolume = e.parentBoundingVolume;
3269
+ else a.boundingVolume = e.parentBoundingVolume;
3270
+ function t(i) {
3271
+ i.uri && i.uri.includes("json") || i.url && i.url.includes("json") ? a.hasUnloadedJSONContent++ : a.hasMeshContent++;
3272
+ }
3273
+ if (a.json.content ? (t(a.json.content), a.load()) : a.json.contents && (a.json.contents.forEach((i) => t(i)), a.load()), a.centerModel) {
3274
+ const i = new m.Sphere();
3275
+ a.boundingVolume instanceof te ? i.copy(a.boundingVolume.sphere) : a.boundingVolume instanceof m.Sphere && i.copy(a.boundingVolume), this.json.boundingVolume.region && (a.transformWGS84ToCartesian(0.5 * (a.json.boundingVolume.region[0] + a.json.boundingVolume.region[2]), 0.5 * (a.json.boundingVolume.region[1] + a.json.boundingVolume.region[3]), 0.5 * (a.json.boundingVolume.region[4] + a.json.boundingVolume.region[5]), Ae), _a.setFromUnitVectors(Ae.normalize(), ui.normalize()), a.master.applyQuaternion(_a), a.master.updateWorldMatrix(!1, !1)), Pa.makeTranslation(-i.center.x * a.scale.x, -i.center.y * a.scale.y, -i.center.z * a.scale.z), a.master.matrix.multiply(Pa), a.master.matrix.decompose(a.master.position, a.master.quaternion, a.master.scale);
3276
+ }
3277
+ a.isSetup = !0, e.onLoadCallback && e.onLoadCallback(a);
3278
+ }
3279
+ isAbsolutePathOrURL(e) {
3280
+ const a = /^(?:http|https|ftp|tcp|udp):\/\/\S+/.test(e), A = e.startsWith("/") && !e.startsWith("//");
3281
+ return a || A;
3282
+ }
3283
+ assembleURL(e, a) {
3284
+ e.endsWith("/") || (e += "/");
3285
+ const A = new URL(e);
3286
+ let t = A.pathname.split("/").filter((s) => s !== ""), i = a.split("/").filter((s) => s !== "");
3287
+ for (let s = 1; s <= t.length && !(s >= i.length); s++)
3288
+ if (t.slice(t.length - s, t.length).join("/") === i.slice(0, s).join("/")) {
3289
+ for (let r = 0; r < s; r++) t.pop();
3290
+ break;
3291
+ }
3292
+ for (; i.length > 0 && i[0] === ".."; ) t.pop(), i.shift();
3293
+ return `${A.protocol}//${A.host}/${[...t, ...i].join("/")}`;
3294
+ }
3295
+ extractQueryParams(e, a) {
3296
+ const A = new URL(e);
3297
+ for (let [t, i] of A.searchParams) a[t] = i;
3298
+ return A.search = "", A.toString();
3299
+ }
3300
+ load() {
3301
+ var e = this;
3302
+ function a(A) {
3303
+ let t;
3304
+ A.uri ? t = A.uri : A.url && (t = A.url);
3305
+ const i = /^(?:http|https|ftp|tcp|udp):\/\/\S+/;
3306
+ if (i.test(e.rootPath) ? i.test(t) || (t = e.assembleURL(e.rootPath, t)) : ie.isAbsolute(e.rootPath) && (t = e.rootPath + ie.sep + t), t = e.extractQueryParams(t, e.queryParams), e.queryParams) {
3307
+ var s = "";
3308
+ for (let r in e.queryParams) e.queryParams.hasOwnProperty(r) && (s += "&" + r + "=" + e.queryParams[r]);
3309
+ t.includes("?") ? t += s : t += "?" + s.substring(1);
3310
+ }
3311
+ t && (t.includes(".b3dm") || t.includes(".glb") || t.includes(".gltf") ? (e.contentURL = t, e.tileLoader.get(e.abortController, t, e.uuid, e, e.cameraOnLoad ? () => e.calculateDistanceToCamera(e.cameraOnLoad) : () => 0, () => e.getSiblings(), e.level, !e.json.boundingVolume.region, !!e.json.boundingVolume.region, e.geometricError)) : t.includes(".json") && e.tileLoader.get(e.abortController, t, e.uuid, e));
3312
+ }
3313
+ e.deleted || (e.json.content ? a(e.json.content) : e.json.contents && e.json.contents.forEach((A) => a(A)));
3314
+ }
3315
+ loadMesh(e) {
3316
+ this.deleted || this.meshContent.add(e);
3317
+ }
3318
+ loadJson(e, a) {
3319
+ this.deleted || (this.json.children && (this.jsonChildren = this.json.children), e.rootPath = ie.dirname(a), this.jsonChildren.push(e), this.hasUnloadedJSONContent--);
3320
+ }
3321
+ dispose() {
3322
+ const e = this;
3323
+ e.childrenTiles.forEach((a) => a.dispose()), e.deleted = !0, e.abortController && e.abortController.abort(), this.parent = null, this.parentTile = null, this.dispatchEvent({ type: "removed" });
3324
+ }
3325
+ disposeChildren() {
3326
+ this.childrenTiles.forEach((e) => e.dispose()), this.childrenTiles = [];
3327
+ }
3328
+ _update(e, a) {
3329
+ const A = this;
3330
+ function t(i) {
3331
+ if (A.hasMeshContent && !(A.meshContent.size < A.hasMeshContent)) {
3332
+ if (i < 0) return A.inFrustum = !1, void A.changeContentVisibility(!!A.loadOutsideView);
3333
+ if (A.inFrustum = !0, A.childrenTiles.length != 0) {
3334
+ if (i >= A.master.geometricErrorMultiplier * A.geometricError) A.changeContentVisibility(!0);
3335
+ else if (i < A.master.geometricErrorMultiplier * A.geometricError) {
3336
+ let s = !0;
3337
+ A.childrenTiles.every((r) => !!r.isReady() || (s = !1, !1)), s && A.changeContentVisibility(!1);
3338
+ }
3339
+ } else A.changeContentVisibility(!0);
3340
+ }
3341
+ }
3342
+ A.isSetup && (A.materialVisibility, A.boundingVolume && A.geometricError && (A.metric = A.calculateUpdateMetric(e, a)), A.childrenTiles.forEach((i) => i._update(e, a)), t(A.metric), function(i) {
3343
+ i < 0 && A.hasMeshContent || (!A.hasMeshContent && A.rootPath || i < A.master.geometricErrorMultiplier * A.geometricError && A.meshContent.size > 0) && A.json && A.jsonChildren && A.childrenTiles.length != A.jsonChildren.length && A.jsonChildren.forEach((s) => {
3344
+ if (!(s.root || s.children || s.getChildren || s.content || s.contents)) return;
3345
+ let r = new Ia({ parentTile: A, queryParams: A.queryParams, parentGeometricError: A.geometricError, parentBoundingVolume: A.boundingVolume, parentRefinement: A.refinement, json: s, rootPath: A.rootPath, loadOutsideView: A.loadOutsideView, level: A.level + 1, tileLoader: A.tileLoader, cameraOnLoad: e, master: A.master, centerModel: !1 });
3346
+ A.childrenTiles.push(r);
3347
+ });
3348
+ }(A.metric), function(i) {
3349
+ if (A.hasMeshContent) {
3350
+ if (!A.inFrustum) return A.disposeChildren(), void t(i);
3351
+ i >= A.master.geometricErrorMultiplier * A.geometricError && (A.disposeChildren(), t(i));
3352
+ }
3353
+ }(A.metric));
3354
+ }
3355
+ areAllChildrenLoadedAndHidden() {
3356
+ let e = !0;
3357
+ return this.childrenTiles.every((a) => {
3358
+ if (a.hasMeshContent) {
3359
+ if (a.childrenTiles.length > 0) return e = !1, !1;
3360
+ if (!a.inFrustum) return !0;
3361
+ if (!a.materialVisibility || a.meshesToDisplay != a.meshesDisplayed) return e = !1, !1;
3362
+ } else if (!a.areAllChildrenLoadedAndHidden()) return e = !1, !1;
3363
+ return !0;
3364
+ }), e;
3365
+ }
3366
+ isReady() {
3367
+ if (!this.inFrustum) return !0;
3368
+ if (this.hasUnloadedJSONContent) return !1;
3369
+ if (!this.hasMeshContent || this.meshContent.size == 0 || !this.materialVisibility) {
3370
+ if (this.childrenTiles.length > 0) {
3371
+ var e = !0;
3372
+ return this.childrenTiles.every((a) => !!a.isReady() || (e = !1, !1)), e;
3373
+ }
3374
+ return !1;
3375
+ }
3376
+ return !this.hasMeshContent || !(this.meshContent.size < this.hasMeshContent) && !!this.materialVisibility;
3377
+ }
3378
+ changeContentVisibility(e) {
3379
+ this.materialVisibility = e;
3380
+ }
3381
+ calculateUpdateMetric(e, a) {
3382
+ if (this.boundingVolume instanceof te) {
3383
+ if (G.copy(this.boundingVolume.sphere), G.applyMatrix4(this.matrixWorld), !a.intersectsSphere(G)) return -1;
3384
+ } else {
3385
+ if (!(this.boundingVolume instanceof m.Sphere)) return console.error("unsupported shape"), -1;
3386
+ if (G.copy(this.boundingVolume), G.applyMatrix4(this.matrixWorld), !a.intersectsSphere(G)) return -1;
3387
+ }
3388
+ let A = Math.max(0, e.position.distanceTo(G.center) - G.radius);
3389
+ if (A = Math.pow(A, this.distanceBias), A == 0) return 0;
3390
+ const t = this.matrixWorld.getMaxScaleOnAxis();
3391
+ this.master._renderSize(ta);
3392
+ let i = ta.y, s = e.fov;
3393
+ e.aspect < 1 && (s *= e.aspect, i = ta.x);
3394
+ let r = 2 * Math.tan(0.5 * s * 0.017453292519943295) * A;
3395
+ return 16 * window.devicePixelRatio * r / (i * t);
3396
+ }
3397
+ getSiblings() {
3398
+ const e = this, a = [];
3399
+ if (!e.parentTile) return a;
3400
+ let A = e.parentTile;
3401
+ for (; !A.hasMeshContent && A.parentTile; ) A = A.parentTile;
3402
+ return A.childrenTiles.forEach((t) => {
3403
+ if (t && t != e) {
3404
+ for (; !t.hasMeshContent && t.childrenTiles[0]; ) t = t.childrenTiles[0];
3405
+ a.push(t);
3406
+ }
3407
+ }), a;
3408
+ }
3409
+ calculateDistanceToCamera(e) {
3410
+ return this.boundingVolume instanceof te ? (G.copy(this.boundingVolume.sphere), G.applyMatrix4(this.matrixWorld)) : this.boundingVolume instanceof m.Sphere ? (G.copy(this.boundingVolume), G.applyMatrix4(this.matrixWorld)) : console.error("unsupported shape"), Math.max(0, e.position.distanceTo(G.center) - G.radius);
3411
+ }
3412
+ getWorldMatrix() {
3413
+ return this.matrixWorld;
3414
+ }
3415
+ transformWGS84ToCartesian(e, a, A, t) {
3416
+ const i = 6378137 / Math.sqrt(1 - 0.006694384442042 * Math.pow(Math.sin(a), 2)), s = Math.cos(a), r = Math.cos(e), b = Math.sin(a), o = i + A, d = o * s * r, c = o * s * Math.sin(e), g = (0.993305615557957 * i + A) * b;
3417
+ t.set(d, c, g);
3418
+ }
3419
+ }
3420
+ class wi extends m.Object3D {
3421
+ constructor(e) {
3422
+ super(), e.master = this, e.domWidth && e.domHeight ? this.rendererSize = new m.Vector2(e.domWidth, e.domHeight) : this.rendererSize = new m.Vector2(1e3, 1e3), this.renderer = e.renderer, this.distanceBias = Math.max(1e-4, e.distanceBias ? e.distanceBias : 1), this.geometricErrorMultiplier = e.geometricErrorMultiplier ? e.geometricErrorMultiplier : 1, this.tileset = new Ia(e), e.static && (this.matrixAutoUpdate = !1), this.tileLoader = e.tileLoader;
3423
+ }
3424
+ _renderSize(e) {
3425
+ this.renderer ? this.renderer.getDrawingBufferSize(e) : e.copy(this.rendererSize);
3426
+ }
3427
+ setCanvasSize(e, a) {
3428
+ this.rendererSize.set(e, a);
3429
+ }
3430
+ update(e, a) {
3431
+ if (a) this.tileset._update(e, a);
3432
+ else {
3433
+ const A = new m.Frustum();
3434
+ A.setFromProjectionMatrix(new m.Matrix4().multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse)), this.tileset._update(e, A);
3435
+ }
3436
+ }
3437
+ setGeometricErrorMultiplier(e) {
3438
+ this.geometricErrorMultiplier = e || 1;
3439
+ }
3440
+ }
3441
+ class Bi {
3442
+ constructor(e) {
3443
+ const a = this;
3444
+ a.scene = e, a.instancedTiles = [], a.instancedMesh, a.reuseableMatrix = new m.Matrix4();
3445
+ }
3446
+ addInstance(e) {
3447
+ const a = this;
3448
+ e.added = !0, e.listOMesh = a.instancedTiles, a.instancedTiles.push(e), a.instancedMesh && e.loadMesh(a.instancedMesh);
3449
+ }
3450
+ addToScene() {
3451
+ const e = this;
3452
+ e.instancedMesh.setMatrixAt(0, new m.Matrix4()), e.instancedMesh.instanceMatrix.needsUpdate = !0, e.instancedMesh.count = 1, e.scene.add(e.instancedMesh), e.instancedMesh.onAfterRender = () => {
3453
+ delete e.instancedMesh.onAfterRender, e.instancedMesh.displayedOnce = !0;
3454
+ };
3455
+ }
3456
+ setObject(e) {
3457
+ const a = this;
3458
+ a.instancedMesh = e, a.instancedMesh.matrixAutoUpdate = !1, a.instancedMesh.matrixWorldAutoUpdate = !1, a.scene.children.includes(e) || this.addToScene();
3459
+ for (let A = 0; A < a.instancedTiles.length; A++) a.instancedTiles[A].loadMesh(a.instancedMesh);
3460
+ }
3461
+ update() {
3462
+ const e = this;
3463
+ for (let a = e.instancedTiles.length - 1; a >= 0; a--) e.instancedTiles[a].deleted && e.instancedTiles.splice(a, 1);
3464
+ if (e.instancedMesh) {
3465
+ e.instancedMesh.count = 0, e.instancedMesh.instancedTiles = [];
3466
+ for (let a = 0; a < e.instancedTiles.length; a++) e.instancedTiles[a].meshContent.add(e.instancedMesh), e.instancedTiles[a].materialVisibility && (e.instancedMesh.count++, e.reuseableMatrix.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), e.reuseableMatrix.multiply(e.instancedTiles[a].matrixWorld), e.reuseableMatrix.multiply(e.instancedMesh.baseMatrix), e.instancedMesh.setMatrixAt(e.instancedMesh.count - 1, e.reuseableMatrix), e.instancedMesh.instancedTiles.push(e.instancedTiles[a]));
3467
+ e.instancedMesh.instanceMatrix.needsUpdate = !0, e.instancedMesh.needsUpdate = !0, e.instancedMesh.computeBoundingSphere();
3468
+ }
3469
+ }
3470
+ getCount() {
3471
+ return this.instancedTiles.length;
3472
+ }
3473
+ dispose() {
3474
+ const e = this;
3475
+ return !(e.instancedTiles.length > 0) && !!e.instancedMesh && (e.scene.remove(e.instancedMesh), e.instancedMesh.traverse((a) => {
3476
+ if (a.dispose && a.dispose(), a.material) if (a.material.length) for (let A = 0; A < a.material.length; ++A) a.material[A].dispose();
3477
+ else a.material.dispose();
3478
+ a.geometry && a.geometry.dispose();
3479
+ }), e.instancedMesh.dispose(), !0);
3480
+ }
3481
+ }
3482
+ class Ci {
3483
+ constructor() {
3484
+ const e = this;
3485
+ e.count = 0, e.json, e.instancedTiles = [];
3486
+ }
3487
+ addInstance(e) {
3488
+ this.instancedTiles.push(e), this.json && e.loadJson(this.json, this.url);
3489
+ }
3490
+ setObject(e, a) {
3491
+ const A = this;
3492
+ A.json = e, A.url = a;
3493
+ for (let t = 0; t < A.instancedTiles.length; t++) A.instancedTiles[t].loadJson(A.json, A.url);
3494
+ }
3495
+ getCount() {
3496
+ return this.instancedTiles.length;
3497
+ }
3498
+ update() {
3499
+ const e = this;
3500
+ for (let a = e.instancedTiles.length - 1; a >= 0; a--) e.instancedTiles[a].deleted && e.instancedTiles.splice(a, 1);
3501
+ }
3502
+ dispose() {
3503
+ return !(!this.json || this.instancedTiles.length != 0);
3504
+ }
3505
+ }
3506
+ let oe = 0;
3507
+ class yi {
3508
+ constructor(e, a) {
3509
+ if (this.zUpToYUpMatrix = new m.Matrix4(), this.zUpToYUpMatrix.set(1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1), this.maxCachedItems = 100, this.maxInstances = 1, this.proxy = a.proxy, a && (this.meshCallback = a.meshCallback, this.pointsCallback = a.pointsCallback, a.maxCachedItems && (this.maxCachedItems = a.maxCachedItems), a.maxInstances && (this.maxInstances = a.maxInstances)), this.gltfLoader = new eA(), a && a.dracoLoader) this.gltfLoader.setDRACOLoader(a.dracoLoader), this.hasDracoLoader = !0;
3510
+ else {
3511
+ const A = new tA();
3512
+ A.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"), this.gltfLoader.setDRACOLoader(A), this.gltfLoader.hasDracoLoader = !0;
3513
+ }
3514
+ if (a && a.ktx2Loader) this.gltfLoader.setKTX2Loader(a.ktx2Loader), this.hasKTX2Loader = !0;
3515
+ else if (a && a.renderer) {
3516
+ const A = new v();
3517
+ A.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(a.renderer), this.gltfLoader.setKTX2Loader(A), this.gltfLoader.hasKTX2Loader = !0;
3518
+ }
3519
+ this.gltfLoader.setMeshoptDecoder(BA), this.hasMeshOptDecoder = !0, this.b3dmDecoder = new $a(this.gltfLoader), this.cache = new Xa.LinkedHashMap(), this.scene = e, this.ready = [], this.downloads = [], this.nextReady = [], this.nextDownloads = [];
3520
+ }
3521
+ update() {
3522
+ const e = this;
3523
+ e._checkSize(), e.cache._data.forEach((a) => {
3524
+ a.update();
3525
+ }), oe < 8 && e._download(), e._loadBatch();
3526
+ }
3527
+ _download() {
3528
+ const e = this;
3529
+ if (e.nextDownloads.length != 0 || (e._getNextDownloads(), e.nextDownloads.length != 0)) for (; e.nextDownloads.length > 0; ) {
3530
+ const A = e.nextDownloads.shift();
3531
+ if (A) {
3532
+ if (A.path.includes(".b3dm") && (a = e.proxy ? () => fetch(e.proxy, { method: "POST", body: A.path }) : () => fetch(A.path), oe++, a().then((t) => {
3533
+ if (!t.ok) throw console.error("could not load tile with path : " + A.path), new Error(`couldn't load "${A.path}". Request failed with status ${t.status} : ${t.statusText}`);
3534
+ return t.arrayBuffer();
3535
+ }).then((t) => this.b3dmDecoder.parseB3DMInstanced(t, (i) => {
3536
+ e.meshCallback(i, A.geometricError);
3537
+ }, e.maxInstances, A.sceneZupToYup, A.meshZupToYup)).then((t) => {
3538
+ t.frustumCulled = !1, A.tile.setObject(t), e.ready.unshift(A);
3539
+ }).catch((t) => console.error(t)).finally(() => {
3540
+ oe--;
3541
+ })), A.path.includes(".glb") || A.path.includes(".gltf")) a = e.proxy ? () => fetch(e.proxy, { method: "POST", body: A.path }) : () => fetch(A.path), oe++, a().then((t) => {
3542
+ if (!t.ok) throw new Error("missing content");
3543
+ return t.arrayBuffer();
3544
+ }).then(async (t) => {
3545
+ await Ei(this.gltfLoader), this.gltfLoader.parse(t, null, (i) => {
3546
+ let s;
3547
+ i.scene.asset = i.asset, A.sceneZupToYup && i.scene.applyMatrix4(this.zUpToYUpMatrix), i.scene.traverse((r) => {
3548
+ r.geometricError = A.geometricError, r.isMesh && (A.meshZupToYup && r.applyMatrix4(this.zUpToYUpMatrix), e.meshCallback && e.meshCallback(r, r.geometricError)), r.isPoints && console.error("instanced point cloud is not supported");
3549
+ }), i.scene.updateWorldMatrix(!1, !0), i.scene.traverse((r) => {
3550
+ r.isMesh && (s = new m.InstancedMesh(r.geometry, r.material, e.maxInstances), s.baseMatrix = r.matrixWorld);
3551
+ }), e.ready.unshift(A), s ? (s.frustumCulled = !1, A.tile.setObject(s)) : i.scene.traverse((r) => {
3552
+ r.dispose && r.dispose(), r.material && r.material.dispose();
3553
+ });
3554
+ });
3555
+ }, (t) => {
3556
+ console.error("could not load tile : " + A.path);
3557
+ }).finally(() => {
3558
+ oe--;
3559
+ });
3560
+ else if (A.path.includes(".json")) {
3561
+ var a;
3562
+ a = e.proxy ? () => fetch(e.proxy, { method: "POST", body: A.path }) : () => fetch(A.path), oe++, a().then((t) => {
3563
+ if (!t.ok) throw console.error("could not load tile with path : " + A.path), new Error(`couldn't load "${A.path}". Request failed with status ${t.status} : ${t.statusText}`);
3564
+ return t.json();
3565
+ }).then((t) => la(t, A.path)).then((t) => {
3566
+ A.tile.setObject(t, A.path), e.ready.unshift(A);
3567
+ }).catch((t) => console.error(t)).finally(() => {
3568
+ oe--;
3569
+ });
3570
+ }
3571
+ }
3572
+ }
3573
+ }
3574
+ _loadBatch() {
3575
+ return this.nextReady.length == 0 && (this._getNextReady(), this.nextReady.length == 0) ? 0 : this.nextReady.shift() ? 1 : 0;
3576
+ }
3577
+ _getNextReady() {
3578
+ let e = Number.MAX_VALUE, a = -1;
3579
+ for (let A = this.ready.length - 1; A >= 0; A--) this.ready[A].distanceFunction || this.nextReady.push(this.ready.splice(A, 1)[0]);
3580
+ if (!(this.nextReady.length > 0)) {
3581
+ for (let A = this.ready.length - 1; A >= 0; A--) {
3582
+ const t = this.ready[A].distanceFunction() * this.ready[A].level;
3583
+ t < e && (e = t, a = A);
3584
+ }
3585
+ if (a >= 0) {
3586
+ const A = this.ready.splice(a, 1).pop();
3587
+ this.nextReady.push(A);
3588
+ const t = A.getSiblings();
3589
+ for (let i = this.ready.length - 1; i >= 0; i--) t.includes(this.ready[i].uuid) && this.nextready.push(this.ready.splice(i, 1).pop());
3590
+ }
3591
+ }
3592
+ }
3593
+ get(e, a, A, t, i, s, r, b, o, d) {
3594
+ const c = this, g = function(h) {
3595
+ for (var f = h.split("/"), I = [], B = 0, u = 0; u < f.length; u++) {
3596
+ var E = f[u];
3597
+ E !== "." && E !== "" && E !== ".." ? I[B++] = E : E === ".." && B > 0 && B--;
3598
+ }
3599
+ if (B === 0) return "/";
3600
+ var C = "";
3601
+ for (u = 0; u < B; u++) C += "/" + I[u];
3602
+ return C;
3603
+ }(a);
3604
+ if (!(a.includes(".b3dm") || a.includes(".json") || a.includes(".glb") || a.includes(".gltf"))) return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");
3605
+ const l = c.cache.get(g);
3606
+ if (l) l.addInstance(t);
3607
+ else if (a.includes(".b3dm") || a.includes(".glb") || a.includes(".gltf")) {
3608
+ const h = new Bi(c.scene);
3609
+ h.addInstance(t), c.cache.put(g, h);
3610
+ const f = new AbortController();
3611
+ e.signal.addEventListener("abort", () => {
3612
+ h.getCount() == 0 && f.abort();
3613
+ }), this.downloads.push({ abortController: f, tile: h, key: g, path: a, distanceFunction: i, getSiblings: s, level: r, uuid: A, sceneZupToYup: b, meshZupToYup: o, geometricError: d, shouldDoDownload: () => !0 });
3614
+ } else if (a.includes(".json")) {
3615
+ const h = new Ci();
3616
+ h.addInstance(t), c.cache.put(g, h);
3617
+ const f = new AbortController();
3618
+ e.signal.addEventListener("abort", () => {
3619
+ h.getCount() == 0 && f.abort();
3620
+ }), this.downloads.push({ abortController: f, tile: h, key: g, path: a, distanceFunction: i, getSiblings: s, level: r, shouldDoDownload: () => !0 });
3621
+ }
3622
+ }
3623
+ _getNextDownloads() {
3624
+ let e = Number.MAX_VALUE, a = -1;
3625
+ for (let A = this.downloads.length - 1; A >= 0; A--) {
3626
+ const t = this.downloads[A];
3627
+ t.shouldDoDownload() ? t.distanceFunction || this.nextDownloads.push(this.downloads.splice(A, 1)[0]) : this.downloads.splice(A, 1);
3628
+ }
3629
+ if (!(this.nextDownloads.length > 0)) {
3630
+ for (let A = this.downloads.length - 1; A >= 0; A--) {
3631
+ const t = this.downloads[A], i = t.distanceFunction() * t.level;
3632
+ i < e && (e = i, a = A);
3633
+ }
3634
+ if (a >= 0) {
3635
+ const A = this.downloads.splice(a, 1).pop();
3636
+ this.nextDownloads.push(A);
3637
+ const t = A.getSiblings();
3638
+ for (let i = this.downloads.length - 1; i >= 0; i--) t.includes(this.downloads[i].uuid) && this.nextDownloads.push(this.downloads.splice(i, 1).pop());
3639
+ }
3640
+ }
3641
+ }
3642
+ _checkSize() {
3643
+ const e = this;
3644
+ let a = 0;
3645
+ for (; e.cache.size() > e.maxCachedItems && a < e.cache.size(); ) {
3646
+ a++;
3647
+ const A = e.cache.head();
3648
+ e.cache.remove(A.key), A.value.dispose() || e.cache.put(A.key, A.value);
3649
+ }
3650
+ }
3651
+ }
3652
+ async function Ei(n) {
3653
+ return new Promise((e) => {
3654
+ const a = setInterval(() => {
3655
+ n.hasDracoLoader && !n.dracoLoader || n.hasKTX2Loader && !n.ktx2Loader || (clearInterval(a), e());
3656
+ }, 10);
3657
+ });
3658
+ }
3659
+ export {
3660
+ wi as InstancedOGC3DTile,
3661
+ yi as InstancedTileLoader,
3662
+ EA as OGC3DTile,
3663
+ Qi as OcclusionCullingService,
3664
+ bi as TileLoader,
3665
+ fi as getOGC3DTilesCopyrightInfo
3666
+ };
3667
+ //# sourceMappingURL=threedtiles.es.js.map