@loaders.gl/gltf 4.0.0-alpha.7 → 4.0.0-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/dist.min.js +149 -23
  2. package/dist/es5/lib/api/gltf-scenegraph.js +6 -3
  3. package/dist/es5/lib/api/gltf-scenegraph.js.map +1 -1
  4. package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js +193 -15
  5. package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
  6. package/dist/es5/lib/parsers/parse-gltf.js +13 -16
  7. package/dist/es5/lib/parsers/parse-gltf.js.map +1 -1
  8. package/dist/es5/lib/types/gltf-json-schema.js.map +1 -1
  9. package/dist/es5/lib/utils/version.js +1 -1
  10. package/dist/esm/lib/api/gltf-scenegraph.js +6 -3
  11. package/dist/esm/lib/api/gltf-scenegraph.js.map +1 -1
  12. package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js +160 -14
  13. package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
  14. package/dist/esm/lib/parsers/parse-gltf.js +2 -6
  15. package/dist/esm/lib/parsers/parse-gltf.js.map +1 -1
  16. package/dist/esm/lib/types/gltf-json-schema.js.map +1 -1
  17. package/dist/esm/lib/utils/version.js +1 -1
  18. package/dist/index.js +4 -4
  19. package/dist/lib/api/gltf-extensions.js +1 -1
  20. package/dist/lib/api/gltf-scenegraph.d.ts +2 -1
  21. package/dist/lib/api/gltf-scenegraph.d.ts.map +1 -1
  22. package/dist/lib/api/gltf-scenegraph.js +5 -4
  23. package/dist/lib/encoders/encode-glb.js +1 -1
  24. package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts +2 -1
  25. package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -1
  26. package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +193 -18
  27. package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
  28. package/dist/lib/parsers/parse-gltf.js +4 -7
  29. package/dist/lib/types/gltf-json-schema.d.ts +2 -1
  30. package/dist/lib/types/gltf-json-schema.d.ts.map +1 -1
  31. package/package.json +6 -6
  32. package/src/lib/api/gltf-scenegraph.ts +6 -5
  33. package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +262 -21
  34. package/src/lib/parsers/parse-gltf.ts +4 -9
  35. package/src/lib/types/gltf-json-schema.ts +3 -0
package/dist/dist.min.js CHANGED
@@ -827,6 +827,7 @@
827
827
  "../images/src/index.ts"() {
828
828
  init_image_loader();
829
829
  init_binary_image_api();
830
+ init_parsed_image_api();
830
831
  init_image_format();
831
832
  }
832
833
  });
@@ -1560,7 +1561,8 @@
1560
1561
  constructor(gltf) {
1561
1562
  this.gltf = {
1562
1563
  json: gltf?.json || makeDefaultGLTFJson(),
1563
- buffers: gltf?.buffers || []
1564
+ buffers: gltf?.buffers || [],
1565
+ images: gltf?.images || []
1564
1566
  };
1565
1567
  this.sourceBuffers = [];
1566
1568
  this.byteLength = 0;
@@ -1816,14 +1818,14 @@
1816
1818
  this.json.images.push(glTFImage);
1817
1819
  return this.json.images.length - 1;
1818
1820
  }
1819
- addBufferView(buffer) {
1821
+ addBufferView(buffer, bufferIndex = 0, byteOffset = this.byteLength) {
1820
1822
  const byteLength = buffer.byteLength;
1821
1823
  assert3(Number.isFinite(byteLength));
1822
1824
  this.sourceBuffers = this.sourceBuffers || [];
1823
1825
  this.sourceBuffers.push(buffer);
1824
1826
  const glTFBufferView = {
1825
- buffer: 0,
1826
- byteOffset: this.byteLength,
1827
+ buffer: bufferIndex,
1828
+ byteOffset,
1827
1829
  byteLength
1828
1830
  };
1829
1831
  this.byteLength += padToNBytes(byteLength, 4);
@@ -4538,18 +4540,16 @@
4538
4540
  decode: () => decode8,
4539
4541
  name: () => name9
4540
4542
  });
4541
- async function decode8(gltfData) {
4543
+ async function decode8(gltfData, options) {
4542
4544
  const scenegraph = new GLTFScenegraph(gltfData);
4543
- decodeExtFeatureMetadata(scenegraph);
4545
+ decodeExtFeatureMetadata(scenegraph, options);
4544
4546
  }
4545
- function decodeExtFeatureMetadata(scenegraph) {
4547
+ function decodeExtFeatureMetadata(scenegraph, options) {
4546
4548
  const extension = scenegraph.getExtension(EXT_FEATURE_METADATA);
4547
- const schemaClasses = extension?.schema?.classes;
4548
- const featureTables = extension?.featureTables;
4549
- const featureTextures = extension?.featureTextures;
4550
- if (featureTextures) {
4551
- console.warn('featureTextures is not yet supported in the "EXT_feature_metadata" extension.');
4552
- }
4549
+ if (!extension)
4550
+ return;
4551
+ const schemaClasses = extension.schema?.classes;
4552
+ const { featureTables } = extension;
4553
4553
  if (schemaClasses && featureTables) {
4554
4554
  for (const schemaName in schemaClasses) {
4555
4555
  const schemaClass = schemaClasses[schemaName];
@@ -4559,6 +4559,16 @@
4559
4559
  }
4560
4560
  }
4561
4561
  }
4562
+ const { featureTextures } = extension;
4563
+ if (schemaClasses && featureTextures && options.gltf?.loadImages) {
4564
+ for (const schemaName in schemaClasses) {
4565
+ const schemaClass = schemaClasses[schemaName];
4566
+ const featureTexture = findFeatureTextureByName(featureTextures, schemaName);
4567
+ if (featureTexture) {
4568
+ handleFeatureTextureProperties(scenegraph, featureTexture, schemaClass);
4569
+ }
4570
+ }
4571
+ }
4562
4572
  }
4563
4573
  function handleFeatureTableProperties(scenegraph, featureTable, schemaClass) {
4564
4574
  for (const propertyName in schemaClass.properties) {
@@ -4571,19 +4581,128 @@
4571
4581
  }
4572
4582
  }
4573
4583
  }
4584
+ function handleFeatureTextureProperties(scenegraph, featureTexture, schemaClass) {
4585
+ const attributeName = featureTexture.class;
4586
+ for (const propertyName in schemaClass.properties) {
4587
+ const featureTextureProperty = featureTexture?.properties?.[propertyName];
4588
+ if (featureTextureProperty) {
4589
+ const data = getPropertyDataFromTexture(scenegraph, featureTextureProperty, attributeName);
4590
+ featureTextureProperty.data = data;
4591
+ }
4592
+ }
4593
+ }
4574
4594
  function getPropertyDataFromBinarySource(scenegraph, schemaProperty, numberOfFeatures, featureTableProperty) {
4575
4595
  const bufferView = featureTableProperty.bufferView;
4576
- let data = scenegraph.getTypedArrayForBufferView(bufferView);
4596
+ const dataArray = scenegraph.getTypedArrayForBufferView(bufferView);
4577
4597
  switch (schemaProperty.type) {
4578
4598
  case "STRING": {
4579
4599
  const stringOffsetBufferView = featureTableProperty.stringOffsetBufferView;
4580
4600
  const offsetsData = scenegraph.getTypedArrayForBufferView(stringOffsetBufferView);
4581
- data = getStringAttributes(data, offsetsData, numberOfFeatures);
4582
- break;
4601
+ return getStringAttributes(dataArray, offsetsData, numberOfFeatures);
4583
4602
  }
4584
4603
  default:
4585
4604
  }
4586
- return data;
4605
+ return dataArray;
4606
+ }
4607
+ function getPropertyDataFromTexture(scenegraph, featureTextureProperty, attributeName) {
4608
+ const json = scenegraph.gltf.json;
4609
+ if (!json.meshes) {
4610
+ return [];
4611
+ }
4612
+ const featureTextureTable = [];
4613
+ for (const mesh of json.meshes) {
4614
+ for (const primitive of mesh.primitives) {
4615
+ processPrimitiveTextures(scenegraph, attributeName, featureTextureProperty, featureTextureTable, primitive);
4616
+ }
4617
+ }
4618
+ return featureTextureTable;
4619
+ }
4620
+ function processPrimitiveTextures(scenegraph, attributeName, featureTextureProperty, featureTextureTable, primitive) {
4621
+ const json = scenegraph.gltf.json;
4622
+ const textureData = [];
4623
+ const texCoordAccessorKey = `TEXCOORD_${featureTextureProperty.texture.texCoord}`;
4624
+ const texCoordAccessorIndex = primitive.attributes[texCoordAccessorKey];
4625
+ const texCoordBufferView = scenegraph.getBufferView(texCoordAccessorIndex);
4626
+ const texCoordArray = scenegraph.getTypedArrayForBufferView(texCoordBufferView);
4627
+ const textureCoordinates = new Float32Array(texCoordArray.buffer, texCoordArray.byteOffset, texCoordArray.length / 4);
4628
+ const textureIndex = featureTextureProperty.texture.index;
4629
+ const texture = json.textures?.[textureIndex];
4630
+ const imageIndex = texture?.source;
4631
+ if (typeof imageIndex !== "undefined") {
4632
+ const image = json.images?.[imageIndex];
4633
+ const mimeType = image?.mimeType;
4634
+ const parsedImage = scenegraph.gltf.images?.[imageIndex];
4635
+ if (parsedImage) {
4636
+ for (let index = 0; index < textureCoordinates.length; index += 2) {
4637
+ const value = getImageValueByCoordinates(parsedImage, mimeType, textureCoordinates, index, featureTextureProperty.channels);
4638
+ textureData.push(value);
4639
+ }
4640
+ }
4641
+ }
4642
+ const featureIndices = [];
4643
+ for (const texelData of textureData) {
4644
+ let index = featureTextureTable.findIndex((item) => item === texelData);
4645
+ if (index === -1) {
4646
+ index = featureTextureTable.push(texelData) - 1;
4647
+ }
4648
+ featureIndices.push(index);
4649
+ }
4650
+ const typedArray = new Uint32Array(featureIndices);
4651
+ const bufferIndex = scenegraph.gltf.buffers.push({
4652
+ arrayBuffer: typedArray.buffer,
4653
+ byteOffset: 0,
4654
+ byteLength: typedArray.byteLength
4655
+ }) - 1;
4656
+ const bufferViewIndex = scenegraph.addBufferView(typedArray, bufferIndex, 0);
4657
+ const accessorIndex = scenegraph.addAccessor(bufferViewIndex, {
4658
+ size: 1,
4659
+ componentType: getComponentTypeFromArray(typedArray),
4660
+ count: typedArray.length
4661
+ });
4662
+ primitive.attributes[attributeName] = accessorIndex;
4663
+ }
4664
+ function getImageValueByCoordinates(parsedImage, mimeType, textureCoordinates, index, channels) {
4665
+ const CHANNELS_MAP = {
4666
+ r: { offset: 0, shift: 0 },
4667
+ g: { offset: 1, shift: 8 },
4668
+ b: { offset: 2, shift: 16 },
4669
+ a: { offset: 3, shift: 24 }
4670
+ };
4671
+ const u = textureCoordinates[index];
4672
+ const v = textureCoordinates[index + 1];
4673
+ let components = 1;
4674
+ if (mimeType && (mimeType.indexOf("image/jpeg") !== -1 || mimeType.indexOf("image/png") !== -1))
4675
+ components = 4;
4676
+ const offset = coordinatesToOffset(u, v, parsedImage, components);
4677
+ let value = 0;
4678
+ for (const c of channels) {
4679
+ const map = CHANNELS_MAP[c];
4680
+ const val = getVal(parsedImage, offset + map.offset);
4681
+ value |= val << map.shift;
4682
+ }
4683
+ return value;
4684
+ }
4685
+ function getVal(parsedImage, offset) {
4686
+ const imageData = getImageData(parsedImage);
4687
+ if (imageData.data.length <= offset) {
4688
+ throw new Error(`${imageData.data.length} <= ${offset}`);
4689
+ }
4690
+ return imageData.data[offset];
4691
+ }
4692
+ function coordinatesToOffset(u, v, parsedImage, componentsCount = 1) {
4693
+ const w = parsedImage.width;
4694
+ const iX = emod(u) * (w - 1);
4695
+ const indX = Math.round(iX);
4696
+ const h = parsedImage.height;
4697
+ const iY = emod(v) * (h - 1);
4698
+ const indY = Math.round(iY);
4699
+ const components = parsedImage.components ? parsedImage.components : componentsCount;
4700
+ const offset = (indY * w + indX) * components;
4701
+ return offset;
4702
+ }
4703
+ function emod(n2) {
4704
+ const a2 = (n2 % 1 + 1) % 1;
4705
+ return a2;
4587
4706
  }
4588
4707
  function findFeatureTableByName(featureTables, schemaClassName) {
4589
4708
  for (const featureTableName in featureTables) {
@@ -4594,6 +4713,15 @@
4594
4713
  }
4595
4714
  return null;
4596
4715
  }
4716
+ function findFeatureTextureByName(featureTextures, schemaClassName) {
4717
+ for (const featureTexturesName in featureTextures) {
4718
+ const featureTable = featureTextures[featureTexturesName];
4719
+ if (featureTable.class === schemaClassName) {
4720
+ return featureTable;
4721
+ }
4722
+ }
4723
+ return null;
4724
+ }
4597
4725
  function getStringAttributes(data, offsetsData, stringsCount) {
4598
4726
  const stringsArray = [];
4599
4727
  const textDecoder = new TextDecoder("utf8");
@@ -4612,6 +4740,8 @@
4612
4740
  var init_EXT_feature_metadata = __esm({
4613
4741
  "src/lib/extensions/deprecated/EXT_feature_metadata.ts"() {
4614
4742
  init_gltf_scenegraph();
4743
+ init_src3();
4744
+ init_gltf_utils();
4615
4745
  EXT_FEATURE_METADATA = "EXT_feature_metadata";
4616
4746
  name9 = EXT_FEATURE_METADATA;
4617
4747
  }
@@ -4890,17 +5020,13 @@
4890
5020
  parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);
4891
5021
  normalizeGLTFV1(gltf, { normalize: options?.gltf?.normalize });
4892
5022
  preprocessExtensions(gltf, options, context);
4893
- const promises = [];
4894
5023
  if (options?.gltf?.loadBuffers && gltf.json.buffers) {
4895
5024
  await loadBuffers(gltf, options, context);
4896
5025
  }
4897
5026
  if (options?.gltf?.loadImages) {
4898
- const promise2 = loadImages(gltf, options, context);
4899
- promises.push(promise2);
5027
+ await loadImages(gltf, options, context);
4900
5028
  }
4901
- const promise = decodeExtensions(gltf, options, context);
4902
- promises.push(promise);
4903
- await Promise.all(promises);
5029
+ await decodeExtensions(gltf, options, context);
4904
5030
  return gltf;
4905
5031
  }
4906
5032
  function parseGLTFContainerSync(gltf, data, byteOffset, options) {
@@ -36,7 +36,8 @@ var GLTFScenegraph = function () {
36
36
  (0, _defineProperty2.default)(this, "byteLength", void 0);
37
37
  this.gltf = {
38
38
  json: (gltf === null || gltf === void 0 ? void 0 : gltf.json) || makeDefaultGLTFJson(),
39
- buffers: (gltf === null || gltf === void 0 ? void 0 : gltf.buffers) || []
39
+ buffers: (gltf === null || gltf === void 0 ? void 0 : gltf.buffers) || [],
40
+ images: (gltf === null || gltf === void 0 ? void 0 : gltf.images) || []
40
41
  };
41
42
  this.sourceBuffers = [];
42
43
  this.byteLength = 0;
@@ -399,13 +400,15 @@ var GLTFScenegraph = function () {
399
400
  }, {
400
401
  key: "addBufferView",
401
402
  value: function addBufferView(buffer) {
403
+ var bufferIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
404
+ var byteOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.byteLength;
402
405
  var byteLength = buffer.byteLength;
403
406
  (0, _assert.assert)(Number.isFinite(byteLength));
404
407
  this.sourceBuffers = this.sourceBuffers || [];
405
408
  this.sourceBuffers.push(buffer);
406
409
  var glTFBufferView = {
407
- buffer: 0,
408
- byteOffset: this.byteLength,
410
+ buffer: bufferIndex,
411
+ byteOffset: byteOffset,
409
412
  byteLength: byteLength
410
413
  };
411
414
  this.byteLength += (0, _loaderUtils.padToNBytes)(byteLength, 4);
@@ -1 +1 @@
1
- {"version":3,"file":"gltf-scenegraph.js","names":["_images","require","_loaderUtils","_assert","_gltfUtils","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","makeDefaultGLTFJson","asset","version","generator","buffers","extensions","extensionsRequired","extensionsUsed","GLTFScenegraph","gltf","_classCallCheck2","default","_defineProperty2","json","sourceBuffers","byteLength","_createClass2","key","get","getApplicationData","data","getExtraData","extras","hasExtension","extensionName","isUsedExtension","getUsedExtensions","find","isRequiredExtension","getRequiredExtensions","getExtension","isExtension","getRequiredExtension","isRequired","getRemovedExtensions","extensionsRemoved","getObjectExtension","object","getScene","index","getObject","getNode","getSkin","getMesh","getMaterial","getAccessor","getTexture","getSampler","getImage","getBufferView","getBuffer","array","_typeof2","Error","concat","getTypedArrayForBufferView","bufferView","bufferIndex","buffer","binChunk","assert","byteOffset","Uint8Array","arrayBuffer","getTypedArrayForAccessor","accessor","_getAccessorArrayType","getAccessorArrayTypeAndLength","ArrayType","getTypedArrayForImageData","image","addApplicationData","addExtraData","addObjectExtension","registerUsedExtension","setObjectExtension","removeObjectExtension","includes","push","addExtension","extensionData","arguments","undefined","addRequiredExtension","registerRequiredExtension","ext","removeExtension","_this$json$extensions","_removeStringFromArray","setDefaultScene","sceneIndex","scene","addScene","nodeIndices","scenes","nodes","addNode","node","meshIndex","matrix","nodeData","mesh","addMesh","attributes","indices","material","_mesh$mode","mode","accessors","_addAttributes","glTFMesh","primitives","indicesAccessor","_addIndices","Number","isFinite","meshes","addPointCloud","accessorIndices","addImage","imageData","mimeTypeOpt","metadata","getBinaryImageMetadata","mimeType","bufferViewIndex","addBufferView","glTFImage","images","glTFBufferView","padToNBytes","bufferViews","addAccessor","glTFAccessor","type","getAccessorTypeFromSize","size","componentType","count","max","min","addBinaryBuffer","sourceBuffer","minMax","_getAccessorMinMax","accessorDefaults","getComponentTypeFromArray","Math","round","assign","addTexture","texture","imageIndex","glTFTexture","source","textures","addMaterial","pbrMaterialInfo","materials","createBinaryChunk","_this$json","_this$json$buffers","totalByteLength","ArrayBuffer","targetArray","dstByteOffset","_iterator","_step","copyToArray","binary","string","found","indexOf","splice","result","attributeKey","attributeData","attrName","_getGltfAttributeName","attributeName","toLowerCase","initValues","subarray","_iterator2","_step2","componentIndex","exports"],"sources":["../../../../src/lib/api/gltf-scenegraph.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {GLTFWithBuffers} from '../types/gltf-types';\nimport type {\n GLTF,\n GLTFScene,\n GLTFNode,\n GLTFMesh,\n GLTFSkin,\n GLTFMaterial,\n GLTFAccessor,\n GLTFSampler,\n GLTFTexture,\n GLTFImage,\n GLTFBuffer,\n GLTFBufferView\n} from '../types/gltf-json-schema';\n\nimport {getBinaryImageMetadata} from '@loaders.gl/images';\nimport {padToNBytes, copyToArray} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {\n getAccessorArrayTypeAndLength,\n getAccessorTypeFromSize,\n getComponentTypeFromArray\n} from '../gltf-utils/gltf-utils';\n\ntype Extension = {[key: string]: any};\n\nfunction makeDefaultGLTFJson(): GLTF {\n return {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: [],\n extensions: {},\n extensionsRequired: [],\n extensionsUsed: []\n };\n}\n\n/**\n * Class for structured access to GLTF data\n */\nexport class GLTFScenegraph {\n // internal\n gltf: GLTFWithBuffers;\n sourceBuffers: any[];\n byteLength: number;\n\n // TODO - why is this not GLTFWithBuffers - what happens to images?\n constructor(gltf?: {json: GLTF; buffers?: any[]}) {\n // Declare locally so\n\n this.gltf = {\n json: gltf?.json || makeDefaultGLTFJson(),\n buffers: gltf?.buffers || []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n // Initialize buffers\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n // Accessors\n\n get json(): GLTF {\n return this.gltf.json;\n }\n\n getApplicationData(key: string): unknown {\n // TODO - Data is already unpacked by GLBParser\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key: string): {[key: string]: unknown} {\n // TODO - Data is already unpacked by GLBParser\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n hasExtension(extensionName: string): boolean {\n const isUsedExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const isRequiredExtension = this.getRequiredExtensions().find((name) => name === extensionName);\n return typeof isUsedExtension === 'string' || typeof isRequiredExtension === 'string';\n }\n\n getExtension<T = Extension>(extensionName: string): T | null {\n const isExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? (extensions[extensionName] as T) : null;\n }\n\n getRequiredExtension<T = Extension>(extensionName: string): T | null {\n const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions(): string[] {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions(): string[] {\n return this.json.extensionsUsed || [];\n }\n\n getRemovedExtensions(): string[] {\n return (this.json.extensionsRemoved || []) as string[];\n }\n\n getObjectExtension<T = Extension>(object: {[key: string]: any}, extensionName: string): T | null {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index: number): GLTFScene {\n return this.getObject('scenes', index) as GLTFScene;\n }\n\n getNode(index: number): GLTFNode {\n return this.getObject('nodes', index) as GLTFNode;\n }\n\n getSkin(index: number): GLTFSkin {\n return this.getObject('skins', index) as GLTFSkin;\n }\n\n getMesh(index: number): GLTFMesh {\n return this.getObject('meshes', index) as GLTFMesh;\n }\n\n getMaterial(index: number): GLTFMaterial {\n return this.getObject('materials', index) as GLTFMaterial;\n }\n\n getAccessor(index: number): GLTFAccessor {\n return this.getObject('accessors', index) as GLTFAccessor;\n }\n\n // getCamera(index: number): object | null {\n // return null; // TODO: fix thi: object as null;\n // }\n\n getTexture(index: number): GLTFTexture {\n return this.getObject('textures', index) as GLTFTexture;\n }\n\n getSampler(index: number): GLTFSampler {\n return this.getObject('samplers', index) as GLTFSampler;\n }\n\n getImage(index: number): GLTFImage {\n return this.getObject('images', index) as GLTFImage;\n }\n\n getBufferView(index: number | object): GLTFBufferView {\n return this.getObject('bufferViews', index) as GLTFBufferView;\n }\n\n getBuffer(index: number): GLTFBuffer {\n return this.getObject('buffers', index) as GLTFBuffer;\n }\n\n getObject(array: string, index: number | object): object {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && (this.json[array] as {}[])[index];\n if (!object) {\n throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n /**\n * Accepts buffer view index or buffer view object\n * @returns a `Uint8Array`\n */\n getTypedArrayForBufferView(bufferView: number | object): Uint8Array {\n bufferView = this.getBufferView(bufferView);\n // @ts-ignore\n const bufferIndex = bufferView.buffer;\n\n // Get hold of the arrayBuffer\n // const buffer = this.getBuffer(bufferIndex);\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n\n // @ts-ignore\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n // @ts-ignore\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n /** Accepts accessor index or accessor object\n * @returns a typed array with type that matches the types\n */\n getTypedArrayForAccessor(accessor: number | object): any {\n // @ts-ignore\n accessor = this.getAccessor(accessor);\n // @ts-ignore\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n // @ts-ignore\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n /** accepts accessor index or accessor object\n * returns a `Uint8Array`\n */\n getTypedArrayForImageData(image: number | object): Uint8Array {\n // @ts-ignore\n image = this.getAccessor(image);\n // @ts-ignore\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n // MODIFERS\n\n /**\n * Add an extra application-defined key to the top-level data structure\n */\n addApplicationData(key: string, data: object): GLTFScenegraph {\n this.json[key] = data;\n return this;\n }\n\n /**\n * `extras` - Standard GLTF field for storing application specific data\n */\n addExtraData(key: string, data: object): GLTFScenegraph {\n this.json.extras = this.json.extras || {};\n (this.json.extras as Record<string, unknown>)[key] = data;\n return this;\n }\n\n addObjectExtension(object: object, extensionName: string, data: object): GLTFScenegraph {\n // @ts-ignore\n object.extensions = object.extensions || {};\n // TODO - clobber or merge?\n // @ts-ignore\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object: any, extensionName: string, data: object): void {\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n // TODO - add to usedExtensions...\n }\n\n removeObjectExtension(object: any, extensionName: string): void {\n const extensions = object?.extensions || {};\n\n if (extensions[extensionName]) {\n this.json.extensionsRemoved = this.json.extensionsRemoved || [];\n const extensionsRemoved = this.json.extensionsRemoved as string[];\n if (!extensionsRemoved.includes(extensionName)) {\n extensionsRemoved.push(extensionName);\n }\n }\n\n delete extensions[extensionName];\n }\n\n /**\n * Add to standard GLTF top level extension object, mark as used\n */\n addExtension(extensionName: string, extensionData: object = {}): object {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n this.json.extensions[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Standard GLTF top level extension object, mark as used and required\n */\n addRequiredExtension(extensionName, extensionData: object = {}): object {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Add extensionName to list of used extensions\n */\n registerUsedExtension(extensionName: string): void {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n /**\n * Add extensionName to list of required extensions\n */\n registerRequiredExtension(extensionName: string): void {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n /**\n * Removes an extension from the top-level list\n */\n removeExtension(extensionName: string): void {\n if (this.json.extensions?.[extensionName]) {\n this.json.extensionsRemoved = this.json.extensionsRemoved || [];\n const extensionsRemoved = this.json.extensionsRemoved as string[];\n if (!extensionsRemoved.includes(extensionName)) {\n extensionsRemoved.push(extensionName);\n }\n }\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n }\n\n /**\n * Set default scene which is to be displayed at load time\n */\n setDefaultScene(sceneIndex: number): void {\n this.json.scene = sceneIndex;\n }\n\n /**\n * @todo: add more properties for scene initialization:\n * name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene\n */\n addScene(scene: {nodeIndices: number[]}): number {\n const {nodeIndices} = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({nodes: nodeIndices});\n return this.json.scenes.length - 1;\n }\n\n /**\n * @todo: add more properties for node initialization:\n * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node\n */\n addNode(node: {meshIndex: number; matrix?: number[]}): number {\n const {meshIndex, matrix} = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {mesh: meshIndex};\n if (matrix) {\n // @ts-ignore\n nodeData.matrix = matrix;\n }\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n /** Adds a mesh to the json part */\n addMesh(mesh: {attributes: object; indices?: object; material?: number; mode?: number}): number {\n const {attributes, indices, material, mode = 4} = mesh;\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessors,\n mode\n }\n ]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n // @ts-ignore\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n // @ts-ignore\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes: object): number {\n // @ts-ignore\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessorIndices,\n mode: 0 // GL.POINTS\n }\n ]\n };\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n /**\n * Adds a binary image. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes as glTF image\n * @param imageData\n * @param mimeType\n */\n addImage(imageData: any, mimeTypeOpt?: string): number {\n // If image is referencing a bufferView instead of URI, mimeType must be defined:\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images\n // \"a reference to a bufferView; in that case mimeType must be defined.\"\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || metadata?.mimeType;\n\n const bufferViewIndex = this.addBufferView(imageData);\n\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n /**\n * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index\n * @param buffer\n */\n addBufferView(buffer: any): number {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n\n // Add this buffer to the list of buffers to be written to the body.\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n\n const glTFBufferView = {\n buffer: 0,\n // Write offset from the start of the binary body\n byteOffset: this.byteLength,\n byteLength\n };\n\n // We've now added the contents to the body, so update the total length\n // Every sub-chunk needs to be 4-byte align ed\n this.byteLength += padToNBytes(byteLength, 4);\n\n // Add a bufferView indicating start and length of this binary sub-chunk\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n /**\n * Adds an accessor to a bufferView\n * @param bufferViewIndex\n * @param accessor\n */\n addAccessor(bufferViewIndex: number, accessor: object): number {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n // @ts-ignore\n type: getAccessorTypeFromSize(accessor.size),\n // @ts-ignore\n componentType: accessor.componentType,\n // @ts-ignore\n count: accessor.count,\n // @ts-ignore\n max: accessor.max,\n // @ts-ignore\n min: accessor.min\n };\n\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n /**\n * Add a binary buffer. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes buffers as glTF accessors, but this could be optimized\n * @param sourceBuffer\n * @param accessor\n */\n addBinaryBuffer(sourceBuffer: any, accessor: object = {size: 3}): number {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n // @ts-ignore\n let minMax = {min: accessor.min, max: accessor.max};\n if (!minMax.min || !minMax.max) {\n // @ts-ignore\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n // @ts-ignore\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n // @ts-ignore\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n /**\n * Adds a texture to the json part\n * @todo: add more properties for texture initialization\n * `sampler`, `name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\n */\n addTexture(texture: {imageIndex: number}): number {\n const {imageIndex} = texture;\n const glTFTexture = {\n source: imageIndex\n };\n\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n /** Adds a material to the json part */\n addMaterial(pbrMaterialInfo: Object): number {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n /** Pack the binary chunk */\n createBinaryChunk(): void {\n // Encoder expects this array undefined or empty\n this.gltf.buffers = [];\n\n // Allocate total array\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n\n // Copy each array into\n let dstByteOffset = 0;\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n // Update the glTF BIN CHUNK byte length\n if (this.json?.buffers?.[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{byteLength: totalByteLength}];\n }\n\n // Save generated arrayBuffer\n this.gltf.binary = arrayBuffer;\n\n // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk\n this.sourceBuffers = [arrayBuffer];\n }\n\n // PRIVATE\n\n _removeStringFromArray(array, string) {\n let found = true;\n while (found) {\n const index = array.indexOf(string);\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n /**\n * Add attributes to buffers and create `attributes` object which is part of `mesh`\n */\n _addAttributes(attributes = {}) {\n const result = {};\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n const attrName = this._getGltfAttributeName(attributeKey);\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n return result;\n }\n\n /**\n * Add indices to buffers\n */\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {size: 1});\n }\n\n /**\n * Deduce gltf specific attribue name from input attribute name\n */\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n case 'normal':\n case 'normals':\n return 'NORMAL';\n case 'color':\n case 'colors':\n return 'COLOR_0';\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n default:\n return attributeName;\n }\n }\n\n /**\n * Calculate `min` and `max` arrays of accessor according to spec:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor\n */\n _getAccessorMinMax(buffer, size) {\n const result = {min: null, max: null};\n if (buffer.length < size) {\n return result;\n }\n // @ts-ignore\n result.min = [];\n // @ts-ignore\n result.max = [];\n const initValues = buffer.subarray(0, size);\n for (const value of initValues) {\n // @ts-ignore\n result.min.push(value);\n // @ts-ignore\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n // @ts-ignore\n result.min[0 + componentIndex] = Math.min(\n // @ts-ignore\n result.min[0 + componentIndex],\n buffer[index + componentIndex]\n );\n // @ts-ignore\n result.max[0 + componentIndex] = Math.max(\n // @ts-ignore\n result.max[0 + componentIndex],\n buffer[index + componentIndex]\n );\n }\n }\n return result;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"gltf-scenegraph.js","names":["_images","require","_loaderUtils","_assert","_gltfUtils","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","makeDefaultGLTFJson","asset","version","generator","buffers","extensions","extensionsRequired","extensionsUsed","GLTFScenegraph","gltf","_classCallCheck2","default","_defineProperty2","json","images","sourceBuffers","byteLength","_createClass2","key","get","getApplicationData","data","getExtraData","extras","hasExtension","extensionName","isUsedExtension","getUsedExtensions","find","isRequiredExtension","getRequiredExtensions","getExtension","isExtension","getRequiredExtension","isRequired","getRemovedExtensions","extensionsRemoved","getObjectExtension","object","getScene","index","getObject","getNode","getSkin","getMesh","getMaterial","getAccessor","getTexture","getSampler","getImage","getBufferView","getBuffer","array","_typeof2","Error","concat","getTypedArrayForBufferView","bufferView","bufferIndex","buffer","binChunk","assert","byteOffset","Uint8Array","arrayBuffer","getTypedArrayForAccessor","accessor","_getAccessorArrayType","getAccessorArrayTypeAndLength","ArrayType","getTypedArrayForImageData","image","addApplicationData","addExtraData","addObjectExtension","registerUsedExtension","setObjectExtension","removeObjectExtension","includes","push","addExtension","extensionData","arguments","undefined","addRequiredExtension","registerRequiredExtension","ext","removeExtension","_this$json$extensions","_removeStringFromArray","setDefaultScene","sceneIndex","scene","addScene","nodeIndices","scenes","nodes","addNode","node","meshIndex","matrix","nodeData","mesh","addMesh","attributes","indices","material","_mesh$mode","mode","accessors","_addAttributes","glTFMesh","primitives","indicesAccessor","_addIndices","Number","isFinite","meshes","addPointCloud","accessorIndices","addImage","imageData","mimeTypeOpt","metadata","getBinaryImageMetadata","mimeType","bufferViewIndex","addBufferView","glTFImage","glTFBufferView","padToNBytes","bufferViews","addAccessor","glTFAccessor","type","getAccessorTypeFromSize","size","componentType","count","max","min","addBinaryBuffer","sourceBuffer","minMax","_getAccessorMinMax","accessorDefaults","getComponentTypeFromArray","Math","round","assign","addTexture","texture","imageIndex","glTFTexture","source","textures","addMaterial","pbrMaterialInfo","materials","createBinaryChunk","_this$json","_this$json$buffers","totalByteLength","ArrayBuffer","targetArray","dstByteOffset","_iterator","_step","copyToArray","binary","string","found","indexOf","splice","result","attributeKey","attributeData","attrName","_getGltfAttributeName","attributeName","toLowerCase","initValues","subarray","_iterator2","_step2","componentIndex","exports"],"sources":["../../../../src/lib/api/gltf-scenegraph.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {GLTFWithBuffers} from '../types/gltf-types';\nimport type {\n GLTF,\n GLTFScene,\n GLTFNode,\n GLTFMesh,\n GLTFSkin,\n GLTFMaterial,\n GLTFAccessor,\n GLTFSampler,\n GLTFTexture,\n GLTFImage,\n GLTFBuffer,\n GLTFBufferView\n} from '../types/gltf-json-schema';\n\nimport {getBinaryImageMetadata} from '@loaders.gl/images';\nimport {padToNBytes, copyToArray} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {\n getAccessorArrayTypeAndLength,\n getAccessorTypeFromSize,\n getComponentTypeFromArray\n} from '../gltf-utils/gltf-utils';\n\ntype Extension = {[key: string]: any};\n\nfunction makeDefaultGLTFJson(): GLTF {\n return {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: [],\n extensions: {},\n extensionsRequired: [],\n extensionsUsed: []\n };\n}\n\n/**\n * Class for structured access to GLTF data\n */\nexport class GLTFScenegraph {\n // internal\n gltf: GLTFWithBuffers;\n sourceBuffers: any[];\n byteLength: number;\n\n // TODO - why is this not GLTFWithBuffers - what happens to images?\n constructor(gltf?: {json: GLTF; buffers?: any[]; images?: any[]}) {\n // Declare locally so\n\n this.gltf = {\n json: gltf?.json || makeDefaultGLTFJson(),\n buffers: gltf?.buffers || [],\n images: gltf?.images || []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n // Initialize buffers\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n // Accessors\n\n get json(): GLTF {\n return this.gltf.json;\n }\n\n getApplicationData(key: string): unknown {\n // TODO - Data is already unpacked by GLBParser\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key: string): {[key: string]: unknown} {\n // TODO - Data is already unpacked by GLBParser\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n hasExtension(extensionName: string): boolean {\n const isUsedExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const isRequiredExtension = this.getRequiredExtensions().find((name) => name === extensionName);\n return typeof isUsedExtension === 'string' || typeof isRequiredExtension === 'string';\n }\n\n getExtension<T = Extension>(extensionName: string): T | null {\n const isExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? (extensions[extensionName] as T) : null;\n }\n\n getRequiredExtension<T = Extension>(extensionName: string): T | null {\n const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions(): string[] {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions(): string[] {\n return this.json.extensionsUsed || [];\n }\n\n getRemovedExtensions(): string[] {\n return (this.json.extensionsRemoved || []) as string[];\n }\n\n getObjectExtension<T = Extension>(object: {[key: string]: any}, extensionName: string): T | null {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index: number): GLTFScene {\n return this.getObject('scenes', index) as GLTFScene;\n }\n\n getNode(index: number): GLTFNode {\n return this.getObject('nodes', index) as GLTFNode;\n }\n\n getSkin(index: number): GLTFSkin {\n return this.getObject('skins', index) as GLTFSkin;\n }\n\n getMesh(index: number): GLTFMesh {\n return this.getObject('meshes', index) as GLTFMesh;\n }\n\n getMaterial(index: number): GLTFMaterial {\n return this.getObject('materials', index) as GLTFMaterial;\n }\n\n getAccessor(index: number): GLTFAccessor {\n return this.getObject('accessors', index) as GLTFAccessor;\n }\n\n // getCamera(index: number): object | null {\n // return null; // TODO: fix thi: object as null;\n // }\n\n getTexture(index: number): GLTFTexture {\n return this.getObject('textures', index) as GLTFTexture;\n }\n\n getSampler(index: number): GLTFSampler {\n return this.getObject('samplers', index) as GLTFSampler;\n }\n\n getImage(index: number): GLTFImage {\n return this.getObject('images', index) as GLTFImage;\n }\n\n getBufferView(index: number | object): GLTFBufferView {\n return this.getObject('bufferViews', index) as GLTFBufferView;\n }\n\n getBuffer(index: number): GLTFBuffer {\n return this.getObject('buffers', index) as GLTFBuffer;\n }\n\n getObject(array: string, index: number | object): object {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && (this.json[array] as {}[])[index];\n if (!object) {\n throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n /**\n * Accepts buffer view index or buffer view object\n * @returns a `Uint8Array`\n */\n getTypedArrayForBufferView(bufferView: number | object): Uint8Array {\n bufferView = this.getBufferView(bufferView);\n // @ts-ignore\n const bufferIndex = bufferView.buffer;\n\n // Get hold of the arrayBuffer\n // const buffer = this.getBuffer(bufferIndex);\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n\n // @ts-ignore\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n // @ts-ignore\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n /** Accepts accessor index or accessor object\n * @returns a typed array with type that matches the types\n */\n getTypedArrayForAccessor(accessor: number | object): any {\n // @ts-ignore\n accessor = this.getAccessor(accessor);\n // @ts-ignore\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n // @ts-ignore\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n /** accepts accessor index or accessor object\n * returns a `Uint8Array`\n */\n getTypedArrayForImageData(image: number | object): Uint8Array {\n // @ts-ignore\n image = this.getAccessor(image);\n // @ts-ignore\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n // MODIFERS\n\n /**\n * Add an extra application-defined key to the top-level data structure\n */\n addApplicationData(key: string, data: object): GLTFScenegraph {\n this.json[key] = data;\n return this;\n }\n\n /**\n * `extras` - Standard GLTF field for storing application specific data\n */\n addExtraData(key: string, data: object): GLTFScenegraph {\n this.json.extras = this.json.extras || {};\n (this.json.extras as Record<string, unknown>)[key] = data;\n return this;\n }\n\n addObjectExtension(object: object, extensionName: string, data: object): GLTFScenegraph {\n // @ts-ignore\n object.extensions = object.extensions || {};\n // TODO - clobber or merge?\n // @ts-ignore\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object: any, extensionName: string, data: object): void {\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n // TODO - add to usedExtensions...\n }\n\n removeObjectExtension(object: any, extensionName: string): void {\n const extensions = object?.extensions || {};\n\n if (extensions[extensionName]) {\n this.json.extensionsRemoved = this.json.extensionsRemoved || [];\n const extensionsRemoved = this.json.extensionsRemoved as string[];\n if (!extensionsRemoved.includes(extensionName)) {\n extensionsRemoved.push(extensionName);\n }\n }\n\n delete extensions[extensionName];\n }\n\n /**\n * Add to standard GLTF top level extension object, mark as used\n */\n addExtension(extensionName: string, extensionData: object = {}): object {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n this.json.extensions[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Standard GLTF top level extension object, mark as used and required\n */\n addRequiredExtension(extensionName, extensionData: object = {}): object {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Add extensionName to list of used extensions\n */\n registerUsedExtension(extensionName: string): void {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n /**\n * Add extensionName to list of required extensions\n */\n registerRequiredExtension(extensionName: string): void {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n /**\n * Removes an extension from the top-level list\n */\n removeExtension(extensionName: string): void {\n if (this.json.extensions?.[extensionName]) {\n this.json.extensionsRemoved = this.json.extensionsRemoved || [];\n const extensionsRemoved = this.json.extensionsRemoved as string[];\n if (!extensionsRemoved.includes(extensionName)) {\n extensionsRemoved.push(extensionName);\n }\n }\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n }\n\n /**\n * Set default scene which is to be displayed at load time\n */\n setDefaultScene(sceneIndex: number): void {\n this.json.scene = sceneIndex;\n }\n\n /**\n * @todo: add more properties for scene initialization:\n * name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene\n */\n addScene(scene: {nodeIndices: number[]}): number {\n const {nodeIndices} = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({nodes: nodeIndices});\n return this.json.scenes.length - 1;\n }\n\n /**\n * @todo: add more properties for node initialization:\n * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node\n */\n addNode(node: {meshIndex: number; matrix?: number[]}): number {\n const {meshIndex, matrix} = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {mesh: meshIndex};\n if (matrix) {\n // @ts-ignore\n nodeData.matrix = matrix;\n }\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n /** Adds a mesh to the json part */\n addMesh(mesh: {attributes: object; indices?: object; material?: number; mode?: number}): number {\n const {attributes, indices, material, mode = 4} = mesh;\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessors,\n mode\n }\n ]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n // @ts-ignore\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n // @ts-ignore\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes: object): number {\n // @ts-ignore\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessorIndices,\n mode: 0 // GL.POINTS\n }\n ]\n };\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n /**\n * Adds a binary image. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes as glTF image\n * @param imageData\n * @param mimeType\n */\n addImage(imageData: any, mimeTypeOpt?: string): number {\n // If image is referencing a bufferView instead of URI, mimeType must be defined:\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images\n // \"a reference to a bufferView; in that case mimeType must be defined.\"\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || metadata?.mimeType;\n\n const bufferViewIndex = this.addBufferView(imageData);\n\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n /**\n * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index\n * @param buffer\n */\n addBufferView(buffer: any, bufferIndex = 0, byteOffset = this.byteLength): number {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n\n // Add this buffer to the list of buffers to be written to the body.\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n\n const glTFBufferView = {\n buffer: bufferIndex,\n // Write offset from the start of the binary body\n byteOffset,\n byteLength\n };\n\n // We've now added the contents to the body, so update the total length\n // Every sub-chunk needs to be 4-byte align ed\n this.byteLength += padToNBytes(byteLength, 4);\n\n // Add a bufferView indicating start and length of this binary sub-chunk\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n /**\n * Adds an accessor to a bufferView\n * @param bufferViewIndex\n * @param accessor\n */\n addAccessor(bufferViewIndex: number, accessor: object): number {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n // @ts-ignore\n type: getAccessorTypeFromSize(accessor.size),\n // @ts-ignore\n componentType: accessor.componentType,\n // @ts-ignore\n count: accessor.count,\n // @ts-ignore\n max: accessor.max,\n // @ts-ignore\n min: accessor.min\n };\n\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n /**\n * Add a binary buffer. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes buffers as glTF accessors, but this could be optimized\n * @param sourceBuffer\n * @param accessor\n */\n addBinaryBuffer(sourceBuffer: any, accessor: object = {size: 3}): number {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n // @ts-ignore\n let minMax = {min: accessor.min, max: accessor.max};\n if (!minMax.min || !minMax.max) {\n // @ts-ignore\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n // @ts-ignore\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n // @ts-ignore\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n /**\n * Adds a texture to the json part\n * @todo: add more properties for texture initialization\n * `sampler`, `name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\n */\n addTexture(texture: {imageIndex: number}): number {\n const {imageIndex} = texture;\n const glTFTexture = {\n source: imageIndex\n };\n\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n /** Adds a material to the json part */\n addMaterial(pbrMaterialInfo: Object): number {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n /** Pack the binary chunk */\n createBinaryChunk(): void {\n // Encoder expects this array undefined or empty\n this.gltf.buffers = [];\n\n // Allocate total array\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n\n // Copy each array into\n let dstByteOffset = 0;\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n // Update the glTF BIN CHUNK byte length\n if (this.json?.buffers?.[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{byteLength: totalByteLength}];\n }\n\n // Save generated arrayBuffer\n this.gltf.binary = arrayBuffer;\n\n // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk\n this.sourceBuffers = [arrayBuffer];\n }\n\n // PRIVATE\n\n _removeStringFromArray(array, string) {\n let found = true;\n while (found) {\n const index = array.indexOf(string);\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n /**\n * Add attributes to buffers and create `attributes` object which is part of `mesh`\n */\n _addAttributes(attributes = {}) {\n const result = {};\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n const attrName = this._getGltfAttributeName(attributeKey);\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n return result;\n }\n\n /**\n * Add indices to buffers\n */\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {size: 1});\n }\n\n /**\n * Deduce gltf specific attribue name from input attribute name\n */\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n case 'normal':\n case 'normals':\n return 'NORMAL';\n case 'color':\n case 'colors':\n return 'COLOR_0';\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n default:\n return attributeName;\n }\n }\n\n /**\n * Calculate `min` and `max` arrays of accessor according to spec:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor\n */\n _getAccessorMinMax(buffer, size) {\n const result = {min: null, max: null};\n if (buffer.length < size) {\n return result;\n }\n // @ts-ignore\n result.min = [];\n // @ts-ignore\n result.max = [];\n const initValues = buffer.subarray(0, size);\n for (const value of initValues) {\n // @ts-ignore\n result.min.push(value);\n // @ts-ignore\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n // @ts-ignore\n result.min[0 + componentIndex] = Math.min(\n // @ts-ignore\n result.min[0 + componentIndex],\n buffer[index + componentIndex]\n );\n // @ts-ignore\n result.max[0 + componentIndex] = Math.max(\n // @ts-ignore\n result.max[0 + componentIndex],\n buffer[index + componentIndex]\n );\n }\n }\n return result;\n }\n}\n"],"mappings":";;;;;;;;;;;AAkBA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAIkC,SAAAI,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,MAAA,oBAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,EAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAQ,MAAA,qBAAAN,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAO,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAT,CAAA,CAAAQ,MAAA,WAAAK,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAd,CAAA,CAAAS,CAAA,UAAAM,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAT,EAAA,GAAAA,EAAA,CAAAoB,IAAA,CAAAtB,CAAA,MAAAY,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAArB,EAAA,CAAAsB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAjB,EAAA,CAAAwB,MAAA,UAAAxB,EAAA,CAAAwB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAd,4BAAAP,CAAA,EAAA2B,MAAA,SAAA3B,CAAA,qBAAAA,CAAA,sBAAA4B,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA,OAAAf,CAAA,GAAAiB,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAT,IAAA,CAAAtB,CAAA,EAAAgC,KAAA,aAAApB,CAAA,iBAAAZ,CAAA,CAAAiC,WAAA,EAAArB,CAAA,GAAAZ,CAAA,CAAAiC,WAAA,CAAAC,IAAA,MAAAtB,CAAA,cAAAA,CAAA,mBAAAP,KAAA,CAAA8B,IAAA,CAAAnC,CAAA,OAAAY,CAAA,+DAAAwB,IAAA,CAAAxB,CAAA,UAAAgB,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA;AAAA,SAAAC,kBAAAS,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA7B,MAAA,EAAA8B,GAAA,GAAAD,GAAA,CAAA7B,MAAA,WAAAC,CAAA,MAAA8B,IAAA,OAAAlC,KAAA,CAAAiC,GAAA,GAAA7B,CAAA,GAAA6B,GAAA,EAAA7B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAA4B,GAAA,CAAA5B,CAAA,UAAA8B,IAAA;AAIlC,SAASC,mBAAmBA,CAAA,EAAS;EACnC,OAAO;IACLC,KAAK,EAAE;MACLC,OAAO,EAAE,KAAK;MACdC,SAAS,EAAE;IACb,CAAC;IACDC,OAAO,EAAE,EAAE;IACXC,UAAU,EAAE,CAAC,CAAC;IACdC,kBAAkB,EAAE,EAAE;IACtBC,cAAc,EAAE;EAClB,CAAC;AACH;AAAC,IAKYC,cAAc;EAOzB,SAAAA,eAAYC,IAAoD,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAH,cAAA;IAAA,IAAAI,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAGhE,IAAI,CAACF,IAAI,GAAG;MACVI,IAAI,EAAE,CAAAJ,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEI,IAAI,KAAIb,mBAAmB,CAAC,CAAC;MACzCI,OAAO,EAAE,CAAAK,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEL,OAAO,KAAI,EAAE;MAC5BU,MAAM,EAAE,CAAAL,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEK,MAAM,KAAI;IAC1B,CAAC;IACD,IAAI,CAACC,aAAa,GAAG,EAAE;IACvB,IAAI,CAACC,UAAU,GAAG,CAAC;IAGnB,IAAI,IAAI,CAACP,IAAI,CAACL,OAAO,IAAI,IAAI,CAACK,IAAI,CAACL,OAAO,CAAC,CAAC,CAAC,EAAE;MAC7C,IAAI,CAACY,UAAU,GAAG,IAAI,CAACP,IAAI,CAACL,OAAO,CAAC,CAAC,CAAC,CAACY,UAAU;MACjD,IAAI,CAACD,aAAa,GAAG,CAAC,IAAI,CAACN,IAAI,CAACL,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7C;EACF;EAAC,IAAAa,aAAA,CAAAN,OAAA,EAAAH,cAAA;IAAAU,GAAA;IAAAC,GAAA,EAID,SAAAA,IAAA,EAAiB;MACf,OAAO,IAAI,CAACV,IAAI,CAACI,IAAI;IACvB;EAAC;IAAAK,GAAA;IAAA5C,KAAA,EAED,SAAA8C,mBAAmBF,GAAW,EAAW;MAEvC,IAAMG,IAAI,GAAG,IAAI,CAACR,IAAI,CAACK,GAAG,CAAC;MAC3B,OAAOG,IAAI;IACb;EAAC;IAAAH,GAAA;IAAA5C,KAAA,EAED,SAAAgD,aAAaJ,GAAW,EAA4B;MAElD,IAAMK,MAAM,GAAG,IAAI,CAACV,IAAI,CAACU,MAAM,IAAI,CAAC,CAAC;MACrC,OAAOA,MAAM,CAACL,GAAG,CAAC;IACpB;EAAC;IAAAA,GAAA;IAAA5C,KAAA,EAED,SAAAkD,aAAaC,aAAqB,EAAW;MAC3C,IAAMC,eAAe,GAAG,IAAI,CAACC,iBAAiB,CAAC,CAAC,CAACC,IAAI,CAAC,UAAClC,IAAI;QAAA,OAAKA,IAAI,KAAK+B,aAAa;MAAA,EAAC;MACvF,IAAMI,mBAAmB,GAAG,IAAI,CAACC,qBAAqB,CAAC,CAAC,CAACF,IAAI,CAAC,UAAClC,IAAI;QAAA,OAAKA,IAAI,KAAK+B,aAAa;MAAA,EAAC;MAC/F,OAAO,OAAOC,eAAe,KAAK,QAAQ,IAAI,OAAOG,mBAAmB,KAAK,QAAQ;IACvF;EAAC;IAAAX,GAAA;IAAA5C,KAAA,EAED,SAAAyD,aAA4BN,aAAqB,EAAY;MAC3D,IAAMO,WAAW,GAAG,IAAI,CAACL,iBAAiB,CAAC,CAAC,CAACC,IAAI,CAAC,UAAClC,IAAI;QAAA,OAAKA,IAAI,KAAK+B,aAAa;MAAA,EAAC;MACnF,IAAMpB,UAAU,GAAG,IAAI,CAACQ,IAAI,CAACR,UAAU,IAAI,CAAC,CAAC;MAC7C,OAAO2B,WAAW,GAAI3B,UAAU,CAACoB,aAAa,CAAC,GAAS,IAAI;IAC9D;EAAC;IAAAP,GAAA;IAAA5C,KAAA,EAED,SAAA2D,qBAAoCR,aAAqB,EAAY;MACnE,IAAMS,UAAU,GAAG,IAAI,CAACJ,qBAAqB,CAAC,CAAC,CAACF,IAAI,CAAC,UAAClC,IAAI;QAAA,OAAKA,IAAI,KAAK+B,aAAa;MAAA,EAAC;MACtF,OAAOS,UAAU,GAAG,IAAI,CAACH,YAAY,CAACN,aAAa,CAAC,GAAG,IAAI;IAC7D;EAAC;IAAAP,GAAA;IAAA5C,KAAA,EAED,SAAAwD,sBAAA,EAAkC;MAChC,OAAO,IAAI,CAACjB,IAAI,CAACP,kBAAkB,IAAI,EAAE;IAC3C;EAAC;IAAAY,GAAA;IAAA5C,KAAA,EAED,SAAAqD,kBAAA,EAA8B;MAC5B,OAAO,IAAI,CAACd,IAAI,CAACN,cAAc,IAAI,EAAE;IACvC;EAAC;IAAAW,GAAA;IAAA5C,KAAA,EAED,SAAA6D,qBAAA,EAAiC;MAC/B,OAAQ,IAAI,CAACtB,IAAI,CAACuB,iBAAiB,IAAI,EAAE;IAC3C;EAAC;IAAAlB,GAAA;IAAA5C,KAAA,EAED,SAAA+D,mBAAkCC,MAA4B,EAAEb,aAAqB,EAAY;MAC/F,IAAMpB,UAAU,GAAGiC,MAAM,CAACjC,UAAU,IAAI,CAAC,CAAC;MAC1C,OAAOA,UAAU,CAACoB,aAAa,CAAC;IAClC;EAAC;IAAAP,GAAA;IAAA5C,KAAA,EAED,SAAAiE,SAASC,KAAa,EAAa;MACjC,OAAO,IAAI,CAACC,SAAS,CAAC,QAAQ,EAAED,KAAK,CAAC;IACxC;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAAoE,QAAQF,KAAa,EAAY;MAC/B,OAAO,IAAI,CAACC,SAAS,CAAC,OAAO,EAAED,KAAK,CAAC;IACvC;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAAqE,QAAQH,KAAa,EAAY;MAC/B,OAAO,IAAI,CAACC,SAAS,CAAC,OAAO,EAAED,KAAK,CAAC;IACvC;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAAsE,QAAQJ,KAAa,EAAY;MAC/B,OAAO,IAAI,CAACC,SAAS,CAAC,QAAQ,EAAED,KAAK,CAAC;IACxC;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAAuE,YAAYL,KAAa,EAAgB;MACvC,OAAO,IAAI,CAACC,SAAS,CAAC,WAAW,EAAED,KAAK,CAAC;IAC3C;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAAwE,YAAYN,KAAa,EAAgB;MACvC,OAAO,IAAI,CAACC,SAAS,CAAC,WAAW,EAAED,KAAK,CAAC;IAC3C;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAMD,SAAAyE,WAAWP,KAAa,EAAe;MACrC,OAAO,IAAI,CAACC,SAAS,CAAC,UAAU,EAAED,KAAK,CAAC;IAC1C;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAA0E,WAAWR,KAAa,EAAe;MACrC,OAAO,IAAI,CAACC,SAAS,CAAC,UAAU,EAAED,KAAK,CAAC;IAC1C;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAA2E,SAAST,KAAa,EAAa;MACjC,OAAO,IAAI,CAACC,SAAS,CAAC,QAAQ,EAAED,KAAK,CAAC;IACxC;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAA4E,cAAcV,KAAsB,EAAkB;MACpD,OAAO,IAAI,CAACC,SAAS,CAAC,aAAa,EAAED,KAAK,CAAC;IAC7C;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAA6E,UAAUX,KAAa,EAAc;MACnC,OAAO,IAAI,CAACC,SAAS,CAAC,SAAS,EAAED,KAAK,CAAC;IACzC;EAAC;IAAAtB,GAAA;IAAA5C,KAAA,EAED,SAAAmE,UAAUW,KAAa,EAAEZ,KAAsB,EAAU;MAEvD,IAAI,IAAAa,QAAA,CAAA1C,OAAA,EAAO6B,KAAK,MAAK,QAAQ,EAAE;QAC7B,OAAOA,KAAK;MACd;MACA,IAAMF,MAAM,GAAG,IAAI,CAACzB,IAAI,CAACuC,KAAK,CAAC,IAAK,IAAI,CAACvC,IAAI,CAACuC,KAAK,CAAC,CAAUZ,KAAK,CAAC;MACpE,IAAI,CAACF,MAAM,EAAE;QACX,MAAM,IAAIgB,KAAK,oCAAAC,MAAA,CAAoCH,KAAK,OAAAG,MAAA,CAAIf,KAAK,MAAG,CAAC;MACvE;MACA,OAAOF,MAAM;IACf;EAAC;IAAApB,GAAA;IAAA5C,KAAA,EAMD,SAAAkF,2BAA2BC,UAA2B,EAAc;MAClEA,UAAU,GAAG,IAAI,CAACP,aAAa,CAACO,UAAU,CAAC;MAE3C,IAAMC,WAAW,GAAGD,UAAU,CAACE,MAAM;MAIrC,IAAMC,QAAQ,GAAG,IAAI,CAACnD,IAAI,CAACL,OAAO,CAACsD,WAAW,CAAC;MAC/C,IAAAG,cAAM,EAACD,QAAQ,CAAC;MAGhB,IAAME,UAAU,GAAG,CAACL,UAAU,CAACK,UAAU,IAAI,CAAC,IAAIF,QAAQ,CAACE,UAAU;MAErE,OAAO,IAAIC,UAAU,CAACH,QAAQ,CAACI,WAAW,EAAEF,UAAU,EAAEL,UAAU,CAACzC,UAAU,CAAC;IAChF;EAAC;IAAAE,GAAA;IAAA5C,KAAA,EAKD,SAAA2F,yBAAyBC,QAAyB,EAAO;MAEvDA,QAAQ,GAAG,IAAI,CAACpB,WAAW,CAACoB,QAAQ,CAAC;MAErC,IAAMT,UAAU,GAAG,IAAI,CAACP,aAAa,CAACgB,QAAQ,CAACT,UAAU,CAAC;MAC1D,IAAME,MAAM,GAAG,IAAI,CAACR,SAAS,CAACM,UAAU,CAACE,MAAM,CAAC;MAEhD,IAAMK,WAAW,GAAGL,MAAM,CAACtC,IAAI;MAG/B,IAAA8C,qBAAA,GAA4B,IAAAC,wCAA6B,EAACF,QAAQ,EAAET,UAAU,CAAC;QAAxEY,SAAS,GAAAF,qBAAA,CAATE,SAAS;QAAErG,MAAM,GAAAmG,qBAAA,CAANnG,MAAM;MAExB,IAAM8F,UAAU,GAAGL,UAAU,CAACK,UAAU,GAAGI,QAAQ,CAACJ,UAAU;MAC9D,OAAO,IAAIO,SAAS,CAACL,WAAW,EAAEF,UAAU,EAAE9F,MAAM,CAAC;IACvD;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EAKD,SAAAgG,0BAA0BC,KAAsB,EAAc;MAE5DA,KAAK,GAAG,IAAI,CAACzB,WAAW,CAACyB,KAAK,CAAC;MAE/B,IAAMd,UAAU,GAAG,IAAI,CAACP,aAAa,CAACqB,KAAK,CAACd,UAAU,CAAC;MACvD,IAAME,MAAM,GAAG,IAAI,CAACR,SAAS,CAACM,UAAU,CAACE,MAAM,CAAC;MAEhD,IAAMK,WAAW,GAAGL,MAAM,CAACtC,IAAI;MAE/B,IAAMyC,UAAU,GAAGL,UAAU,CAACK,UAAU,IAAI,CAAC;MAC7C,OAAO,IAAIC,UAAU,CAACC,WAAW,EAAEF,UAAU,EAAEL,UAAU,CAACzC,UAAU,CAAC;IACvE;EAAC;IAAAE,GAAA;IAAA5C,KAAA,EAOD,SAAAkG,mBAAmBtD,GAAW,EAAEG,IAAY,EAAkB;MAC5D,IAAI,CAACR,IAAI,CAACK,GAAG,CAAC,GAAGG,IAAI;MACrB,OAAO,IAAI;IACb;EAAC;IAAAH,GAAA;IAAA5C,KAAA,EAKD,SAAAmG,aAAavD,GAAW,EAAEG,IAAY,EAAkB;MACtD,IAAI,CAACR,IAAI,CAACU,MAAM,GAAG,IAAI,CAACV,IAAI,CAACU,MAAM,IAAI,CAAC,CAAC;MACxC,IAAI,CAACV,IAAI,CAACU,MAAM,CAA6BL,GAAG,CAAC,GAAGG,IAAI;MACzD,OAAO,IAAI;IACb;EAAC;IAAAH,GAAA;IAAA5C,KAAA,EAED,SAAAoG,mBAAmBpC,MAAc,EAAEb,aAAqB,EAAEJ,IAAY,EAAkB;MAEtFiB,MAAM,CAACjC,UAAU,GAAGiC,MAAM,CAACjC,UAAU,IAAI,CAAC,CAAC;MAG3CiC,MAAM,CAACjC,UAAU,CAACoB,aAAa,CAAC,GAAGJ,IAAI;MACvC,IAAI,CAACsD,qBAAqB,CAAClD,aAAa,CAAC;MACzC,OAAO,IAAI;IACb;EAAC;IAAAP,GAAA;IAAA5C,KAAA,EAED,SAAAsG,mBAAmBtC,MAAW,EAAEb,aAAqB,EAAEJ,IAAY,EAAQ;MACzE,IAAMhB,UAAU,GAAGiC,MAAM,CAACjC,UAAU,IAAI,CAAC,CAAC;MAC1CA,UAAU,CAACoB,aAAa,CAAC,GAAGJ,IAAI;IAElC;EAAC;IAAAH,GAAA;IAAA5C,KAAA,EAED,SAAAuG,sBAAsBvC,MAAW,EAAEb,aAAqB,EAAQ;MAC9D,IAAMpB,UAAU,GAAG,CAAAiC,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEjC,UAAU,KAAI,CAAC,CAAC;MAE3C,IAAIA,UAAU,CAACoB,aAAa,CAAC,EAAE;QAC7B,IAAI,CAACZ,IAAI,CAACuB,iBAAiB,GAAG,IAAI,CAACvB,IAAI,CAACuB,iBAAiB,IAAI,EAAE;QAC/D,IAAMA,iBAAiB,GAAG,IAAI,CAACvB,IAAI,CAACuB,iBAA6B;QACjE,IAAI,CAACA,iBAAiB,CAAC0C,QAAQ,CAACrD,aAAa,CAAC,EAAE;UAC9CW,iBAAiB,CAAC2C,IAAI,CAACtD,aAAa,CAAC;QACvC;MACF;MAEA,OAAOpB,UAAU,CAACoB,aAAa,CAAC;IAClC;EAAC;IAAAP,GAAA;IAAA5C,KAAA,EAKD,SAAA0G,aAAavD,aAAqB,EAAsC;MAAA,IAApCwD,aAAqB,GAAAC,SAAA,CAAAlH,MAAA,QAAAkH,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC,CAAC;MAC5D,IAAArB,cAAM,EAACoB,aAAa,CAAC;MACrB,IAAI,CAACpE,IAAI,CAACR,UAAU,GAAG,IAAI,CAACQ,IAAI,CAACR,UAAU,IAAI,CAAC,CAAC;MACjD,IAAI,CAACQ,IAAI,CAACR,UAAU,CAACoB,aAAa,CAAC,GAAGwD,aAAa;MACnD,IAAI,CAACN,qBAAqB,CAAClD,aAAa,CAAC;MACzC,OAAOwD,aAAa;IACtB;EAAC;IAAA/D,GAAA;IAAA5C,KAAA,EAKD,SAAA8G,qBAAqB3D,aAAa,EAAsC;MAAA,IAApCwD,aAAqB,GAAAC,SAAA,CAAAlH,MAAA,QAAAkH,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC,CAAC;MAC5D,IAAArB,cAAM,EAACoB,aAAa,CAAC;MACrB,IAAI,CAACD,YAAY,CAACvD,aAAa,EAAEwD,aAAa,CAAC;MAC/C,IAAI,CAACI,yBAAyB,CAAC5D,aAAa,CAAC;MAC7C,OAAOwD,aAAa;IACtB;EAAC;IAAA/D,GAAA;IAAA5C,KAAA,EAKD,SAAAqG,sBAAsBlD,aAAqB,EAAQ;MACjD,IAAI,CAACZ,IAAI,CAACN,cAAc,GAAG,IAAI,CAACM,IAAI,CAACN,cAAc,IAAI,EAAE;MACzD,IAAI,CAAC,IAAI,CAACM,IAAI,CAACN,cAAc,CAACqB,IAAI,CAAC,UAAC0D,GAAG;QAAA,OAAKA,GAAG,KAAK7D,aAAa;MAAA,EAAC,EAAE;QAClE,IAAI,CAACZ,IAAI,CAACN,cAAc,CAACwE,IAAI,CAACtD,aAAa,CAAC;MAC9C;IACF;EAAC;IAAAP,GAAA;IAAA5C,KAAA,EAKD,SAAA+G,0BAA0B5D,aAAqB,EAAQ;MACrD,IAAI,CAACkD,qBAAqB,CAAClD,aAAa,CAAC;MACzC,IAAI,CAACZ,IAAI,CAACP,kBAAkB,GAAG,IAAI,CAACO,IAAI,CAACP,kBAAkB,IAAI,EAAE;MACjE,IAAI,CAAC,IAAI,CAACO,IAAI,CAACP,kBAAkB,CAACsB,IAAI,CAAC,UAAC0D,GAAG;QAAA,OAAKA,GAAG,KAAK7D,aAAa;MAAA,EAAC,EAAE;QACtE,IAAI,CAACZ,IAAI,CAACP,kBAAkB,CAACyE,IAAI,CAACtD,aAAa,CAAC;MAClD;IACF;EAAC;IAAAP,GAAA;IAAA5C,KAAA,EAKD,SAAAiH,gBAAgB9D,aAAqB,EAAQ;MAAA,IAAA+D,qBAAA;MAC3C,KAAAA,qBAAA,GAAI,IAAI,CAAC3E,IAAI,CAACR,UAAU,cAAAmF,qBAAA,eAApBA,qBAAA,CAAuB/D,aAAa,CAAC,EAAE;QACzC,IAAI,CAACZ,IAAI,CAACuB,iBAAiB,GAAG,IAAI,CAACvB,IAAI,CAACuB,iBAAiB,IAAI,EAAE;QAC/D,IAAMA,iBAAiB,GAAG,IAAI,CAACvB,IAAI,CAACuB,iBAA6B;QACjE,IAAI,CAACA,iBAAiB,CAAC0C,QAAQ,CAACrD,aAAa,CAAC,EAAE;UAC9CW,iBAAiB,CAAC2C,IAAI,CAACtD,aAAa,CAAC;QACvC;MACF;MACA,IAAI,IAAI,CAACZ,IAAI,CAACR,UAAU,EAAE;QACxB,OAAO,IAAI,CAACQ,IAAI,CAACR,UAAU,CAACoB,aAAa,CAAC;MAC5C;MACA,IAAI,IAAI,CAACZ,IAAI,CAACP,kBAAkB,EAAE;QAChC,IAAI,CAACmF,sBAAsB,CAAC,IAAI,CAAC5E,IAAI,CAACP,kBAAkB,EAAEmB,aAAa,CAAC;MAC1E;MACA,IAAI,IAAI,CAACZ,IAAI,CAACN,cAAc,EAAE;QAC5B,IAAI,CAACkF,sBAAsB,CAAC,IAAI,CAAC5E,IAAI,CAACN,cAAc,EAAEkB,aAAa,CAAC;MACtE;IACF;EAAC;IAAAP,GAAA;IAAA5C,KAAA,EAKD,SAAAoH,gBAAgBC,UAAkB,EAAQ;MACxC,IAAI,CAAC9E,IAAI,CAAC+E,KAAK,GAAGD,UAAU;IAC9B;EAAC;IAAAzE,GAAA;IAAA5C,KAAA,EAOD,SAAAuH,SAASD,KAA8B,EAAU;MAC/C,IAAOE,WAAW,GAAIF,KAAK,CAApBE,WAAW;MAClB,IAAI,CAACjF,IAAI,CAACkF,MAAM,GAAG,IAAI,CAAClF,IAAI,CAACkF,MAAM,IAAI,EAAE;MACzC,IAAI,CAAClF,IAAI,CAACkF,MAAM,CAAChB,IAAI,CAAC;QAACiB,KAAK,EAAEF;MAAW,CAAC,CAAC;MAC3C,OAAO,IAAI,CAACjF,IAAI,CAACkF,MAAM,CAAC/H,MAAM,GAAG,CAAC;IACpC;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EAOD,SAAA2H,QAAQC,IAA4C,EAAU;MAC5D,IAAOC,SAAS,GAAYD,IAAI,CAAzBC,SAAS;QAAEC,MAAM,GAAIF,IAAI,CAAdE,MAAM;MACxB,IAAI,CAACvF,IAAI,CAACmF,KAAK,GAAG,IAAI,CAACnF,IAAI,CAACmF,KAAK,IAAI,EAAE;MACvC,IAAMK,QAAQ,GAAG;QAACC,IAAI,EAAEH;MAAS,CAAC;MAClC,IAAIC,MAAM,EAAE;QAEVC,QAAQ,CAACD,MAAM,GAAGA,MAAM;MAC1B;MACA,IAAI,CAACvF,IAAI,CAACmF,KAAK,CAACjB,IAAI,CAACsB,QAAQ,CAAC;MAC9B,OAAO,IAAI,CAACxF,IAAI,CAACmF,KAAK,CAAChI,MAAM,GAAG,CAAC;IACnC;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EAGD,SAAAiI,QAAQD,IAA8E,EAAU;MAC9F,IAAOE,UAAU,GAAiCF,IAAI,CAA/CE,UAAU;QAAEC,OAAO,GAAwBH,IAAI,CAAnCG,OAAO;QAAEC,QAAQ,GAAcJ,IAAI,CAA1BI,QAAQ;QAAAC,UAAA,GAAcL,IAAI,CAAhBM,IAAI;QAAJA,IAAI,GAAAD,UAAA,cAAG,CAAC,GAAAA,UAAA;MAC9C,IAAME,SAAS,GAAG,IAAI,CAACC,cAAc,CAACN,UAAU,CAAC;MAEjD,IAAMO,QAAQ,GAAG;QACfC,UAAU,EAAE,CACV;UACER,UAAU,EAAEK,SAAS;UACrBD,IAAI,EAAJA;QACF,CAAC;MAEL,CAAC;MAED,IAAIH,OAAO,EAAE;QACX,IAAMQ,eAAe,GAAG,IAAI,CAACC,WAAW,CAACT,OAAO,CAAC;QAEjDM,QAAQ,CAACC,UAAU,CAAC,CAAC,CAAC,CAACP,OAAO,GAAGQ,eAAe;MAClD;MAEA,IAAIE,MAAM,CAACC,QAAQ,CAACV,QAAQ,CAAC,EAAE;QAE7BK,QAAQ,CAACC,UAAU,CAAC,CAAC,CAAC,CAACN,QAAQ,GAAGA,QAAQ;MAC5C;MAEA,IAAI,CAAC7F,IAAI,CAACwG,MAAM,GAAG,IAAI,CAACxG,IAAI,CAACwG,MAAM,IAAI,EAAE;MACzC,IAAI,CAACxG,IAAI,CAACwG,MAAM,CAACtC,IAAI,CAACgC,QAAQ,CAAC;MAC/B,OAAO,IAAI,CAAClG,IAAI,CAACwG,MAAM,CAACrJ,MAAM,GAAG,CAAC;IACpC;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EAED,SAAAgJ,cAAcd,UAAkB,EAAU;MAExC,IAAMe,eAAe,GAAG,IAAI,CAACT,cAAc,CAACN,UAAU,CAAC;MAEvD,IAAMO,QAAQ,GAAG;QACfC,UAAU,EAAE,CACV;UACER,UAAU,EAAEe,eAAe;UAC3BX,IAAI,EAAE;QACR,CAAC;MAEL,CAAC;MAED,IAAI,CAAC/F,IAAI,CAACwG,MAAM,GAAG,IAAI,CAACxG,IAAI,CAACwG,MAAM,IAAI,EAAE;MACzC,IAAI,CAACxG,IAAI,CAACwG,MAAM,CAACtC,IAAI,CAACgC,QAAQ,CAAC;MAC/B,OAAO,IAAI,CAAClG,IAAI,CAACwG,MAAM,CAACrJ,MAAM,GAAG,CAAC;IACpC;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EASD,SAAAkJ,SAASC,SAAc,EAAEC,WAAoB,EAAU;MAIrD,IAAMC,QAAQ,GAAG,IAAAC,8BAAsB,EAACH,SAAS,CAAC;MAClD,IAAMI,QAAQ,GAAGH,WAAW,KAAIC,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEE,QAAQ;MAElD,IAAMC,eAAe,GAAG,IAAI,CAACC,aAAa,CAACN,SAAS,CAAC;MAErD,IAAMO,SAAS,GAAG;QAChBvE,UAAU,EAAEqE,eAAe;QAC3BD,QAAQ,EAARA;MACF,CAAC;MAED,IAAI,CAAChH,IAAI,CAACC,MAAM,GAAG,IAAI,CAACD,IAAI,CAACC,MAAM,IAAI,EAAE;MACzC,IAAI,CAACD,IAAI,CAACC,MAAM,CAACiE,IAAI,CAACiD,SAAS,CAAC;MAChC,OAAO,IAAI,CAACnH,IAAI,CAACC,MAAM,CAAC9C,MAAM,GAAG,CAAC;IACpC;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EAMD,SAAAyJ,cAAcpE,MAAW,EAAyD;MAAA,IAAvDD,WAAW,GAAAwB,SAAA,CAAAlH,MAAA,QAAAkH,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC;MAAA,IAAEpB,UAAU,GAAAoB,SAAA,CAAAlH,MAAA,QAAAkH,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI,CAAClE,UAAU;MACtE,IAAMA,UAAU,GAAG2C,MAAM,CAAC3C,UAAU;MACpC,IAAA6C,cAAM,EAACsD,MAAM,CAACC,QAAQ,CAACpG,UAAU,CAAC,CAAC;MAGnC,IAAI,CAACD,aAAa,GAAG,IAAI,CAACA,aAAa,IAAI,EAAE;MAC7C,IAAI,CAACA,aAAa,CAACgE,IAAI,CAACpB,MAAM,CAAC;MAE/B,IAAMsE,cAAc,GAAG;QACrBtE,MAAM,EAAED,WAAW;QAEnBI,UAAU,EAAVA,UAAU;QACV9C,UAAU,EAAVA;MACF,CAAC;MAID,IAAI,CAACA,UAAU,IAAI,IAAAkH,wBAAW,EAAClH,UAAU,EAAE,CAAC,CAAC;MAG7C,IAAI,CAACH,IAAI,CAACsH,WAAW,GAAG,IAAI,CAACtH,IAAI,CAACsH,WAAW,IAAI,EAAE;MACnD,IAAI,CAACtH,IAAI,CAACsH,WAAW,CAACpD,IAAI,CAACkD,cAAc,CAAC;MAC1C,OAAO,IAAI,CAACpH,IAAI,CAACsH,WAAW,CAACnK,MAAM,GAAG,CAAC;IACzC;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EAOD,SAAA8J,YAAYN,eAAuB,EAAE5D,QAAgB,EAAU;MAC7D,IAAMmE,YAAY,GAAG;QACnB5E,UAAU,EAAEqE,eAAe;QAE3BQ,IAAI,EAAE,IAAAC,kCAAuB,EAACrE,QAAQ,CAACsE,IAAI,CAAC;QAE5CC,aAAa,EAAEvE,QAAQ,CAACuE,aAAa;QAErCC,KAAK,EAAExE,QAAQ,CAACwE,KAAK;QAErBC,GAAG,EAAEzE,QAAQ,CAACyE,GAAG;QAEjBC,GAAG,EAAE1E,QAAQ,CAAC0E;MAChB,CAAC;MAED,IAAI,CAAC/H,IAAI,CAACgG,SAAS,GAAG,IAAI,CAAChG,IAAI,CAACgG,SAAS,IAAI,EAAE;MAC/C,IAAI,CAAChG,IAAI,CAACgG,SAAS,CAAC9B,IAAI,CAACsD,YAAY,CAAC;MACtC,OAAO,IAAI,CAACxH,IAAI,CAACgG,SAAS,CAAC7I,MAAM,GAAG,CAAC;IACvC;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EASD,SAAAuK,gBAAgBC,YAAiB,EAAwC;MAAA,IAAtC5E,QAAgB,GAAAgB,SAAA,CAAAlH,MAAA,QAAAkH,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG;QAACsD,IAAI,EAAE;MAAC,CAAC;MAC7D,IAAMV,eAAe,GAAG,IAAI,CAACC,aAAa,CAACe,YAAY,CAAC;MAExD,IAAIC,MAAM,GAAG;QAACH,GAAG,EAAE1E,QAAQ,CAAC0E,GAAG;QAAED,GAAG,EAAEzE,QAAQ,CAACyE;MAAG,CAAC;MACnD,IAAI,CAACI,MAAM,CAACH,GAAG,IAAI,CAACG,MAAM,CAACJ,GAAG,EAAE;QAE9BI,MAAM,GAAG,IAAI,CAACC,kBAAkB,CAACF,YAAY,EAAE5E,QAAQ,CAACsE,IAAI,CAAC;MAC/D;MAEA,IAAMS,gBAAgB,GAAG;QAEvBT,IAAI,EAAEtE,QAAQ,CAACsE,IAAI;QACnBC,aAAa,EAAE,IAAAS,oCAAyB,EAACJ,YAAY,CAAC;QAEtDJ,KAAK,EAAES,IAAI,CAACC,KAAK,CAACN,YAAY,CAAC9K,MAAM,GAAGkG,QAAQ,CAACsE,IAAI,CAAC;QACtDI,GAAG,EAAEG,MAAM,CAACH,GAAG;QACfD,GAAG,EAAEI,MAAM,CAACJ;MACd,CAAC;MAED,OAAO,IAAI,CAACP,WAAW,CAACN,eAAe,EAAEzI,MAAM,CAACgK,MAAM,CAACJ,gBAAgB,EAAE/E,QAAQ,CAAC,CAAC;IACrF;EAAC;IAAAhD,GAAA;IAAA5C,KAAA,EAQD,SAAAgL,WAAWC,OAA6B,EAAU;MAChD,IAAOC,UAAU,GAAID,OAAO,CAArBC,UAAU;MACjB,IAAMC,WAAW,GAAG;QAClBC,MAAM,EAAEF;MACV,CAAC;MAED,IAAI,CAAC3I,IAAI,CAAC8I,QAAQ,GAAG,IAAI,CAAC9I,IAAI,CAAC8I,QAAQ,IAAI,EAAE;MAC7C,IAAI,CAAC9I,IAAI,CAAC8I,QAAQ,CAAC5E,IAAI,CAAC0E,WAAW,CAAC;MACpC,OAAO,IAAI,CAAC5I,IAAI,CAAC8I,QAAQ,CAAC3L,MAAM,GAAG,CAAC;IACtC;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EAGD,SAAAsL,YAAYC,eAAuB,EAAU;MAC3C,IAAI,CAAChJ,IAAI,CAACiJ,SAAS,GAAG,IAAI,CAACjJ,IAAI,CAACiJ,SAAS,IAAI,EAAE;MAC/C,IAAI,CAACjJ,IAAI,CAACiJ,SAAS,CAAC/E,IAAI,CAAC8E,eAAe,CAAC;MACzC,OAAO,IAAI,CAAChJ,IAAI,CAACiJ,SAAS,CAAC9L,MAAM,GAAG,CAAC;IACvC;EAAC;IAAAkD,GAAA;IAAA5C,KAAA,EAGD,SAAAyL,kBAAA,EAA0B;MAAA,IAAAC,UAAA,EAAAC,kBAAA;MAExB,IAAI,CAACxJ,IAAI,CAACL,OAAO,GAAG,EAAE;MAGtB,IAAM8J,eAAe,GAAG,IAAI,CAAClJ,UAAU;MACvC,IAAMgD,WAAW,GAAG,IAAImG,WAAW,CAACD,eAAe,CAAC;MACpD,IAAME,WAAW,GAAG,IAAIrG,UAAU,CAACC,WAAW,CAAC;MAG/C,IAAIqG,aAAa,GAAG,CAAC;MAAC,IAAAC,SAAA,GAAA/M,0BAAA,CACK,IAAI,CAACwD,aAAa,IAAI,EAAE;QAAAwJ,KAAA;MAAA;QAAnD,KAAAD,SAAA,CAAAnM,CAAA,MAAAoM,KAAA,GAAAD,SAAA,CAAAlM,CAAA,IAAAC,IAAA,GAAqD;UAAA,IAA1CyK,YAAY,GAAAyB,KAAA,CAAAjM,KAAA;UACrB+L,aAAa,GAAG,IAAAG,wBAAW,EAAC1B,YAAY,EAAEsB,WAAW,EAAEC,aAAa,CAAC;QACvE;MAAC,SAAAxL,GAAA;QAAAyL,SAAA,CAAA/L,CAAA,CAAAM,GAAA;MAAA;QAAAyL,SAAA,CAAA7L,CAAA;MAAA;MAGD,KAAAuL,UAAA,GAAI,IAAI,CAACnJ,IAAI,cAAAmJ,UAAA,gBAAAC,kBAAA,GAATD,UAAA,CAAW5J,OAAO,cAAA6J,kBAAA,eAAlBA,kBAAA,CAAqB,CAAC,CAAC,EAAE;QAC3B,IAAI,CAACpJ,IAAI,CAACT,OAAO,CAAC,CAAC,CAAC,CAACY,UAAU,GAAGkJ,eAAe;MACnD,CAAC,MAAM;QACL,IAAI,CAACrJ,IAAI,CAACT,OAAO,GAAG,CAAC;UAACY,UAAU,EAAEkJ;QAAe,CAAC,CAAC;MACrD;MAGA,IAAI,CAACzJ,IAAI,CAACgK,MAAM,GAAGzG,WAAW;MAG9B,IAAI,CAACjD,aAAa,GAAG,CAACiD,WAAW,CAAC;IACpC;EAAC;IAAA9C,GAAA;IAAA5C,KAAA,EAID,SAAAmH,uBAAuBrC,KAAK,EAAEsH,MAAM,EAAE;MACpC,IAAIC,KAAK,GAAG,IAAI;MAChB,OAAOA,KAAK,EAAE;QACZ,IAAMnI,KAAK,GAAGY,KAAK,CAACwH,OAAO,CAACF,MAAM,CAAC;QACnC,IAAIlI,KAAK,GAAG,CAAC,CAAC,EAAE;UACdY,KAAK,CAACyH,MAAM,CAACrI,KAAK,EAAE,CAAC,CAAC;QACxB,CAAC,MAAM;UACLmI,KAAK,GAAG,KAAK;QACf;MACF;IACF;EAAC;IAAAzJ,GAAA;IAAA5C,KAAA,EAKD,SAAAwI,eAAA,EAAgC;MAAA,IAAjBN,UAAU,GAAAtB,SAAA,CAAAlH,MAAA,QAAAkH,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC,CAAC;MAC5B,IAAM4F,MAAM,GAAG,CAAC,CAAC;MACjB,KAAK,IAAMC,YAAY,IAAIvE,UAAU,EAAE;QACrC,IAAMwE,aAAa,GAAGxE,UAAU,CAACuE,YAAY,CAAC;QAC9C,IAAME,QAAQ,GAAG,IAAI,CAACC,qBAAqB,CAACH,YAAY,CAAC;QACzD,IAAM7G,QAAQ,GAAG,IAAI,CAAC2E,eAAe,CAACmC,aAAa,CAAC1M,KAAK,EAAE0M,aAAa,CAAC;QACzEF,MAAM,CAACG,QAAQ,CAAC,GAAG/G,QAAQ;MAC7B;MACA,OAAO4G,MAAM;IACf;EAAC;IAAA5J,GAAA;IAAA5C,KAAA,EAKD,SAAA4I,YAAYT,OAAO,EAAE;MACnB,OAAO,IAAI,CAACoC,eAAe,CAACpC,OAAO,EAAE;QAAC+B,IAAI,EAAE;MAAC,CAAC,CAAC;IACjD;EAAC;IAAAtH,GAAA;IAAA5C,KAAA,EAKD,SAAA4M,sBAAsBC,aAAa,EAAE;MACnC,QAAQA,aAAa,CAACC,WAAW,CAAC,CAAC;QACjC,KAAK,UAAU;QACf,KAAK,WAAW;QAChB,KAAK,UAAU;UACb,OAAO,UAAU;QACnB,KAAK,QAAQ;QACb,KAAK,SAAS;UACZ,OAAO,QAAQ;QACjB,KAAK,OAAO;QACZ,KAAK,QAAQ;UACX,OAAO,SAAS;QAClB,KAAK,UAAU;QACf,KAAK,WAAW;UACd,OAAO,YAAY;QACrB;UACE,OAAOD,aAAa;MACxB;IACF;EAAC;IAAAjK,GAAA;IAAA5C,KAAA,EAMD,SAAA0K,mBAAmBrF,MAAM,EAAE6E,IAAI,EAAE;MAC/B,IAAMsC,MAAM,GAAG;QAAClC,GAAG,EAAE,IAAI;QAAED,GAAG,EAAE;MAAI,CAAC;MACrC,IAAIhF,MAAM,CAAC3F,MAAM,GAAGwK,IAAI,EAAE;QACxB,OAAOsC,MAAM;MACf;MAEAA,MAAM,CAAClC,GAAG,GAAG,EAAE;MAEfkC,MAAM,CAACnC,GAAG,GAAG,EAAE;MACf,IAAM0C,UAAU,GAAG1H,MAAM,CAAC2H,QAAQ,CAAC,CAAC,EAAE9C,IAAI,CAAC;MAAC,IAAA+C,UAAA,GAAAhO,0BAAA,CACxB8N,UAAU;QAAAG,MAAA;MAAA;QAA9B,KAAAD,UAAA,CAAApN,CAAA,MAAAqN,MAAA,GAAAD,UAAA,CAAAnN,CAAA,IAAAC,IAAA,GAAgC;UAAA,IAArBC,KAAK,GAAAkN,MAAA,CAAAlN,KAAA;UAEdwM,MAAM,CAAClC,GAAG,CAAC7D,IAAI,CAACzG,KAAK,CAAC;UAEtBwM,MAAM,CAACnC,GAAG,CAAC5D,IAAI,CAACzG,KAAK,CAAC;QACxB;MAAC,SAAAO,GAAA;QAAA0M,UAAA,CAAAhN,CAAA,CAAAM,GAAA;MAAA;QAAA0M,UAAA,CAAA9M,CAAA;MAAA;MAED,KAAK,IAAI+D,KAAK,GAAGgG,IAAI,EAAEhG,KAAK,GAAGmB,MAAM,CAAC3F,MAAM,EAAEwE,KAAK,IAAIgG,IAAI,EAAE;QAC3D,KAAK,IAAIiD,cAAc,GAAG,CAAC,EAAEA,cAAc,GAAGjD,IAAI,EAAEiD,cAAc,EAAE,EAAE;UAEpEX,MAAM,CAAClC,GAAG,CAAC,CAAC,GAAG6C,cAAc,CAAC,GAAGtC,IAAI,CAACP,GAAG,CAEvCkC,MAAM,CAAClC,GAAG,CAAC,CAAC,GAAG6C,cAAc,CAAC,EAC9B9H,MAAM,CAACnB,KAAK,GAAGiJ,cAAc,CAC/B,CAAC;UAEDX,MAAM,CAACnC,GAAG,CAAC,CAAC,GAAG8C,cAAc,CAAC,GAAGtC,IAAI,CAACR,GAAG,CAEvCmC,MAAM,CAACnC,GAAG,CAAC,CAAC,GAAG8C,cAAc,CAAC,EAC9B9H,MAAM,CAACnB,KAAK,GAAGiJ,cAAc,CAC/B,CAAC;QACH;MACF;MACA,OAAOX,MAAM;IACf;EAAC;EAAA,OAAAtK,cAAA;AAAA;AAAAkL,OAAA,CAAAlL,cAAA,GAAAA,cAAA"}