@loaders.gl/tile-converter 4.0.0-alpha.23 → 4.0.0-alpha.24

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 (92) hide show
  1. package/dist/3d-tiles-converter/helpers/load-i3s.d.ts.map +1 -1
  2. package/dist/converter.min.js +97 -97
  3. package/dist/dist.min.js +237 -182
  4. package/dist/es5/3d-tiles-converter/helpers/load-i3s.js.map +1 -1
  5. package/dist/es5/deps-installer/deps-installer.js +1 -1
  6. package/dist/es5/i3s-converter/helpers/feature-attributes.js +6 -18
  7. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -1
  8. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +83 -44
  9. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  10. package/dist/es5/i3s-converter/helpers/geometry-converter.js +9 -7
  11. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  12. package/dist/es5/i3s-converter/types.js.map +1 -1
  13. package/dist/es5/pgm-loader.js +11 -3
  14. package/dist/es5/pgm-loader.js.map +1 -1
  15. package/dist/esm/3d-tiles-converter/helpers/load-i3s.js.map +1 -1
  16. package/dist/esm/deps-installer/deps-installer.js +1 -1
  17. package/dist/esm/i3s-converter/helpers/feature-attributes.js +5 -5
  18. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -1
  19. package/dist/esm/i3s-converter/helpers/geometry-attributes.js +76 -34
  20. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  21. package/dist/esm/i3s-converter/helpers/geometry-converter.js +7 -5
  22. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  23. package/dist/esm/i3s-converter/types.js.map +1 -1
  24. package/dist/esm/pgm-loader.js +7 -4
  25. package/dist/esm/pgm-loader.js.map +1 -1
  26. package/dist/i3s-converter/helpers/feature-attributes.d.ts +6 -6
  27. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -1
  28. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -1
  29. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  30. package/dist/i3s-converter/types.d.ts +7 -4
  31. package/dist/i3s-converter/types.d.ts.map +1 -1
  32. package/dist/pgm-loader.d.ts +9 -2
  33. package/dist/pgm-loader.d.ts.map +1 -1
  34. package/package.json +14 -14
  35. package/src/3d-tiles-converter/helpers/load-i3s.ts +1 -0
  36. package/src/i3s-converter/helpers/feature-attributes.ts +14 -11
  37. package/src/i3s-converter/helpers/geometry-attributes.ts +80 -50
  38. package/src/i3s-converter/helpers/geometry-converter.ts +18 -9
  39. package/src/i3s-converter/types.ts +8 -4
  40. package/src/pgm-loader.ts +15 -7
  41. package/dist/3d-tiles-converter/3d-tiles-converter.js +0 -279
  42. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +0 -271
  43. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +0 -23
  44. package/dist/3d-tiles-converter/helpers/load-i3s.js +0 -42
  45. package/dist/3d-tiles-converter/helpers/texture-atlas.js +0 -54
  46. package/dist/3d-tiles-converter/json-templates/tileset.js +0 -43
  47. package/dist/bundle.js +0 -5
  48. package/dist/constants.js +0 -4
  49. package/dist/converter-cli.js +0 -222
  50. package/dist/deps-installer/deps-installer.js +0 -89
  51. package/dist/i3s-converter/helpers/batch-ids-extensions.js +0 -179
  52. package/dist/i3s-converter/helpers/coordinate-converter.js +0 -122
  53. package/dist/i3s-converter/helpers/create-scene-server-path.js +0 -28
  54. package/dist/i3s-converter/helpers/feature-attributes.js +0 -218
  55. package/dist/i3s-converter/helpers/geometry-attributes.js +0 -203
  56. package/dist/i3s-converter/helpers/geometry-converter.js +0 -1321
  57. package/dist/i3s-converter/helpers/gltf-attributes.js +0 -129
  58. package/dist/i3s-converter/helpers/load-3d-tiles.js +0 -99
  59. package/dist/i3s-converter/helpers/node-debug.js +0 -120
  60. package/dist/i3s-converter/helpers/node-index-document.js +0 -271
  61. package/dist/i3s-converter/helpers/node-pages.js +0 -316
  62. package/dist/i3s-converter/helpers/preprocess-3d-tiles.js +0 -100
  63. package/dist/i3s-converter/helpers/tileset-traversal.js +0 -29
  64. package/dist/i3s-converter/i3s-converter.js +0 -964
  65. package/dist/i3s-converter/json-templates/geometry-definitions.js +0 -87
  66. package/dist/i3s-converter/json-templates/layers.js +0 -139
  67. package/dist/i3s-converter/json-templates/metadata.js +0 -25
  68. package/dist/i3s-converter/json-templates/node.js +0 -89
  69. package/dist/i3s-converter/json-templates/scene-server.js +0 -31
  70. package/dist/i3s-converter/json-templates/shared-resources.js +0 -129
  71. package/dist/i3s-converter/json-templates/store.js +0 -103
  72. package/dist/i3s-converter/types.js +0 -17
  73. package/dist/i3s-server/app.js +0 -29
  74. package/dist/i3s-server/bin/www.js +0 -37
  75. package/dist/i3s-server/controllers/index-controller.js +0 -31
  76. package/dist/i3s-server/controllers/slpk-controller.js +0 -33
  77. package/dist/i3s-server/routes/index.js +0 -20
  78. package/dist/i3s-server/routes/slpk-router.js +0 -34
  79. package/dist/i3s-server/utils/create-scene-server.js +0 -22
  80. package/dist/i3s-server/utils/server-utils.js +0 -66
  81. package/dist/index.js +0 -10
  82. package/dist/lib/utils/cli-utils.js +0 -82
  83. package/dist/lib/utils/compress-util.js +0 -257
  84. package/dist/lib/utils/file-utils.js +0 -139
  85. package/dist/lib/utils/geometry-utils.js +0 -18
  86. package/dist/lib/utils/lod-conversion-utils.js +0 -76
  87. package/dist/lib/utils/queue.js +0 -18
  88. package/dist/lib/utils/statistic-utills.js +0 -64
  89. package/dist/lib/utils/write-queue.js +0 -80
  90. package/dist/pgm-loader.js +0 -24
  91. package/dist/slpk-extractor/slpk-extractor.js +0 -75
  92. package/dist/slpk-extractor-cli.js +0 -102
@@ -1 +1 @@
1
- {"version":3,"file":"geometry-converter.js","names":["_core","require","_geospatial","_draco","_core2","_loaderUtils","_md","_interopRequireDefault","_uuid","_geometryAttributes","_coordinateConverter","_gltfAttributes","_batchIdsExtensions","_featureAttributes","_math","_geometryUtils","_gltf","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","step","next","_e2","return","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","arr","len","arr2","DEFAULT_ROUGHNESS_FACTOR","DEFAULT_METALLIC_FACTOR","VALUES_PER_VERTEX","VALUES_PER_TEX_COORD","VALUES_PER_COLOR_ELEMENT","STRING_TYPE","SHORT_INT_TYPE","DOUBLE_TYPE","OBJECT_ID_TYPE","BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES","scratchVector","Vector3","convertB3dmToI3sGeometry","_x","_x2","_x3","_x4","_x5","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_x13","_convertB3dmToI3sGeometry","_asyncToGenerator2","_regenerator","mark","_callee","tileContent","tileTransform","tileBoundingVolume","addNodeToNodePage","propertyTable","featuresHashArray","attributeStorageInfo","draco","generateBoundingVolumes","shouldMergeMaterials","geoidHeightModel","libraries","metadataClass","_tileContent$gltf4","useCartesianPositions","materialAndTextureList","dataForAttributesConversion","featureTexture","convertedAttributesMap","result","_iterator6","_step6","materialAndTexture","originarMaterialId","convertedAttributes","material","texture","nodeId","wrap","_callee$","_context","prev","convertMaterials","gltf","materials","sent","prepareDataForAttributesConversion","getTextureByMetadataClass","convertAttributes","_generateBoundingVolumesFromGeometry","mergedMaterials","originalMaterialId","abrupt","t0","_makeNodeResources","t1","t2","finish","stop","_iterator","values","_step","attributes","boundingVolumes","createBoundingVolumesFromGeometry","positions","cartographicOrigin","obb","center","index","vertex","subarray","Ellipsoid","WGS84","cartesianToCartographic","getHeight","subtract","_x14","_makeNodeResources2","_callee2","_ref","_tileContent$gltf5","vertexCount","_generateAttributes","faceRange","featureIds","normals","colors","uvRegions","texCoords","featureCount","header","typedFeatureIds","fileBuffer","compressedGeometry","_callee2$","_context2","generateAttributes","batchTableJson","makeFeatureIdsUnique","featureIndices","Uint32Array","generateBigUint64Array","Uint8Array","concatenateArrayBuffers","buffer","ArrayBuffer","generateCompressedGeometry","Float32Array","convertPropertyTableToAttributeBuffers","geometry","hasUvRegions","Boolean","sharedResources","getSharedResources","meshMaterial","_x15","_x16","_x17","_x18","_convertAttributes","_callee3","attributesData","nodes","images","cartesianModelMatrix","attributesMap","_iterator7","_step7","_iterator9","_step9","mergedMaterial","_iterator8","_step8","attrKey","_attributes","_callee3$","_context3","Map","Uint16Array","featureIndicesGroups","convertNodes","undefined","delete","reduce","acc","concat","matrix","Matrix4","_iterator2","_step2","node","convertNode","getCompositeTransformationMatrix","transformationMatrix","nodeMatrix","rotation","scale","translation","multiplyRight","translate","rotateXYZ","mesh","convertMesh","children","_iterator3","primitives","_step3","_loop","primitive","outputAttributes","materialUvRegion","_outputAttributes","_outputAttributes$mer","id","find","_ref2","_primitive$material","uvRegion","assert","mode","GL","TRIANGLES","TRIANGLE_STRIP","indices","normalizeIndices","concatenateTypedArrays","transformVertexArray","vertices","POSITION","attributeSpecificTransformation","transformVertexPositions","NORMAL","transformVertexNormals","flattenTexCoords","TEXCOORD_0","flattenColors","COLOR_0","createUvRegion","flattenBatchIds","getBatchIds","_ret","_primitive$indices","generateSyntheticIndices","TypedArrayConstructor","newIndices","triangleIndex","currentTriangle","reverse","args","newVertices","coordIndex","vertexVector","x","y","z","calleeArgs","transform","transformAsVector","newTexCoords","fill","texCoord","colorsAttribute","components","newColors","colorIndex","color","colorUint8","j","batchedIds","newBatchIds","batchIds","handleBatchIdsExtensions","possibleBatchIdAttributeName","_convertMaterials","_callee4","sourceMaterials","_iterator10","_step10","sourceMaterial","_args4","_callee4$","_context4","convertMaterial","mergeAllMaterials","_x19","_mergeAllMaterials","_callee5","newMaterial","mergedIndices","_newMaterial$mergedMa","_newMaterial$mergedMa2","newWidth","newHeight","currentX","_iterator11","_step11","aTextureMetadata","newX","_iterator12","_step12","_callee5$","_context5","splice","mergeMaterials","accum","_ref5","textureSize","width","_ref6","Math","max","height","pow","BYTES_PER_ELEMENT","image","getDefaultMaterial","_x20","_x21","_mergeMaterials","_callee6","material1","material2","_material1$texture","_material2$texture","buffer1","buffer2","_yield$import","joinImages","sharpData","_callee6$","_context6","bufferView","Buffer","data","Promise","resolve","then","direction","toFormat","mimeType","toBuffer","console","log","pbrMetallicRoughness","baseColorTexture","textureSetDefinitionId","_sourceMaterial$emiss","_sourceMaterial$pbrMe","_sourceMaterial$pbrMe2","_sourceMaterial$pbrMe3","doubleSided","emissiveFactor","map","c","round","alphaMode","convertAlphaMode","roughnessFactor","metallicFactor","emissiveTexture","Number","isFinite","uuidv4","_sourceMaterial$pbrMe4","baseColorFactor","gltfAlphaMode","gltfMaterials","i3sResources","materialDefinitionInfos","_iterator4","_step4","gltfMaterial","_convertGLTFMaterialT","convertGLTFMaterialToI3sSharedResources","materialDefinitionInfo","textureDefinitionInfo","textureDefinitionInfos","_gltfMaterial$pbrMeta","extractSharedResourcesTextureInfo","_ref3","colorFactor","extractSharedResourcesMaterialInfo","matDielectricColorComponent","black","Vector4","unitVector","dielectricSpecular","baseColorVector","firstOperand","multiply","diffuse","lerp","specular","params","toArray","renderMode","_texture$source","_texture$source2","_texture$source3","_texture$source4","encoding","generateImageId","size","_texture$source5","_ref4","levelCountOfTexture","indexOfLevel","indexOfTextureInStore","zerosCount","rightHalf","repeat","shiftedLevelCountOfTexture","shiftedIndexOfLevel","shiftedWidth","shiftedHeight","leftHalf","imageId","BigInt","batchTable","replaceMap","getFeaturesReplaceMap","replaceIndicesByUnique","featureMap","oldFeatureId","uniqueFeatureId","getOrCreateUniqueFeatureId","generateStringFromBatchTableByIndex","str","batchTableStr","hash","md5","includes","indexOf","indicesArray","attributeBuffers","needFlattenPropertyTable","checkPropertiesLength","properties","flattenPropertyTableByFeatureIds","propertyTableWithObjectIds","OBJECTID","propertyName","type","getAttributeType","attributeBuffer","generateAttributeBuffer","generateShortIntegerAttributeBuffer","generateDoubleAttributeBuffer","generateStringAttributeBuffer","attribute","attr","error","JSON","stringify","attributeValues","valueType","count","valuesArray","padding","Float64Array","batchAttributes","stringCountArray","totalNumberOfBytes","stringSizesArray","stringBufferArray","currentString","String","currentStringBuffer","currentStringSize","totalBytes","BigUint64Array","_x22","_x23","_x24","_x25","_generateCompressedGeometry","_callee7","featureIndex","compressedAttributes","attributesMetadata","_callee7$","_context7","generateFeatureIndexAttribute","Int32Array","encode","DracoWriterWorker","options","reuseWorkers","_nodeWorkers","modules","useLocalLibraries","method","workerUrl","orderedFeatureIndices","fillIndex","startIndex","endIndex","getPropertyTable","_getPropertyTableExte","getPropertyTableExtension","extensionName","extension","EXT_MESH_FEATURES","getPropertyTableFromExtMeshFeatures","EXT_STRUCTURAL_METADATA","getPropertyTableFromExtStructuralMetadata","EXT_FEATURE_METADATA","getPropertyTableFromExtFeatureMetadata","_tileContent$gltf","_tileContent$gltf2","_tileContent$gltf2$ex","_tileContent$gltf3","extensionsWithPropertyTables","extensionsUsed","_iterator5","_step5","extensionItem","extensions","featureTables","_Object$keys","firstFeatureTableName","featureTable","featureTextures","textureKey","class","warn","propertyTables","firstPropertyTable","propertyTableWithData","propertyTextures","firstPropertyTexture","firstFeatureId"],"sources":["../../../../src/i3s-converter/helpers/geometry-converter.ts"],"sourcesContent":["import type {FeatureTableJson, Tiles3DTileContent} from '@loaders.gl/3d-tiles';\nimport type {\n GLTF_EXT_mesh_features,\n GLTF_EXT_structural_metadata,\n GLTFAccessorPostprocessed,\n GLTFMaterialPostprocessed,\n GLTFNodePostprocessed,\n GLTFMeshPrimitivePostprocessed,\n GLTFMeshPostprocessed,\n GLTFTexturePostprocessed,\n GLTF_EXT_feature_metadata_GLTF\n} from '@loaders.gl/gltf';\n\nimport {Vector3, Matrix4, Vector4} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\n\nimport {DracoWriterWorker} from '@loaders.gl/draco';\nimport {assert, encode} from '@loaders.gl/core';\nimport {concatenateArrayBuffers, concatenateTypedArrays} from '@loaders.gl/loader-utils';\nimport md5 from 'md5';\nimport {v4 as uuidv4} from 'uuid';\nimport {generateAttributes} from './geometry-attributes';\nimport {createBoundingVolumesFromGeometry} from './coordinate-converter';\nimport {\n ConvertedAttributes,\n I3SConvertedResources,\n I3SMaterialWithTexture,\n MergedMaterial,\n SharedResourcesArrays\n} from '../types';\nimport {\n AttributeStorageInfo,\n I3SMaterialDefinition,\n MaterialDefinitionInfo,\n TextureDefinitionInfo\n} from '@loaders.gl/i3s';\nimport {NumberArray, TypedArray} from '@loaders.gl/loader-utils';\nimport {Geoid} from '@math.gl/geoid';\nimport {prepareDataForAttributesConversion} from './gltf-attributes';\nimport {getTextureByMetadataClass, handleBatchIdsExtensions} from './batch-ids-extensions';\nimport {checkPropertiesLength, flattenPropertyTableByFeatureIds} from './feature-attributes';\nimport {GL} from '@loaders.gl/math';\n\n/*\n At the moment of writing the type TypedArrayConstructor is not exported in '@math.gl/types'.\n So the following import is replaced with the local import\n import type {TypedArrayConstructor} from '@math.gl/types'; \n*/\nimport type {GLTFAttributesData, TextureImageProperties, TypedArrayConstructor} from '../types';\nimport {generateSyntheticIndices} from '../../lib/utils/geometry-utils';\nimport {BoundingSphere, OrientedBoundingBox} from '@math.gl/culling';\n\nimport {EXT_MESH_FEATURES, EXT_FEATURE_METADATA, EXT_STRUCTURAL_METADATA} from '@loaders.gl/gltf';\n\n// Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.7/pbrMetallicRoughness.cmn.md\nconst DEFAULT_ROUGHNESS_FACTOR = 1;\nconst DEFAULT_METALLIC_FACTOR = 1;\n\nconst VALUES_PER_VERTEX = 3;\nconst VALUES_PER_TEX_COORD = 2;\nconst VALUES_PER_COLOR_ELEMENT = 4;\n\nconst STRING_TYPE = 'string';\nconst SHORT_INT_TYPE = 'Int32';\nconst DOUBLE_TYPE = 'Float64';\nconst OBJECT_ID_TYPE = 'Oid32';\n/*\n * 'CUSTOM_ATTRIBUTE_2' - Attribute name which includes batch info and used by New York map.\n * _BATCHID - Default attribute name which includes batch info.\n * BATCHID - Legacy attribute name which includes batch info.\n */\nconst BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES = ['CUSTOM_ATTRIBUTE_2', '_BATCHID', 'BATCHID'];\n\nlet scratchVector = new Vector3();\n\n/**\n * Convert binary data from b3dm file to i3s resources\n *\n * @param tileContent - 3d tile content\n * @param tileTransform - transformation matrix of the tile, calculated recursively multiplying\n * transform of all parent tiles and transform of the current tile\n * @param tileBoundingVolume - initialized bounding volume of the source tile\n * @param addNodeToNodePage - function to add new node to node pages\n * @param propertyTable - batch table (corresponding to feature attributes data)\n * @param featuresHashArray - hash array of features that is needed to not to mix up same features in parent and child nodes\n * @param attributeStorageInfo - attributes metadata from 3DSceneLayer json\n * @param draco - is converter should create draco compressed geometry\n * @param generateBoundingVolumes - is converter should create accurate bounding voulmes from geometry attributes\n * @param shouldMergeMaterials - Try to merge similar materials to be able to merge meshes into one node\n * @param geoidHeightModel - model to convert elevation from elipsoidal to geoid\n * @param libraries - dynamicaly loaded 3rd-party libraries\n * @param metadataClass `- user selected feature metadata class name`\n * @returns Array of node resources to create one or more i3s nodes\n */\nexport default async function convertB3dmToI3sGeometry(\n tileContent: Tiles3DTileContent,\n tileTransform: Matrix4,\n tileBoundingVolume: OrientedBoundingBox | BoundingSphere,\n addNodeToNodePage: () => Promise<number>,\n propertyTable: FeatureTableJson | null,\n featuresHashArray: string[],\n attributeStorageInfo: AttributeStorageInfo[] | undefined,\n draco: boolean,\n generateBoundingVolumes: boolean,\n shouldMergeMaterials: boolean,\n geoidHeightModel: Geoid,\n libraries: Record<string, string>,\n metadataClass?: string\n): Promise<I3SConvertedResources[] | null> {\n const useCartesianPositions = generateBoundingVolumes;\n const materialAndTextureList: I3SMaterialWithTexture[] = await convertMaterials(\n tileContent.gltf?.materials,\n shouldMergeMaterials\n );\n\n const dataForAttributesConversion = prepareDataForAttributesConversion(\n tileContent,\n tileTransform,\n tileBoundingVolume\n );\n const featureTexture = getTextureByMetadataClass(tileContent, metadataClass);\n const convertedAttributesMap: Map<string, ConvertedAttributes> = await convertAttributes(\n dataForAttributesConversion,\n materialAndTextureList,\n useCartesianPositions,\n featureTexture\n );\n /** Usage of worker here brings more overhead than advantage */\n // const convertedAttributesMap: Map<string, ConvertedAttributes> =\n // await transformI3SAttributesOnWorker(dataForAttributesConversion, {\n // reuseWorkers: true,\n // _nodeWorkers: true,\n // useCartesianPositions,\n // source: workerSource.I3SAttributes\n // });\n\n if (generateBoundingVolumes) {\n _generateBoundingVolumesFromGeometry(convertedAttributesMap, geoidHeightModel);\n }\n\n const result: I3SConvertedResources[] = [];\n for (const materialAndTexture of materialAndTextureList) {\n const originarMaterialId = materialAndTexture.mergedMaterials[0].originalMaterialId;\n if (!convertedAttributesMap.has(originarMaterialId)) {\n continue; // eslint-disable-line no-continue\n }\n const convertedAttributes = convertedAttributesMap.get(originarMaterialId);\n if (!convertedAttributes) {\n continue;\n }\n const {material, texture} = materialAndTexture;\n const nodeId = await addNodeToNodePage();\n result.push(\n await _makeNodeResources({\n convertedAttributes,\n material,\n texture,\n tileContent,\n nodeId,\n featuresHashArray,\n propertyTable,\n attributeStorageInfo,\n draco,\n libraries\n })\n );\n }\n\n if (!result.length) {\n return null;\n }\n return result;\n}\n\n/**\n * Create bounding volumes based on positions\n * @param convertedAttributesMap - geometry attributes map\n * @param geoidHeightModel - geoid height model to convert elevation from elipsoidal to geoid\n */\nfunction _generateBoundingVolumesFromGeometry(\n convertedAttributesMap: Map<string, ConvertedAttributes>,\n geoidHeightModel: Geoid\n) {\n for (const attributes of convertedAttributesMap.values()) {\n const boundingVolumes = createBoundingVolumesFromGeometry(\n attributes.positions,\n geoidHeightModel\n );\n\n attributes.boundingVolumes = boundingVolumes;\n const cartographicOrigin = boundingVolumes.obb.center;\n\n for (let index = 0; index < attributes.positions.length; index += VALUES_PER_VERTEX) {\n const vertex = attributes.positions.subarray(index, index + VALUES_PER_VERTEX);\n Ellipsoid.WGS84.cartesianToCartographic(Array.from(vertex), scratchVector);\n scratchVector[2] =\n scratchVector[2] - geoidHeightModel.getHeight(scratchVector[1], scratchVector[0]);\n scratchVector = scratchVector.subtract(cartographicOrigin);\n attributes.positions.set(scratchVector, index);\n }\n }\n}\n\n/**\n *\n * @param params\n * @param params.convertedAttributes - Converted geometry attributes\n * @param params.material - I3S PBR-like material definition\n * @param params.texture - texture content\n * @param params.tileContent - 3DTiles decoded content\n * @param params.nodeId - new node ID\n * @param params.featuresHashArray - hash array of features that is needed to not to mix up same features in parent and child nodes\n * @param params.propertyTable - batch table (corresponding to feature attributes data)\n * @param params.attributeStorageInfo - attributes metadata from 3DSceneLayer json\n * @param params.draco - is converter should create draco compressed geometry\n * @param libraries - dynamicaly loaded 3rd-party libraries\n * @returns Array of I3S node resources\n */\nasync function _makeNodeResources({\n convertedAttributes,\n material,\n texture,\n tileContent,\n nodeId,\n featuresHashArray,\n propertyTable,\n attributeStorageInfo,\n draco,\n libraries\n}: {\n convertedAttributes: ConvertedAttributes;\n material: I3SMaterialDefinition;\n texture?: {};\n tileContent: Tiles3DTileContent;\n nodeId: number;\n featuresHashArray: string[];\n propertyTable: FeatureTableJson | null;\n attributeStorageInfo?: AttributeStorageInfo[];\n draco: boolean;\n libraries: Record<string, string>;\n}): Promise<I3SConvertedResources> {\n const boundingVolumes = convertedAttributes.boundingVolumes;\n const vertexCount = convertedAttributes.positions.length / VALUES_PER_VERTEX;\n const {faceRange, featureIds, positions, normals, colors, uvRegions, texCoords, featureCount} =\n generateAttributes(convertedAttributes);\n\n if (tileContent.batchTableJson) {\n makeFeatureIdsUnique(\n featureIds,\n convertedAttributes.featureIndices,\n featuresHashArray,\n tileContent.batchTableJson\n );\n }\n\n const header = new Uint32Array(2);\n const typedFeatureIds = generateBigUint64Array(featureIds);\n\n header.set([vertexCount, featureCount], 0);\n const fileBuffer = new Uint8Array(\n concatenateArrayBuffers(\n header.buffer,\n positions.buffer,\n normals.buffer,\n texture ? texCoords.buffer : new ArrayBuffer(0),\n colors.buffer,\n uvRegions,\n typedFeatureIds.buffer,\n faceRange.buffer\n )\n );\n const compressedGeometry = draco\n ? generateCompressedGeometry(\n vertexCount,\n convertedAttributes,\n {\n positions,\n normals,\n texCoords: texture ? texCoords : new Float32Array(0),\n colors,\n uvRegions,\n featureIds,\n faceRange\n },\n libraries\n )\n : null;\n\n let attributes: ArrayBuffer[] = [];\n\n if (attributeStorageInfo && propertyTable) {\n attributes = convertPropertyTableToAttributeBuffers(\n featureIds,\n propertyTable,\n attributeStorageInfo\n );\n }\n\n return {\n nodeId,\n geometry: fileBuffer,\n compressedGeometry,\n texture,\n hasUvRegions: Boolean(uvRegions.length),\n sharedResources: getSharedResources(tileContent.gltf?.materials || [], nodeId),\n meshMaterial: material,\n vertexCount,\n attributes,\n featureCount,\n boundingVolumes\n };\n}\n\n/**\n * Convert attributes from the gltf nodes tree to i3s plain geometry\n * @param attributesData - geometry attributes from gltf\n * @param materialAndTextureList - array of data about materials and textures of the content\n * @param useCartesianPositions - convert positions to absolute cartesian coordinates instead of cartographic offsets.\n * Cartesian coordinates will be required for creating bounding voulmest from geometry positions\n * @param featureTexture - feature texture key\n * @returns map of converted geometry attributes\n */\nexport async function convertAttributes(\n attributesData: GLTFAttributesData,\n materialAndTextureList: I3SMaterialWithTexture[],\n useCartesianPositions: boolean,\n featureTexture: string | null\n): Promise<Map<string, ConvertedAttributes>> {\n const {nodes, images, cartographicOrigin, cartesianModelMatrix} = attributesData;\n const attributesMap = new Map<string, ConvertedAttributes>();\n\n for (const materialAndTexture of materialAndTextureList) {\n const attributes = {\n positions: new Float32Array(0),\n normals: new Float32Array(0),\n texCoords: new Float32Array(0),\n colors: new Uint8Array(0),\n uvRegions: new Uint16Array(0),\n featureIndicesGroups: [],\n featureIndices: [],\n boundingVolumes: null,\n mergedMaterials: materialAndTexture.mergedMaterials\n };\n for (const mergedMaterial of materialAndTexture.mergedMaterials) {\n attributesMap.set(mergedMaterial.originalMaterialId, attributes);\n }\n }\n\n convertNodes(\n nodes,\n images,\n cartographicOrigin,\n cartesianModelMatrix,\n attributesMap,\n useCartesianPositions,\n undefined,\n featureTexture\n );\n\n for (const attrKey of attributesMap.keys()) {\n const attributes = attributesMap.get(attrKey);\n if (!attributes) {\n continue;\n }\n if (attributes.positions.length === 0) {\n attributesMap.delete(attrKey);\n continue; // eslint-disable-line no-continue\n }\n if (attributes.featureIndicesGroups) {\n attributes.featureIndices = attributes.featureIndicesGroups.reduce((acc, value) =>\n acc.concat(value)\n );\n delete attributes.featureIndicesGroups;\n }\n }\n\n return attributesMap;\n}\n\n/**\n * Gltf has hierarchical structure of nodes. This function converts nodes starting from those which are in gltf scene object.\n * The goal is applying tranformation matrix for all children. Functions \"convertNodes\" and \"convertNode\" work together recursively.\n * @param nodes - gltf nodes array\n * @param images - gltf images array\n * @param cartographicOrigin - cartographic origin of bounding volume\n * @param cartesianModelMatrix - cartesian model matrix to convert coordinates to cartographic\n * @param attributesMap - for recursive concatenation of attributes\n * @param useCartesianPositions - convert positions to absolute cartesian coordinates instead of cartographic offsets.\n * Cartesian coordinates will be required for creating bounding voulmest from geometry positions\n * @param matrix - transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param featureTexture - feature texture key\n * @returns {void}\n */\nfunction convertNodes(\n nodes: GLTFNodePostprocessed[],\n images: (TextureImageProperties | null)[],\n cartographicOrigin: Vector3,\n cartesianModelMatrix: Matrix4,\n attributesMap: Map<string, ConvertedAttributes>,\n useCartesianPositions: boolean,\n matrix: Matrix4 = new Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n featureTexture: string | null\n) {\n if (nodes) {\n for (const node of nodes) {\n convertNode(\n node,\n images,\n cartographicOrigin,\n cartesianModelMatrix,\n attributesMap,\n useCartesianPositions,\n matrix,\n featureTexture\n );\n }\n }\n}\n\n/**\n * Generate transformation matrix for node\n * Aapply all gltf transformations to initial transformation matrix.\n * @param node\n * @param matrix\n */\nfunction getCompositeTransformationMatrix(node: GLTFNodePostprocessed, matrix: Matrix4) {\n let transformationMatrix = matrix;\n\n const {matrix: nodeMatrix, rotation, scale, translation} = node;\n\n if (nodeMatrix) {\n transformationMatrix = matrix.multiplyRight(nodeMatrix);\n }\n\n if (translation) {\n transformationMatrix = transformationMatrix.translate(translation);\n }\n\n if (rotation) {\n transformationMatrix = transformationMatrix.rotateXYZ(rotation);\n }\n\n if (scale) {\n transformationMatrix = transformationMatrix.scale(scale);\n }\n\n return transformationMatrix;\n}\n\n/**\n * Convert all primitives of node and all children nodes\n * @param node - gltf node\n * @param images - gltf images array\n * @param cartographicOrigin - cartographic origin of bounding volume\n * @param cartesianModelMatrix - cartesian model matrix to convert coordinates to cartographic\n * @param attributesMap Map<{positions: Float32Array, normals: Float32Array, texCoords: Float32Array, colors: Uint8Array, featureIndices: Array}> - for recursive concatenation of\n * attributes\n * @param useCartesianPositions - convert positions to absolute cartesian coordinates instead of cartographic offsets.\n * Cartesian coordinates will be required for creating bounding voulmest from geometry positions\n * @param matrix - transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param featureTexture - feature texture key\n */\nfunction convertNode(\n node: GLTFNodePostprocessed,\n images: (TextureImageProperties | null)[],\n cartographicOrigin: Vector3,\n cartesianModelMatrix: Matrix4,\n attributesMap: Map<string, ConvertedAttributes>,\n useCartesianPositions,\n matrix = new Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n featureTexture: string | null\n) {\n const transformationMatrix = getCompositeTransformationMatrix(node, matrix);\n\n const mesh = node.mesh;\n\n if (mesh) {\n convertMesh(\n mesh,\n images,\n cartographicOrigin,\n cartesianModelMatrix,\n attributesMap,\n useCartesianPositions,\n transformationMatrix,\n featureTexture\n );\n }\n\n convertNodes(\n node.children || [],\n images,\n cartographicOrigin,\n cartesianModelMatrix,\n attributesMap,\n useCartesianPositions,\n transformationMatrix,\n featureTexture\n );\n}\n\n/**\n * Convert all primitives of the mesh\n * @param mesh - gltf mesh data\n * @param images - gltf images array\n * @param cartographicOrigin - cartographic origin of bounding volume\n * @param cartesianModelMatrix - cartesian model matrix to convert coordinates to cartographic\n * @param attributesMap Map<{positions: Float32Array, normals: Float32Array, texCoords: Float32Array, colors: Uint8Array, featureIndices: Array}> - for recursive concatenation of\n * attributes\n * @param useCartesianPositions - convert positions to absolute cartesian coordinates instead of cartographic offsets.\n * Cartesian coordinates will be required for creating bounding voulmest from geometry positions\n * @param attributesMap Map<{positions: Float32Array, normals: Float32Array, texCoords: Float32Array, colors: Uint8Array, featureIndices: Array}> - for recursive concatenation of\n * attributes\n * @param matrix - transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param featureTexture - feature texture key\n */\nfunction convertMesh(\n mesh: GLTFMeshPostprocessed,\n images: (TextureImageProperties | null)[],\n cartographicOrigin: Vector3,\n cartesianModelMatrix: Matrix4,\n attributesMap: Map<string, ConvertedAttributes>,\n useCartesianPositions = false,\n matrix = new Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n featureTexture: string | null\n) {\n for (const primitive of mesh.primitives) {\n let outputAttributes: ConvertedAttributes | null | undefined = null;\n let materialUvRegion: Uint16Array | undefined;\n if (primitive.material) {\n outputAttributes = attributesMap.get(primitive.material.id);\n materialUvRegion = outputAttributes?.mergedMaterials.find(\n ({originalMaterialId}) => originalMaterialId === primitive.material?.id\n )?.uvRegion;\n } else if (attributesMap.has('default')) {\n outputAttributes = attributesMap.get('default');\n }\n assert(outputAttributes !== null, 'Primitive - material mapping failed');\n // Per the spec https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#_mesh_primitive_mode\n // GL.TRIANGLES is default. So in case `mode` is `undefined`, it is 'TRIANGLES'\n assert(\n primitive.mode === undefined ||\n primitive.mode === GL.TRIANGLES ||\n primitive.mode === GL.TRIANGLE_STRIP,\n `Primitive - unsupported mode ${primitive.mode}`\n );\n const attributes = primitive.attributes;\n if (!outputAttributes) {\n continue;\n }\n\n const indices = normalizeIndices(primitive);\n outputAttributes.positions = concatenateTypedArrays(\n outputAttributes.positions,\n transformVertexArray({\n vertices: attributes.POSITION.value,\n cartographicOrigin,\n cartesianModelMatrix,\n nodeMatrix: matrix,\n indices,\n attributeSpecificTransformation: transformVertexPositions,\n useCartesianPositions\n })\n );\n outputAttributes.normals = concatenateTypedArrays(\n outputAttributes.normals,\n transformVertexArray({\n vertices: attributes.NORMAL && attributes.NORMAL.value,\n cartographicOrigin,\n cartesianModelMatrix,\n nodeMatrix: matrix,\n indices,\n attributeSpecificTransformation: transformVertexNormals,\n useCartesianPositions: false\n })\n );\n outputAttributes.texCoords = concatenateTypedArrays(\n outputAttributes.texCoords,\n flattenTexCoords(attributes.TEXCOORD_0 && attributes.TEXCOORD_0.value, indices)\n );\n\n outputAttributes.colors = concatenateTypedArrays(\n outputAttributes.colors,\n flattenColors(attributes.COLOR_0, indices)\n );\n\n if (materialUvRegion) {\n outputAttributes.uvRegions = concatenateTypedArrays(\n outputAttributes.uvRegions,\n createUvRegion(materialUvRegion, indices)\n );\n }\n\n outputAttributes.featureIndicesGroups = outputAttributes.featureIndicesGroups || [];\n outputAttributes.featureIndicesGroups.push(\n flattenBatchIds(getBatchIds(attributes, primitive, images, featureTexture), indices)\n );\n }\n}\n/**\n * Converts TRIANGLE-STRIPS to independent TRIANGLES\n * @param primitive - the primitive to get the indices from\n * @returns indices of vertices of the independent triangles\n */\nfunction normalizeIndices(primitive: GLTFMeshPrimitivePostprocessed): TypedArray {\n let indices: TypedArray | undefined = primitive.indices?.value;\n if (!indices) {\n const positions = primitive.attributes.POSITION.value;\n return generateSyntheticIndices(positions.length / VALUES_PER_VERTEX);\n }\n\n if (indices && primitive.mode === GL.TRIANGLE_STRIP) {\n /*\n TRIANGLE_STRIP geometry contains n+2 vertices for n triangles;\n TRIANGLE geometry contains n*3 vertices for n triangles.\n The conversion from TRIANGLE_STRIP to TRIANGLE implies duplicating adjacent vertices.\n */\n const TypedArrayConstructor = indices.constructor as TypedArrayConstructor;\n const newIndices = new TypedArrayConstructor((indices.length - 2) * 3);\n\n // Copy the first triangle indices with no modification like [i0, i1, i2, ...] -> [i0, i1, i2, ...]\n let triangleIndex = 0;\n let currentTriangle = indices.slice(0, 3);\n newIndices.set(currentTriangle, 0);\n\n // The rest triangle indices are being taken from strips using the following logic:\n // [i1, i2, i3, i4, i5, i6, ...] -> [i3, i2, i1, i2, i3, i4, i5, i4, i3, i4, i5, i6, ...]\n for (let i = 1; i + 2 < indices.length; i++) {\n triangleIndex += 3;\n currentTriangle = indices.slice(i, i + 3);\n if (i % 2 === 0) {\n newIndices.set(currentTriangle, triangleIndex);\n } else {\n // The following \"reverce\" is necessary to calculate normals correctly\n newIndices.set(currentTriangle.reverse(), triangleIndex);\n }\n }\n indices = newIndices;\n }\n return indices as TypedArray;\n}\n\n/**\n * Convert vertices attributes (POSITIONS or NORMALS) to i3s compatible format\n * @param args\n * @param args.vertices - gltf primitive POSITION or NORMAL attribute\n * @param args.cartographicOrigin - cartographic origin coordinates\n * @param args.cartesianModelMatrix - a cartesian model matrix to transform coordnates from cartesian to cartographic format\n * @param args.nodeMatrix - a gltf node transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param args.indices - gltf primitive indices\n * @param args.attributeSpecificTransformation - function to do attribute - specific transformations\n * @param args.useCartesianPositions - use coordinates as it is.\n * @returns\n */\nfunction transformVertexArray(args: {\n vertices: TypedArray;\n cartographicOrigin: number[];\n cartesianModelMatrix: number[];\n nodeMatrix: Matrix4;\n indices: TypedArray;\n attributeSpecificTransformation: Function;\n useCartesianPositions: boolean;\n}): Float32Array {\n const {vertices, indices, attributeSpecificTransformation} = args;\n const newVertices = new Float32Array(indices.length * VALUES_PER_VERTEX);\n if (!vertices) {\n return newVertices;\n }\n for (let i = 0; i < indices.length; i++) {\n const coordIndex = indices[i] * VALUES_PER_VERTEX;\n const vertex = vertices.subarray(coordIndex, coordIndex + VALUES_PER_VERTEX);\n let vertexVector = new Vector3(Array.from(vertex));\n\n vertexVector = attributeSpecificTransformation(vertexVector, args);\n\n newVertices[i * VALUES_PER_VERTEX] = vertexVector.x;\n newVertices[i * VALUES_PER_VERTEX + 1] = vertexVector.y;\n newVertices[i * VALUES_PER_VERTEX + 2] = vertexVector.z;\n }\n return newVertices;\n}\n\n/**\n * Trasform positions vector with the attribute specific transformations\n * @param vertexVector - source positions vector to transform\n * @param calleeArgs\n * @param calleeArgs.cartesianModelMatrix - a cartesian model matrix to transform coordnates from cartesian to cartographic format\n * @param calleeArgs.cartographicOrigin - cartographic origin coordinates\n * @param calleeArgs.nodeMatrix - a gltf node transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param calleeArgs.useCartesianPositions - use coordinates as it is.\n * @returns transformed positions vector\n */\nfunction transformVertexPositions(vertexVector, calleeArgs): number[] {\n const {cartesianModelMatrix, cartographicOrigin, nodeMatrix, useCartesianPositions} = calleeArgs;\n\n if (nodeMatrix) {\n vertexVector = vertexVector.transform(nodeMatrix);\n }\n\n vertexVector = vertexVector.transform(cartesianModelMatrix);\n\n if (useCartesianPositions) {\n return vertexVector;\n }\n\n Ellipsoid.WGS84.cartesianToCartographic(\n [vertexVector[0], vertexVector[1], vertexVector[2]],\n vertexVector\n );\n vertexVector = vertexVector.subtract(cartographicOrigin);\n return vertexVector;\n}\n\n/**\n * Trasform normals vector with the attribute specific transformations\n * @param vertexVector - source normals vector to transform\n * @param calleeArgs\n * @param calleeArgs.cartesianModelMatrix - a cartesian model matrix to transform coordnates from cartesian to cartographic format\n * @param calleeArgs.nodeMatrix - a gltf node transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @returns transformed normals vector\n */\nfunction transformVertexNormals(vertexVector, calleeArgs): number[] {\n const {cartesianModelMatrix, nodeMatrix} = calleeArgs;\n\n if (nodeMatrix) {\n vertexVector = vertexVector.transformAsVector(nodeMatrix);\n }\n\n vertexVector = vertexVector.transformAsVector(cartesianModelMatrix);\n return vertexVector;\n}\n\n/**\n * Convert uv0 (texture coordinates) from coords based on indices to plain arrays, compatible with i3s\n * @param texCoords - gltf primitive TEXCOORD_0 attribute\n * @param indices - gltf primitive indices\n * @returns flattened texture coordinates\n */\nfunction flattenTexCoords(texCoords: TypedArray, indices: TypedArray): Float32Array {\n const newTexCoords = new Float32Array(indices.length * VALUES_PER_TEX_COORD);\n if (!texCoords) {\n // We need dummy UV0s because it is required in 1.6\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.6/vertexAttribute.cmn.md\n newTexCoords.fill(1);\n return newTexCoords;\n }\n for (let i = 0; i < indices.length; i++) {\n const coordIndex = indices[i] * VALUES_PER_TEX_COORD;\n const texCoord = texCoords.subarray(coordIndex, coordIndex + VALUES_PER_TEX_COORD);\n newTexCoords[i * VALUES_PER_TEX_COORD] = texCoord[0];\n newTexCoords[i * VALUES_PER_TEX_COORD + 1] = texCoord[1];\n }\n return newTexCoords;\n}\n\n/**\n * Convert color from COLOR_0 based on indices to plain arrays, compatible with i3s\n * @param colorsAttribute - gltf primitive COLOR_0 attribute\n * @param indices - gltf primitive indices\n * @returns flattened colors attribute\n */\nfunction flattenColors(\n colorsAttribute: GLTFAccessorPostprocessed,\n indices: TypedArray\n): Uint8Array {\n const components = colorsAttribute?.components || VALUES_PER_COLOR_ELEMENT;\n const newColors = new Uint8Array(indices.length * components);\n if (!colorsAttribute) {\n // Vertex color multiplies by material color so it must be normalized 1 by default\n newColors.fill(255);\n return newColors;\n }\n const colors = colorsAttribute.value;\n for (let i = 0; i < indices.length; i++) {\n const colorIndex = indices[i] * components;\n const color = colors.subarray(colorIndex, colorIndex + components);\n const colorUint8 = new Uint8Array(components);\n for (let j = 0; j < color.length; j++) {\n colorUint8[j] = color[j] * 255;\n }\n newColors.set(colorUint8, i * components);\n }\n return newColors;\n}\n\n/**\n * Create per-vertex uv-region array\n * @param materialUvRegion - uv-region fragment for a single vertex\n * @param indices - geometry indices data\n * @returns - uv-region array\n */\nfunction createUvRegion(materialUvRegion: Uint16Array, indices: TypedArray): Uint16Array {\n const result = new Uint16Array(indices.length * 4);\n for (let i = 0; i < result.length; i += 4) {\n result.set(materialUvRegion, i);\n }\n return result;\n}\n\n/**\n * Flatten batchedIds list based on indices to right ordered array, compatible with i3s\n * @param batchedIds - gltf primitive\n * @param indices - gltf primitive indices\n * @returns flattened batch ids\n */\nfunction flattenBatchIds(batchedIds: NumberArray, indices: TypedArray): number[] {\n if (!batchedIds.length || !indices.length) {\n return [];\n }\n const newBatchIds: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const coordIndex = indices[i];\n newBatchIds.push(batchedIds[coordIndex]);\n }\n return newBatchIds;\n}\n\n/**\n * Get batchIds for featureIds creation\n * @param attributes - gltf accessors\n * @param primitive - gltf primitive data\n * @param images - gltf texture images\n * @param featureTexture - feature texture key\n * @return batch IDs\n */\nfunction getBatchIds(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n primitive: GLTFMeshPrimitivePostprocessed,\n images: (TextureImageProperties | null)[],\n featureTexture: string | null\n): NumberArray {\n const batchIds: NumberArray = handleBatchIdsExtensions(\n attributes,\n primitive,\n images,\n featureTexture\n );\n\n if (batchIds.length) {\n return batchIds;\n }\n\n for (let index = 0; index < BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES.length; index++) {\n const possibleBatchIdAttributeName = BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES[index];\n if (\n attributes[possibleBatchIdAttributeName] &&\n attributes[possibleBatchIdAttributeName].value\n ) {\n return attributes[possibleBatchIdAttributeName].value;\n }\n }\n\n return [];\n}\n\n/**\n * Convert GLTF material to I3S material definitions and textures\n * @param sourceMaterials Source GLTF materials\n * @param shouldMergeMaterials - if true - the converter will try to merge similar materials\n * to be able to merge primitives having those materials\n * @returns Array of Couples I3SMaterialDefinition + texture content\n */\nasync function convertMaterials(\n sourceMaterials: GLTFMaterialPostprocessed[] = [],\n shouldMergeMaterials: boolean\n): Promise<I3SMaterialWithTexture[]> {\n let materials: I3SMaterialWithTexture[] = [];\n for (const sourceMaterial of sourceMaterials) {\n materials.push(convertMaterial(sourceMaterial));\n }\n\n if (shouldMergeMaterials) {\n materials = await mergeAllMaterials(materials);\n }\n\n return materials;\n}\n\n/**\n * Merge materials when possible\n * @param materials materials array\n * @returns merged materials array\n */\nasync function mergeAllMaterials(\n materials: I3SMaterialWithTexture[]\n): Promise<I3SMaterialWithTexture[]> {\n const result: I3SMaterialWithTexture[] = [];\n while (materials.length > 0) {\n let newMaterial = materials.splice(0, 1)[0];\n const mergedIndices: number[] = [];\n for (let i = 0; i < materials.length; i++) {\n const material = materials[i];\n if (\n (newMaterial.texture && material.texture) ||\n (!newMaterial.texture && !material.texture)\n ) {\n newMaterial = await mergeMaterials(newMaterial, material);\n mergedIndices.push(i);\n }\n }\n if (newMaterial.texture && mergedIndices.length) {\n const newWidth = newMaterial.mergedMaterials?.reduce(\n (accum, {textureSize}) => accum + (textureSize?.width || 0),\n 0\n );\n const newHeight = newMaterial.mergedMaterials?.reduce(\n (accum, {textureSize}) => Math.max(accum, textureSize?.height || 0),\n 0\n );\n let currentX = -1;\n for (const aTextureMetadata of newMaterial.mergedMaterials) {\n if (aTextureMetadata.textureSize) {\n const newX =\n currentX +\n 1 +\n (aTextureMetadata.textureSize.width / newWidth) *\n 2 ** (Uint16Array.BYTES_PER_ELEMENT * 8) -\n 1;\n aTextureMetadata.uvRegion = new Uint16Array([\n currentX + 1,\n 0,\n newX,\n (aTextureMetadata.textureSize.height / newHeight) *\n 2 ** (Uint16Array.BYTES_PER_ELEMENT * 8) -\n 1\n ]);\n currentX = newX;\n }\n }\n\n newMaterial.texture.image.width = newWidth;\n newMaterial.texture.image.height = newHeight;\n }\n for (const index of mergedIndices.reverse()) {\n materials.splice(index, 1);\n }\n result.push(newMaterial);\n }\n\n if (!result.length) {\n result.push({\n material: getDefaultMaterial(),\n mergedMaterials: [{originalMaterialId: 'default'}]\n });\n }\n return result;\n}\n\n/**\n * Merge 2 materials including texture\n * @param material1\n * @param material2\n * @returns\n */\nasync function mergeMaterials(\n material1: I3SMaterialWithTexture,\n material2: I3SMaterialWithTexture\n): Promise<I3SMaterialWithTexture> {\n if (\n material1.texture?.bufferView &&\n material2.texture?.bufferView &&\n material1.mergedMaterials &&\n material2.mergedMaterials\n ) {\n const buffer1 = Buffer.from(material1.texture.bufferView.data);\n const buffer2 = Buffer.from(material2.texture.bufferView.data);\n try {\n // @ts-ignore\n const {joinImages} = await import('join-images');\n const sharpData = await joinImages([buffer1, buffer2], {direction: 'horizontal'});\n material1.texture.bufferView.data = await sharpData\n .toFormat(material1.texture.mimeType === 'image/png' ? 'png' : 'jpeg')\n .toBuffer();\n } catch (error) {\n console.log(\n 'Join images into a texture atlas has failed. Consider usage `--split-nodes` option. (See documentation https://loaders.gl/modules/tile-converter/docs/cli-reference/tile-converter)'\n );\n throw error;\n }\n // @ts-ignore\n material1.material.pbrMetallicRoughness.baseColorTexture.textureSetDefinitionId = 1;\n }\n material1.mergedMaterials = material1.mergedMaterials.concat(material2.mergedMaterials);\n return material1;\n}\n\n/**\n * Convert texture and material from gltf 2.0 material object\n * @param sourceMaterial - material object\n * @returns I3S material definition and texture\n */\nfunction convertMaterial(sourceMaterial: GLTFMaterialPostprocessed): I3SMaterialWithTexture {\n const material: I3SMaterialDefinition = {\n doubleSided: sourceMaterial.doubleSided,\n emissiveFactor: sourceMaterial.emissiveFactor?.map((c) => Math.round(c * 255)) as [\n number,\n number,\n number\n ],\n // It is in upper case in GLTF: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#alpha-coverage\n // But it is in lower case in I3S: https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n alphaMode: convertAlphaMode(sourceMaterial.alphaMode),\n pbrMetallicRoughness: {\n roughnessFactor:\n sourceMaterial?.pbrMetallicRoughness?.roughnessFactor || DEFAULT_ROUGHNESS_FACTOR,\n metallicFactor:\n sourceMaterial?.pbrMetallicRoughness?.metallicFactor || DEFAULT_METALLIC_FACTOR\n }\n };\n\n let texture;\n if (sourceMaterial?.pbrMetallicRoughness?.baseColorTexture) {\n texture = sourceMaterial.pbrMetallicRoughness.baseColorTexture.texture.source;\n material.pbrMetallicRoughness.baseColorTexture = {\n textureSetDefinitionId: 0\n };\n } else if (sourceMaterial.emissiveTexture) {\n texture = sourceMaterial.emissiveTexture.texture.source;\n // ArcGIS webscene doesn't show emissiveTexture but shows baseColorTexture\n material.pbrMetallicRoughness.baseColorTexture = {\n textureSetDefinitionId: 0\n };\n }\n\n sourceMaterial.id = Number.isFinite(sourceMaterial.id) ? sourceMaterial.id : uuidv4();\n let mergedMaterials: MergedMaterial[] = [{originalMaterialId: sourceMaterial.id}];\n if (!texture) {\n // Should use default baseColorFactor if it is not present in source material\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-pbrmetallicroughness\n const baseColorFactor = sourceMaterial?.pbrMetallicRoughness?.baseColorFactor;\n material.pbrMetallicRoughness.baseColorFactor =\n ((baseColorFactor && baseColorFactor.map((c) => Math.round(c * 255))) as [\n number,\n number,\n number,\n number\n ]) || undefined;\n } else {\n mergedMaterials[0].textureSize = {width: texture.image.width, height: texture.image.height};\n }\n\n return {material, texture, mergedMaterials};\n}\n\n/**\n * Converts from `alphaMode` material property from GLTF to I3S format\n * @param gltfAlphaMode Gltf material `alphaMode` property\n * @returns I3SMaterialDefinition.alphaMode property\n */\nfunction convertAlphaMode(\n gltfAlphaMode?: 'OPAQUE' | 'MASK' | 'BLEND' | string\n): 'opaque' | 'mask' | 'blend' {\n switch (gltfAlphaMode) {\n case 'OPAQUE':\n return 'opaque';\n case 'MASK':\n return 'mask';\n case 'BLEND':\n return 'blend';\n default:\n return 'opaque';\n }\n}\n\n/**\n * Form default I3SMaterialDefinition\n * @returns I3S material definition\n */\nfunction getDefaultMaterial(): I3SMaterialDefinition {\n return {\n alphaMode: 'opaque',\n pbrMetallicRoughness: {\n metallicFactor: 1,\n roughnessFactor: 1\n }\n };\n}\n\n/**\n * Form \"sharedResources\" from gltf materials array\n * @param gltfMaterials - GLTF materials array\n * @param nodeId - I3S node ID\n * @returns {materialDefinitionInfos: Object[], textureDefinitionInfos: Object[]} -\n * 2 arrays in format of i3s sharedResources data https://github.com/Esri/i3s-spec/blob/master/docs/1.7/sharedResource.cmn.md\n */\nfunction getSharedResources(\n gltfMaterials: GLTFMaterialPostprocessed[],\n nodeId: number\n): SharedResourcesArrays {\n const i3sResources: SharedResourcesArrays = {};\n\n if (!gltfMaterials || !gltfMaterials.length) {\n return i3sResources;\n }\n\n i3sResources.materialDefinitionInfos = [];\n for (const gltfMaterial of gltfMaterials) {\n const {materialDefinitionInfo, textureDefinitionInfo} = convertGLTFMaterialToI3sSharedResources(\n gltfMaterial,\n nodeId\n );\n i3sResources.materialDefinitionInfos.push(materialDefinitionInfo);\n if (textureDefinitionInfo) {\n i3sResources.textureDefinitionInfos = i3sResources.textureDefinitionInfos || [];\n i3sResources.textureDefinitionInfos.push(textureDefinitionInfo);\n }\n }\n return i3sResources;\n}\n\n/**\n * Convert gltf material into I3S sharedResources data\n * @param gltfMaterial - gltf material data\n * @param nodeId - I3S node ID\n * @returns - Couple {materialDefinitionInfo, textureDefinitionInfo} extracted from gltf material data\n */\nfunction convertGLTFMaterialToI3sSharedResources(\n gltfMaterial: GLTFMaterialPostprocessed,\n nodeId: number\n): {\n materialDefinitionInfo: MaterialDefinitionInfo;\n textureDefinitionInfo: TextureDefinitionInfo | null;\n} {\n const texture =\n gltfMaterial?.pbrMetallicRoughness?.baseColorTexture || gltfMaterial.emissiveTexture;\n let textureDefinitionInfo: TextureDefinitionInfo | null = null;\n if (texture) {\n textureDefinitionInfo = extractSharedResourcesTextureInfo(texture.texture, nodeId);\n }\n const {baseColorFactor, metallicFactor} = gltfMaterial?.pbrMetallicRoughness || {};\n let colorFactor = baseColorFactor;\n // If alpha channel is 0 try to get emissive factor from gltf material.\n if ((!baseColorFactor || baseColorFactor[3] === 0) && gltfMaterial.emissiveFactor) {\n colorFactor = gltfMaterial.emissiveFactor;\n colorFactor[3] = colorFactor[3] || 1;\n }\n\n return {\n materialDefinitionInfo: extractSharedResourcesMaterialInfo(\n colorFactor || [1, 1, 1, 1],\n metallicFactor\n ),\n textureDefinitionInfo\n };\n}\n\n/**\n * Form \"materialDefinition\" which is part of \"sharedResouces\"\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#materials\n * See formulas in appendix \"Appendix B: BRDF Implementation\":\n * const dielectricSpecular = rgb(0.04, 0.04, 0.04)\n * const black = rgb(0, 0, 0)\n * cdiff = lerp(baseColor.rgb * (1 - dielectricSpecular.r), black, metallic)\n * F0 = lerp(dieletricSpecular, baseColor.rgb, metallic)\n *\n * Assumption: F0 - specular in i3s (\"specular reflection\" <-> \"reflectance value at normal incidence\")\n * cdiff - diffuse in i3s (\"Diffuse color\" <-> \"'c' diffuse\" (c means color?))\n * @param baseColorFactor - RGBA color in 0..1 format\n * @param metallicFactor - \"metallicFactor\" attribute of gltf material object\n * @returns material definition info for I3S shared resource\n */\nfunction extractSharedResourcesMaterialInfo(\n baseColorFactor: number[],\n metallicFactor: number = 1\n): MaterialDefinitionInfo {\n const matDielectricColorComponent = 0.04 / 255; // Color from rgb (255) to 0..1 resolution\n // All color resolutions are 0..1\n const black = new Vector4(0, 0, 0, 1);\n const unitVector = new Vector4(1, 1, 1, 1);\n const dielectricSpecular = new Vector4(\n matDielectricColorComponent,\n matDielectricColorComponent,\n matDielectricColorComponent,\n 0\n );\n const baseColorVector = new Vector4(baseColorFactor);\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n // Formulas for Cdiff & F0\n const firstOperand = unitVector.subtract(dielectricSpecular).multiply(baseColorVector);\n const diffuse = firstOperand.lerp(firstOperand, black, metallicFactor);\n dielectricSpecular[3] = 1;\n const specular = dielectricSpecular.lerp(dielectricSpecular, baseColorVector, metallicFactor);\n return {\n params: {\n // @ts-expect-error NumericArray\n diffuse: diffuse.toArray(),\n // @ts-expect-error NumericArray\n specular: specular.toArray(),\n renderMode: 'solid'\n }\n };\n}\n\n/**\n * Form \"textureDefinition\" which is part of \"sharedResouces\"\n * @param texture - texture image info\n * @param nodeId - I3S node ID\n * @returns texture definition infor for shared resource\n */\nfunction extractSharedResourcesTextureInfo(\n texture: GLTFTexturePostprocessed,\n nodeId: number\n): TextureDefinitionInfo {\n return {\n encoding: texture?.source?.mimeType ? [texture.source.mimeType] : undefined,\n images: [\n {\n // 'i3s' has just size which is width of the image. Images are supposed to be square.\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/image.cmn.md\n id: generateImageId(texture, nodeId),\n size: texture.source?.image.width,\n length: texture.source?.image.data.length ? [texture.source?.image.data.length] : undefined\n }\n ]\n };\n}\n\n/**\n * Formula for calculating imageId:\n * https://github.com/Esri/i3s-spec/blob/0a6366a9249b831db8436c322f8d27521e86cf07/format/Indexed%203d%20Scene%20Layer%20Format%20Specification.md#generating-image-ids\n * @param texture - texture image info\n * @param nodeId - I3S node ID\n * @returns calculate image ID according to the spec\n */\nfunction generateImageId(texture: GLTFTexturePostprocessed, nodeId: number) {\n const {width, height} = texture.source?.image || {};\n if (!width || !height) {\n return '';\n }\n const levelCountOfTexture = 1;\n const indexOfLevel = 0;\n const indexOfTextureInStore = nodeId + 1;\n\n const zerosCount = 32 - indexOfTextureInStore.toString(2).length;\n const rightHalf = '0'.repeat(zerosCount).concat(indexOfTextureInStore.toString(2));\n\n const shiftedLevelCountOfTexture = levelCountOfTexture << 28;\n const shiftedIndexOfLevel = indexOfLevel << 24;\n const shiftedWidth = (width - 1) << 12;\n const shiftedHeight = (height - 1) << 0;\n\n const leftHalf = shiftedLevelCountOfTexture + shiftedIndexOfLevel + shiftedWidth + shiftedHeight;\n const imageId = BigInt(`0b${leftHalf.toString(2)}${rightHalf}`);\n return imageId.toString();\n}\n\n/**\n * Make all feature ids unique through all nodes in layout.\n * @param featureIds\n * @param featureIndices\n * @param featuresHashArray\n * @param batchTable\n * @returns {void}\n */\nfunction makeFeatureIdsUnique(\n featureIds: number[],\n featureIndices: number[],\n featuresHashArray: string[],\n batchTable: {[key: string]: any}\n) {\n const replaceMap = getFeaturesReplaceMap(featureIds, batchTable, featuresHashArray);\n replaceIndicesByUnique(featureIndices, replaceMap);\n replaceIndicesByUnique(featureIds, replaceMap);\n}\n\n/**\n * Generate replace map to make featureIds unique.\n * @param featureIds\n * @param batchTable\n * @param featuresHashArray\n * @returns\n */\nfunction getFeaturesReplaceMap(\n featureIds: any[],\n batchTable: object,\n featuresHashArray: any[]\n): Record<string, any> {\n const featureMap: Record<string, any> = {};\n\n for (let index = 0; index < featureIds.length; index++) {\n const oldFeatureId = featureIds[index];\n const uniqueFeatureId = getOrCreateUniqueFeatureId(index, batchTable, featuresHashArray);\n featureMap[oldFeatureId.toString()] = uniqueFeatureId;\n }\n\n return featureMap;\n}\n\n/**\n * Generates string for unique batch id creation.\n * @param batchTable\n * @param index\n * @returns\n */\nfunction generateStringFromBatchTableByIndex(batchTable: object, index: number): string {\n let str = '';\n for (const key in batchTable) {\n str += batchTable[key][index];\n }\n return str;\n}\n\n/**\n * Return already exited featureId or creates and returns new to support unique feature ids throw nodes.\n * @param index\n * @param batchTable\n * @param featuresHashArray\n * @returns\n */\nfunction getOrCreateUniqueFeatureId(\n index: number,\n batchTable: object,\n featuresHashArray: any[]\n): number {\n const batchTableStr = generateStringFromBatchTableByIndex(batchTable, index);\n const hash = md5(batchTableStr);\n\n if (featuresHashArray.includes(hash)) {\n return featuresHashArray.indexOf(hash);\n }\n return featuresHashArray.push(hash) - 1;\n}\n\n/**\n * Do replacement of indices for making them unique through all nodes.\n * @param indicesArray\n * @param featureMap\n * @returns\n */\nfunction replaceIndicesByUnique(indicesArray: any[], featureMap: Record<string, []>) {\n for (let index = 0; index < indicesArray.length; index++) {\n indicesArray[index] = featureMap[indicesArray[index]];\n }\n}\n\n/**\n * Convert property table data to attribute buffers.\n * @param featureIds\n * @param propertyTable - table with metadata for particular feature.\n * @param attributeStorageInfo\n * @returns - Array of file buffers.\n */\nfunction convertPropertyTableToAttributeBuffers(\n featureIds: number[],\n propertyTable: FeatureTableJson,\n attributeStorageInfo: AttributeStorageInfo[]\n): any[] {\n const attributeBuffers: ArrayBuffer[] = [];\n\n const needFlattenPropertyTable = checkPropertiesLength(featureIds, propertyTable);\n const properties = needFlattenPropertyTable\n ? flattenPropertyTableByFeatureIds(featureIds, propertyTable)\n : propertyTable;\n\n const propertyTableWithObjectIds = {\n OBJECTID: featureIds,\n ...properties\n };\n\n for (const propertyName in propertyTableWithObjectIds) {\n const type = getAttributeType(propertyName, attributeStorageInfo);\n if (type) {\n const value = propertyTableWithObjectIds[propertyName];\n const attributeBuffer = generateAttributeBuffer(type, value);\n\n attributeBuffers.push(attributeBuffer);\n }\n }\n\n return attributeBuffers;\n}\n\n/**\n * Generates attribute buffer based on attribute type\n * @param type\n * @param value\n */\nfunction generateAttributeBuffer(type: string, value: any): ArrayBuffer {\n let attributeBuffer: ArrayBuffer;\n\n switch (type) {\n case OBJECT_ID_TYPE:\n case SHORT_INT_TYPE:\n attributeBuffer = generateShortIntegerAttributeBuffer(value);\n break;\n case DOUBLE_TYPE:\n attributeBuffer = generateDoubleAttributeBuffer(value);\n break;\n case STRING_TYPE:\n attributeBuffer = generateStringAttributeBuffer(value);\n break;\n default:\n attributeBuffer = generateStringAttributeBuffer(value);\n }\n\n return attributeBuffer;\n}\n\n/**\n * Return attribute type.\n * @param key\n * @param attributeStorageInfo\n * @returns attribute type.\n */\nfunction getAttributeType(key: string, attributeStorageInfo: any[]): string {\n const attribute = attributeStorageInfo.find((attr) => attr.name === key);\n if (!attribute) {\n console.error(\n `attribute is null, key=${key}, attributeStorageInfo=${JSON.stringify(\n attributeStorageInfo,\n null,\n 2\n )}`\n );\n return '';\n }\n if (!attribute.attributeValues) {\n console.error(`attributeValues is null, attribute=${attribute}`);\n return '';\n }\n return attribute.attributeValues.valueType;\n}\n\n/**\n * Convert short integer to attribute arrayBuffer.\n * @param featureIds\n * @returns - Buffer with objectId data.\n */\nfunction generateShortIntegerAttributeBuffer(featureIds: any[]): ArrayBuffer {\n const count = new Uint32Array([featureIds.length]);\n const valuesArray = new Uint32Array(featureIds);\n return concatenateArrayBuffers(count.buffer, valuesArray.buffer);\n}\n\n/**\n * Convert double to attribute arrayBuffer.\n * @param featureIds\n * @returns - Buffer with objectId data.\n */\nfunction generateDoubleAttributeBuffer(featureIds: any[]): ArrayBuffer {\n const count = new Uint32Array([featureIds.length]);\n const padding = new Uint8Array(4);\n const valuesArray = new Float64Array(featureIds);\n\n return concatenateArrayBuffers(count.buffer, padding.buffer, valuesArray.buffer);\n}\n\n/**\n * Convert batch table attributes to array buffer with batch table data.\n * @param batchAttributes\n * @returns - Buffer with batch table data.\n */\nfunction generateStringAttributeBuffer(batchAttributes: any[]): ArrayBuffer {\n const stringCountArray = new Uint32Array([batchAttributes.length]);\n let totalNumberOfBytes = 0;\n const stringSizesArray = new Uint32Array(batchAttributes.length);\n const stringBufferArray: ArrayBuffer[] = [];\n\n for (let index = 0; index < batchAttributes.length; index++) {\n const currentString = `${String(batchAttributes[index])}\\0`;\n const currentStringBuffer = Buffer.from(currentString);\n const currentStringSize = currentStringBuffer.length;\n totalNumberOfBytes += currentStringSize;\n stringSizesArray[index] = currentStringSize;\n stringBufferArray.push(currentStringBuffer);\n }\n\n const totalBytes = new Uint32Array([totalNumberOfBytes]);\n\n return concatenateArrayBuffers(\n stringCountArray.buffer,\n totalBytes.buffer,\n stringSizesArray.buffer,\n ...stringBufferArray\n );\n}\n\n/**\n * Convert featureIds to BigUint64Array.\n * @param featureIds\n * @returns - Array of feature ids in BigUint64 format.\n */\nfunction generateBigUint64Array(featureIds: any[]): BigUint64Array {\n const typedFeatureIds = new BigUint64Array(featureIds.length);\n for (let index = 0; index < featureIds.length; index++) {\n typedFeatureIds[index] = BigInt(featureIds[index]);\n }\n return typedFeatureIds;\n}\n\n/**\n * Generates draco compressed geometry\n * @param vertexCount\n * @param convertedAttributes - get rid of this argument here\n * @param attributes - geometry attributes to compress\n * @param libraries - dynamicaly loaded 3rd-party libraries\n * @returns - Compressed geometry.\n */\nasync function generateCompressedGeometry(\n vertexCount: number,\n convertedAttributes: Record<string, any>,\n attributes: Record<string, any>,\n libraries: Record<string, string>\n): Promise<ArrayBuffer> {\n const {positions, normals, texCoords, colors, uvRegions, featureIds, faceRange} = attributes;\n const indices = new Uint32Array(vertexCount);\n\n for (let index = 0; index < indices.length; index++) {\n indices.set([index], index);\n }\n\n const featureIndices = new Uint32Array(\n convertedAttributes.featureIndices.length ? convertedAttributes.featureIndices : vertexCount\n );\n\n const featureIndex = generateFeatureIndexAttribute(featureIndices, faceRange);\n\n const compressedAttributes: {\n positions: TypedArray;\n normals: TypedArray;\n colors: TypedArray;\n 'feature-index': TypedArray;\n texCoords?: TypedArray;\n 'uv-region'?: TypedArray;\n } = {\n positions,\n normals,\n colors,\n 'feature-index': featureIndex\n };\n\n if (texCoords.length) {\n compressedAttributes.texCoords = texCoords;\n }\n\n const attributesMetadata = {\n 'feature-index': {\n 'i3s-attribute-type': 'feature-index',\n 'i3s-feature-ids': new Int32Array(featureIds)\n }\n };\n\n if (uvRegions.length) {\n compressedAttributes['uv-region'] = uvRegions;\n attributesMetadata['uv-region'] = {\n 'i3s-attribute-type': 'uv-region'\n };\n }\n\n return encode({attributes: compressedAttributes, indices}, DracoWriterWorker, {\n ...DracoWriterWorker.options,\n reuseWorkers: true,\n _nodeWorkers: true,\n modules: libraries,\n useLocalLibraries: true,\n draco: {\n method: 'MESH_SEQUENTIAL_ENCODING',\n attributesMetadata\n },\n ['draco-writer']: {\n // We need to load local fs workers because nodejs can't load workers from the Internet\n workerUrl: './modules/draco/dist/draco-writer-worker-node.js'\n }\n });\n}\n\n/**\n * Generates ordered feature indices based on face range\n * @param featureIndex\n * @param faceRange\n * @returns\n */\nfunction generateFeatureIndexAttribute(\n featureIndex: Uint32Array,\n faceRange: Uint32Array\n): Uint32Array {\n const orderedFeatureIndices = new Uint32Array(featureIndex.length);\n let fillIndex = 0;\n let startIndex = 0;\n\n for (let index = 1; index < faceRange.length; index += 2) {\n const endIndex = (faceRange[index] + 1) * VALUES_PER_VERTEX;\n\n orderedFeatureIndices.fill(fillIndex, startIndex, endIndex);\n\n fillIndex++;\n startIndex = endIndex + 1;\n }\n\n return orderedFeatureIndices;\n}\n\n/**\n * Find property table in tile\n * For example it can be batchTable for b3dm files or property table in gLTF extension.\n * @param tileContent - 3DTiles tile content\n * @param metadataClass - user selected feature metadata class name\n * @return batch table from b3dm / feature properties from EXT_FEATURE_METADATA, EXT_MESH_FEATURES or EXT_STRUCTURAL_METADATA\n */\nexport function getPropertyTable(\n tileContent: Tiles3DTileContent | null,\n metadataClass?: string\n): FeatureTableJson | null {\n if (!tileContent) {\n return null;\n }\n let propertyTable: FeatureTableJson | null;\n const batchTableJson = tileContent?.batchTableJson;\n\n if (batchTableJson) {\n return batchTableJson;\n }\n\n const {extensionName, extension} = getPropertyTableExtension(tileContent);\n\n switch (extensionName) {\n case EXT_MESH_FEATURES: {\n propertyTable = getPropertyTableFromExtMeshFeatures(\n extension as GLTF_EXT_mesh_features,\n metadataClass\n );\n return propertyTable;\n }\n case EXT_STRUCTURAL_METADATA: {\n propertyTable = getPropertyTableFromExtStructuralMetadata(\n extension as GLTF_EXT_structural_metadata,\n metadataClass\n );\n return propertyTable;\n }\n case EXT_FEATURE_METADATA: {\n propertyTable = getPropertyTableFromExtFeatureMetadata(\n extension as GLTF_EXT_feature_metadata_GLTF,\n metadataClass\n );\n return propertyTable;\n }\n default:\n return null;\n }\n}\n\n/**\n * Check extensions which can be with property table inside.\n * @param tileContent - 3DTiles tile content\n */\nfunction getPropertyTableExtension(tileContent: Tiles3DTileContent): {\n extensionName: null | string;\n extension:\n | string\n | GLTF_EXT_feature_metadata_GLTF\n | GLTF_EXT_structural_metadata\n | GLTF_EXT_mesh_features\n | null;\n} {\n const extensionsWithPropertyTables = [\n EXT_FEATURE_METADATA,\n EXT_STRUCTURAL_METADATA,\n EXT_MESH_FEATURES\n ];\n const extensionsUsed = tileContent?.gltf?.extensionsUsed;\n\n if (!extensionsUsed) {\n return {extensionName: null, extension: null};\n }\n\n let extensionName: string = '';\n for (const extensionItem of tileContent?.gltf?.extensionsUsed || []) {\n if (extensionsWithPropertyTables.includes(extensionItem)) {\n extensionName = extensionItem;\n break;\n }\n }\n\n if (!extensionName) {\n return {extensionName: null, extension: null};\n }\n\n const extension = tileContent?.gltf?.extensions?.[extensionName] as\n | string // EXT_mesh_features doesn't have global metadata\n | GLTF_EXT_feature_metadata_GLTF;\n\n return {extensionName, extension};\n}\n\n/**\n * Handle EXT_feature_metadata to get property table\n * @param extension - global level of EXT_FEATURE_METADATA extension\n * @param metadataClass - user selected feature metadata class name\n * @returns {FeatureTableJson | null} Property table or null if the extension can't be handled properly.\n */\nfunction getPropertyTableFromExtFeatureMetadata(\n extension: GLTF_EXT_feature_metadata_GLTF,\n metadataClass?: string\n): FeatureTableJson | null {\n if (extension?.featureTables) {\n /**\n * Take only first feature table to generate attributes storage info object.\n * TODO: Think about getting data from all feature tables?\n * It can be tricky just because 3dTiles is able to have multiple featureId attributes and multiple feature tables.\n * In I3S we should decide which featureIds attribute will be passed to geometry data.\n */\n const firstFeatureTableName = Object.keys(extension.featureTables)?.[0];\n\n if (firstFeatureTableName) {\n const featureTable = extension?.featureTables[firstFeatureTableName];\n const propertyTable = {};\n\n for (const propertyName in featureTable.properties) {\n propertyTable[propertyName] = featureTable.properties[propertyName].data;\n }\n\n return propertyTable;\n }\n }\n\n if (extension?.featureTextures) {\n let featureTexture: string | undefined;\n for (const textureKey in extension.featureTextures) {\n const texture = extension.featureTextures[textureKey];\n if (texture.class === metadataClass) {\n featureTexture = textureKey;\n }\n }\n\n if (typeof featureTexture === 'string') {\n const featureTable = extension?.featureTextures[featureTexture];\n const propertyTable = {};\n\n for (const propertyName in featureTable.properties) {\n propertyTable[propertyName] = featureTable.properties[propertyName].data;\n }\n\n return propertyTable;\n }\n }\n\n console.warn(\n \"The I3S converter couldn't handle EXT_feature_metadata extension: There is neither featureTables, no featureTextures in the extension.\"\n );\n return null;\n}\n\n/**\n * Handle EXT_structural_metadata to get property table\n * @param extension - global level of EXT_STRUCTURAL_METADATA extension\n * @param metadataClass - user selected feature metadata class name\n * @returns {FeatureTableJson | null} Property table or null if the extension can't be handled properly.\n */\nfunction getPropertyTableFromExtStructuralMetadata(\n extension: GLTF_EXT_structural_metadata,\n metadataClass?: string\n): FeatureTableJson | null {\n if (extension?.propertyTables) {\n /**\n * Take only first feature table to generate attributes storage info object.\n * TODO: Think about getting data from all feature tables?\n * It can be tricky just because 3dTiles is able to have multiple featureId attributes and multiple feature tables.\n * In I3S we should decide which featureIds attribute will be passed to geometry data.\n */\n const firstPropertyTable = extension?.propertyTables[0];\n const propertyTableWithData = {};\n\n for (const propertyName in firstPropertyTable.properties) {\n propertyTableWithData[propertyName] = firstPropertyTable.properties[propertyName].data;\n }\n\n return propertyTableWithData;\n }\n\n if (extension?.propertyTextures) {\n /**\n * Take only first feature table to generate attributes storage info object.\n * TODO: Think about getting data from all feature tables?\n * It can be tricky just because 3dTiles is able to have multiple featureId attributes and multiple feature tables.\n * In I3S we should decide which featureIds attribute will be passed to geometry data.\n */\n if (extension?.propertyTextures) {\n const firstPropertyTexture = extension?.propertyTextures[0];\n const propertyTableWithData = {};\n\n for (const propertyName in firstPropertyTexture.properties) {\n propertyTableWithData[propertyName] = firstPropertyTexture.properties[propertyName].data;\n }\n\n return propertyTableWithData;\n }\n }\n\n console.warn(\n \"The I3S converter couldn't handle EXT_structural_metadata extension: There is neither propertyTables, no propertyTextures in the extension.\"\n );\n return null;\n}\n\n/**\n * Handle EXT_mesh_features to get property table\n * @param extension - global level of EXT_MESH_FEATURES extension\n * @param metadataClass - user selected feature metadata class name\n * @returns {FeatureTableJson | null} Property table or null if the extension can't be handled properly.\n */\nfunction getPropertyTableFromExtMeshFeatures(\n extension: GLTF_EXT_mesh_features,\n metadataClass?: string\n): FeatureTableJson | null {\n if (extension?.featureIds) {\n const firstFeatureId = extension?.featureIds[0];\n const propertyTableWithData = {};\n\n // When firstFeatureId.propertyTable is defined, the property data will be taken from EXT_structural_metadata extension\n if (!firstFeatureId.propertyTable) {\n console.warn(\n 'Should be implemented as we have the tileset with Ext_mesh_features not linked with EXT_structural_metadata extension'\n );\n }\n\n return propertyTableWithData;\n }\n\n console.warn(\n \"The I3S converter couldn't handle EXT_mesh_features extension: There is no featureIds in the extension.\"\n );\n return null;\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,GAAA,GAAAC,sBAAA,CAAAN,OAAA;AACA,IAAAO,KAAA,GAAAP,OAAA;AACA,IAAAQ,mBAAA,GAAAR,OAAA;AACA,IAAAS,oBAAA,GAAAT,OAAA;AAgBA,IAAAU,eAAA,GAAAV,OAAA;AACA,IAAAW,mBAAA,GAAAX,OAAA;AACA,IAAAY,kBAAA,GAAAZ,OAAA;AACA,IAAAa,KAAA,GAAAb,OAAA;AAQA,IAAAc,cAAA,GAAAd,OAAA;AAGA,IAAAe,KAAA,GAAAf,OAAA;AAAkG,SAAAgB,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAI,wBAAAC,GAAA,EAAAL,WAAA,SAAAA,WAAA,IAAAK,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,aAAAE,OAAA,CAAAF,GAAA,yBAAAA,GAAA,4BAAAG,OAAA,EAAAH,GAAA,UAAAI,KAAA,GAAAV,wBAAA,CAAAC,WAAA,OAAAS,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAL,GAAA,YAAAI,KAAA,CAAAE,GAAA,CAAAN,GAAA,SAAAO,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAZ,GAAA,QAAAY,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAf,GAAA,EAAAY,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,GAAA,EAAAY,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAZ,GAAA,CAAAY,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAH,GAAA,MAAAI,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAjB,GAAA,EAAAO,MAAA,YAAAA,MAAA;AAAA,SAAAW,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAZ,MAAA,CAAAY,IAAA,CAAAF,MAAA,OAAAV,MAAA,CAAAa,qBAAA,QAAAC,OAAA,GAAAd,MAAA,CAAAa,qBAAA,CAAAH,MAAA,GAAAC,cAAA,KAAAG,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAhB,MAAA,CAAAE,wBAAA,CAAAQ,MAAA,EAAAM,GAAA,EAAAC,UAAA,OAAAL,IAAA,CAAAM,IAAA,CAAAC,KAAA,CAAAP,IAAA,EAAAE,OAAA,YAAAF,IAAA;AAAA,SAAAQ,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAb,OAAA,CAAAT,MAAA,CAAAyB,MAAA,OAAAC,OAAA,WAAAvB,GAAA,QAAAwB,gBAAA,CAAAjC,OAAA,EAAA2B,MAAA,EAAAlB,GAAA,EAAAsB,MAAA,CAAAtB,GAAA,SAAAH,MAAA,CAAA4B,yBAAA,GAAA5B,MAAA,CAAA6B,gBAAA,CAAAR,MAAA,EAAArB,MAAA,CAAA4B,yBAAA,CAAAH,MAAA,KAAAhB,OAAA,CAAAT,MAAA,CAAAyB,MAAA,GAAAC,OAAA,WAAAvB,GAAA,IAAAH,MAAA,CAAAC,cAAA,CAAAoB,MAAA,EAAAlB,GAAA,EAAAH,MAAA,CAAAE,wBAAA,CAAAuB,MAAA,EAAAtB,GAAA,iBAAAkB,MAAA;AAAA,SAAAS,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,CAAAP,MAAA,qBAAAS,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAX,CAAA,UAAAiB,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAnB,CAAA,IAAAS,CAAA,CAAAP,MAAA,WAAAkB,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAZ,CAAA,CAAAT,CAAA,UAAAsB,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAP,EAAA,GAAAA,EAAA,CAAA3B,IAAA,CAAAyB,CAAA,MAAAU,CAAA,WAAAA,EAAA,QAAAU,IAAA,GAAAlB,EAAA,CAAAmB,IAAA,IAAAJ,gBAAA,GAAAG,IAAA,CAAAT,IAAA,SAAAS,IAAA,KAAAP,CAAA,WAAAA,EAAAS,GAAA,IAAAJ,MAAA,SAAAC,GAAA,GAAAG,GAAA,KAAAP,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAf,EAAA,CAAAqB,MAAA,UAAArB,EAAA,CAAAqB,MAAA,oBAAAL,MAAA,QAAAC,GAAA;AAAA,SAAAZ,4BAAAP,CAAA,EAAAwB,MAAA,SAAAxB,CAAA,qBAAAA,CAAA,sBAAAyB,iBAAA,CAAAzB,CAAA,EAAAwB,MAAA,OAAAd,CAAA,GAAAzC,MAAA,CAAAI,SAAA,CAAAqD,QAAA,CAAAnD,IAAA,CAAAyB,CAAA,EAAA2B,KAAA,aAAAjB,CAAA,iBAAAV,CAAA,CAAA4B,WAAA,EAAAlB,CAAA,GAAAV,CAAA,CAAA4B,WAAA,CAAAC,IAAA,MAAAnB,CAAA,cAAAA,CAAA,mBAAAL,KAAA,CAAAyB,IAAA,CAAA9B,CAAA,OAAAU,CAAA,+DAAAqB,IAAA,CAAArB,CAAA,UAAAe,iBAAA,CAAAzB,CAAA,EAAAwB,MAAA;AAAA,SAAAC,kBAAAO,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAAvC,MAAA,EAAAwC,GAAA,GAAAD,GAAA,CAAAvC,MAAA,WAAAF,CAAA,MAAA2C,IAAA,OAAA7B,KAAA,CAAA4B,GAAA,GAAA1C,CAAA,GAAA0C,GAAA,EAAA1C,CAAA,IAAA2C,IAAA,CAAA3C,CAAA,IAAAyC,GAAA,CAAAzC,CAAA,UAAA2C,IAAA;AAGlG,IAAMC,wBAAwB,GAAG,CAAC;AAClC,IAAMC,uBAAuB,GAAG,CAAC;AAEjC,IAAMC,iBAAiB,GAAG,CAAC;AAC3B,IAAMC,oBAAoB,GAAG,CAAC;AAC9B,IAAMC,wBAAwB,GAAG,CAAC;AAElC,IAAMC,WAAW,GAAG,QAAQ;AAC5B,IAAMC,cAAc,GAAG,OAAO;AAC9B,IAAMC,WAAW,GAAG,SAAS;AAC7B,IAAMC,cAAc,GAAG,OAAO;AAM9B,IAAMC,mCAAmC,GAAG,CAAC,oBAAoB,EAAE,UAAU,EAAE,SAAS,CAAC;AAEzF,IAAIC,aAAa,GAAG,IAAIC,aAAO,CAAC,CAAC;AAAC,SAqBJC,wBAAwBA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;EAAA,OAAAC,yBAAA,CAAAzE,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAqE,0BAAA;EAAAA,yBAAA,OAAAC,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAvC,SAAAC,QACbC,WAA+B,EAC/BC,aAAsB,EACtBC,kBAAwD,EACxDC,iBAAwC,EACxCC,aAAsC,EACtCC,iBAA2B,EAC3BC,oBAAwD,EACxDC,KAAc,EACdC,uBAAgC,EAChCC,oBAA6B,EAC7BC,gBAAuB,EACvBC,SAAiC,EACjCC,aAAsB;IAAA,IAAAC,kBAAA;IAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,2BAAA,EAAAC,cAAA,EAAAC,sBAAA,EAAAC,MAAA,EAAAC,UAAA,EAAAC,MAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,mBAAA,EAAAC,QAAA,EAAAC,OAAA,EAAAC,MAAA;IAAA,OAAA9B,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAA3E,IAAA;QAAA;UAEhB2D,qBAAqB,GAAGN,uBAAuB;UAAAsB,QAAA,CAAA3E,IAAA;UAAA,OACU6E,gBAAgB,EAAAnB,kBAAA,GAC7Eb,WAAW,CAACiC,IAAI,cAAApB,kBAAA,uBAAhBA,kBAAA,CAAkBqB,SAAS,EAC3BzB,oBACF,CAAC;QAAA;UAHKM,sBAAgD,GAAAe,QAAA,CAAAK,IAAA;UAKhDnB,2BAA2B,GAAG,IAAAoB,kDAAkC,EACpEpC,WAAW,EACXC,aAAa,EACbC,kBACF,CAAC;UACKe,cAAc,GAAG,IAAAoB,6CAAyB,EAACrC,WAAW,EAAEY,aAAa,CAAC;UAAAkB,QAAA,CAAA3E,IAAA;UAAA,OACLmF,iBAAiB,CACtFtB,2BAA2B,EAC3BD,sBAAsB,EACtBD,qBAAqB,EACrBG,cACF,CAAC;QAAA;UALKC,sBAAwD,GAAAY,QAAA,CAAAK,IAAA;UAe9D,IAAI3B,uBAAuB,EAAE;YAC3B+B,oCAAoC,CAACrB,sBAAsB,EAAER,gBAAgB,CAAC;UAChF;UAEMS,MAA+B,GAAG,EAAE;UAAAC,UAAA,GAAAvF,0BAAA,CACTkF,sBAAsB;UAAAe,QAAA,CAAAC,IAAA;UAAAX,UAAA,CAAA7E,CAAA;QAAA;UAAA,KAAA8E,MAAA,GAAAD,UAAA,CAAA5E,CAAA,IAAAC,IAAA;YAAAqF,QAAA,CAAA3E,IAAA;YAAA;UAAA;UAA5CmE,kBAAkB,GAAAD,MAAA,CAAA3E,KAAA;UACrB6E,kBAAkB,GAAGD,kBAAkB,CAACkB,eAAe,CAAC,CAAC,CAAC,CAACC,kBAAkB;UAAA,IAC9EvB,sBAAsB,CAACvH,GAAG,CAAC4H,kBAAkB,CAAC;YAAAO,QAAA,CAAA3E,IAAA;YAAA;UAAA;UAAA,OAAA2E,QAAA,CAAAY,MAAA;QAAA;UAG7ClB,mBAAmB,GAAGN,sBAAsB,CAACtH,GAAG,CAAC2H,kBAAkB,CAAC;UAAA,IACrEC,mBAAmB;YAAAM,QAAA,CAAA3E,IAAA;YAAA;UAAA;UAAA,OAAA2E,QAAA,CAAAY,MAAA;QAAA;UAGjBjB,QAAQ,GAAaH,kBAAkB,CAAvCG,QAAQ,EAAEC,OAAO,GAAIJ,kBAAkB,CAA7BI,OAAO;UAAAI,QAAA,CAAA3E,IAAA;UAAA,OACHgD,iBAAiB,CAAC,CAAC;QAAA;UAAlCwB,MAAM,GAAAG,QAAA,CAAAK,IAAA;UAAAL,QAAA,CAAAa,EAAA,GACZxB,MAAM;UAAAW,QAAA,CAAA3E,IAAA;UAAA,OACEyF,kBAAkB,CAAC;YACvBpB,mBAAmB,EAAnBA,mBAAmB;YACnBC,QAAQ,EAARA,QAAQ;YACRC,OAAO,EAAPA,OAAO;YACP1B,WAAW,EAAXA,WAAW;YACX2B,MAAM,EAANA,MAAM;YACNtB,iBAAiB,EAAjBA,iBAAiB;YACjBD,aAAa,EAAbA,aAAa;YACbE,oBAAoB,EAApBA,oBAAoB;YACpBC,KAAK,EAALA,KAAK;YACLI,SAAS,EAATA;UACF,CAAC,CAAC;QAAA;UAAAmB,QAAA,CAAAe,EAAA,GAAAf,QAAA,CAAAK,IAAA;UAAAL,QAAA,CAAAa,EAAA,CAZG1H,IAAI,CAAAZ,IAAA,CAAAyH,QAAA,CAAAa,EAAA,EAAAb,QAAA,CAAAe,EAAA;QAAA;UAAAf,QAAA,CAAA3E,IAAA;UAAA;QAAA;UAAA2E,QAAA,CAAA3E,IAAA;UAAA;QAAA;UAAA2E,QAAA,CAAAC,IAAA;UAAAD,QAAA,CAAAgB,EAAA,GAAAhB,QAAA;UAAAV,UAAA,CAAAzE,CAAA,CAAAmF,QAAA,CAAAgB,EAAA;QAAA;UAAAhB,QAAA,CAAAC,IAAA;UAAAX,UAAA,CAAAvE,CAAA;UAAA,OAAAiF,QAAA,CAAAiB,MAAA;QAAA;UAAA,IAgBR5B,MAAM,CAAC5F,MAAM;YAAAuG,QAAA,CAAA3E,IAAA;YAAA;UAAA;UAAA,OAAA2E,QAAA,CAAAY,MAAA,WACT,IAAI;QAAA;UAAA,OAAAZ,QAAA,CAAAY,MAAA,WAENvB,MAAM;QAAA;QAAA;UAAA,OAAAW,QAAA,CAAAkB,IAAA;MAAA;IAAA,GAAAjD,OAAA;EAAA,CACd;EAAA,OAAAJ,yBAAA,CAAAzE,KAAA,OAAAI,SAAA;AAAA;AAOD,SAASiH,oCAAoCA,CAC3CrB,sBAAwD,EACxDR,gBAAuB,EACvB;EAAA,IAAAuC,SAAA,GAAApH,0BAAA,CACyBqF,sBAAsB,CAACgC,MAAM,CAAC,CAAC;IAAAC,KAAA;EAAA;IAAxD,KAAAF,SAAA,CAAA1G,CAAA,MAAA4G,KAAA,GAAAF,SAAA,CAAAzG,CAAA,IAAAC,IAAA,GAA0D;MAAA,IAA/C2G,UAAU,GAAAD,KAAA,CAAAzG,KAAA;MACnB,IAAM2G,eAAe,GAAG,IAAAC,sDAAiC,EACvDF,UAAU,CAACG,SAAS,EACpB7C,gBACF,CAAC;MAED0C,UAAU,CAACC,eAAe,GAAGA,eAAe;MAC5C,IAAMG,kBAAkB,GAAGH,eAAe,CAACI,GAAG,CAACC,MAAM;MAErD,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGP,UAAU,CAACG,SAAS,CAAChI,MAAM,EAAEoI,KAAK,IAAIxF,iBAAiB,EAAE;QACnF,IAAMyF,MAAM,GAAGR,UAAU,CAACG,SAAS,CAACM,QAAQ,CAACF,KAAK,EAAEA,KAAK,GAAGxF,iBAAiB,CAAC;QAC9E2F,qBAAS,CAACC,KAAK,CAACC,uBAAuB,CAAC7H,KAAK,CAACyB,IAAI,CAACgG,MAAM,CAAC,EAAEjF,aAAa,CAAC;QAC1EA,aAAa,CAAC,CAAC,CAAC,GACdA,aAAa,CAAC,CAAC,CAAC,GAAG+B,gBAAgB,CAACuD,SAAS,CAACtF,aAAa,CAAC,CAAC,CAAC,EAAEA,aAAa,CAAC,CAAC,CAAC,CAAC;QACnFA,aAAa,GAAGA,aAAa,CAACuF,QAAQ,CAACV,kBAAkB,CAAC;QAC1DJ,UAAU,CAACG,SAAS,CAAChJ,GAAG,CAACoE,aAAa,EAAEgF,KAAK,CAAC;MAChD;IACF;EAAC,SAAA1G,GAAA;IAAAgG,SAAA,CAAAtG,CAAA,CAAAM,GAAA;EAAA;IAAAgG,SAAA,CAAApG,CAAA;EAAA;AACH;AAAC,SAiBc+F,kBAAkBA,CAAAuB,IAAA;EAAA,OAAAC,mBAAA,CAAAlJ,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAA8I,oBAAA;EAAAA,mBAAA,OAAAxE,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAjC,SAAAuE,SAAAC,IAAA;IAAA,IAAAC,kBAAA;IAAA,IAAA/C,mBAAA,EAAAC,QAAA,EAAAC,OAAA,EAAA1B,WAAA,EAAA2B,MAAA,EAAAtB,iBAAA,EAAAD,aAAA,EAAAE,oBAAA,EAAAC,KAAA,EAAAI,SAAA,EAAA0C,eAAA,EAAAmB,WAAA,EAAAC,mBAAA,EAAAC,SAAA,EAAAC,UAAA,EAAApB,SAAA,EAAAqB,OAAA,EAAAC,MAAA,EAAAC,SAAA,EAAAC,SAAA,EAAAC,YAAA,EAAAC,MAAA,EAAAC,eAAA,EAAAC,UAAA,EAAAC,kBAAA,EAAAhC,UAAA;IAAA,OAAAvD,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAAyD,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAvD,IAAA,GAAAuD,SAAA,CAAAnI,IAAA;QAAA;UACEqE,mBAAmB,GAAA8C,IAAA,CAAnB9C,mBAAmB,EACnBC,QAAQ,GAAA6C,IAAA,CAAR7C,QAAQ,EACRC,OAAO,GAAA4C,IAAA,CAAP5C,OAAO,EACP1B,WAAW,GAAAsE,IAAA,CAAXtE,WAAW,EACX2B,MAAM,GAAA2C,IAAA,CAAN3C,MAAM,EACNtB,iBAAiB,GAAAiE,IAAA,CAAjBjE,iBAAiB,EACjBD,aAAa,GAAAkE,IAAA,CAAblE,aAAa,EACbE,oBAAoB,GAAAgE,IAAA,CAApBhE,oBAAoB,EACpBC,KAAK,GAAA+D,IAAA,CAAL/D,KAAK,EACLI,SAAS,GAAA2D,IAAA,CAAT3D,SAAS;UAaH0C,eAAe,GAAG7B,mBAAmB,CAAC6B,eAAe;UACrDmB,WAAW,GAAGhD,mBAAmB,CAAC+B,SAAS,CAAChI,MAAM,GAAG4C,iBAAiB;UAAAsG,mBAAA,GAE1E,IAAAc,sCAAkB,EAAC/D,mBAAmB,CAAC,EADlCkD,SAAS,GAAAD,mBAAA,CAATC,SAAS,EAAEC,UAAU,GAAAF,mBAAA,CAAVE,UAAU,EAAEpB,SAAS,GAAAkB,mBAAA,CAATlB,SAAS,EAAEqB,OAAO,GAAAH,mBAAA,CAAPG,OAAO,EAAEC,MAAM,GAAAJ,mBAAA,CAANI,MAAM,EAAEC,SAAS,GAAAL,mBAAA,CAATK,SAAS,EAAEC,SAAS,GAAAN,mBAAA,CAATM,SAAS,EAAEC,YAAY,GAAAP,mBAAA,CAAZO,YAAY;UAG5F,IAAIhF,WAAW,CAACwF,cAAc,EAAE;YAC9BC,oBAAoB,CAClBd,UAAU,EACVnD,mBAAmB,CAACkE,cAAc,EAClCrF,iBAAiB,EACjBL,WAAW,CAACwF,cACd,CAAC;UACH;UAEMP,MAAM,GAAG,IAAIU,WAAW,CAAC,CAAC,CAAC;UAC3BT,eAAe,GAAGU,sBAAsB,CAACjB,UAAU,CAAC;UAE1DM,MAAM,CAAC1K,GAAG,CAAC,CAACiK,WAAW,EAAEQ,YAAY,CAAC,EAAE,CAAC,CAAC;UACpCG,UAAU,GAAG,IAAIU,UAAU,CAC/B,IAAAC,oCAAuB,EACrBb,MAAM,CAACc,MAAM,EACbxC,SAAS,CAACwC,MAAM,EAChBnB,OAAO,CAACmB,MAAM,EACdrE,OAAO,GAAGqD,SAAS,CAACgB,MAAM,GAAG,IAAIC,WAAW,CAAC,CAAC,CAAC,EAC/CnB,MAAM,CAACkB,MAAM,EACbjB,SAAS,EACTI,eAAe,CAACa,MAAM,EACtBrB,SAAS,CAACqB,MACZ,CACF,CAAC;UACKX,kBAAkB,GAAG7E,KAAK,GAC5B0F,0BAA0B,CACxBzB,WAAW,EACXhD,mBAAmB,EACnB;YACE+B,SAAS,EAATA,SAAS;YACTqB,OAAO,EAAPA,OAAO;YACPG,SAAS,EAAErD,OAAO,GAAGqD,SAAS,GAAG,IAAImB,YAAY,CAAC,CAAC,CAAC;YACpDrB,MAAM,EAANA,MAAM;YACNC,SAAS,EAATA,SAAS;YACTH,UAAU,EAAVA,UAAU;YACVD,SAAS,EAATA;UACF,CAAC,EACD/D,SACF,CAAC,GACD,IAAI;UAEJyC,UAAyB,GAAG,EAAE;UAElC,IAAI9C,oBAAoB,IAAIF,aAAa,EAAE;YACzCgD,UAAU,GAAG+C,sCAAsC,CACjDxB,UAAU,EACVvE,aAAa,EACbE,oBACF,CAAC;UACH;UAAC,OAAAgF,SAAA,CAAA5C,MAAA,WAEM;YACLf,MAAM,EAANA,MAAM;YACNyE,QAAQ,EAAEjB,UAAU;YACpBC,kBAAkB,EAAlBA,kBAAkB;YAClB1D,OAAO,EAAPA,OAAO;YACP2E,YAAY,EAAEC,OAAO,CAACxB,SAAS,CAACvJ,MAAM,CAAC;YACvCgL,eAAe,EAAEC,kBAAkB,CAAC,EAAAjC,kBAAA,GAAAvE,WAAW,CAACiC,IAAI,cAAAsC,kBAAA,uBAAhBA,kBAAA,CAAkBrC,SAAS,KAAI,EAAE,EAAEP,MAAM,CAAC;YAC9E8E,YAAY,EAAEhF,QAAQ;YACtB+C,WAAW,EAAXA,WAAW;YACXpB,UAAU,EAAVA,UAAU;YACV4B,YAAY,EAAZA,YAAY;YACZ3B,eAAe,EAAfA;UACF,CAAC;QAAA;QAAA;UAAA,OAAAiC,SAAA,CAAAtC,IAAA;MAAA;IAAA,GAAAqB,QAAA;EAAA,CACF;EAAA,OAAAD,mBAAA,CAAAlJ,KAAA,OAAAI,SAAA;AAAA;AAAA,SAWqBgH,iBAAiBA,CAAAoE,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;EAAA,OAAAC,kBAAA,CAAA5L,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAwL,mBAAA;EAAAA,kBAAA,OAAAlH,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAhC,SAAAiH,SACLC,cAAkC,EAClCjG,sBAAgD,EAChDD,qBAA8B,EAC9BG,cAA6B;IAAA,IAAAgG,KAAA,EAAAC,MAAA,EAAA1D,kBAAA,EAAA2D,oBAAA,EAAAC,aAAA,EAAAC,UAAA,EAAAC,MAAA,EAAAhG,kBAAA,EAAA8B,UAAA,EAAAmE,UAAA,EAAAC,MAAA,EAAAC,cAAA,EAAAC,UAAA,EAAAC,MAAA,EAAAC,OAAA,EAAAC,WAAA;IAAA,OAAAhI,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAAkG,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAhG,IAAA,GAAAgG,SAAA,CAAA5K,IAAA;QAAA;UAEtB8J,KAAK,GAAsDD,cAAc,CAAzEC,KAAK,EAAEC,MAAM,GAA8CF,cAAc,CAAlEE,MAAM,EAAE1D,kBAAkB,GAA0BwD,cAAc,CAA1DxD,kBAAkB,EAAE2D,oBAAoB,GAAIH,cAAc,CAAtCG,oBAAoB;UACxDC,aAAa,GAAG,IAAIY,GAAG,CAA8B,CAAC;UAAAX,UAAA,GAAAxL,0BAAA,CAE3BkF,sBAAsB;UAAA;YAAvD,KAAAsG,UAAA,CAAA9K,CAAA,MAAA+K,MAAA,GAAAD,UAAA,CAAA7K,CAAA,IAAAC,IAAA,GAAyD;cAA9C6E,kBAAkB,GAAAgG,MAAA,CAAA5K,KAAA;cACrB0G,UAAU,GAAG;gBACjBG,SAAS,EAAE,IAAI2C,YAAY,CAAC,CAAC,CAAC;gBAC9BtB,OAAO,EAAE,IAAIsB,YAAY,CAAC,CAAC,CAAC;gBAC5BnB,SAAS,EAAE,IAAImB,YAAY,CAAC,CAAC,CAAC;gBAC9BrB,MAAM,EAAE,IAAIgB,UAAU,CAAC,CAAC,CAAC;gBACzBf,SAAS,EAAE,IAAImD,WAAW,CAAC,CAAC,CAAC;gBAC7BC,oBAAoB,EAAE,EAAE;gBACxBxC,cAAc,EAAE,EAAE;gBAClBrC,eAAe,EAAE,IAAI;gBACrBb,eAAe,EAAElB,kBAAkB,CAACkB;cACtC,CAAC;cAAA+E,UAAA,GAAA1L,0BAAA,CAC4ByF,kBAAkB,CAACkB,eAAe;cAAA;gBAA/D,KAAA+E,UAAA,CAAAhL,CAAA,MAAAiL,MAAA,GAAAD,UAAA,CAAA/K,CAAA,IAAAC,IAAA,GAAiE;kBAAtDgL,cAAc,GAAAD,MAAA,CAAA9K,KAAA;kBACvB0K,aAAa,CAAC7M,GAAG,CAACkN,cAAc,CAAChF,kBAAkB,EAAEW,UAAU,CAAC;gBAClE;cAAC,SAAAnG,GAAA;gBAAAsK,UAAA,CAAA5K,CAAA,CAAAM,GAAA;cAAA;gBAAAsK,UAAA,CAAA1K,CAAA;cAAA;YACH;UAAC,SAAAI,GAAA;YAAAoK,UAAA,CAAA1K,CAAA,CAAAM,GAAA;UAAA;YAAAoK,UAAA,CAAAxK,CAAA;UAAA;UAEDsL,YAAY,CACVlB,KAAK,EACLC,MAAM,EACN1D,kBAAkB,EAClB2D,oBAAoB,EACpBC,aAAa,EACbtG,qBAAqB,EACrBsH,SAAS,EACTnH,cACF,CAAC;UAACyG,UAAA,GAAA7L,0BAAA,CAEoBuL,aAAa,CAACzM,IAAI,CAAC,CAAC;UAAAoN,SAAA,CAAAhG,IAAA;UAAA2F,UAAA,CAAAnL,CAAA;QAAA;UAAA,KAAAoL,MAAA,GAAAD,UAAA,CAAAlL,CAAA,IAAAC,IAAA;YAAAsL,SAAA,CAAA5K,IAAA;YAAA;UAAA;UAA/ByK,OAAO,GAAAD,MAAA,CAAAjL,KAAA;UACV0G,WAAU,GAAGgE,aAAa,CAACxN,GAAG,CAACgO,OAAO,CAAC;UAAA,IACxCxE,WAAU;YAAA2E,SAAA,CAAA5K,IAAA;YAAA;UAAA;UAAA,OAAA4K,SAAA,CAAArF,MAAA;QAAA;UAAA,MAGXU,WAAU,CAACG,SAAS,CAAChI,MAAM,KAAK,CAAC;YAAAwM,SAAA,CAAA5K,IAAA;YAAA;UAAA;UACnCiK,aAAa,CAACiB,MAAM,CAACT,OAAO,CAAC;UAAC,OAAAG,SAAA,CAAArF,MAAA;QAAA;UAGhC,IAAIU,WAAU,CAAC8E,oBAAoB,EAAE;YACnC9E,WAAU,CAACsC,cAAc,GAAGtC,WAAU,CAAC8E,oBAAoB,CAACI,MAAM,CAAC,UAACC,GAAG,EAAE7L,KAAK;cAAA,OAC5E6L,GAAG,CAACC,MAAM,CAAC9L,KAAK,CAAC;YAAA,CACnB,CAAC;YACD,OAAO0G,WAAU,CAAC8E,oBAAoB;UACxC;QAAC;UAAAH,SAAA,CAAA5K,IAAA;UAAA;QAAA;UAAA4K,SAAA,CAAA5K,IAAA;UAAA;QAAA;UAAA4K,SAAA,CAAAhG,IAAA;UAAAgG,SAAA,CAAApF,EAAA,GAAAoF,SAAA;UAAAL,UAAA,CAAA/K,CAAA,CAAAoL,SAAA,CAAApF,EAAA;QAAA;UAAAoF,SAAA,CAAAhG,IAAA;UAAA2F,UAAA,CAAA7K,CAAA;UAAA,OAAAkL,SAAA,CAAAhF,MAAA;QAAA;UAAA,OAAAgF,SAAA,CAAArF,MAAA,WAGI0E,aAAa;QAAA;QAAA;UAAA,OAAAW,SAAA,CAAA/E,IAAA;MAAA;IAAA,GAAA+D,QAAA;EAAA,CACrB;EAAA,OAAAD,kBAAA,CAAA5L,KAAA,OAAAI,SAAA;AAAA;AAgBD,SAAS6M,YAAYA,CACnBlB,KAA8B,EAC9BC,MAAyC,EACzC1D,kBAA2B,EAC3B2D,oBAA6B,EAC7BC,aAA+C,EAC/CtG,qBAA8B,EAG9B;EAAA,IAFA2H,MAAe,GAAAnN,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,IAAIoN,aAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAAA,IAC/EzH,cAA6B,GAAA3F,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAA8M,SAAA;EAE7B,IAAInB,KAAK,EAAE;IAAA,IAAA0B,UAAA,GAAA9M,0BAAA,CACUoL,KAAK;MAAA2B,MAAA;IAAA;MAAxB,KAAAD,UAAA,CAAApM,CAAA,MAAAqM,MAAA,GAAAD,UAAA,CAAAnM,CAAA,IAAAC,IAAA,GAA0B;QAAA,IAAfoM,IAAI,GAAAD,MAAA,CAAAlM,KAAA;QACboM,WAAW,CACTD,IAAI,EACJ3B,MAAM,EACN1D,kBAAkB,EAClB2D,oBAAoB,EACpBC,aAAa,EACbtG,qBAAqB,EACrB2H,MAAM,EACNxH,cACF,CAAC;MACH;IAAC,SAAAhE,GAAA;MAAA0L,UAAA,CAAAhM,CAAA,CAAAM,GAAA;IAAA;MAAA0L,UAAA,CAAA9L,CAAA;IAAA;EACH;AACF;AAQA,SAASkM,gCAAgCA,CAACF,IAA2B,EAAEJ,MAAe,EAAE;EACtF,IAAIO,oBAAoB,GAAGP,MAAM;EAEjC,IAAeQ,UAAU,GAAkCJ,IAAI,CAAxDJ,MAAM;IAAcS,QAAQ,GAAwBL,IAAI,CAApCK,QAAQ;IAAEC,KAAK,GAAiBN,IAAI,CAA1BM,KAAK;IAAEC,WAAW,GAAIP,IAAI,CAAnBO,WAAW;EAEvD,IAAIH,UAAU,EAAE;IACdD,oBAAoB,GAAGP,MAAM,CAACY,aAAa,CAACJ,UAAU,CAAC;EACzD;EAEA,IAAIG,WAAW,EAAE;IACfJ,oBAAoB,GAAGA,oBAAoB,CAACM,SAAS,CAACF,WAAW,CAAC;EACpE;EAEA,IAAIF,QAAQ,EAAE;IACZF,oBAAoB,GAAGA,oBAAoB,CAACO,SAAS,CAACL,QAAQ,CAAC;EACjE;EAEA,IAAIC,KAAK,EAAE;IACTH,oBAAoB,GAAGA,oBAAoB,CAACG,KAAK,CAACA,KAAK,CAAC;EAC1D;EAEA,OAAOH,oBAAoB;AAC7B;AAeA,SAASF,WAAWA,CAClBD,IAA2B,EAC3B3B,MAAyC,EACzC1D,kBAA2B,EAC3B2D,oBAA6B,EAC7BC,aAA+C,EAC/CtG,qBAAqB,EAGrB;EAAA,IAFA2H,MAAM,GAAAnN,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,IAAIoN,aAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAAA,IACtEzH,cAA6B,GAAA3F,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAA8M,SAAA;EAE7B,IAAMY,oBAAoB,GAAGD,gCAAgC,CAACF,IAAI,EAAEJ,MAAM,CAAC;EAE3E,IAAMe,IAAI,GAAGX,IAAI,CAACW,IAAI;EAEtB,IAAIA,IAAI,EAAE;IACRC,WAAW,CACTD,IAAI,EACJtC,MAAM,EACN1D,kBAAkB,EAClB2D,oBAAoB,EACpBC,aAAa,EACbtG,qBAAqB,EACrBkI,oBAAoB,EACpB/H,cACF,CAAC;EACH;EAEAkH,YAAY,CACVU,IAAI,CAACa,QAAQ,IAAI,EAAE,EACnBxC,MAAM,EACN1D,kBAAkB,EAClB2D,oBAAoB,EACpBC,aAAa,EACbtG,qBAAqB,EACrBkI,oBAAoB,EACpB/H,cACF,CAAC;AACH;AAiBA,SAASwI,WAAWA,CAClBD,IAA2B,EAC3BtC,MAAyC,EACzC1D,kBAA2B,EAC3B2D,oBAA6B,EAC7BC,aAA+C,EAI/C;EAAA,IAHAtG,qBAAqB,GAAAxF,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,KAAK;EAAA,IAC7BmN,MAAM,GAAAnN,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,IAAIoN,aAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAAA,IACtEzH,cAA6B,GAAA3F,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAA8M,SAAA;EAAA,IAAAuB,UAAA,GAAA9N,0BAAA,CAEL2N,IAAI,CAACI,UAAU;IAAAC,MAAA;EAAA;IAAA,IAAAC,KAAA,YAAAA,MAAA,EAAE;MAAA,IAA9BC,SAAS,GAAAF,MAAA,CAAAnN,KAAA;MAClB,IAAIsN,gBAAwD,GAAG,IAAI;MACnE,IAAIC,gBAAyC;MAC7C,IAAIF,SAAS,CAACtI,QAAQ,EAAE;QAAA,IAAAyI,iBAAA,EAAAC,qBAAA;QACtBH,gBAAgB,GAAG5C,aAAa,CAACxN,GAAG,CAACmQ,SAAS,CAACtI,QAAQ,CAAC2I,EAAE,CAAC;QAC3DH,gBAAgB,IAAAC,iBAAA,GAAGF,gBAAgB,cAAAE,iBAAA,wBAAAC,qBAAA,GAAhBD,iBAAA,CAAkB1H,eAAe,CAAC6H,IAAI,CACvD,UAAAC,KAAA;UAAA,IAAAC,mBAAA;UAAA,IAAE9H,kBAAkB,GAAA6H,KAAA,CAAlB7H,kBAAkB;UAAA,OAAMA,kBAAkB,OAAA8H,mBAAA,GAAKR,SAAS,CAACtI,QAAQ,cAAA8I,mBAAA,uBAAlBA,mBAAA,CAAoBH,EAAE;QAAA,CACzE,CAAC,cAAAD,qBAAA,uBAFkBA,qBAAA,CAEhBK,QAAQ;MACb,CAAC,MAAM,IAAIpD,aAAa,CAACzN,GAAG,CAAC,SAAS,CAAC,EAAE;QACvCqQ,gBAAgB,GAAG5C,aAAa,CAACxN,GAAG,CAAC,SAAS,CAAC;MACjD;MACA,IAAA6Q,aAAM,EAACT,gBAAgB,KAAK,IAAI,EAAE,qCAAqC,CAAC;MAGxE,IAAAS,aAAM,EACJV,SAAS,CAACW,IAAI,KAAKtC,SAAS,IAC1B2B,SAAS,CAACW,IAAI,KAAKC,QAAE,CAACC,SAAS,IAC/Bb,SAAS,CAACW,IAAI,KAAKC,QAAE,CAACE,cAAc,kCAAArC,MAAA,CACNuB,SAAS,CAACW,IAAI,CAChD,CAAC;MACD,IAAMtH,UAAU,GAAG2G,SAAS,CAAC3G,UAAU;MACvC,IAAI,CAAC4G,gBAAgB,EAAE;QAAA;MAEvB;MAEA,IAAMc,OAAO,GAAGC,gBAAgB,CAAChB,SAAS,CAAC;MAC3CC,gBAAgB,CAACzG,SAAS,GAAG,IAAAyH,mCAAsB,EACjDhB,gBAAgB,CAACzG,SAAS,EAC1B0H,oBAAoB,CAAC;QACnBC,QAAQ,EAAE9H,UAAU,CAAC+H,QAAQ,CAACzO,KAAK;QACnC8G,kBAAkB,EAAlBA,kBAAkB;QAClB2D,oBAAoB,EAApBA,oBAAoB;QACpB8B,UAAU,EAAER,MAAM;QAClBqC,OAAO,EAAPA,OAAO;QACPM,+BAA+B,EAAEC,wBAAwB;QACzDvK,qBAAqB,EAArBA;MACF,CAAC,CACH,CAAC;MACDkJ,gBAAgB,CAACpF,OAAO,GAAG,IAAAoG,mCAAsB,EAC/ChB,gBAAgB,CAACpF,OAAO,EACxBqG,oBAAoB,CAAC;QACnBC,QAAQ,EAAE9H,UAAU,CAACkI,MAAM,IAAIlI,UAAU,CAACkI,MAAM,CAAC5O,KAAK;QACtD8G,kBAAkB,EAAlBA,kBAAkB;QAClB2D,oBAAoB,EAApBA,oBAAoB;QACpB8B,UAAU,EAAER,MAAM;QAClBqC,OAAO,EAAPA,OAAO;QACPM,+BAA+B,EAAEG,sBAAsB;QACvDzK,qBAAqB,EAAE;MACzB,CAAC,CACH,CAAC;MACDkJ,gBAAgB,CAACjF,SAAS,GAAG,IAAAiG,mCAAsB,EACjDhB,gBAAgB,CAACjF,SAAS,EAC1ByG,gBAAgB,CAACpI,UAAU,CAACqI,UAAU,IAAIrI,UAAU,CAACqI,UAAU,CAAC/O,KAAK,EAAEoO,OAAO,CAChF,CAAC;MAEDd,gBAAgB,CAACnF,MAAM,GAAG,IAAAmG,mCAAsB,EAC9ChB,gBAAgB,CAACnF,MAAM,EACvB6G,aAAa,CAACtI,UAAU,CAACuI,OAAO,EAAEb,OAAO,CAC3C,CAAC;MAED,IAAIb,gBAAgB,EAAE;QACpBD,gBAAgB,CAAClF,SAAS,GAAG,IAAAkG,mCAAsB,EACjDhB,gBAAgB,CAAClF,SAAS,EAC1B8G,cAAc,CAAC3B,gBAAgB,EAAEa,OAAO,CAC1C,CAAC;MACH;MAEAd,gBAAgB,CAAC9B,oBAAoB,GAAG8B,gBAAgB,CAAC9B,oBAAoB,IAAI,EAAE;MACnF8B,gBAAgB,CAAC9B,oBAAoB,CAACjN,IAAI,CACxC4Q,eAAe,CAACC,WAAW,CAAC1I,UAAU,EAAE2G,SAAS,EAAE7C,MAAM,EAAEjG,cAAc,CAAC,EAAE6J,OAAO,CACrF,CAAC;IACH,CAAC;IAvED,KAAAnB,UAAA,CAAApN,CAAA,MAAAsN,MAAA,GAAAF,UAAA,CAAAnN,CAAA,IAAAC,IAAA;MAAA,IAAAsP,IAAA,GAAAjC,KAAA;MAAA,IAAAiC,IAAA,iBAsBI;IAAS;EAiDZ,SAAA9O,GAAA;IAAA0M,UAAA,CAAAhN,CAAA,CAAAM,GAAA;EAAA;IAAA0M,UAAA,CAAA9M,CAAA;EAAA;AACH;AAMA,SAASkO,gBAAgBA,CAAChB,SAAyC,EAAc;EAAA,IAAAiC,kBAAA;EAC/E,IAAIlB,OAA+B,IAAAkB,kBAAA,GAAGjC,SAAS,CAACe,OAAO,cAAAkB,kBAAA,uBAAjBA,kBAAA,CAAmBtP,KAAK;EAC9D,IAAI,CAACoO,OAAO,EAAE;IACZ,IAAMvH,SAAS,GAAGwG,SAAS,CAAC3G,UAAU,CAAC+H,QAAQ,CAACzO,KAAK;IACrD,OAAO,IAAAuP,uCAAwB,EAAC1I,SAAS,CAAChI,MAAM,GAAG4C,iBAAiB,CAAC;EACvE;EAEA,IAAI2M,OAAO,IAAIf,SAAS,CAACW,IAAI,KAAKC,QAAE,CAACE,cAAc,EAAE;IAMnD,IAAMqB,qBAAqB,GAAGpB,OAAO,CAACpN,WAAoC;IAC1E,IAAMyO,UAAU,GAAG,IAAID,qBAAqB,CAAC,CAACpB,OAAO,CAACvP,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAGtE,IAAI6Q,aAAa,GAAG,CAAC;IACrB,IAAIC,eAAe,GAAGvB,OAAO,CAACrN,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC0O,UAAU,CAAC5R,GAAG,CAAC8R,eAAe,EAAE,CAAC,CAAC;IAIlC,KAAK,IAAIhR,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;MAC3C+Q,aAAa,IAAI,CAAC;MAClBC,eAAe,GAAGvB,OAAO,CAACrN,KAAK,CAACpC,CAAC,EAAEA,CAAC,GAAG,CAAC,CAAC;MACzC,IAAIA,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACf8Q,UAAU,CAAC5R,GAAG,CAAC8R,eAAe,EAAED,aAAa,CAAC;MAChD,CAAC,MAAM;QAELD,UAAU,CAAC5R,GAAG,CAAC8R,eAAe,CAACC,OAAO,CAAC,CAAC,EAAEF,aAAa,CAAC;MAC1D;IACF;IACAtB,OAAO,GAAGqB,UAAU;EACtB;EACA,OAAOrB,OAAO;AAChB;AAcA,SAASG,oBAAoBA,CAACsB,IAQ7B,EAAgB;EACf,IAAOrB,QAAQ,GAA8CqB,IAAI,CAA1DrB,QAAQ;IAAEJ,OAAO,GAAqCyB,IAAI,CAAhDzB,OAAO;IAAEM,+BAA+B,GAAImB,IAAI,CAAvCnB,+BAA+B;EACzD,IAAMoB,WAAW,GAAG,IAAItG,YAAY,CAAC4E,OAAO,CAACvP,MAAM,GAAG4C,iBAAiB,CAAC;EACxE,IAAI,CAAC+M,QAAQ,EAAE;IACb,OAAOsB,WAAW;EACpB;EACA,KAAK,IAAInR,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;IACvC,IAAMoR,UAAU,GAAG3B,OAAO,CAACzP,CAAC,CAAC,GAAG8C,iBAAiB;IACjD,IAAMyF,MAAM,GAAGsH,QAAQ,CAACrH,QAAQ,CAAC4I,UAAU,EAAEA,UAAU,GAAGtO,iBAAiB,CAAC;IAC5E,IAAIuO,YAAY,GAAG,IAAI9N,aAAO,CAACzC,KAAK,CAACyB,IAAI,CAACgG,MAAM,CAAC,CAAC;IAElD8I,YAAY,GAAGtB,+BAA+B,CAACsB,YAAY,EAAEH,IAAI,CAAC;IAElEC,WAAW,CAACnR,CAAC,GAAG8C,iBAAiB,CAAC,GAAGuO,YAAY,CAACC,CAAC;IACnDH,WAAW,CAACnR,CAAC,GAAG8C,iBAAiB,GAAG,CAAC,CAAC,GAAGuO,YAAY,CAACE,CAAC;IACvDJ,WAAW,CAACnR,CAAC,GAAG8C,iBAAiB,GAAG,CAAC,CAAC,GAAGuO,YAAY,CAACG,CAAC;EACzD;EACA,OAAOL,WAAW;AACpB;AAYA,SAASnB,wBAAwBA,CAACqB,YAAY,EAAEI,UAAU,EAAY;EACpE,IAAO3F,oBAAoB,GAA2D2F,UAAU,CAAzF3F,oBAAoB;IAAE3D,kBAAkB,GAAuCsJ,UAAU,CAAnEtJ,kBAAkB;IAAEyF,UAAU,GAA2B6D,UAAU,CAA/C7D,UAAU;IAAEnI,qBAAqB,GAAIgM,UAAU,CAAnChM,qBAAqB;EAElF,IAAImI,UAAU,EAAE;IACdyD,YAAY,GAAGA,YAAY,CAACK,SAAS,CAAC9D,UAAU,CAAC;EACnD;EAEAyD,YAAY,GAAGA,YAAY,CAACK,SAAS,CAAC5F,oBAAoB,CAAC;EAE3D,IAAIrG,qBAAqB,EAAE;IACzB,OAAO4L,YAAY;EACrB;EAEA5I,qBAAS,CAACC,KAAK,CAACC,uBAAuB,CACrC,CAAC0I,YAAY,CAAC,CAAC,CAAC,EAAEA,YAAY,CAAC,CAAC,CAAC,EAAEA,YAAY,CAAC,CAAC,CAAC,CAAC,EACnDA,YACF,CAAC;EACDA,YAAY,GAAGA,YAAY,CAACxI,QAAQ,CAACV,kBAAkB,CAAC;EACxD,OAAOkJ,YAAY;AACrB;AAUA,SAASnB,sBAAsBA,CAACmB,YAAY,EAAEI,UAAU,EAAY;EAClE,IAAO3F,oBAAoB,GAAgB2F,UAAU,CAA9C3F,oBAAoB;IAAE8B,UAAU,GAAI6D,UAAU,CAAxB7D,UAAU;EAEvC,IAAIA,UAAU,EAAE;IACdyD,YAAY,GAAGA,YAAY,CAACM,iBAAiB,CAAC/D,UAAU,CAAC;EAC3D;EAEAyD,YAAY,GAAGA,YAAY,CAACM,iBAAiB,CAAC7F,oBAAoB,CAAC;EACnE,OAAOuF,YAAY;AACrB;AAQA,SAASlB,gBAAgBA,CAACzG,SAAqB,EAAE+F,OAAmB,EAAgB;EAClF,IAAMmC,YAAY,GAAG,IAAI/G,YAAY,CAAC4E,OAAO,CAACvP,MAAM,GAAG6C,oBAAoB,CAAC;EAC5E,IAAI,CAAC2G,SAAS,EAAE;IAGdkI,YAAY,CAACC,IAAI,CAAC,CAAC,CAAC;IACpB,OAAOD,YAAY;EACrB;EACA,KAAK,IAAI5R,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;IACvC,IAAMoR,UAAU,GAAG3B,OAAO,CAACzP,CAAC,CAAC,GAAG+C,oBAAoB;IACpD,IAAM+O,QAAQ,GAAGpI,SAAS,CAAClB,QAAQ,CAAC4I,UAAU,EAAEA,UAAU,GAAGrO,oBAAoB,CAAC;IAClF6O,YAAY,CAAC5R,CAAC,GAAG+C,oBAAoB,CAAC,GAAG+O,QAAQ,CAAC,CAAC,CAAC;IACpDF,YAAY,CAAC5R,CAAC,GAAG+C,oBAAoB,GAAG,CAAC,CAAC,GAAG+O,QAAQ,CAAC,CAAC,CAAC;EAC1D;EACA,OAAOF,YAAY;AACrB;AAQA,SAASvB,aAAaA,CACpB0B,eAA0C,EAC1CtC,OAAmB,EACP;EACZ,IAAMuC,UAAU,GAAG,CAAAD,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEC,UAAU,KAAIhP,wBAAwB;EAC1E,IAAMiP,SAAS,GAAG,IAAIzH,UAAU,CAACiF,OAAO,CAACvP,MAAM,GAAG8R,UAAU,CAAC;EAC7D,IAAI,CAACD,eAAe,EAAE;IAEpBE,SAAS,CAACJ,IAAI,CAAC,GAAG,CAAC;IACnB,OAAOI,SAAS;EAClB;EACA,IAAMzI,MAAM,GAAGuI,eAAe,CAAC1Q,KAAK;EACpC,KAAK,IAAIrB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;IACvC,IAAMkS,UAAU,GAAGzC,OAAO,CAACzP,CAAC,CAAC,GAAGgS,UAAU;IAC1C,IAAMG,KAAK,GAAG3I,MAAM,CAAChB,QAAQ,CAAC0J,UAAU,EAAEA,UAAU,GAAGF,UAAU,CAAC;IAClE,IAAMI,UAAU,GAAG,IAAI5H,UAAU,CAACwH,UAAU,CAAC;IAC7C,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,CAACjS,MAAM,EAAEmS,CAAC,EAAE,EAAE;MACrCD,UAAU,CAACC,CAAC,CAAC,GAAGF,KAAK,CAACE,CAAC,CAAC,GAAG,GAAG;IAChC;IACAJ,SAAS,CAAC/S,GAAG,CAACkT,UAAU,EAAEpS,CAAC,GAAGgS,UAAU,CAAC;EAC3C;EACA,OAAOC,SAAS;AAClB;AAQA,SAAS1B,cAAcA,CAAC3B,gBAA6B,EAAEa,OAAmB,EAAe;EACvF,IAAM3J,MAAM,GAAG,IAAI8G,WAAW,CAAC6C,OAAO,CAACvP,MAAM,GAAG,CAAC,CAAC;EAClD,KAAK,IAAIF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8F,MAAM,CAAC5F,MAAM,EAAEF,CAAC,IAAI,CAAC,EAAE;IACzC8F,MAAM,CAAC5G,GAAG,CAAC0P,gBAAgB,EAAE5O,CAAC,CAAC;EACjC;EACA,OAAO8F,MAAM;AACf;AAQA,SAAS0K,eAAeA,CAAC8B,UAAuB,EAAE7C,OAAmB,EAAY;EAC/E,IAAI,CAAC6C,UAAU,CAACpS,MAAM,IAAI,CAACuP,OAAO,CAACvP,MAAM,EAAE;IACzC,OAAO,EAAE;EACX;EACA,IAAMqS,WAAqB,GAAG,EAAE;EAChC,KAAK,IAAIvS,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;IACvC,IAAMoR,UAAU,GAAG3B,OAAO,CAACzP,CAAC,CAAC;IAC7BuS,WAAW,CAAC3S,IAAI,CAAC0S,UAAU,CAAClB,UAAU,CAAC,CAAC;EAC1C;EACA,OAAOmB,WAAW;AACpB;AAUA,SAAS9B,WAAWA,CAClB1I,UAEC,EACD2G,SAAyC,EACzC7C,MAAyC,EACzCjG,cAA6B,EAChB;EACb,IAAM4M,QAAqB,GAAG,IAAAC,4CAAwB,EACpD1K,UAAU,EACV2G,SAAS,EACT7C,MAAM,EACNjG,cACF,CAAC;EAED,IAAI4M,QAAQ,CAACtS,MAAM,EAAE;IACnB,OAAOsS,QAAQ;EACjB;EAEA,KAAK,IAAIlK,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGjF,mCAAmC,CAACnD,MAAM,EAAEoI,KAAK,EAAE,EAAE;IAC/E,IAAMoK,4BAA4B,GAAGrP,mCAAmC,CAACiF,KAAK,CAAC;IAC/E,IACEP,UAAU,CAAC2K,4BAA4B,CAAC,IACxC3K,UAAU,CAAC2K,4BAA4B,CAAC,CAACrR,KAAK,EAC9C;MACA,OAAO0G,UAAU,CAAC2K,4BAA4B,CAAC,CAACrR,KAAK;IACvD;EACF;EAEA,OAAO,EAAE;AACX;AAAC,SAScsF,gBAAgBA,CAAA;EAAA,OAAAgM,iBAAA,CAAA9S,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAA0S,kBAAA;EAAAA,iBAAA,OAAApO,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAA/B,SAAAmO,SAAA;IAAA,IAAAC,eAAA;MAAAzN,oBAAA;MAAAyB,SAAA;MAAAiM,WAAA;MAAAC,OAAA;MAAAC,cAAA;MAAAC,MAAA,GAAAhT,SAAA;IAAA,OAAAuE,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAA2M,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAzM,IAAA,GAAAyM,SAAA,CAAArR,IAAA;QAAA;UACE+Q,eAA4C,GAAAI,MAAA,CAAA/S,MAAA,QAAA+S,MAAA,QAAAlG,SAAA,GAAAkG,MAAA,MAAG,EAAE;UACjD7N,oBAA6B,GAAA6N,MAAA,CAAA/S,MAAA,OAAA+S,MAAA,MAAAlG,SAAA;UAEzBlG,SAAmC,GAAG,EAAE;UAAAiM,WAAA,GAAAtS,0BAAA,CACfqS,eAAe;UAAA;YAA5C,KAAAC,WAAA,CAAA5R,CAAA,MAAA6R,OAAA,GAAAD,WAAA,CAAA3R,CAAA,IAAAC,IAAA,GAA8C;cAAnC4R,cAAc,GAAAD,OAAA,CAAA1R,KAAA;cACvBwF,SAAS,CAACjH,IAAI,CAACwT,eAAe,CAACJ,cAAc,CAAC,CAAC;YACjD;UAAC,SAAApR,GAAA;YAAAkR,WAAA,CAAAxR,CAAA,CAAAM,GAAA;UAAA;YAAAkR,WAAA,CAAAtR,CAAA;UAAA;UAAA,KAEG4D,oBAAoB;YAAA+N,SAAA,CAAArR,IAAA;YAAA;UAAA;UAAAqR,SAAA,CAAArR,IAAA;UAAA,OACJuR,iBAAiB,CAACxM,SAAS,CAAC;QAAA;UAA9CA,SAAS,GAAAsM,SAAA,CAAArM,IAAA;QAAA;UAAA,OAAAqM,SAAA,CAAA9L,MAAA,WAGJR,SAAS;QAAA;QAAA;UAAA,OAAAsM,SAAA,CAAAxL,IAAA;MAAA;IAAA,GAAAiL,QAAA;EAAA,CACjB;EAAA,OAAAD,iBAAA,CAAA9S,KAAA,OAAAI,SAAA;AAAA;AAAA,SAOcoT,iBAAiBA,CAAAC,IAAA;EAAA,OAAAC,kBAAA,CAAA1T,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAsT,mBAAA;EAAAA,kBAAA,OAAAhP,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAhC,SAAA+O,SACE3M,SAAmC;IAAA,IAAAf,MAAA,EAAA2N,WAAA,EAAAC,aAAA,EAAA1T,CAAA,EAAAoG,QAAA,EAAAuN,qBAAA,EAAAC,sBAAA,EAAAC,QAAA,EAAAC,SAAA,EAAAC,QAAA,EAAAC,WAAA,EAAAC,OAAA,EAAAC,gBAAA,EAAAC,IAAA,EAAAC,WAAA,EAAAC,OAAA,EAAA/L,KAAA;IAAA,OAAA9D,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAA+N,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA7N,IAAA,GAAA6N,SAAA,CAAAzS,IAAA;QAAA;UAE7BgE,MAAgC,GAAG,EAAE;QAAA;UAAA,MACpCe,SAAS,CAAC3G,MAAM,GAAG,CAAC;YAAAqU,SAAA,CAAAzS,IAAA;YAAA;UAAA;UACrB2R,WAAW,GAAG5M,SAAS,CAAC2N,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;UACrCd,aAAuB,GAAG,EAAE;UACzB1T,CAAC,GAAG,CAAC;QAAA;UAAA,MAAEA,CAAC,GAAG6G,SAAS,CAAC3G,MAAM;YAAAqU,SAAA,CAAAzS,IAAA;YAAA;UAAA;UAC5BsE,QAAQ,GAAGS,SAAS,CAAC7G,CAAC,CAAC;UAAA,MAE1ByT,WAAW,CAACpN,OAAO,IAAID,QAAQ,CAACC,OAAO,IACvC,CAACoN,WAAW,CAACpN,OAAO,IAAI,CAACD,QAAQ,CAACC,OAAQ;YAAAkO,SAAA,CAAAzS,IAAA;YAAA;UAAA;UAAAyS,SAAA,CAAAzS,IAAA;UAAA,OAEvB2S,cAAc,CAAChB,WAAW,EAAErN,QAAQ,CAAC;QAAA;UAAzDqN,WAAW,GAAAc,SAAA,CAAAzN,IAAA;UACX4M,aAAa,CAAC9T,IAAI,CAACI,CAAC,CAAC;QAAC;UAPYA,CAAC,EAAE;UAAAuU,SAAA,CAAAzS,IAAA;UAAA;QAAA;UAUzC,IAAI2R,WAAW,CAACpN,OAAO,IAAIqN,aAAa,CAACxT,MAAM,EAAE;YACzC2T,QAAQ,IAAAF,qBAAA,GAAGF,WAAW,CAACtM,eAAe,cAAAwM,qBAAA,uBAA3BA,qBAAA,CAA6B1G,MAAM,CAClD,UAACyH,KAAK,EAAAC,KAAA;cAAA,IAAGC,WAAW,GAAAD,KAAA,CAAXC,WAAW;cAAA,OAAMF,KAAK,IAAI,CAAAE,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEC,KAAK,KAAI,CAAC,CAAC;YAAA,GAC3D,CACF,CAAC;YACKf,SAAS,IAAAF,sBAAA,GAAGH,WAAW,CAACtM,eAAe,cAAAyM,sBAAA,uBAA3BA,sBAAA,CAA6B3G,MAAM,CACnD,UAACyH,KAAK,EAAAI,KAAA;cAAA,IAAGF,WAAW,GAAAE,KAAA,CAAXF,WAAW;cAAA,OAAMG,IAAI,CAACC,GAAG,CAACN,KAAK,EAAE,CAAAE,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEK,MAAM,KAAI,CAAC,CAAC;YAAA,GACnE,CACF,CAAC;YACGlB,QAAQ,GAAG,CAAC,CAAC;YAAAC,WAAA,GAAAxT,0BAAA,CACciT,WAAW,CAACtM,eAAe;YAAA;cAA1D,KAAA6M,WAAA,CAAA9S,CAAA,MAAA+S,OAAA,GAAAD,WAAA,CAAA7S,CAAA,IAAAC,IAAA,GAA4D;gBAAjD8S,gBAAgB,GAAAD,OAAA,CAAA5S,KAAA;gBACzB,IAAI6S,gBAAgB,CAACU,WAAW,EAAE;kBAC1BT,IAAI,GACRJ,QAAQ,GACR,CAAC,GACAG,gBAAgB,CAACU,WAAW,CAACC,KAAK,GAAGhB,QAAQ,GAAAkB,IAAA,CAAAG,GAAA,CAC5C,CAAC,EAAKtI,WAAW,CAACuI,iBAAiB,GAAG,CAAC,CAAC,GAC1C,CAAC;kBACHjB,gBAAgB,CAAC/E,QAAQ,GAAG,IAAIvC,WAAW,CAAC,CAC1CmH,QAAQ,GAAG,CAAC,EACZ,CAAC,EACDI,IAAI,EACHD,gBAAgB,CAACU,WAAW,CAACK,MAAM,GAAGnB,SAAS,GAAAiB,IAAA,CAAAG,GAAA,CAC9C,CAAC,EAAKtI,WAAW,CAACuI,iBAAiB,GAAG,CAAC,CAAC,GACxC,CAAC,CACJ,CAAC;kBACFpB,QAAQ,GAAGI,IAAI;gBACjB;cACF;YAAC,SAAAvS,GAAA;cAAAoS,WAAA,CAAA1S,CAAA,CAAAM,GAAA;YAAA;cAAAoS,WAAA,CAAAxS,CAAA;YAAA;YAEDiS,WAAW,CAACpN,OAAO,CAAC+O,KAAK,CAACP,KAAK,GAAGhB,QAAQ;YAC1CJ,WAAW,CAACpN,OAAO,CAAC+O,KAAK,CAACH,MAAM,GAAGnB,SAAS;UAC9C;UAACM,WAAA,GAAA5T,0BAAA,CACmBkT,aAAa,CAACzC,OAAO,CAAC,CAAC;UAAA;YAA3C,KAAAmD,WAAA,CAAAlT,CAAA,MAAAmT,OAAA,GAAAD,WAAA,CAAAjT,CAAA,IAAAC,IAAA,GAA6C;cAAlCkH,KAAK,GAAA+L,OAAA,CAAAhT,KAAA;cACdwF,SAAS,CAAC2N,MAAM,CAAClM,KAAK,EAAE,CAAC,CAAC;YAC5B;UAAC,SAAA1G,GAAA;YAAAwS,WAAA,CAAA9S,CAAA,CAAAM,GAAA;UAAA;YAAAwS,WAAA,CAAA5S,CAAA;UAAA;UACDsE,MAAM,CAAClG,IAAI,CAAC6T,WAAW,CAAC;UAACc,SAAA,CAAAzS,IAAA;UAAA;QAAA;UAG3B,IAAI,CAACgE,MAAM,CAAC5F,MAAM,EAAE;YAClB4F,MAAM,CAAClG,IAAI,CAAC;cACVwG,QAAQ,EAAEiP,kBAAkB,CAAC,CAAC;cAC9BlO,eAAe,EAAE,CAAC;gBAACC,kBAAkB,EAAE;cAAS,CAAC;YACnD,CAAC,CAAC;UACJ;UAAC,OAAAmN,SAAA,CAAAlN,MAAA,WACMvB,MAAM;QAAA;QAAA;UAAA,OAAAyO,SAAA,CAAA5M,IAAA;MAAA;IAAA,GAAA6L,QAAA;EAAA,CACd;EAAA,OAAAD,kBAAA,CAAA1T,KAAA,OAAAI,SAAA;AAAA;AAAA,SAQcwU,cAAcA,CAAAa,IAAA,EAAAC,IAAA;EAAA,OAAAC,eAAA,CAAA3V,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAuV,gBAAA;EAAAA,eAAA,OAAAjR,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAA7B,SAAAgR,SACEC,SAAiC,EACjCC,SAAiC;IAAA,IAAAC,kBAAA,EAAAC,kBAAA;IAAA,IAAAC,OAAA,EAAAC,OAAA,EAAAC,aAAA,EAAAC,UAAA,EAAAC,SAAA;IAAA,OAAA1R,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAA4P,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA1P,IAAA,GAAA0P,SAAA,CAAAtU,IAAA;QAAA;UAAA,MAG/B,CAAA8T,kBAAA,GAAAF,SAAS,CAACrP,OAAO,cAAAuP,kBAAA,eAAjBA,kBAAA,CAAmBS,UAAU,KAAAR,kBAAA,GAC7BF,SAAS,CAACtP,OAAO,cAAAwP,kBAAA,eAAjBA,kBAAA,CAAmBQ,UAAU,IAC7BX,SAAS,CAACvO,eAAe,IACzBwO,SAAS,CAACxO,eAAe;YAAAiP,SAAA,CAAAtU,IAAA;YAAA;UAAA;UAEnBgU,OAAO,GAAGQ,MAAM,CAAC/T,IAAI,CAACmT,SAAS,CAACrP,OAAO,CAACgQ,UAAU,CAACE,IAAI,CAAC;UACxDR,OAAO,GAAGO,MAAM,CAAC/T,IAAI,CAACoT,SAAS,CAACtP,OAAO,CAACgQ,UAAU,CAACE,IAAI,CAAC;UAAAH,SAAA,CAAA1P,IAAA;UAAA0P,SAAA,CAAAtU,IAAA;UAAA,OAAA0U,OAAA,CAAAC,OAAA,GAAAC,IAAA;YAAA,OAAA1Y,uBAAA,CAAArB,OAAA,CAG1B,aAAa;UAAA;QAAA;UAAAqZ,aAAA,GAAAI,SAAA,CAAAtP,IAAA;UAAxCmP,UAAU,GAAAD,aAAA,CAAVC,UAAU;UAAAG,SAAA,CAAAtU,IAAA;UAAA,OACOmU,UAAU,CAAC,CAACH,OAAO,EAAEC,OAAO,CAAC,EAAE;YAACY,SAAS,EAAE;UAAY,CAAC,CAAC;QAAA;UAA3ET,SAAS,GAAAE,SAAA,CAAAtP,IAAA;UAAAsP,SAAA,CAAAtU,IAAA;UAAA,OAC2BoU,SAAS,CAChDU,QAAQ,CAAClB,SAAS,CAACrP,OAAO,CAACwQ,QAAQ,KAAK,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC,CACrEC,QAAQ,CAAC,CAAC;QAAA;UAFbpB,SAAS,CAACrP,OAAO,CAACgQ,UAAU,CAACE,IAAI,GAAAH,SAAA,CAAAtP,IAAA;UAAAsP,SAAA,CAAAtU,IAAA;UAAA;QAAA;UAAAsU,SAAA,CAAA1P,IAAA;UAAA0P,SAAA,CAAA9O,EAAA,GAAA8O,SAAA;UAIjCW,OAAO,CAACC,GAAG,CACT,qLACF,CAAC;UAAC,MAAAZ,SAAA,CAAA9O,EAAA;QAAA;UAIJoO,SAAS,CAACtP,QAAQ,CAAC6Q,oBAAoB,CAACC,gBAAgB,CAACC,sBAAsB,GAAG,CAAC;QAAC;UAEtFzB,SAAS,CAACvO,eAAe,GAAGuO,SAAS,CAACvO,eAAe,CAACgG,MAAM,CAACwI,SAAS,CAACxO,eAAe,CAAC;UAAC,OAAAiP,SAAA,CAAA/O,MAAA,WACjFqO,SAAS;QAAA;QAAA;UAAA,OAAAU,SAAA,CAAAzO,IAAA;MAAA;IAAA,GAAA8N,QAAA;EAAA,CACjB;EAAA,OAAAD,eAAA,CAAA3V,KAAA,OAAAI,SAAA;AAAA;AAOD,SAASmT,eAAeA,CAACJ,cAAyC,EAA0B;EAAA,IAAAoE,qBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EAC1F,IAAMnR,QAA+B,GAAG;IACtCoR,WAAW,EAAExE,cAAc,CAACwE,WAAW;IACvCC,cAAc,GAAAL,qBAAA,GAAEpE,cAAc,CAACyE,cAAc,cAAAL,qBAAA,uBAA7BA,qBAAA,CAA+BM,GAAG,CAAC,UAACC,CAAC;MAAA,OAAK5C,IAAI,CAAC6C,KAAK,CAACD,CAAC,GAAG,GAAG,CAAC;IAAA,EAI5E;IAGDE,SAAS,EAAEC,gBAAgB,CAAC9E,cAAc,CAAC6E,SAAS,CAAC;IACrDZ,oBAAoB,EAAE;MACpBc,eAAe,EACb,CAAA/E,cAAc,aAAdA,cAAc,wBAAAqE,qBAAA,GAAdrE,cAAc,CAAEiE,oBAAoB,cAAAI,qBAAA,uBAApCA,qBAAA,CAAsCU,eAAe,KAAInV,wBAAwB;MACnFoV,cAAc,EACZ,CAAAhF,cAAc,aAAdA,cAAc,wBAAAsE,sBAAA,GAAdtE,cAAc,CAAEiE,oBAAoB,cAAAK,sBAAA,uBAApCA,sBAAA,CAAsCU,cAAc,KAAInV;IAC5D;EACF,CAAC;EAED,IAAIwD,OAAO;EACX,IAAI2M,cAAc,aAAdA,cAAc,gBAAAuE,sBAAA,GAAdvE,cAAc,CAAEiE,oBAAoB,cAAAM,sBAAA,eAApCA,sBAAA,CAAsCL,gBAAgB,EAAE;IAC1D7Q,OAAO,GAAG2M,cAAc,CAACiE,oBAAoB,CAACC,gBAAgB,CAAC7Q,OAAO,CAAClG,MAAM;IAC7EiG,QAAQ,CAAC6Q,oBAAoB,CAACC,gBAAgB,GAAG;MAC/CC,sBAAsB,EAAE;IAC1B,CAAC;EACH,CAAC,MAAM,IAAInE,cAAc,CAACiF,eAAe,EAAE;IACzC5R,OAAO,GAAG2M,cAAc,CAACiF,eAAe,CAAC5R,OAAO,CAAClG,MAAM;IAEvDiG,QAAQ,CAAC6Q,oBAAoB,CAACC,gBAAgB,GAAG;MAC/CC,sBAAsB,EAAE;IAC1B,CAAC;EACH;EAEAnE,cAAc,CAACjE,EAAE,GAAGmJ,MAAM,CAACC,QAAQ,CAACnF,cAAc,CAACjE,EAAE,CAAC,GAAGiE,cAAc,CAACjE,EAAE,GAAG,IAAAqJ,QAAM,EAAC,CAAC;EACrF,IAAIjR,eAAiC,GAAG,CAAC;IAACC,kBAAkB,EAAE4L,cAAc,CAACjE;EAAE,CAAC,CAAC;EACjF,IAAI,CAAC1I,OAAO,EAAE;IAAA,IAAAgS,sBAAA;IAGZ,IAAMC,eAAe,GAAGtF,cAAc,aAAdA,cAAc,wBAAAqF,sBAAA,GAAdrF,cAAc,CAAEiE,oBAAoB,cAAAoB,sBAAA,uBAApCA,sBAAA,CAAsCC,eAAe;IAC7ElS,QAAQ,CAAC6Q,oBAAoB,CAACqB,eAAe,GACzCA,eAAe,IAAIA,eAAe,CAACZ,GAAG,CAAC,UAACC,CAAC;MAAA,OAAK5C,IAAI,CAAC6C,KAAK,CAACD,CAAC,GAAG,GAAG,CAAC;IAAA,EAAC,IAK9D5K,SAAS;EACnB,CAAC,MAAM;IACL5F,eAAe,CAAC,CAAC,CAAC,CAACyN,WAAW,GAAG;MAACC,KAAK,EAAExO,OAAO,CAAC+O,KAAK,CAACP,KAAK;MAAEI,MAAM,EAAE5O,OAAO,CAAC+O,KAAK,CAACH;IAAM,CAAC;EAC7F;EAEA,OAAO;IAAC7O,QAAQ,EAARA,QAAQ;IAAEC,OAAO,EAAPA,OAAO;IAAEc,eAAe,EAAfA;EAAe,CAAC;AAC7C;AAOA,SAAS2Q,gBAAgBA,CACvBS,aAAoD,EACvB;EAC7B,QAAQA,aAAa;IACnB,KAAK,QAAQ;MACX,OAAO,QAAQ;IACjB,KAAK,MAAM;MACT,OAAO,MAAM;IACf,KAAK,OAAO;MACV,OAAO,OAAO;IAChB;MACE,OAAO,QAAQ;EACnB;AACF;AAMA,SAASlD,kBAAkBA,CAAA,EAA0B;EACnD,OAAO;IACLwC,SAAS,EAAE,QAAQ;IACnBZ,oBAAoB,EAAE;MACpBe,cAAc,EAAE,CAAC;MACjBD,eAAe,EAAE;IACnB;EACF,CAAC;AACH;AASA,SAAS5M,kBAAkBA,CACzBqN,aAA0C,EAC1ClS,MAAc,EACS;EACvB,IAAMmS,YAAmC,GAAG,CAAC,CAAC;EAE9C,IAAI,CAACD,aAAa,IAAI,CAACA,aAAa,CAACtY,MAAM,EAAE;IAC3C,OAAOuY,YAAY;EACrB;EAEAA,YAAY,CAACC,uBAAuB,GAAG,EAAE;EAAC,IAAAC,UAAA,GAAAnY,0BAAA,CACfgY,aAAa;IAAAI,MAAA;EAAA;IAAxC,KAAAD,UAAA,CAAAzX,CAAA,MAAA0X,MAAA,GAAAD,UAAA,CAAAxX,CAAA,IAAAC,IAAA,GAA0C;MAAA,IAA/ByX,YAAY,GAAAD,MAAA,CAAAvX,KAAA;MACrB,IAAAyX,qBAAA,GAAwDC,uCAAuC,CAC7FF,YAAY,EACZvS,MACF,CAAC;QAHM0S,sBAAsB,GAAAF,qBAAA,CAAtBE,sBAAsB;QAAEC,qBAAqB,GAAAH,qBAAA,CAArBG,qBAAqB;MAIpDR,YAAY,CAACC,uBAAuB,CAAC9Y,IAAI,CAACoZ,sBAAsB,CAAC;MACjE,IAAIC,qBAAqB,EAAE;QACzBR,YAAY,CAACS,sBAAsB,GAAGT,YAAY,CAACS,sBAAsB,IAAI,EAAE;QAC/ET,YAAY,CAACS,sBAAsB,CAACtZ,IAAI,CAACqZ,qBAAqB,CAAC;MACjE;IACF;EAAC,SAAArX,GAAA;IAAA+W,UAAA,CAAArX,CAAA,CAAAM,GAAA;EAAA;IAAA+W,UAAA,CAAAnX,CAAA;EAAA;EACD,OAAOiX,YAAY;AACrB;AAQA,SAASM,uCAAuCA,CAC9CF,YAAuC,EACvCvS,MAAc,EAId;EAAA,IAAA6S,qBAAA;EACA,IAAM9S,OAAO,GACX,CAAAwS,YAAY,aAAZA,YAAY,wBAAAM,qBAAA,GAAZN,YAAY,CAAE5B,oBAAoB,cAAAkC,qBAAA,uBAAlCA,qBAAA,CAAoCjC,gBAAgB,KAAI2B,YAAY,CAACZ,eAAe;EACtF,IAAIgB,qBAAmD,GAAG,IAAI;EAC9D,IAAI5S,OAAO,EAAE;IACX4S,qBAAqB,GAAGG,iCAAiC,CAAC/S,OAAO,CAACA,OAAO,EAAEC,MAAM,CAAC;EACpF;EACA,IAAA+S,KAAA,GAA0C,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5B,oBAAoB,KAAI,CAAC,CAAC;IAA3EqB,eAAe,GAAAe,KAAA,CAAff,eAAe;IAAEN,cAAc,GAAAqB,KAAA,CAAdrB,cAAc;EACtC,IAAIsB,WAAW,GAAGhB,eAAe;EAEjC,IAAI,CAAC,CAACA,eAAe,IAAIA,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,KAAKO,YAAY,CAACpB,cAAc,EAAE;IACjF6B,WAAW,GAAGT,YAAY,CAACpB,cAAc;IACzC6B,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;EACtC;EAEA,OAAO;IACLN,sBAAsB,EAAEO,kCAAkC,CACxDD,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC3BtB,cACF,CAAC;IACDiB,qBAAqB,EAArBA;EACF,CAAC;AACH;AAiBA,SAASM,kCAAkCA,CACzCjB,eAAyB,EAED;EAAA,IADxBN,cAAsB,GAAA/X,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,CAAC;EAE1B,IAAMuZ,2BAA2B,GAAG,IAAI,GAAG,GAAG;EAE9C,IAAMC,KAAK,GAAG,IAAIC,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACrC,IAAMC,UAAU,GAAG,IAAID,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAC1C,IAAME,kBAAkB,GAAG,IAAIF,aAAO,CACpCF,2BAA2B,EAC3BA,2BAA2B,EAC3BA,2BAA2B,EAC3B,CACF,CAAC;EACD,IAAMK,eAAe,GAAG,IAAIH,aAAO,CAACpB,eAAe,CAAC;EAGpD,IAAMwB,YAAY,GAAGH,UAAU,CAAC9Q,QAAQ,CAAC+Q,kBAAkB,CAAC,CAACG,QAAQ,CAACF,eAAe,CAAC;EACtF,IAAMG,OAAO,GAAGF,YAAY,CAACG,IAAI,CAACH,YAAY,EAAEL,KAAK,EAAEzB,cAAc,CAAC;EACtE4B,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC;EACzB,IAAMM,QAAQ,GAAGN,kBAAkB,CAACK,IAAI,CAACL,kBAAkB,EAAEC,eAAe,EAAE7B,cAAc,CAAC;EAC7F,OAAO;IACLmC,MAAM,EAAE;MAENH,OAAO,EAAEA,OAAO,CAACI,OAAO,CAAC,CAAC;MAE1BF,QAAQ,EAAEA,QAAQ,CAACE,OAAO,CAAC,CAAC;MAC5BC,UAAU,EAAE;IACd;EACF,CAAC;AACH;AAQA,SAASjB,iCAAiCA,CACxC/S,OAAiC,EACjCC,MAAc,EACS;EAAA,IAAAgU,eAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA;EACvB,OAAO;IACLC,QAAQ,EAAErU,OAAO,aAAPA,OAAO,gBAAAiU,eAAA,GAAPjU,OAAO,CAAElG,MAAM,cAAAma,eAAA,eAAfA,eAAA,CAAiBzD,QAAQ,GAAG,CAACxQ,OAAO,CAAClG,MAAM,CAAC0W,QAAQ,CAAC,GAAG9J,SAAS;IAC3ElB,MAAM,EAAE,CACN;MAGEkD,EAAE,EAAE4L,eAAe,CAACtU,OAAO,EAAEC,MAAM,CAAC;MACpCsU,IAAI,GAAAL,gBAAA,GAAElU,OAAO,CAAClG,MAAM,cAAAoa,gBAAA,uBAAdA,gBAAA,CAAgBnF,KAAK,CAACP,KAAK;MACjC3U,MAAM,EAAE,CAAAsa,gBAAA,GAAAnU,OAAO,CAAClG,MAAM,cAAAqa,gBAAA,eAAdA,gBAAA,CAAgBpF,KAAK,CAACmB,IAAI,CAACrW,MAAM,GAAG,EAAAua,gBAAA,GAACpU,OAAO,CAAClG,MAAM,cAAAsa,gBAAA,uBAAdA,gBAAA,CAAgBrF,KAAK,CAACmB,IAAI,CAACrW,MAAM,CAAC,GAAG6M;IACpF,CAAC;EAEL,CAAC;AACH;AASA,SAAS4N,eAAeA,CAACtU,OAAiC,EAAEC,MAAc,EAAE;EAAA,IAAAuU,gBAAA;EAC1E,IAAAC,KAAA,GAAwB,EAAAD,gBAAA,GAAAxU,OAAO,CAAClG,MAAM,cAAA0a,gBAAA,uBAAdA,gBAAA,CAAgBzF,KAAK,KAAI,CAAC,CAAC;IAA5CP,KAAK,GAAAiG,KAAA,CAALjG,KAAK;IAAEI,MAAM,GAAA6F,KAAA,CAAN7F,MAAM;EACpB,IAAI,CAACJ,KAAK,IAAI,CAACI,MAAM,EAAE;IACrB,OAAO,EAAE;EACX;EACA,IAAM8F,mBAAmB,GAAG,CAAC;EAC7B,IAAMC,YAAY,GAAG,CAAC;EACtB,IAAMC,qBAAqB,GAAG3U,MAAM,GAAG,CAAC;EAExC,IAAM4U,UAAU,GAAG,EAAE,GAAGD,qBAAqB,CAAC9Y,QAAQ,CAAC,CAAC,CAAC,CAACjC,MAAM;EAChE,IAAMib,SAAS,GAAG,GAAG,CAACC,MAAM,CAACF,UAAU,CAAC,CAAC/N,MAAM,CAAC8N,qBAAqB,CAAC9Y,QAAQ,CAAC,CAAC,CAAC,CAAC;EAElF,IAAMkZ,0BAA0B,GAAGN,mBAAmB,IAAI,EAAE;EAC5D,IAAMO,mBAAmB,GAAGN,YAAY,IAAI,EAAE;EAC9C,IAAMO,YAAY,GAAI1G,KAAK,GAAG,CAAC,IAAK,EAAE;EACtC,IAAM2G,aAAa,GAAIvG,MAAM,GAAG,CAAC,IAAK,CAAC;EAEvC,IAAMwG,QAAQ,GAAGJ,0BAA0B,GAAGC,mBAAmB,GAAGC,YAAY,GAAGC,aAAa;EAChG,IAAME,OAAO,GAAGC,MAAM,MAAAxO,MAAA,CAAMsO,QAAQ,CAACtZ,QAAQ,CAAC,CAAC,CAAC,EAAAgL,MAAA,CAAGgO,SAAS,CAAE,CAAC;EAC/D,OAAOO,OAAO,CAACvZ,QAAQ,CAAC,CAAC;AAC3B;AAUA,SAASiI,oBAAoBA,CAC3Bd,UAAoB,EACpBe,cAAwB,EACxBrF,iBAA2B,EAC3B4W,UAAgC,EAChC;EACA,IAAMC,UAAU,GAAGC,qBAAqB,CAACxS,UAAU,EAAEsS,UAAU,EAAE5W,iBAAiB,CAAC;EACnF+W,sBAAsB,CAAC1R,cAAc,EAAEwR,UAAU,CAAC;EAClDE,sBAAsB,CAACzS,UAAU,EAAEuS,UAAU,CAAC;AAChD;AASA,SAASC,qBAAqBA,CAC5BxS,UAAiB,EACjBsS,UAAkB,EAClB5W,iBAAwB,EACH;EACrB,IAAMgX,UAA+B,GAAG,CAAC,CAAC;EAE1C,KAAK,IAAI1T,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGgB,UAAU,CAACpJ,MAAM,EAAEoI,KAAK,EAAE,EAAE;IACtD,IAAM2T,YAAY,GAAG3S,UAAU,CAAChB,KAAK,CAAC;IACtC,IAAM4T,eAAe,GAAGC,0BAA0B,CAAC7T,KAAK,EAAEsT,UAAU,EAAE5W,iBAAiB,CAAC;IACxFgX,UAAU,CAACC,YAAY,CAAC9Z,QAAQ,CAAC,CAAC,CAAC,GAAG+Z,eAAe;EACvD;EAEA,OAAOF,UAAU;AACnB;AAQA,SAASI,mCAAmCA,CAACR,UAAkB,EAAEtT,KAAa,EAAU;EACtF,IAAI+T,GAAG,GAAG,EAAE;EACZ,KAAK,IAAMxd,IAAG,IAAI+c,UAAU,EAAE;IAC5BS,GAAG,IAAIT,UAAU,CAAC/c,IAAG,CAAC,CAACyJ,KAAK,CAAC;EAC/B;EACA,OAAO+T,GAAG;AACZ;AASA,SAASF,0BAA0BA,CACjC7T,KAAa,EACbsT,UAAkB,EAClB5W,iBAAwB,EAChB;EACR,IAAMsX,aAAa,GAAGF,mCAAmC,CAACR,UAAU,EAAEtT,KAAK,CAAC;EAC5E,IAAMiU,IAAI,GAAG,IAAAC,WAAG,EAACF,aAAa,CAAC;EAE/B,IAAItX,iBAAiB,CAACyX,QAAQ,CAACF,IAAI,CAAC,EAAE;IACpC,OAAOvX,iBAAiB,CAAC0X,OAAO,CAACH,IAAI,CAAC;EACxC;EACA,OAAOvX,iBAAiB,CAACpF,IAAI,CAAC2c,IAAI,CAAC,GAAG,CAAC;AACzC;AAQA,SAASR,sBAAsBA,CAACY,YAAmB,EAAEX,UAA8B,EAAE;EACnF,KAAK,IAAI1T,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGqU,YAAY,CAACzc,MAAM,EAAEoI,KAAK,EAAE,EAAE;IACxDqU,YAAY,CAACrU,KAAK,CAAC,GAAG0T,UAAU,CAACW,YAAY,CAACrU,KAAK,CAAC,CAAC;EACvD;AACF;AASA,SAASwC,sCAAsCA,CAC7CxB,UAAoB,EACpBvE,aAA+B,EAC/BE,oBAA4C,EACrC;EACP,IAAM2X,gBAA+B,GAAG,EAAE;EAE1C,IAAMC,wBAAwB,GAAG,IAAAC,wCAAqB,EAACxT,UAAU,EAAEvE,aAAa,CAAC;EACjF,IAAMgY,UAAU,GAAGF,wBAAwB,GACvC,IAAAG,mDAAgC,EAAC1T,UAAU,EAAEvE,aAAa,CAAC,GAC3DA,aAAa;EAEjB,IAAMkY,0BAA0B,GAAAnd,aAAA;IAC9Bod,QAAQ,EAAE5T;EAAU,GACjByT,UAAU,CACd;EAED,KAAK,IAAMI,YAAY,IAAIF,0BAA0B,EAAE;IACrD,IAAMG,IAAI,GAAGC,gBAAgB,CAACF,YAAY,EAAElY,oBAAoB,CAAC;IACjE,IAAImY,IAAI,EAAE;MACR,IAAM/b,KAAK,GAAG4b,0BAA0B,CAACE,YAAY,CAAC;MACtD,IAAMG,eAAe,GAAGC,uBAAuB,CAACH,IAAI,EAAE/b,KAAK,CAAC;MAE5Dub,gBAAgB,CAAChd,IAAI,CAAC0d,eAAe,CAAC;IACxC;EACF;EAEA,OAAOV,gBAAgB;AACzB;AAOA,SAASW,uBAAuBA,CAACH,IAAY,EAAE/b,KAAU,EAAe;EACtE,IAAIic,eAA4B;EAEhC,QAAQF,IAAI;IACV,KAAKha,cAAc;IACnB,KAAKF,cAAc;MACjBoa,eAAe,GAAGE,mCAAmC,CAACnc,KAAK,CAAC;MAC5D;IACF,KAAK8B,WAAW;MACdma,eAAe,GAAGG,6BAA6B,CAACpc,KAAK,CAAC;MACtD;IACF,KAAK4B,WAAW;MACdqa,eAAe,GAAGI,6BAA6B,CAACrc,KAAK,CAAC;MACtD;IACF;MACEic,eAAe,GAAGI,6BAA6B,CAACrc,KAAK,CAAC;EAC1D;EAEA,OAAOic,eAAe;AACxB;AAQA,SAASD,gBAAgBA,CAACxe,GAAW,EAAEoG,oBAA2B,EAAU;EAC1E,IAAM0Y,SAAS,GAAG1Y,oBAAoB,CAAC+J,IAAI,CAAC,UAAC4O,IAAI;IAAA,OAAKA,IAAI,CAACtb,IAAI,KAAKzD,GAAG;EAAA,EAAC;EACxE,IAAI,CAAC8e,SAAS,EAAE;IACd5G,OAAO,CAAC8G,KAAK,2BAAA1Q,MAAA,CACetO,GAAG,6BAAAsO,MAAA,CAA0B2Q,IAAI,CAACC,SAAS,CACnE9Y,oBAAoB,EACpB,IAAI,EACJ,CACF,CAAC,CACH,CAAC;IACD,OAAO,EAAE;EACX;EACA,IAAI,CAAC0Y,SAAS,CAACK,eAAe,EAAE;IAC9BjH,OAAO,CAAC8G,KAAK,uCAAA1Q,MAAA,CAAuCwQ,SAAS,CAAE,CAAC;IAChE,OAAO,EAAE;EACX;EACA,OAAOA,SAAS,CAACK,eAAe,CAACC,SAAS;AAC5C;AAOA,SAAST,mCAAmCA,CAAClU,UAAiB,EAAe;EAC3E,IAAM4U,KAAK,GAAG,IAAI5T,WAAW,CAAC,CAAChB,UAAU,CAACpJ,MAAM,CAAC,CAAC;EAClD,IAAMie,WAAW,GAAG,IAAI7T,WAAW,CAAChB,UAAU,CAAC;EAC/C,OAAO,IAAAmB,oCAAuB,EAACyT,KAAK,CAACxT,MAAM,EAAEyT,WAAW,CAACzT,MAAM,CAAC;AAClE;AAOA,SAAS+S,6BAA6BA,CAACnU,UAAiB,EAAe;EACrE,IAAM4U,KAAK,GAAG,IAAI5T,WAAW,CAAC,CAAChB,UAAU,CAACpJ,MAAM,CAAC,CAAC;EAClD,IAAMke,OAAO,GAAG,IAAI5T,UAAU,CAAC,CAAC,CAAC;EACjC,IAAM2T,WAAW,GAAG,IAAIE,YAAY,CAAC/U,UAAU,CAAC;EAEhD,OAAO,IAAAmB,oCAAuB,EAACyT,KAAK,CAACxT,MAAM,EAAE0T,OAAO,CAAC1T,MAAM,EAAEyT,WAAW,CAACzT,MAAM,CAAC;AAClF;AAOA,SAASgT,6BAA6BA,CAACY,eAAsB,EAAe;EAC1E,IAAMC,gBAAgB,GAAG,IAAIjU,WAAW,CAAC,CAACgU,eAAe,CAACpe,MAAM,CAAC,CAAC;EAClE,IAAIse,kBAAkB,GAAG,CAAC;EAC1B,IAAMC,gBAAgB,GAAG,IAAInU,WAAW,CAACgU,eAAe,CAACpe,MAAM,CAAC;EAChE,IAAMwe,iBAAgC,GAAG,EAAE;EAE3C,KAAK,IAAIpW,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGgW,eAAe,CAACpe,MAAM,EAAEoI,KAAK,EAAE,EAAE;IAC3D,IAAMqW,aAAa,MAAAxR,MAAA,CAAMyR,MAAM,CAACN,eAAe,CAAChW,KAAK,CAAC,CAAC,OAAI;IAC3D,IAAMuW,mBAAmB,GAAGvI,MAAM,CAAC/T,IAAI,CAACoc,aAAa,CAAC;IACtD,IAAMG,iBAAiB,GAAGD,mBAAmB,CAAC3e,MAAM;IACpDse,kBAAkB,IAAIM,iBAAiB;IACvCL,gBAAgB,CAACnW,KAAK,CAAC,GAAGwW,iBAAiB;IAC3CJ,iBAAiB,CAAC9e,IAAI,CAACif,mBAAmB,CAAC;EAC7C;EAEA,IAAME,UAAU,GAAG,IAAIzU,WAAW,CAAC,CAACkU,kBAAkB,CAAC,CAAC;EAExD,OAAO/T,oCAAuB,CAAA5K,KAAA,UAC5B0e,gBAAgB,CAAC7T,MAAM,EACvBqU,UAAU,CAACrU,MAAM,EACjB+T,gBAAgB,CAAC/T,MAAM,EAAAyC,MAAA,CACpBuR,iBAAiB,CACtB,CAAC;AACH;AAOA,SAASnU,sBAAsBA,CAACjB,UAAiB,EAAkB;EACjE,IAAMO,eAAe,GAAG,IAAImV,cAAc,CAAC1V,UAAU,CAACpJ,MAAM,CAAC;EAC7D,KAAK,IAAIoI,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGgB,UAAU,CAACpJ,MAAM,EAAEoI,KAAK,EAAE,EAAE;IACtDuB,eAAe,CAACvB,KAAK,CAAC,GAAGqT,MAAM,CAACrS,UAAU,CAAChB,KAAK,CAAC,CAAC;EACpD;EACA,OAAOuB,eAAe;AACxB;AAAC,SAUce,0BAA0BA,CAAAqU,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;EAAA,OAAAC,2BAAA,CAAAxf,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAof,4BAAA;EAAAA,2BAAA,OAAA9a,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAzC,SAAA6a,SACEnW,WAAmB,EACnBhD,mBAAwC,EACxC4B,UAA+B,EAC/BzC,SAAiC;IAAA,IAAA4C,SAAA,EAAAqB,OAAA,EAAAG,SAAA,EAAAF,MAAA,EAAAC,SAAA,EAAAH,UAAA,EAAAD,SAAA,EAAAoG,OAAA,EAAAnH,KAAA,EAAA+B,cAAA,EAAAkV,YAAA,EAAAC,oBAAA,EAAAC,kBAAA;IAAA,OAAAjb,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAAmZ,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAjZ,IAAA,GAAAiZ,SAAA,CAAA7d,IAAA;QAAA;UAE1BoG,SAAS,GAAkEH,UAAU,CAArFG,SAAS,EAAEqB,OAAO,GAAyDxB,UAAU,CAA1EwB,OAAO,EAAEG,SAAS,GAA8C3B,UAAU,CAAjE2B,SAAS,EAAEF,MAAM,GAAsCzB,UAAU,CAAtDyB,MAAM,EAAEC,SAAS,GAA2B1B,UAAU,CAA9C0B,SAAS,EAAEH,UAAU,GAAevB,UAAU,CAAnCuB,UAAU,EAAED,SAAS,GAAItB,UAAU,CAAvBsB,SAAS;UACxEoG,OAAO,GAAG,IAAInF,WAAW,CAACnB,WAAW,CAAC;UAE5C,KAASb,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGmH,OAAO,CAACvP,MAAM,EAAEoI,KAAK,EAAE,EAAE;YACnDmH,OAAO,CAACvQ,GAAG,CAAC,CAACoJ,KAAK,CAAC,EAAEA,KAAK,CAAC;UAC7B;UAEM+B,cAAc,GAAG,IAAIC,WAAW,CACpCnE,mBAAmB,CAACkE,cAAc,CAACnK,MAAM,GAAGiG,mBAAmB,CAACkE,cAAc,GAAGlB,WACnF,CAAC;UAEKoW,YAAY,GAAGK,6BAA6B,CAACvV,cAAc,EAAEhB,SAAS,CAAC;UAEvEmW,oBAOL,GAAG;YACFtX,SAAS,EAATA,SAAS;YACTqB,OAAO,EAAPA,OAAO;YACPC,MAAM,EAANA,MAAM;YACN,eAAe,EAAE+V;UACnB,CAAC;UAED,IAAI7V,SAAS,CAACxJ,MAAM,EAAE;YACpBsf,oBAAoB,CAAC9V,SAAS,GAAGA,SAAS;UAC5C;UAEM+V,kBAAkB,GAAG;YACzB,eAAe,EAAE;cACf,oBAAoB,EAAE,eAAe;cACrC,iBAAiB,EAAE,IAAII,UAAU,CAACvW,UAAU;YAC9C;UACF,CAAC;UAED,IAAIG,SAAS,CAACvJ,MAAM,EAAE;YACpBsf,oBAAoB,CAAC,WAAW,CAAC,GAAG/V,SAAS;YAC7CgW,kBAAkB,CAAC,WAAW,CAAC,GAAG;cAChC,oBAAoB,EAAE;YACxB,CAAC;UACH;UAAC,OAAAE,SAAA,CAAAtY,MAAA,WAEM,IAAAyY,aAAM,EAAC;YAAC/X,UAAU,EAAEyX,oBAAoB;YAAE/P,OAAO,EAAPA;UAAO,CAAC,EAAEsQ,wBAAiB,EAAAjgB,aAAA,CAAAA,aAAA,KACvEigB,wBAAiB,CAACC,OAAO,WAAA3f,gBAAA,CAAAjC,OAAA;YAC5B6hB,YAAY,EAAE,IAAI;YAClBC,YAAY,EAAE,IAAI;YAClBC,OAAO,EAAE7a,SAAS;YAClB8a,iBAAiB,EAAE,IAAI;YACvBlb,KAAK,EAAE;cACLmb,MAAM,EAAE,0BAA0B;cAClCZ,kBAAkB,EAAlBA;YACF;UAAC,GACA,cAAc,EAAG;YAEhBa,SAAS,EAAE;UACb,CAAC,EACF,CAAC;QAAA;QAAA;UAAA,OAAAX,SAAA,CAAAhY,IAAA;MAAA;IAAA,GAAA2X,QAAA;EAAA,CACH;EAAA,OAAAD,2BAAA,CAAAxf,KAAA,OAAAI,SAAA;AAAA;AAQD,SAAS2f,6BAA6BA,CACpCL,YAAyB,EACzBlW,SAAsB,EACT;EACb,IAAMkX,qBAAqB,GAAG,IAAIjW,WAAW,CAACiV,YAAY,CAACrf,MAAM,CAAC;EAClE,IAAIsgB,SAAS,GAAG,CAAC;EACjB,IAAIC,UAAU,GAAG,CAAC;EAElB,KAAK,IAAInY,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGe,SAAS,CAACnJ,MAAM,EAAEoI,KAAK,IAAI,CAAC,EAAE;IACxD,IAAMoY,QAAQ,GAAG,CAACrX,SAAS,CAACf,KAAK,CAAC,GAAG,CAAC,IAAIxF,iBAAiB;IAE3Dyd,qBAAqB,CAAC1O,IAAI,CAAC2O,SAAS,EAAEC,UAAU,EAAEC,QAAQ,CAAC;IAE3DF,SAAS,EAAE;IACXC,UAAU,GAAGC,QAAQ,GAAG,CAAC;EAC3B;EAEA,OAAOH,qBAAqB;AAC9B;AASO,SAASI,gBAAgBA,CAC9Bhc,WAAsC,EACtCY,aAAsB,EACG;EACzB,IAAI,CAACZ,WAAW,EAAE;IAChB,OAAO,IAAI;EACb;EACA,IAAII,aAAsC;EAC1C,IAAMoF,cAAc,GAAGxF,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEwF,cAAc;EAElD,IAAIA,cAAc,EAAE;IAClB,OAAOA,cAAc;EACvB;EAEA,IAAAyW,qBAAA,GAAmCC,yBAAyB,CAAClc,WAAW,CAAC;IAAlEmc,aAAa,GAAAF,qBAAA,CAAbE,aAAa;IAAEC,SAAS,GAAAH,qBAAA,CAATG,SAAS;EAE/B,QAAQD,aAAa;IACnB,KAAKE,uBAAiB;MAAE;QACtBjc,aAAa,GAAGkc,mCAAmC,CACjDF,SAAS,EACTxb,aACF,CAAC;QACD,OAAOR,aAAa;MACtB;IACA,KAAKmc,6BAAuB;MAAE;QAC5Bnc,aAAa,GAAGoc,yCAAyC,CACvDJ,SAAS,EACTxb,aACF,CAAC;QACD,OAAOR,aAAa;MACtB;IACA,KAAKqc,0BAAoB;MAAE;QACzBrc,aAAa,GAAGsc,sCAAsC,CACpDN,SAAS,EACTxb,aACF,CAAC;QACD,OAAOR,aAAa;MACtB;IACA;MACE,OAAO,IAAI;EACf;AACF;AAMA,SAAS8b,yBAAyBA,CAAClc,WAA+B,EAQhE;EAAA,IAAA2c,iBAAA,EAAAC,kBAAA,EAAAC,qBAAA,EAAAC,kBAAA;EACA,IAAMC,4BAA4B,GAAG,CACnCN,0BAAoB,EACpBF,6BAAuB,EACvBF,uBAAiB,CAClB;EACD,IAAMW,cAAc,GAAGhd,WAAW,aAAXA,WAAW,wBAAA2c,iBAAA,GAAX3c,WAAW,CAAEiC,IAAI,cAAA0a,iBAAA,uBAAjBA,iBAAA,CAAmBK,cAAc;EAExD,IAAI,CAACA,cAAc,EAAE;IACnB,OAAO;MAACb,aAAa,EAAE,IAAI;MAAEC,SAAS,EAAE;IAAI,CAAC;EAC/C;EAEA,IAAID,aAAqB,GAAG,EAAE;EAAC,IAAAc,UAAA,GAAAphB,0BAAA,CACH,CAAAmE,WAAW,aAAXA,WAAW,wBAAA8c,kBAAA,GAAX9c,WAAW,CAAEiC,IAAI,cAAA6a,kBAAA,uBAAjBA,kBAAA,CAAmBE,cAAc,KAAI,EAAE;IAAAE,MAAA;EAAA;IAAnE,KAAAD,UAAA,CAAA1gB,CAAA,MAAA2gB,MAAA,GAAAD,UAAA,CAAAzgB,CAAA,IAAAC,IAAA,GAAqE;MAAA,IAA1D0gB,aAAa,GAAAD,MAAA,CAAAxgB,KAAA;MACtB,IAAIqgB,4BAA4B,CAACjF,QAAQ,CAACqF,aAAa,CAAC,EAAE;QACxDhB,aAAa,GAAGgB,aAAa;QAC7B;MACF;IACF;EAAC,SAAAlgB,GAAA;IAAAggB,UAAA,CAAAtgB,CAAA,CAAAM,GAAA;EAAA;IAAAggB,UAAA,CAAApgB,CAAA;EAAA;EAED,IAAI,CAACsf,aAAa,EAAE;IAClB,OAAO;MAACA,aAAa,EAAE,IAAI;MAAEC,SAAS,EAAE;IAAI,CAAC;EAC/C;EAEA,IAAMA,SAAS,GAAGpc,WAAW,aAAXA,WAAW,wBAAA4c,kBAAA,GAAX5c,WAAW,CAAEiC,IAAI,cAAA2a,kBAAA,wBAAAC,qBAAA,GAAjBD,kBAAA,CAAmBQ,UAAU,cAAAP,qBAAA,uBAA7BA,qBAAA,CAAgCV,aAAa,CAE7B;EAElC,OAAO;IAACA,aAAa,EAAbA,aAAa;IAAEC,SAAS,EAATA;EAAS,CAAC;AACnC;AAQA,SAASM,sCAAsCA,CAC7CN,SAAyC,EACzCxb,aAAsB,EACG;EACzB,IAAIwb,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEiB,aAAa,EAAE;IAAA,IAAAC,YAAA;IAO5B,IAAMC,qBAAqB,IAAAD,YAAA,GAAGvjB,MAAM,CAACY,IAAI,CAACyhB,SAAS,CAACiB,aAAa,CAAC,cAAAC,YAAA,uBAApCA,YAAA,CAAuC,CAAC,CAAC;IAEvE,IAAIC,qBAAqB,EAAE;MACzB,IAAMC,YAAY,GAAGpB,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEiB,aAAa,CAACE,qBAAqB,CAAC;MACpE,IAAMnd,aAAa,GAAG,CAAC,CAAC;MAExB,KAAK,IAAMoY,YAAY,IAAIgF,YAAY,CAACpF,UAAU,EAAE;QAClDhY,aAAa,CAACoY,YAAY,CAAC,GAAGgF,YAAY,CAACpF,UAAU,CAACI,YAAY,CAAC,CAAC5G,IAAI;MAC1E;MAEA,OAAOxR,aAAa;IACtB;EACF;EAEA,IAAIgc,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEqB,eAAe,EAAE;IAC9B,IAAIxc,cAAkC;IACtC,KAAK,IAAMyc,UAAU,IAAItB,SAAS,CAACqB,eAAe,EAAE;MAClD,IAAM/b,OAAO,GAAG0a,SAAS,CAACqB,eAAe,CAACC,UAAU,CAAC;MACrD,IAAIhc,OAAO,CAACic,KAAK,KAAK/c,aAAa,EAAE;QACnCK,cAAc,GAAGyc,UAAU;MAC7B;IACF;IAEA,IAAI,OAAOzc,cAAc,KAAK,QAAQ,EAAE;MACtC,IAAMuc,aAAY,GAAGpB,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEqB,eAAe,CAACxc,cAAc,CAAC;MAC/D,IAAMb,cAAa,GAAG,CAAC,CAAC;MAExB,KAAK,IAAMoY,aAAY,IAAIgF,aAAY,CAACpF,UAAU,EAAE;QAClDhY,cAAa,CAACoY,aAAY,CAAC,GAAGgF,aAAY,CAACpF,UAAU,CAACI,aAAY,CAAC,CAAC5G,IAAI;MAC1E;MAEA,OAAOxR,cAAa;IACtB;EACF;EAEAgS,OAAO,CAACwL,IAAI,CACV,wIACF,CAAC;EACD,OAAO,IAAI;AACb;AAQA,SAASpB,yCAAyCA,CAChDJ,SAAuC,EACvCxb,aAAsB,EACG;EACzB,IAAIwb,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEyB,cAAc,EAAE;IAO7B,IAAMC,kBAAkB,GAAG1B,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEyB,cAAc,CAAC,CAAC,CAAC;IACvD,IAAME,qBAAqB,GAAG,CAAC,CAAC;IAEhC,KAAK,IAAMvF,YAAY,IAAIsF,kBAAkB,CAAC1F,UAAU,EAAE;MACxD2F,qBAAqB,CAACvF,YAAY,CAAC,GAAGsF,kBAAkB,CAAC1F,UAAU,CAACI,YAAY,CAAC,CAAC5G,IAAI;IACxF;IAEA,OAAOmM,qBAAqB;EAC9B;EAEA,IAAI3B,SAAS,aAATA,SAAS,eAATA,SAAS,CAAE4B,gBAAgB,EAAE;IAO/B,IAAI5B,SAAS,aAATA,SAAS,eAATA,SAAS,CAAE4B,gBAAgB,EAAE;MAC/B,IAAMC,oBAAoB,GAAG7B,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE4B,gBAAgB,CAAC,CAAC,CAAC;MAC3D,IAAMD,sBAAqB,GAAG,CAAC,CAAC;MAEhC,KAAK,IAAMvF,cAAY,IAAIyF,oBAAoB,CAAC7F,UAAU,EAAE;QAC1D2F,sBAAqB,CAACvF,cAAY,CAAC,GAAGyF,oBAAoB,CAAC7F,UAAU,CAACI,cAAY,CAAC,CAAC5G,IAAI;MAC1F;MAEA,OAAOmM,sBAAqB;IAC9B;EACF;EAEA3L,OAAO,CAACwL,IAAI,CACV,6IACF,CAAC;EACD,OAAO,IAAI;AACb;AAQA,SAAStB,mCAAmCA,CAC1CF,SAAiC,EACjCxb,aAAsB,EACG;EACzB,IAAIwb,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEzX,UAAU,EAAE;IACzB,IAAMuZ,cAAc,GAAG9B,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEzX,UAAU,CAAC,CAAC,CAAC;IAC/C,IAAMoZ,qBAAqB,GAAG,CAAC,CAAC;IAGhC,IAAI,CAACG,cAAc,CAAC9d,aAAa,EAAE;MACjCgS,OAAO,CAACwL,IAAI,CACV,uHACF,CAAC;IACH;IAEA,OAAOG,qBAAqB;EAC9B;EAEA3L,OAAO,CAACwL,IAAI,CACV,yGACF,CAAC;EACD,OAAO,IAAI;AACb"}
1
+ {"version":3,"file":"geometry-converter.js","names":["_core","require","_geospatial","_draco","_core2","_loaderUtils","_md","_interopRequireDefault","_uuid","_geometryAttributes","_coordinateConverter","_gltfAttributes","_batchIdsExtensions","_featureAttributes","_math","_geometryUtils","_gltf","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","step","next","_e2","return","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","arr","len","arr2","DEFAULT_ROUGHNESS_FACTOR","DEFAULT_METALLIC_FACTOR","VALUES_PER_VERTEX","VALUES_PER_TEX_COORD","VALUES_PER_COLOR_ELEMENT","STRING_TYPE","SHORT_INT_TYPE","DOUBLE_TYPE","OBJECT_ID_TYPE","BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES","scratchVector","Vector3","convertB3dmToI3sGeometry","_x","_x2","_x3","_x4","_x5","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_x13","_convertB3dmToI3sGeometry","_asyncToGenerator2","_regenerator","mark","_callee","tileContent","tileTransform","tileBoundingVolume","addNodeToNodePage","propertyTable","featuresHashArray","attributeStorageInfo","draco","generateBoundingVolumes","shouldMergeMaterials","geoidHeightModel","libraries","metadataClass","_tileContent$gltf4","useCartesianPositions","materialAndTextureList","dataForAttributesConversion","featureTexture","convertedAttributesMap","result","_iterator6","_step6","materialAndTexture","originarMaterialId","convertedAttributes","material","texture","nodeId","wrap","_callee$","_context","prev","convertMaterials","gltf","materials","sent","prepareDataForAttributesConversion","getTextureByMetadataClass","convertAttributes","_generateBoundingVolumesFromGeometry","mergedMaterials","originalMaterialId","abrupt","t0","_makeNodeResources","t1","t2","finish","stop","_iterator","values","_step","attributes","boundingVolumes","createBoundingVolumesFromGeometry","positions","cartographicOrigin","obb","center","index","vertex","subarray","Ellipsoid","WGS84","cartesianToCartographic","getHeight","subtract","_x14","_makeNodeResources2","_callee2","_ref","_tileContent$gltf5","vertexCount","_generateAttributes","faceRange","featureIds","normals","colors","uvRegions","texCoords","featureCount","featureIdsMap","header","typedFeatureIds","fileBuffer","compressedGeometry","_callee2$","_context2","generateAttributes","makeFeatureIdsUnique","featureIndices","Uint32Array","generateBigUint64Array","Uint8Array","concatenateArrayBuffers","buffer","ArrayBuffer","generateCompressedGeometry","Float32Array","convertPropertyTableToAttributeBuffers","geometry","hasUvRegions","Boolean","sharedResources","getSharedResources","meshMaterial","_x15","_x16","_x17","_x18","_convertAttributes","_callee3","attributesData","nodes","images","cartesianModelMatrix","attributesMap","_iterator7","_step7","_iterator9","_step9","mergedMaterial","_iterator8","_step8","attrKey","_attributes","_callee3$","_context3","Map","Uint16Array","featureIndicesGroups","convertNodes","undefined","delete","reduce","acc","concat","matrix","Matrix4","_iterator2","_step2","node","convertNode","getCompositeTransformationMatrix","transformationMatrix","nodeMatrix","rotation","scale","translation","multiplyRight","translate","rotateXYZ","mesh","convertMesh","children","_iterator3","primitives","_step3","_loop","primitive","outputAttributes","materialUvRegion","_outputAttributes","_outputAttributes$mer","id","find","_ref2","_primitive$material","uvRegion","assert","mode","GL","TRIANGLES","TRIANGLE_STRIP","indices","normalizeIndices","concatenateTypedArrays","transformVertexArray","vertices","POSITION","attributeSpecificTransformation","transformVertexPositions","NORMAL","transformVertexNormals","flattenTexCoords","TEXCOORD_0","flattenColors","COLOR_0","createUvRegion","flattenBatchIds","getBatchIds","_ret","_primitive$indices","generateSyntheticIndices","TypedArrayConstructor","newIndices","triangleIndex","currentTriangle","reverse","args","newVertices","coordIndex","vertexVector","x","y","z","calleeArgs","transform","transformAsVector","newTexCoords","fill","texCoord","colorsAttribute","components","newColors","colorIndex","color","colorUint8","j","batchedIds","newBatchIds","batchIds","handleBatchIdsExtensions","possibleBatchIdAttributeName","_convertMaterials","_callee4","sourceMaterials","_iterator10","_step10","sourceMaterial","_args4","_callee4$","_context4","convertMaterial","mergeAllMaterials","_x19","_mergeAllMaterials","_callee5","newMaterial","mergedIndices","_newMaterial$mergedMa","_newMaterial$mergedMa2","newWidth","newHeight","currentX","_iterator11","_step11","aTextureMetadata","newX","_iterator12","_step12","_callee5$","_context5","splice","mergeMaterials","accum","_ref5","textureSize","width","_ref6","Math","max","height","pow","BYTES_PER_ELEMENT","image","getDefaultMaterial","_x20","_x21","_mergeMaterials","_callee6","material1","material2","_material1$texture","_material2$texture","buffer1","buffer2","_yield$import","joinImages","sharpData","_callee6$","_context6","bufferView","Buffer","data","Promise","resolve","then","direction","toFormat","mimeType","toBuffer","console","log","pbrMetallicRoughness","baseColorTexture","textureSetDefinitionId","_sourceMaterial$emiss","_sourceMaterial$pbrMe","_sourceMaterial$pbrMe2","_sourceMaterial$pbrMe3","doubleSided","emissiveFactor","map","c","round","alphaMode","convertAlphaMode","roughnessFactor","metallicFactor","emissiveTexture","Number","isFinite","uuidv4","_sourceMaterial$pbrMe4","baseColorFactor","gltfAlphaMode","gltfMaterials","i3sResources","materialDefinitionInfos","_iterator4","_step4","gltfMaterial","_convertGLTFMaterialT","convertGLTFMaterialToI3sSharedResources","materialDefinitionInfo","textureDefinitionInfo","textureDefinitionInfos","_gltfMaterial$pbrMeta","extractSharedResourcesTextureInfo","_ref3","colorFactor","extractSharedResourcesMaterialInfo","matDielectricColorComponent","black","Vector4","unitVector","dielectricSpecular","baseColorVector","firstOperand","multiply","diffuse","lerp","specular","params","toArray","renderMode","_texture$source","_texture$source2","_texture$source3","_texture$source4","encoding","generateImageId","size","_texture$source5","_ref4","levelCountOfTexture","indexOfLevel","indexOfTextureInStore","zerosCount","rightHalf","repeat","shiftedLevelCountOfTexture","shiftedIndexOfLevel","shiftedWidth","shiftedHeight","leftHalf","imageId","BigInt","batchTable","replaceMap","getFeaturesReplaceMap","replaceIndicesByUnique","featureMap","oldFeatureId","uniqueFeatureId","getOrCreateUniqueFeatureId","generateStringFromBatchTableByIndex","str","batchTableStr","hash","md5","includes","indexOf","indicesArray","attributeBuffers","needFlattenPropertyTable","checkPropertiesLength","properties","flattenPropertyTableByFeatureIds","propertyTableWithObjectIds","OBJECTID","propertyName","type","getAttributeType","attributeBuffer","generateAttributeBuffer","generateShortIntegerAttributeBuffer","generateDoubleAttributeBuffer","generateStringAttributeBuffer","attribute","attr","error","JSON","stringify","attributeValues","valueType","count","valuesArray","padding","Float64Array","batchAttributes","stringCountArray","totalNumberOfBytes","stringSizesArray","stringBufferArray","currentString","String","currentStringBuffer","currentStringSize","totalBytes","BigUint64Array","_x22","_x23","_x24","_x25","_generateCompressedGeometry","_callee7","featureIndex","compressedAttributes","attributesMetadata","_callee7$","_context7","generateFeatureIndexAttribute","Int32Array","encode","DracoWriterWorker","options","reuseWorkers","_nodeWorkers","modules","useLocalLibraries","method","workerUrl","orderedFeatureIndices","fillIndex","startIndex","endIndex","getPropertyTable","batchTableJson","_getPropertyTableExte","getPropertyTableExtension","extensionName","extension","EXT_MESH_FEATURES","getPropertyTableFromExtMeshFeatures","EXT_STRUCTURAL_METADATA","getPropertyTableFromExtStructuralMetadata","EXT_FEATURE_METADATA","getPropertyTableFromExtFeatureMetadata","_tileContent$gltf","_tileContent$gltf2","_tileContent$gltf2$ex","_tileContent$gltf3","extensionsWithPropertyTables","extensionsUsed","_iterator5","_step5","extensionItem","extensions","featureTables","_Object$keys","firstFeatureTableName","featureTable","featureTextures","textureKey","class","warn","propertyTables","firstPropertyTable","propertyTableWithData","propertyTextures","firstPropertyTexture","firstFeatureId"],"sources":["../../../../src/i3s-converter/helpers/geometry-converter.ts"],"sourcesContent":["import type {FeatureTableJson, Tiles3DTileContent} from '@loaders.gl/3d-tiles';\nimport type {\n GLTF_EXT_mesh_features,\n GLTF_EXT_structural_metadata,\n GLTFAccessorPostprocessed,\n GLTFMaterialPostprocessed,\n GLTFNodePostprocessed,\n GLTFMeshPrimitivePostprocessed,\n GLTFMeshPostprocessed,\n GLTFTexturePostprocessed,\n GLTF_EXT_feature_metadata_GLTF\n} from '@loaders.gl/gltf';\n\nimport {Vector3, Matrix4, Vector4} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\n\nimport {DracoWriterWorker} from '@loaders.gl/draco';\nimport {assert, encode} from '@loaders.gl/core';\nimport {concatenateArrayBuffers, concatenateTypedArrays} from '@loaders.gl/loader-utils';\nimport md5 from 'md5';\nimport {v4 as uuidv4} from 'uuid';\nimport {generateAttributes} from './geometry-attributes';\nimport {createBoundingVolumesFromGeometry} from './coordinate-converter';\nimport {\n ConvertedAttributes,\n I3SConvertedResources,\n I3SMaterialWithTexture,\n MergedMaterial,\n SharedResourcesArrays\n} from '../types';\nimport {\n AttributeStorageInfo,\n I3SMaterialDefinition,\n MaterialDefinitionInfo,\n TextureDefinitionInfo\n} from '@loaders.gl/i3s';\nimport {NumberArray, TypedArray} from '@loaders.gl/loader-utils';\nimport {Geoid} from '@math.gl/geoid';\nimport {prepareDataForAttributesConversion} from './gltf-attributes';\nimport {getTextureByMetadataClass, handleBatchIdsExtensions} from './batch-ids-extensions';\nimport {checkPropertiesLength, flattenPropertyTableByFeatureIds} from './feature-attributes';\nimport {GL} from '@loaders.gl/math';\n\n/*\n At the moment of writing the type TypedArrayConstructor is not exported in '@math.gl/types'.\n So the following import is replaced with the local import\n import type {TypedArrayConstructor} from '@math.gl/types'; \n*/\nimport type {GLTFAttributesData, TextureImageProperties, TypedArrayConstructor} from '../types';\nimport {generateSyntheticIndices} from '../../lib/utils/geometry-utils';\nimport {BoundingSphere, OrientedBoundingBox} from '@math.gl/culling';\n\nimport {EXT_MESH_FEATURES, EXT_FEATURE_METADATA, EXT_STRUCTURAL_METADATA} from '@loaders.gl/gltf';\n\n// Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.7/pbrMetallicRoughness.cmn.md\nconst DEFAULT_ROUGHNESS_FACTOR = 1;\nconst DEFAULT_METALLIC_FACTOR = 1;\n\nconst VALUES_PER_VERTEX = 3;\nconst VALUES_PER_TEX_COORD = 2;\nconst VALUES_PER_COLOR_ELEMENT = 4;\n\nconst STRING_TYPE = 'string';\nconst SHORT_INT_TYPE = 'Int32';\nconst DOUBLE_TYPE = 'Float64';\nconst OBJECT_ID_TYPE = 'Oid32';\n/*\n * 'CUSTOM_ATTRIBUTE_2' - Attribute name which includes batch info and used by New York map.\n * _BATCHID - Default attribute name which includes batch info.\n * BATCHID - Legacy attribute name which includes batch info.\n */\nconst BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES = ['CUSTOM_ATTRIBUTE_2', '_BATCHID', 'BATCHID'];\n\nlet scratchVector = new Vector3();\n\n/**\n * Convert binary data from b3dm file to i3s resources\n *\n * @param tileContent - 3d tile content\n * @param tileTransform - transformation matrix of the tile, calculated recursively multiplying\n * transform of all parent tiles and transform of the current tile\n * @param tileBoundingVolume - initialized bounding volume of the source tile\n * @param addNodeToNodePage - function to add new node to node pages\n * @param propertyTable - batch table (corresponding to feature attributes data)\n * @param featuresHashArray - hash array of features that is needed to not to mix up same features in parent and child nodes\n * @param attributeStorageInfo - attributes metadata from 3DSceneLayer json\n * @param draco - is converter should create draco compressed geometry\n * @param generateBoundingVolumes - is converter should create accurate bounding voulmes from geometry attributes\n * @param shouldMergeMaterials - Try to merge similar materials to be able to merge meshes into one node\n * @param geoidHeightModel - model to convert elevation from elipsoidal to geoid\n * @param libraries - dynamicaly loaded 3rd-party libraries\n * @param metadataClass `- user selected feature metadata class name`\n * @returns Array of node resources to create one or more i3s nodes\n */\nexport default async function convertB3dmToI3sGeometry(\n tileContent: Tiles3DTileContent,\n tileTransform: Matrix4,\n tileBoundingVolume: OrientedBoundingBox | BoundingSphere,\n addNodeToNodePage: () => Promise<number>,\n propertyTable: FeatureTableJson | null,\n featuresHashArray: string[],\n attributeStorageInfo: AttributeStorageInfo[] | undefined,\n draco: boolean,\n generateBoundingVolumes: boolean,\n shouldMergeMaterials: boolean,\n geoidHeightModel: Geoid,\n libraries: Record<string, string>,\n metadataClass?: string\n): Promise<I3SConvertedResources[] | null> {\n const useCartesianPositions = generateBoundingVolumes;\n const materialAndTextureList: I3SMaterialWithTexture[] = await convertMaterials(\n tileContent.gltf?.materials,\n shouldMergeMaterials\n );\n\n const dataForAttributesConversion = prepareDataForAttributesConversion(\n tileContent,\n tileTransform,\n tileBoundingVolume\n );\n const featureTexture = getTextureByMetadataClass(tileContent, metadataClass);\n const convertedAttributesMap: Map<string, ConvertedAttributes> = await convertAttributes(\n dataForAttributesConversion,\n materialAndTextureList,\n useCartesianPositions,\n featureTexture\n );\n /** Usage of worker here brings more overhead than advantage */\n // const convertedAttributesMap: Map<string, ConvertedAttributes> =\n // await transformI3SAttributesOnWorker(dataForAttributesConversion, {\n // reuseWorkers: true,\n // _nodeWorkers: true,\n // useCartesianPositions,\n // source: workerSource.I3SAttributes\n // });\n\n if (generateBoundingVolumes) {\n _generateBoundingVolumesFromGeometry(convertedAttributesMap, geoidHeightModel);\n }\n\n const result: I3SConvertedResources[] = [];\n for (const materialAndTexture of materialAndTextureList) {\n const originarMaterialId = materialAndTexture.mergedMaterials[0].originalMaterialId;\n if (!convertedAttributesMap.has(originarMaterialId)) {\n continue; // eslint-disable-line no-continue\n }\n const convertedAttributes = convertedAttributesMap.get(originarMaterialId);\n if (!convertedAttributes) {\n continue;\n }\n const {material, texture} = materialAndTexture;\n const nodeId = await addNodeToNodePage();\n result.push(\n await _makeNodeResources({\n convertedAttributes,\n material,\n texture,\n tileContent,\n nodeId,\n featuresHashArray,\n propertyTable,\n attributeStorageInfo,\n draco,\n libraries\n })\n );\n }\n\n if (!result.length) {\n return null;\n }\n return result;\n}\n\n/**\n * Create bounding volumes based on positions\n * @param convertedAttributesMap - geometry attributes map\n * @param geoidHeightModel - geoid height model to convert elevation from elipsoidal to geoid\n */\nfunction _generateBoundingVolumesFromGeometry(\n convertedAttributesMap: Map<string, ConvertedAttributes>,\n geoidHeightModel: Geoid\n) {\n for (const attributes of convertedAttributesMap.values()) {\n const boundingVolumes = createBoundingVolumesFromGeometry(\n attributes.positions,\n geoidHeightModel\n );\n\n attributes.boundingVolumes = boundingVolumes;\n const cartographicOrigin = boundingVolumes.obb.center;\n\n for (let index = 0; index < attributes.positions.length; index += VALUES_PER_VERTEX) {\n const vertex = attributes.positions.subarray(index, index + VALUES_PER_VERTEX);\n Ellipsoid.WGS84.cartesianToCartographic(Array.from(vertex), scratchVector);\n scratchVector[2] =\n scratchVector[2] - geoidHeightModel.getHeight(scratchVector[1], scratchVector[0]);\n scratchVector = scratchVector.subtract(cartographicOrigin);\n attributes.positions.set(scratchVector, index);\n }\n }\n}\n\n/**\n *\n * @param params\n * @param params.convertedAttributes - Converted geometry attributes\n * @param params.material - I3S PBR-like material definition\n * @param params.texture - texture content\n * @param params.tileContent - 3DTiles decoded content\n * @param params.nodeId - new node ID\n * @param params.featuresHashArray - hash array of features that is needed to not to mix up same features in parent and child nodes\n * @param params.propertyTable - batch table (corresponding to feature attributes data)\n * @param params.attributeStorageInfo - attributes metadata from 3DSceneLayer json\n * @param params.draco - is converter should create draco compressed geometry\n * @param libraries - dynamicaly loaded 3rd-party libraries\n * @returns Array of I3S node resources\n */\nasync function _makeNodeResources({\n convertedAttributes,\n material,\n texture,\n tileContent,\n nodeId,\n featuresHashArray,\n propertyTable,\n attributeStorageInfo,\n draco,\n libraries\n}: {\n convertedAttributes: ConvertedAttributes;\n material: I3SMaterialDefinition;\n texture?: {};\n tileContent: Tiles3DTileContent;\n nodeId: number;\n featuresHashArray: string[];\n propertyTable: FeatureTableJson | null;\n attributeStorageInfo?: AttributeStorageInfo[];\n draco: boolean;\n libraries: Record<string, string>;\n}): Promise<I3SConvertedResources> {\n const boundingVolumes = convertedAttributes.boundingVolumes;\n const vertexCount = convertedAttributes.positions.length / VALUES_PER_VERTEX;\n const {faceRange, featureIds, positions, normals, colors, uvRegions, texCoords, featureCount} =\n generateAttributes(convertedAttributes);\n\n let featureIdsMap: Record<string, number> = {};\n if (propertyTable) {\n /**\n * 3DTiles has featureIndices unique only for one tile.\n * In I3S featureIds are unique layer-wide. We create featureIds from all feature properties.\n * If 3DTiles features has equal set of properties they are considered as same feature in I3S.\n */\n featureIdsMap = makeFeatureIdsUnique(\n featureIds,\n convertedAttributes.featureIndices,\n featuresHashArray,\n propertyTable\n );\n }\n\n const header = new Uint32Array(2);\n const typedFeatureIds = generateBigUint64Array(featureIds);\n\n header.set([vertexCount, featureCount], 0);\n const fileBuffer = new Uint8Array(\n concatenateArrayBuffers(\n header.buffer,\n positions.buffer,\n normals.buffer,\n texture ? texCoords.buffer : new ArrayBuffer(0),\n colors.buffer,\n uvRegions,\n typedFeatureIds.buffer,\n faceRange.buffer\n )\n );\n const compressedGeometry = draco\n ? generateCompressedGeometry(\n vertexCount,\n convertedAttributes,\n {\n positions,\n normals,\n texCoords: texture ? texCoords : new Float32Array(0),\n colors,\n uvRegions,\n featureIds,\n faceRange\n },\n libraries\n )\n : null;\n\n let attributes: ArrayBuffer[] = [];\n\n if (attributeStorageInfo && propertyTable) {\n attributes = convertPropertyTableToAttributeBuffers(\n featureIds,\n featureIdsMap,\n propertyTable,\n attributeStorageInfo\n );\n }\n\n return {\n nodeId,\n geometry: fileBuffer,\n compressedGeometry,\n texture,\n hasUvRegions: Boolean(uvRegions.length),\n sharedResources: getSharedResources(tileContent.gltf?.materials || [], nodeId),\n meshMaterial: material,\n vertexCount,\n attributes,\n featureCount,\n boundingVolumes\n };\n}\n\n/**\n * Convert attributes from the gltf nodes tree to i3s plain geometry\n * @param attributesData - geometry attributes from gltf\n * @param materialAndTextureList - array of data about materials and textures of the content\n * @param useCartesianPositions - convert positions to absolute cartesian coordinates instead of cartographic offsets.\n * Cartesian coordinates will be required for creating bounding voulmest from geometry positions\n * @param featureTexture - feature texture key\n * @returns map of converted geometry attributes\n */\nexport async function convertAttributes(\n attributesData: GLTFAttributesData,\n materialAndTextureList: I3SMaterialWithTexture[],\n useCartesianPositions: boolean,\n featureTexture: string | null\n): Promise<Map<string, ConvertedAttributes>> {\n const {nodes, images, cartographicOrigin, cartesianModelMatrix} = attributesData;\n const attributesMap = new Map<string, ConvertedAttributes>();\n\n for (const materialAndTexture of materialAndTextureList) {\n const attributes = {\n positions: new Float32Array(0),\n normals: new Float32Array(0),\n texCoords: new Float32Array(0),\n colors: new Uint8Array(0),\n uvRegions: new Uint16Array(0),\n featureIndicesGroups: [],\n featureIndices: [],\n boundingVolumes: null,\n mergedMaterials: materialAndTexture.mergedMaterials\n };\n for (const mergedMaterial of materialAndTexture.mergedMaterials) {\n attributesMap.set(mergedMaterial.originalMaterialId, attributes);\n }\n }\n\n convertNodes(\n nodes,\n images,\n cartographicOrigin,\n cartesianModelMatrix,\n attributesMap,\n useCartesianPositions,\n undefined,\n featureTexture\n );\n\n for (const attrKey of attributesMap.keys()) {\n const attributes = attributesMap.get(attrKey);\n if (!attributes) {\n continue;\n }\n if (attributes.positions.length === 0) {\n attributesMap.delete(attrKey);\n continue; // eslint-disable-line no-continue\n }\n if (attributes.featureIndicesGroups) {\n attributes.featureIndices = attributes.featureIndicesGroups.reduce((acc, value) =>\n acc.concat(value)\n );\n delete attributes.featureIndicesGroups;\n }\n }\n\n return attributesMap;\n}\n\n/**\n * Gltf has hierarchical structure of nodes. This function converts nodes starting from those which are in gltf scene object.\n * The goal is applying tranformation matrix for all children. Functions \"convertNodes\" and \"convertNode\" work together recursively.\n * @param nodes - gltf nodes array\n * @param images - gltf images array\n * @param cartographicOrigin - cartographic origin of bounding volume\n * @param cartesianModelMatrix - cartesian model matrix to convert coordinates to cartographic\n * @param attributesMap - for recursive concatenation of attributes\n * @param useCartesianPositions - convert positions to absolute cartesian coordinates instead of cartographic offsets.\n * Cartesian coordinates will be required for creating bounding voulmest from geometry positions\n * @param matrix - transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param featureTexture - feature texture key\n * @returns {void}\n */\nfunction convertNodes(\n nodes: GLTFNodePostprocessed[],\n images: (TextureImageProperties | null)[],\n cartographicOrigin: Vector3,\n cartesianModelMatrix: Matrix4,\n attributesMap: Map<string, ConvertedAttributes>,\n useCartesianPositions: boolean,\n matrix: Matrix4 = new Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n featureTexture: string | null\n) {\n if (nodes) {\n for (const node of nodes) {\n convertNode(\n node,\n images,\n cartographicOrigin,\n cartesianModelMatrix,\n attributesMap,\n useCartesianPositions,\n matrix,\n featureTexture\n );\n }\n }\n}\n\n/**\n * Generate transformation matrix for node\n * Aapply all gltf transformations to initial transformation matrix.\n * @param node\n * @param matrix\n */\nfunction getCompositeTransformationMatrix(node: GLTFNodePostprocessed, matrix: Matrix4) {\n let transformationMatrix = matrix;\n\n const {matrix: nodeMatrix, rotation, scale, translation} = node;\n\n if (nodeMatrix) {\n transformationMatrix = matrix.multiplyRight(nodeMatrix);\n }\n\n if (translation) {\n transformationMatrix = transformationMatrix.translate(translation);\n }\n\n if (rotation) {\n transformationMatrix = transformationMatrix.rotateXYZ(rotation);\n }\n\n if (scale) {\n transformationMatrix = transformationMatrix.scale(scale);\n }\n\n return transformationMatrix;\n}\n\n/**\n * Convert all primitives of node and all children nodes\n * @param node - gltf node\n * @param images - gltf images array\n * @param cartographicOrigin - cartographic origin of bounding volume\n * @param cartesianModelMatrix - cartesian model matrix to convert coordinates to cartographic\n * @param attributesMap Map<{positions: Float32Array, normals: Float32Array, texCoords: Float32Array, colors: Uint8Array, featureIndices: Array}> - for recursive concatenation of\n * attributes\n * @param useCartesianPositions - convert positions to absolute cartesian coordinates instead of cartographic offsets.\n * Cartesian coordinates will be required for creating bounding voulmest from geometry positions\n * @param matrix - transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param featureTexture - feature texture key\n */\nfunction convertNode(\n node: GLTFNodePostprocessed,\n images: (TextureImageProperties | null)[],\n cartographicOrigin: Vector3,\n cartesianModelMatrix: Matrix4,\n attributesMap: Map<string, ConvertedAttributes>,\n useCartesianPositions,\n matrix = new Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n featureTexture: string | null\n) {\n const transformationMatrix = getCompositeTransformationMatrix(node, matrix);\n\n const mesh = node.mesh;\n\n if (mesh) {\n convertMesh(\n mesh,\n images,\n cartographicOrigin,\n cartesianModelMatrix,\n attributesMap,\n useCartesianPositions,\n transformationMatrix,\n featureTexture\n );\n }\n\n convertNodes(\n node.children || [],\n images,\n cartographicOrigin,\n cartesianModelMatrix,\n attributesMap,\n useCartesianPositions,\n transformationMatrix,\n featureTexture\n );\n}\n\n/**\n * Convert all primitives of the mesh\n * @param mesh - gltf mesh data\n * @param images - gltf images array\n * @param cartographicOrigin - cartographic origin of bounding volume\n * @param cartesianModelMatrix - cartesian model matrix to convert coordinates to cartographic\n * @param attributesMap Map<{positions: Float32Array, normals: Float32Array, texCoords: Float32Array, colors: Uint8Array, featureIndices: Array}> - for recursive concatenation of\n * attributes\n * @param useCartesianPositions - convert positions to absolute cartesian coordinates instead of cartographic offsets.\n * Cartesian coordinates will be required for creating bounding voulmest from geometry positions\n * @param attributesMap Map<{positions: Float32Array, normals: Float32Array, texCoords: Float32Array, colors: Uint8Array, featureIndices: Array}> - for recursive concatenation of\n * attributes\n * @param matrix - transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param featureTexture - feature texture key\n */\nfunction convertMesh(\n mesh: GLTFMeshPostprocessed,\n images: (TextureImageProperties | null)[],\n cartographicOrigin: Vector3,\n cartesianModelMatrix: Matrix4,\n attributesMap: Map<string, ConvertedAttributes>,\n useCartesianPositions = false,\n matrix = new Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n featureTexture: string | null\n) {\n for (const primitive of mesh.primitives) {\n let outputAttributes: ConvertedAttributes | null | undefined = null;\n let materialUvRegion: Uint16Array | undefined;\n if (primitive.material) {\n outputAttributes = attributesMap.get(primitive.material.id);\n materialUvRegion = outputAttributes?.mergedMaterials.find(\n ({originalMaterialId}) => originalMaterialId === primitive.material?.id\n )?.uvRegion;\n } else if (attributesMap.has('default')) {\n outputAttributes = attributesMap.get('default');\n }\n assert(outputAttributes !== null, 'Primitive - material mapping failed');\n // Per the spec https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#_mesh_primitive_mode\n // GL.TRIANGLES is default. So in case `mode` is `undefined`, it is 'TRIANGLES'\n assert(\n primitive.mode === undefined ||\n primitive.mode === GL.TRIANGLES ||\n primitive.mode === GL.TRIANGLE_STRIP,\n `Primitive - unsupported mode ${primitive.mode}`\n );\n const attributes = primitive.attributes;\n if (!outputAttributes) {\n continue;\n }\n\n const indices = normalizeIndices(primitive);\n outputAttributes.positions = concatenateTypedArrays(\n outputAttributes.positions,\n transformVertexArray({\n vertices: attributes.POSITION.value,\n cartographicOrigin,\n cartesianModelMatrix,\n nodeMatrix: matrix,\n indices,\n attributeSpecificTransformation: transformVertexPositions,\n useCartesianPositions\n })\n );\n outputAttributes.normals = concatenateTypedArrays(\n outputAttributes.normals,\n transformVertexArray({\n vertices: attributes.NORMAL && attributes.NORMAL.value,\n cartographicOrigin,\n cartesianModelMatrix,\n nodeMatrix: matrix,\n indices,\n attributeSpecificTransformation: transformVertexNormals,\n useCartesianPositions: false\n })\n );\n outputAttributes.texCoords = concatenateTypedArrays(\n outputAttributes.texCoords,\n flattenTexCoords(attributes.TEXCOORD_0 && attributes.TEXCOORD_0.value, indices)\n );\n\n outputAttributes.colors = concatenateTypedArrays(\n outputAttributes.colors,\n flattenColors(attributes.COLOR_0, indices)\n );\n\n if (materialUvRegion) {\n outputAttributes.uvRegions = concatenateTypedArrays(\n outputAttributes.uvRegions,\n createUvRegion(materialUvRegion, indices)\n );\n }\n\n outputAttributes.featureIndicesGroups = outputAttributes.featureIndicesGroups || [];\n outputAttributes.featureIndicesGroups.push(\n flattenBatchIds(getBatchIds(attributes, primitive, images, featureTexture), indices)\n );\n }\n}\n/**\n * Converts TRIANGLE-STRIPS to independent TRIANGLES\n * @param primitive - the primitive to get the indices from\n * @returns indices of vertices of the independent triangles\n */\nfunction normalizeIndices(primitive: GLTFMeshPrimitivePostprocessed): TypedArray {\n let indices: TypedArray | undefined = primitive.indices?.value;\n if (!indices) {\n const positions = primitive.attributes.POSITION.value;\n return generateSyntheticIndices(positions.length / VALUES_PER_VERTEX);\n }\n\n if (indices && primitive.mode === GL.TRIANGLE_STRIP) {\n /*\n TRIANGLE_STRIP geometry contains n+2 vertices for n triangles;\n TRIANGLE geometry contains n*3 vertices for n triangles.\n The conversion from TRIANGLE_STRIP to TRIANGLE implies duplicating adjacent vertices.\n */\n const TypedArrayConstructor = indices.constructor as TypedArrayConstructor;\n const newIndices = new TypedArrayConstructor((indices.length - 2) * 3);\n\n // Copy the first triangle indices with no modification like [i0, i1, i2, ...] -> [i0, i1, i2, ...]\n let triangleIndex = 0;\n let currentTriangle = indices.slice(0, 3);\n newIndices.set(currentTriangle, 0);\n\n // The rest triangle indices are being taken from strips using the following logic:\n // [i1, i2, i3, i4, i5, i6, ...] -> [i3, i2, i1, i2, i3, i4, i5, i4, i3, i4, i5, i6, ...]\n for (let i = 1; i + 2 < indices.length; i++) {\n triangleIndex += 3;\n currentTriangle = indices.slice(i, i + 3);\n if (i % 2 === 0) {\n newIndices.set(currentTriangle, triangleIndex);\n } else {\n // The following \"reverce\" is necessary to calculate normals correctly\n newIndices.set(currentTriangle.reverse(), triangleIndex);\n }\n }\n indices = newIndices;\n }\n return indices as TypedArray;\n}\n\n/**\n * Convert vertices attributes (POSITIONS or NORMALS) to i3s compatible format\n * @param args\n * @param args.vertices - gltf primitive POSITION or NORMAL attribute\n * @param args.cartographicOrigin - cartographic origin coordinates\n * @param args.cartesianModelMatrix - a cartesian model matrix to transform coordnates from cartesian to cartographic format\n * @param args.nodeMatrix - a gltf node transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param args.indices - gltf primitive indices\n * @param args.attributeSpecificTransformation - function to do attribute - specific transformations\n * @param args.useCartesianPositions - use coordinates as it is.\n * @returns\n */\nfunction transformVertexArray(args: {\n vertices: TypedArray;\n cartographicOrigin: number[];\n cartesianModelMatrix: number[];\n nodeMatrix: Matrix4;\n indices: TypedArray;\n attributeSpecificTransformation: Function;\n useCartesianPositions: boolean;\n}): Float32Array {\n const {vertices, indices, attributeSpecificTransformation} = args;\n const newVertices = new Float32Array(indices.length * VALUES_PER_VERTEX);\n if (!vertices) {\n return newVertices;\n }\n for (let i = 0; i < indices.length; i++) {\n const coordIndex = indices[i] * VALUES_PER_VERTEX;\n const vertex = vertices.subarray(coordIndex, coordIndex + VALUES_PER_VERTEX);\n let vertexVector = new Vector3(Array.from(vertex));\n\n vertexVector = attributeSpecificTransformation(vertexVector, args);\n\n newVertices[i * VALUES_PER_VERTEX] = vertexVector.x;\n newVertices[i * VALUES_PER_VERTEX + 1] = vertexVector.y;\n newVertices[i * VALUES_PER_VERTEX + 2] = vertexVector.z;\n }\n return newVertices;\n}\n\n/**\n * Trasform positions vector with the attribute specific transformations\n * @param vertexVector - source positions vector to transform\n * @param calleeArgs\n * @param calleeArgs.cartesianModelMatrix - a cartesian model matrix to transform coordnates from cartesian to cartographic format\n * @param calleeArgs.cartographicOrigin - cartographic origin coordinates\n * @param calleeArgs.nodeMatrix - a gltf node transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @param calleeArgs.useCartesianPositions - use coordinates as it is.\n * @returns transformed positions vector\n */\nfunction transformVertexPositions(vertexVector, calleeArgs): number[] {\n const {cartesianModelMatrix, cartographicOrigin, nodeMatrix, useCartesianPositions} = calleeArgs;\n\n if (nodeMatrix) {\n vertexVector = vertexVector.transform(nodeMatrix);\n }\n\n vertexVector = vertexVector.transform(cartesianModelMatrix);\n\n if (useCartesianPositions) {\n return vertexVector;\n }\n\n Ellipsoid.WGS84.cartesianToCartographic(\n [vertexVector[0], vertexVector[1], vertexVector[2]],\n vertexVector\n );\n vertexVector = vertexVector.subtract(cartographicOrigin);\n return vertexVector;\n}\n\n/**\n * Trasform normals vector with the attribute specific transformations\n * @param vertexVector - source normals vector to transform\n * @param calleeArgs\n * @param calleeArgs.cartesianModelMatrix - a cartesian model matrix to transform coordnates from cartesian to cartographic format\n * @param calleeArgs.nodeMatrix - a gltf node transformation matrix - cumulative transformation matrix formed from all parent node matrices\n * @returns transformed normals vector\n */\nfunction transformVertexNormals(vertexVector, calleeArgs): number[] {\n const {cartesianModelMatrix, nodeMatrix} = calleeArgs;\n\n if (nodeMatrix) {\n vertexVector = vertexVector.transformAsVector(nodeMatrix);\n }\n\n vertexVector = vertexVector.transformAsVector(cartesianModelMatrix);\n return vertexVector;\n}\n\n/**\n * Convert uv0 (texture coordinates) from coords based on indices to plain arrays, compatible with i3s\n * @param texCoords - gltf primitive TEXCOORD_0 attribute\n * @param indices - gltf primitive indices\n * @returns flattened texture coordinates\n */\nfunction flattenTexCoords(texCoords: TypedArray, indices: TypedArray): Float32Array {\n const newTexCoords = new Float32Array(indices.length * VALUES_PER_TEX_COORD);\n if (!texCoords) {\n // We need dummy UV0s because it is required in 1.6\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.6/vertexAttribute.cmn.md\n newTexCoords.fill(1);\n return newTexCoords;\n }\n for (let i = 0; i < indices.length; i++) {\n const coordIndex = indices[i] * VALUES_PER_TEX_COORD;\n const texCoord = texCoords.subarray(coordIndex, coordIndex + VALUES_PER_TEX_COORD);\n newTexCoords[i * VALUES_PER_TEX_COORD] = texCoord[0];\n newTexCoords[i * VALUES_PER_TEX_COORD + 1] = texCoord[1];\n }\n return newTexCoords;\n}\n\n/**\n * Convert color from COLOR_0 based on indices to plain arrays, compatible with i3s\n * @param colorsAttribute - gltf primitive COLOR_0 attribute\n * @param indices - gltf primitive indices\n * @returns flattened colors attribute\n */\nfunction flattenColors(\n colorsAttribute: GLTFAccessorPostprocessed,\n indices: TypedArray\n): Uint8Array {\n const components = colorsAttribute?.components || VALUES_PER_COLOR_ELEMENT;\n const newColors = new Uint8Array(indices.length * components);\n if (!colorsAttribute) {\n // Vertex color multiplies by material color so it must be normalized 1 by default\n newColors.fill(255);\n return newColors;\n }\n const colors = colorsAttribute.value;\n for (let i = 0; i < indices.length; i++) {\n const colorIndex = indices[i] * components;\n const color = colors.subarray(colorIndex, colorIndex + components);\n const colorUint8 = new Uint8Array(components);\n for (let j = 0; j < color.length; j++) {\n colorUint8[j] = color[j] * 255;\n }\n newColors.set(colorUint8, i * components);\n }\n return newColors;\n}\n\n/**\n * Create per-vertex uv-region array\n * @param materialUvRegion - uv-region fragment for a single vertex\n * @param indices - geometry indices data\n * @returns - uv-region array\n */\nfunction createUvRegion(materialUvRegion: Uint16Array, indices: TypedArray): Uint16Array {\n const result = new Uint16Array(indices.length * 4);\n for (let i = 0; i < result.length; i += 4) {\n result.set(materialUvRegion, i);\n }\n return result;\n}\n\n/**\n * Flatten batchedIds list based on indices to right ordered array, compatible with i3s\n * @param batchedIds - gltf primitive\n * @param indices - gltf primitive indices\n * @returns flattened batch ids\n */\nfunction flattenBatchIds(batchedIds: NumberArray, indices: TypedArray): number[] {\n if (!batchedIds.length || !indices.length) {\n return [];\n }\n const newBatchIds: number[] = [];\n for (let i = 0; i < indices.length; i++) {\n const coordIndex = indices[i];\n newBatchIds.push(batchedIds[coordIndex]);\n }\n return newBatchIds;\n}\n\n/**\n * Get batchIds for featureIds creation\n * @param attributes - gltf accessors\n * @param primitive - gltf primitive data\n * @param images - gltf texture images\n * @param featureTexture - feature texture key\n * @return batch IDs\n */\nfunction getBatchIds(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n primitive: GLTFMeshPrimitivePostprocessed,\n images: (TextureImageProperties | null)[],\n featureTexture: string | null\n): NumberArray {\n const batchIds: NumberArray = handleBatchIdsExtensions(\n attributes,\n primitive,\n images,\n featureTexture\n );\n\n if (batchIds.length) {\n return batchIds;\n }\n\n for (let index = 0; index < BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES.length; index++) {\n const possibleBatchIdAttributeName = BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES[index];\n if (\n attributes[possibleBatchIdAttributeName] &&\n attributes[possibleBatchIdAttributeName].value\n ) {\n return attributes[possibleBatchIdAttributeName].value;\n }\n }\n\n return [];\n}\n\n/**\n * Convert GLTF material to I3S material definitions and textures\n * @param sourceMaterials Source GLTF materials\n * @param shouldMergeMaterials - if true - the converter will try to merge similar materials\n * to be able to merge primitives having those materials\n * @returns Array of Couples I3SMaterialDefinition + texture content\n */\nasync function convertMaterials(\n sourceMaterials: GLTFMaterialPostprocessed[] = [],\n shouldMergeMaterials: boolean\n): Promise<I3SMaterialWithTexture[]> {\n let materials: I3SMaterialWithTexture[] = [];\n for (const sourceMaterial of sourceMaterials) {\n materials.push(convertMaterial(sourceMaterial));\n }\n\n if (shouldMergeMaterials) {\n materials = await mergeAllMaterials(materials);\n }\n\n return materials;\n}\n\n/**\n * Merge materials when possible\n * @param materials materials array\n * @returns merged materials array\n */\nasync function mergeAllMaterials(\n materials: I3SMaterialWithTexture[]\n): Promise<I3SMaterialWithTexture[]> {\n const result: I3SMaterialWithTexture[] = [];\n while (materials.length > 0) {\n let newMaterial = materials.splice(0, 1)[0];\n const mergedIndices: number[] = [];\n for (let i = 0; i < materials.length; i++) {\n const material = materials[i];\n if (\n (newMaterial.texture && material.texture) ||\n (!newMaterial.texture && !material.texture)\n ) {\n newMaterial = await mergeMaterials(newMaterial, material);\n mergedIndices.push(i);\n }\n }\n if (newMaterial.texture && mergedIndices.length) {\n const newWidth = newMaterial.mergedMaterials?.reduce(\n (accum, {textureSize}) => accum + (textureSize?.width || 0),\n 0\n );\n const newHeight = newMaterial.mergedMaterials?.reduce(\n (accum, {textureSize}) => Math.max(accum, textureSize?.height || 0),\n 0\n );\n let currentX = -1;\n for (const aTextureMetadata of newMaterial.mergedMaterials) {\n if (aTextureMetadata.textureSize) {\n const newX =\n currentX +\n 1 +\n (aTextureMetadata.textureSize.width / newWidth) *\n 2 ** (Uint16Array.BYTES_PER_ELEMENT * 8) -\n 1;\n aTextureMetadata.uvRegion = new Uint16Array([\n currentX + 1,\n 0,\n newX,\n (aTextureMetadata.textureSize.height / newHeight) *\n 2 ** (Uint16Array.BYTES_PER_ELEMENT * 8) -\n 1\n ]);\n currentX = newX;\n }\n }\n\n newMaterial.texture.image.width = newWidth;\n newMaterial.texture.image.height = newHeight;\n }\n for (const index of mergedIndices.reverse()) {\n materials.splice(index, 1);\n }\n result.push(newMaterial);\n }\n\n if (!result.length) {\n result.push({\n material: getDefaultMaterial(),\n mergedMaterials: [{originalMaterialId: 'default'}]\n });\n }\n return result;\n}\n\n/**\n * Merge 2 materials including texture\n * @param material1\n * @param material2\n * @returns\n */\nasync function mergeMaterials(\n material1: I3SMaterialWithTexture,\n material2: I3SMaterialWithTexture\n): Promise<I3SMaterialWithTexture> {\n if (\n material1.texture?.bufferView &&\n material2.texture?.bufferView &&\n material1.mergedMaterials &&\n material2.mergedMaterials\n ) {\n const buffer1 = Buffer.from(material1.texture.bufferView.data);\n const buffer2 = Buffer.from(material2.texture.bufferView.data);\n try {\n // @ts-ignore\n const {joinImages} = await import('join-images');\n const sharpData = await joinImages([buffer1, buffer2], {direction: 'horizontal'});\n material1.texture.bufferView.data = await sharpData\n .toFormat(material1.texture.mimeType === 'image/png' ? 'png' : 'jpeg')\n .toBuffer();\n } catch (error) {\n console.log(\n 'Join images into a texture atlas has failed. Consider usage `--split-nodes` option. (See documentation https://loaders.gl/modules/tile-converter/docs/cli-reference/tile-converter)'\n );\n throw error;\n }\n // @ts-ignore\n material1.material.pbrMetallicRoughness.baseColorTexture.textureSetDefinitionId = 1;\n }\n material1.mergedMaterials = material1.mergedMaterials.concat(material2.mergedMaterials);\n return material1;\n}\n\n/**\n * Convert texture and material from gltf 2.0 material object\n * @param sourceMaterial - material object\n * @returns I3S material definition and texture\n */\nfunction convertMaterial(sourceMaterial: GLTFMaterialPostprocessed): I3SMaterialWithTexture {\n const material: I3SMaterialDefinition = {\n doubleSided: sourceMaterial.doubleSided,\n emissiveFactor: sourceMaterial.emissiveFactor?.map((c) => Math.round(c * 255)) as [\n number,\n number,\n number\n ],\n // It is in upper case in GLTF: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#alpha-coverage\n // But it is in lower case in I3S: https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n alphaMode: convertAlphaMode(sourceMaterial.alphaMode),\n pbrMetallicRoughness: {\n roughnessFactor:\n sourceMaterial?.pbrMetallicRoughness?.roughnessFactor || DEFAULT_ROUGHNESS_FACTOR,\n metallicFactor:\n sourceMaterial?.pbrMetallicRoughness?.metallicFactor || DEFAULT_METALLIC_FACTOR\n }\n };\n\n let texture;\n if (sourceMaterial?.pbrMetallicRoughness?.baseColorTexture) {\n texture = sourceMaterial.pbrMetallicRoughness.baseColorTexture.texture.source;\n material.pbrMetallicRoughness.baseColorTexture = {\n textureSetDefinitionId: 0\n };\n } else if (sourceMaterial.emissiveTexture) {\n texture = sourceMaterial.emissiveTexture.texture.source;\n // ArcGIS webscene doesn't show emissiveTexture but shows baseColorTexture\n material.pbrMetallicRoughness.baseColorTexture = {\n textureSetDefinitionId: 0\n };\n }\n\n sourceMaterial.id = Number.isFinite(sourceMaterial.id) ? sourceMaterial.id : uuidv4();\n let mergedMaterials: MergedMaterial[] = [{originalMaterialId: sourceMaterial.id}];\n if (!texture) {\n // Should use default baseColorFactor if it is not present in source material\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-pbrmetallicroughness\n const baseColorFactor = sourceMaterial?.pbrMetallicRoughness?.baseColorFactor;\n material.pbrMetallicRoughness.baseColorFactor =\n ((baseColorFactor && baseColorFactor.map((c) => Math.round(c * 255))) as [\n number,\n number,\n number,\n number\n ]) || undefined;\n } else {\n mergedMaterials[0].textureSize = {width: texture.image.width, height: texture.image.height};\n }\n\n return {material, texture, mergedMaterials};\n}\n\n/**\n * Converts from `alphaMode` material property from GLTF to I3S format\n * @param gltfAlphaMode Gltf material `alphaMode` property\n * @returns I3SMaterialDefinition.alphaMode property\n */\nfunction convertAlphaMode(\n gltfAlphaMode?: 'OPAQUE' | 'MASK' | 'BLEND' | string\n): 'opaque' | 'mask' | 'blend' {\n switch (gltfAlphaMode) {\n case 'OPAQUE':\n return 'opaque';\n case 'MASK':\n return 'mask';\n case 'BLEND':\n return 'blend';\n default:\n return 'opaque';\n }\n}\n\n/**\n * Form default I3SMaterialDefinition\n * @returns I3S material definition\n */\nfunction getDefaultMaterial(): I3SMaterialDefinition {\n return {\n alphaMode: 'opaque',\n pbrMetallicRoughness: {\n metallicFactor: 1,\n roughnessFactor: 1\n }\n };\n}\n\n/**\n * Form \"sharedResources\" from gltf materials array\n * @param gltfMaterials - GLTF materials array\n * @param nodeId - I3S node ID\n * @returns {materialDefinitionInfos: Object[], textureDefinitionInfos: Object[]} -\n * 2 arrays in format of i3s sharedResources data https://github.com/Esri/i3s-spec/blob/master/docs/1.7/sharedResource.cmn.md\n */\nfunction getSharedResources(\n gltfMaterials: GLTFMaterialPostprocessed[],\n nodeId: number\n): SharedResourcesArrays {\n const i3sResources: SharedResourcesArrays = {};\n\n if (!gltfMaterials || !gltfMaterials.length) {\n return i3sResources;\n }\n\n i3sResources.materialDefinitionInfos = [];\n for (const gltfMaterial of gltfMaterials) {\n const {materialDefinitionInfo, textureDefinitionInfo} = convertGLTFMaterialToI3sSharedResources(\n gltfMaterial,\n nodeId\n );\n i3sResources.materialDefinitionInfos.push(materialDefinitionInfo);\n if (textureDefinitionInfo) {\n i3sResources.textureDefinitionInfos = i3sResources.textureDefinitionInfos || [];\n i3sResources.textureDefinitionInfos.push(textureDefinitionInfo);\n }\n }\n return i3sResources;\n}\n\n/**\n * Convert gltf material into I3S sharedResources data\n * @param gltfMaterial - gltf material data\n * @param nodeId - I3S node ID\n * @returns - Couple {materialDefinitionInfo, textureDefinitionInfo} extracted from gltf material data\n */\nfunction convertGLTFMaterialToI3sSharedResources(\n gltfMaterial: GLTFMaterialPostprocessed,\n nodeId: number\n): {\n materialDefinitionInfo: MaterialDefinitionInfo;\n textureDefinitionInfo: TextureDefinitionInfo | null;\n} {\n const texture =\n gltfMaterial?.pbrMetallicRoughness?.baseColorTexture || gltfMaterial.emissiveTexture;\n let textureDefinitionInfo: TextureDefinitionInfo | null = null;\n if (texture) {\n textureDefinitionInfo = extractSharedResourcesTextureInfo(texture.texture, nodeId);\n }\n const {baseColorFactor, metallicFactor} = gltfMaterial?.pbrMetallicRoughness || {};\n let colorFactor = baseColorFactor;\n // If alpha channel is 0 try to get emissive factor from gltf material.\n if ((!baseColorFactor || baseColorFactor[3] === 0) && gltfMaterial.emissiveFactor) {\n colorFactor = gltfMaterial.emissiveFactor;\n colorFactor[3] = colorFactor[3] || 1;\n }\n\n return {\n materialDefinitionInfo: extractSharedResourcesMaterialInfo(\n colorFactor || [1, 1, 1, 1],\n metallicFactor\n ),\n textureDefinitionInfo\n };\n}\n\n/**\n * Form \"materialDefinition\" which is part of \"sharedResouces\"\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#materials\n * See formulas in appendix \"Appendix B: BRDF Implementation\":\n * const dielectricSpecular = rgb(0.04, 0.04, 0.04)\n * const black = rgb(0, 0, 0)\n * cdiff = lerp(baseColor.rgb * (1 - dielectricSpecular.r), black, metallic)\n * F0 = lerp(dieletricSpecular, baseColor.rgb, metallic)\n *\n * Assumption: F0 - specular in i3s (\"specular reflection\" <-> \"reflectance value at normal incidence\")\n * cdiff - diffuse in i3s (\"Diffuse color\" <-> \"'c' diffuse\" (c means color?))\n * @param baseColorFactor - RGBA color in 0..1 format\n * @param metallicFactor - \"metallicFactor\" attribute of gltf material object\n * @returns material definition info for I3S shared resource\n */\nfunction extractSharedResourcesMaterialInfo(\n baseColorFactor: number[],\n metallicFactor: number = 1\n): MaterialDefinitionInfo {\n const matDielectricColorComponent = 0.04 / 255; // Color from rgb (255) to 0..1 resolution\n // All color resolutions are 0..1\n const black = new Vector4(0, 0, 0, 1);\n const unitVector = new Vector4(1, 1, 1, 1);\n const dielectricSpecular = new Vector4(\n matDielectricColorComponent,\n matDielectricColorComponent,\n matDielectricColorComponent,\n 0\n );\n const baseColorVector = new Vector4(baseColorFactor);\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n // Formulas for Cdiff & F0\n const firstOperand = unitVector.subtract(dielectricSpecular).multiply(baseColorVector);\n const diffuse = firstOperand.lerp(firstOperand, black, metallicFactor);\n dielectricSpecular[3] = 1;\n const specular = dielectricSpecular.lerp(dielectricSpecular, baseColorVector, metallicFactor);\n return {\n params: {\n // @ts-expect-error NumericArray\n diffuse: diffuse.toArray(),\n // @ts-expect-error NumericArray\n specular: specular.toArray(),\n renderMode: 'solid'\n }\n };\n}\n\n/**\n * Form \"textureDefinition\" which is part of \"sharedResouces\"\n * @param texture - texture image info\n * @param nodeId - I3S node ID\n * @returns texture definition infor for shared resource\n */\nfunction extractSharedResourcesTextureInfo(\n texture: GLTFTexturePostprocessed,\n nodeId: number\n): TextureDefinitionInfo {\n return {\n encoding: texture?.source?.mimeType ? [texture.source.mimeType] : undefined,\n images: [\n {\n // 'i3s' has just size which is width of the image. Images are supposed to be square.\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/image.cmn.md\n id: generateImageId(texture, nodeId),\n size: texture.source?.image.width,\n length: texture.source?.image.data.length ? [texture.source?.image.data.length] : undefined\n }\n ]\n };\n}\n\n/**\n * Formula for calculating imageId:\n * https://github.com/Esri/i3s-spec/blob/0a6366a9249b831db8436c322f8d27521e86cf07/format/Indexed%203d%20Scene%20Layer%20Format%20Specification.md#generating-image-ids\n * @param texture - texture image info\n * @param nodeId - I3S node ID\n * @returns calculate image ID according to the spec\n */\nfunction generateImageId(texture: GLTFTexturePostprocessed, nodeId: number) {\n const {width, height} = texture.source?.image || {};\n if (!width || !height) {\n return '';\n }\n const levelCountOfTexture = 1;\n const indexOfLevel = 0;\n const indexOfTextureInStore = nodeId + 1;\n\n const zerosCount = 32 - indexOfTextureInStore.toString(2).length;\n const rightHalf = '0'.repeat(zerosCount).concat(indexOfTextureInStore.toString(2));\n\n const shiftedLevelCountOfTexture = levelCountOfTexture << 28;\n const shiftedIndexOfLevel = indexOfLevel << 24;\n const shiftedWidth = (width - 1) << 12;\n const shiftedHeight = (height - 1) << 0;\n\n const leftHalf = shiftedLevelCountOfTexture + shiftedIndexOfLevel + shiftedWidth + shiftedHeight;\n const imageId = BigInt(`0b${leftHalf.toString(2)}${rightHalf}`);\n return imageId.toString();\n}\n\n/**\n * Make all feature ids unique through all nodes in layout.\n * @param featureIds\n * @param featureIndices\n * @param featuresHashArray\n * @param batchTable\n * @returns propertyTable indices to map featureIds\n */\nfunction makeFeatureIdsUnique(\n featureIds: number[],\n featureIndices: number[],\n featuresHashArray: string[],\n batchTable: {[key: string]: any}\n): Record<string, number> {\n const replaceMap = getFeaturesReplaceMap(featureIds, batchTable, featuresHashArray);\n replaceIndicesByUnique(featureIndices, replaceMap);\n replaceIndicesByUnique(featureIds, replaceMap);\n return replaceMap;\n}\n\n/**\n * Generate replace map to make featureIds unique.\n * @param featureIds\n * @param batchTable\n * @param featuresHashArray\n * @returns\n */\nfunction getFeaturesReplaceMap(\n featureIds: any[],\n batchTable: object,\n featuresHashArray: any[]\n): Record<string, number> {\n const featureMap: Record<string, number> = {};\n\n for (let index = 0; index < featureIds.length; index++) {\n const oldFeatureId = featureIds[index];\n const uniqueFeatureId = getOrCreateUniqueFeatureId(index, batchTable, featuresHashArray);\n featureMap[oldFeatureId.toString()] = uniqueFeatureId;\n }\n\n return featureMap;\n}\n\n/**\n * Generates string for unique batch id creation.\n * @param batchTable\n * @param index\n * @returns\n */\nfunction generateStringFromBatchTableByIndex(batchTable: object, index: number): string {\n let str = '';\n for (const key in batchTable) {\n str += batchTable[key][index];\n }\n return str;\n}\n\n/**\n * Return already exited featureId or creates and returns new to support unique feature ids throw nodes.\n * @param index\n * @param batchTable\n * @param featuresHashArray\n * @returns\n */\nfunction getOrCreateUniqueFeatureId(\n index: number,\n batchTable: object,\n featuresHashArray: any[]\n): number {\n const batchTableStr = generateStringFromBatchTableByIndex(batchTable, index);\n const hash = md5(batchTableStr);\n\n if (featuresHashArray.includes(hash)) {\n return featuresHashArray.indexOf(hash);\n }\n return featuresHashArray.push(hash) - 1;\n}\n\n/**\n * Do replacement of indices for making them unique through all nodes.\n * @param indicesArray\n * @param featureMap\n * @returns\n */\nfunction replaceIndicesByUnique(indicesArray: number[], featureMap: Record<string, number>) {\n for (let index = 0; index < indicesArray.length; index++) {\n indicesArray[index] = featureMap[indicesArray[index]];\n }\n}\n\n/**\n * Convert property table data to attribute buffers.\n * @param featureIds\n * @param propertyTable - table with metadata for particular feature.\n * @param attributeStorageInfo\n * @returns - Array of file buffers.\n */\nfunction convertPropertyTableToAttributeBuffers(\n featureIds: number[],\n featureIdsMap: Record<string, number>,\n propertyTable: FeatureTableJson,\n attributeStorageInfo: AttributeStorageInfo[]\n): any[] {\n const attributeBuffers: ArrayBuffer[] = [];\n\n const needFlattenPropertyTable = checkPropertiesLength(featureIds, propertyTable);\n const properties = needFlattenPropertyTable\n ? flattenPropertyTableByFeatureIds(featureIdsMap, propertyTable)\n : propertyTable;\n\n const propertyTableWithObjectIds = {\n OBJECTID: featureIds,\n ...properties\n };\n\n for (const propertyName in propertyTableWithObjectIds) {\n const type = getAttributeType(propertyName, attributeStorageInfo);\n if (type) {\n const value = propertyTableWithObjectIds[propertyName];\n const attributeBuffer = generateAttributeBuffer(type, value);\n\n attributeBuffers.push(attributeBuffer);\n }\n }\n\n return attributeBuffers;\n}\n\n/**\n * Generates attribute buffer based on attribute type\n * @param type\n * @param value\n */\nfunction generateAttributeBuffer(type: string, value: any): ArrayBuffer {\n let attributeBuffer: ArrayBuffer;\n\n switch (type) {\n case OBJECT_ID_TYPE:\n case SHORT_INT_TYPE:\n attributeBuffer = generateShortIntegerAttributeBuffer(value);\n break;\n case DOUBLE_TYPE:\n attributeBuffer = generateDoubleAttributeBuffer(value);\n break;\n case STRING_TYPE:\n attributeBuffer = generateStringAttributeBuffer(value);\n break;\n default:\n attributeBuffer = generateStringAttributeBuffer(value);\n }\n\n return attributeBuffer;\n}\n\n/**\n * Return attribute type.\n * @param key\n * @param attributeStorageInfo\n * @returns attribute type.\n */\nfunction getAttributeType(key: string, attributeStorageInfo: any[]): string {\n const attribute = attributeStorageInfo.find((attr) => attr.name === key);\n if (!attribute) {\n console.error(\n `attribute is null, key=${key}, attributeStorageInfo=${JSON.stringify(\n attributeStorageInfo,\n null,\n 2\n )}`\n );\n return '';\n }\n if (!attribute.attributeValues) {\n console.error(`attributeValues is null, attribute=${attribute}`);\n return '';\n }\n return attribute.attributeValues.valueType;\n}\n\n/**\n * Convert short integer to attribute arrayBuffer.\n * @param featureIds\n * @returns - Buffer with objectId data.\n */\nfunction generateShortIntegerAttributeBuffer(featureIds: any[]): ArrayBuffer {\n const count = new Uint32Array([featureIds.length]);\n const valuesArray = new Uint32Array(featureIds);\n return concatenateArrayBuffers(count.buffer, valuesArray.buffer);\n}\n\n/**\n * Convert double to attribute arrayBuffer.\n * @param featureIds\n * @returns - Buffer with objectId data.\n */\nfunction generateDoubleAttributeBuffer(featureIds: any[]): ArrayBuffer {\n const count = new Uint32Array([featureIds.length]);\n const padding = new Uint8Array(4);\n const valuesArray = new Float64Array(featureIds);\n\n return concatenateArrayBuffers(count.buffer, padding.buffer, valuesArray.buffer);\n}\n\n/**\n * Convert batch table attributes to array buffer with batch table data.\n * @param batchAttributes\n * @returns - Buffer with batch table data.\n */\nfunction generateStringAttributeBuffer(batchAttributes: any[]): ArrayBuffer {\n const stringCountArray = new Uint32Array([batchAttributes.length]);\n let totalNumberOfBytes = 0;\n const stringSizesArray = new Uint32Array(batchAttributes.length);\n const stringBufferArray: ArrayBuffer[] = [];\n\n for (let index = 0; index < batchAttributes.length; index++) {\n const currentString = `${String(batchAttributes[index])}\\0`;\n const currentStringBuffer = Buffer.from(currentString);\n const currentStringSize = currentStringBuffer.length;\n totalNumberOfBytes += currentStringSize;\n stringSizesArray[index] = currentStringSize;\n stringBufferArray.push(currentStringBuffer);\n }\n\n const totalBytes = new Uint32Array([totalNumberOfBytes]);\n\n return concatenateArrayBuffers(\n stringCountArray.buffer,\n totalBytes.buffer,\n stringSizesArray.buffer,\n ...stringBufferArray\n );\n}\n\n/**\n * Convert featureIds to BigUint64Array.\n * @param featureIds\n * @returns - Array of feature ids in BigUint64 format.\n */\nfunction generateBigUint64Array(featureIds: any[]): BigUint64Array {\n const typedFeatureIds = new BigUint64Array(featureIds.length);\n for (let index = 0; index < featureIds.length; index++) {\n typedFeatureIds[index] = BigInt(featureIds[index]);\n }\n return typedFeatureIds;\n}\n\n/**\n * Generates draco compressed geometry\n * @param vertexCount\n * @param convertedAttributes - get rid of this argument here\n * @param attributes - geometry attributes to compress\n * @param libraries - dynamicaly loaded 3rd-party libraries\n * @returns - Compressed geometry.\n */\nasync function generateCompressedGeometry(\n vertexCount: number,\n convertedAttributes: Record<string, any>,\n attributes: Record<string, any>,\n libraries: Record<string, string>\n): Promise<ArrayBuffer> {\n const {positions, normals, texCoords, colors, uvRegions, featureIds, faceRange} = attributes;\n const indices = new Uint32Array(vertexCount);\n\n for (let index = 0; index < indices.length; index++) {\n indices.set([index], index);\n }\n\n const featureIndices = new Uint32Array(\n convertedAttributes.featureIndices.length ? convertedAttributes.featureIndices : vertexCount\n );\n\n const featureIndex = generateFeatureIndexAttribute(featureIndices, faceRange);\n\n const compressedAttributes: {\n positions: TypedArray;\n normals: TypedArray;\n colors: TypedArray;\n 'feature-index': TypedArray;\n texCoords?: TypedArray;\n 'uv-region'?: TypedArray;\n } = {\n positions,\n normals,\n colors,\n 'feature-index': featureIndex\n };\n\n if (texCoords.length) {\n compressedAttributes.texCoords = texCoords;\n }\n\n const attributesMetadata = {\n 'feature-index': {\n 'i3s-attribute-type': 'feature-index',\n 'i3s-feature-ids': new Int32Array(featureIds)\n }\n };\n\n if (uvRegions.length) {\n compressedAttributes['uv-region'] = uvRegions;\n attributesMetadata['uv-region'] = {\n 'i3s-attribute-type': 'uv-region'\n };\n }\n\n return encode({attributes: compressedAttributes, indices}, DracoWriterWorker, {\n ...DracoWriterWorker.options,\n reuseWorkers: true,\n _nodeWorkers: true,\n modules: libraries,\n useLocalLibraries: true,\n draco: {\n method: 'MESH_SEQUENTIAL_ENCODING',\n attributesMetadata\n },\n ['draco-writer']: {\n // We need to load local fs workers because nodejs can't load workers from the Internet\n workerUrl: './modules/draco/dist/draco-writer-worker-node.js'\n }\n });\n}\n\n/**\n * Generates ordered feature indices based on face range\n * @param featureIndex\n * @param faceRange\n * @returns\n */\nfunction generateFeatureIndexAttribute(\n featureIndex: Uint32Array,\n faceRange: Uint32Array\n): Uint32Array {\n const orderedFeatureIndices = new Uint32Array(featureIndex.length);\n let fillIndex = 0;\n let startIndex = 0;\n\n for (let index = 1; index < faceRange.length; index += 2) {\n const endIndex = (faceRange[index] + 1) * VALUES_PER_VERTEX;\n\n orderedFeatureIndices.fill(fillIndex, startIndex, endIndex);\n\n fillIndex++;\n startIndex = endIndex + 1;\n }\n\n return orderedFeatureIndices;\n}\n\n/**\n * Find property table in tile\n * For example it can be batchTable for b3dm files or property table in gLTF extension.\n * @param tileContent - 3DTiles tile content\n * @param metadataClass - user selected feature metadata class name\n * @return batch table from b3dm / feature properties from EXT_FEATURE_METADATA, EXT_MESH_FEATURES or EXT_STRUCTURAL_METADATA\n */\nexport function getPropertyTable(\n tileContent: Tiles3DTileContent | null,\n metadataClass?: string\n): FeatureTableJson | null {\n if (!tileContent) {\n return null;\n }\n let propertyTable: FeatureTableJson | null;\n const batchTableJson = tileContent?.batchTableJson;\n\n if (batchTableJson) {\n return batchTableJson;\n }\n\n const {extensionName, extension} = getPropertyTableExtension(tileContent);\n\n switch (extensionName) {\n case EXT_MESH_FEATURES: {\n propertyTable = getPropertyTableFromExtMeshFeatures(\n extension as GLTF_EXT_mesh_features,\n metadataClass\n );\n return propertyTable;\n }\n case EXT_STRUCTURAL_METADATA: {\n propertyTable = getPropertyTableFromExtStructuralMetadata(\n extension as GLTF_EXT_structural_metadata,\n metadataClass\n );\n return propertyTable;\n }\n case EXT_FEATURE_METADATA: {\n propertyTable = getPropertyTableFromExtFeatureMetadata(\n extension as GLTF_EXT_feature_metadata_GLTF,\n metadataClass\n );\n return propertyTable;\n }\n default:\n return null;\n }\n}\n\n/**\n * Check extensions which can be with property table inside.\n * @param tileContent - 3DTiles tile content\n */\nfunction getPropertyTableExtension(tileContent: Tiles3DTileContent): {\n extensionName: null | string;\n extension:\n | string\n | GLTF_EXT_feature_metadata_GLTF\n | GLTF_EXT_structural_metadata\n | GLTF_EXT_mesh_features\n | null;\n} {\n const extensionsWithPropertyTables = [\n EXT_FEATURE_METADATA,\n EXT_STRUCTURAL_METADATA,\n EXT_MESH_FEATURES\n ];\n const extensionsUsed = tileContent?.gltf?.extensionsUsed;\n\n if (!extensionsUsed) {\n return {extensionName: null, extension: null};\n }\n\n let extensionName: string = '';\n for (const extensionItem of tileContent?.gltf?.extensionsUsed || []) {\n if (extensionsWithPropertyTables.includes(extensionItem)) {\n extensionName = extensionItem;\n break;\n }\n }\n\n if (!extensionName) {\n return {extensionName: null, extension: null};\n }\n\n const extension = tileContent?.gltf?.extensions?.[extensionName] as\n | string // EXT_mesh_features doesn't have global metadata\n | GLTF_EXT_feature_metadata_GLTF;\n\n return {extensionName, extension};\n}\n\n/**\n * Handle EXT_feature_metadata to get property table\n * @param extension - global level of EXT_FEATURE_METADATA extension\n * @param metadataClass - user selected feature metadata class name\n * @returns {FeatureTableJson | null} Property table or null if the extension can't be handled properly.\n */\nfunction getPropertyTableFromExtFeatureMetadata(\n extension: GLTF_EXT_feature_metadata_GLTF,\n metadataClass?: string\n): FeatureTableJson | null {\n if (extension?.featureTables) {\n /**\n * Take only first feature table to generate attributes storage info object.\n * TODO: Think about getting data from all feature tables?\n * It can be tricky just because 3dTiles is able to have multiple featureId attributes and multiple feature tables.\n * In I3S we should decide which featureIds attribute will be passed to geometry data.\n */\n const firstFeatureTableName = Object.keys(extension.featureTables)?.[0];\n\n if (firstFeatureTableName) {\n const featureTable = extension?.featureTables[firstFeatureTableName];\n const propertyTable = {};\n\n for (const propertyName in featureTable.properties) {\n propertyTable[propertyName] = featureTable.properties[propertyName].data;\n }\n\n return propertyTable;\n }\n }\n\n if (extension?.featureTextures) {\n let featureTexture: string | undefined;\n for (const textureKey in extension.featureTextures) {\n const texture = extension.featureTextures[textureKey];\n if (texture.class === metadataClass) {\n featureTexture = textureKey;\n }\n }\n\n if (typeof featureTexture === 'string') {\n const featureTable = extension?.featureTextures[featureTexture];\n const propertyTable = {};\n\n for (const propertyName in featureTable.properties) {\n propertyTable[propertyName] = featureTable.properties[propertyName].data;\n }\n\n return propertyTable;\n }\n }\n\n console.warn(\n \"The I3S converter couldn't handle EXT_feature_metadata extension: There is neither featureTables, no featureTextures in the extension.\"\n );\n return null;\n}\n\n/**\n * Handle EXT_structural_metadata to get property table\n * @param extension - global level of EXT_STRUCTURAL_METADATA extension\n * @param metadataClass - user selected feature metadata class name\n * @returns {FeatureTableJson | null} Property table or null if the extension can't be handled properly.\n */\nfunction getPropertyTableFromExtStructuralMetadata(\n extension: GLTF_EXT_structural_metadata,\n metadataClass?: string\n): FeatureTableJson | null {\n if (extension?.propertyTables) {\n /**\n * Take only first feature table to generate attributes storage info object.\n * TODO: Think about getting data from all feature tables?\n * It can be tricky just because 3dTiles is able to have multiple featureId attributes and multiple feature tables.\n * In I3S we should decide which featureIds attribute will be passed to geometry data.\n */\n const firstPropertyTable = extension?.propertyTables[0];\n const propertyTableWithData = {};\n\n for (const propertyName in firstPropertyTable.properties) {\n propertyTableWithData[propertyName] = firstPropertyTable.properties[propertyName].data;\n }\n\n return propertyTableWithData;\n }\n\n if (extension?.propertyTextures) {\n /**\n * Take only first feature table to generate attributes storage info object.\n * TODO: Think about getting data from all feature tables?\n * It can be tricky just because 3dTiles is able to have multiple featureId attributes and multiple feature tables.\n * In I3S we should decide which featureIds attribute will be passed to geometry data.\n */\n if (extension?.propertyTextures) {\n const firstPropertyTexture = extension?.propertyTextures[0];\n const propertyTableWithData = {};\n\n for (const propertyName in firstPropertyTexture.properties) {\n propertyTableWithData[propertyName] = firstPropertyTexture.properties[propertyName].data;\n }\n\n return propertyTableWithData;\n }\n }\n\n console.warn(\n \"The I3S converter couldn't handle EXT_structural_metadata extension: There is neither propertyTables, no propertyTextures in the extension.\"\n );\n return null;\n}\n\n/**\n * Handle EXT_mesh_features to get property table\n * @param extension - global level of EXT_MESH_FEATURES extension\n * @param metadataClass - user selected feature metadata class name\n * @returns {FeatureTableJson | null} Property table or null if the extension can't be handled properly.\n */\nfunction getPropertyTableFromExtMeshFeatures(\n extension: GLTF_EXT_mesh_features,\n metadataClass?: string\n): FeatureTableJson | null {\n if (extension?.featureIds) {\n const firstFeatureId = extension?.featureIds[0];\n const propertyTableWithData = {};\n\n // When firstFeatureId.propertyTable is defined, the property data will be taken from EXT_structural_metadata extension\n if (!firstFeatureId.propertyTable) {\n console.warn(\n 'Should be implemented as we have the tileset with Ext_mesh_features not linked with EXT_structural_metadata extension'\n );\n }\n\n return propertyTableWithData;\n }\n\n console.warn(\n \"The I3S converter couldn't handle EXT_mesh_features extension: There is no featureIds in the extension.\"\n );\n return null;\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,GAAA,GAAAC,sBAAA,CAAAN,OAAA;AACA,IAAAO,KAAA,GAAAP,OAAA;AACA,IAAAQ,mBAAA,GAAAR,OAAA;AACA,IAAAS,oBAAA,GAAAT,OAAA;AAgBA,IAAAU,eAAA,GAAAV,OAAA;AACA,IAAAW,mBAAA,GAAAX,OAAA;AACA,IAAAY,kBAAA,GAAAZ,OAAA;AACA,IAAAa,KAAA,GAAAb,OAAA;AAQA,IAAAc,cAAA,GAAAd,OAAA;AAGA,IAAAe,KAAA,GAAAf,OAAA;AAAkG,SAAAgB,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAI,wBAAAC,GAAA,EAAAL,WAAA,SAAAA,WAAA,IAAAK,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,aAAAE,OAAA,CAAAF,GAAA,yBAAAA,GAAA,4BAAAG,OAAA,EAAAH,GAAA,UAAAI,KAAA,GAAAV,wBAAA,CAAAC,WAAA,OAAAS,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAL,GAAA,YAAAI,KAAA,CAAAE,GAAA,CAAAN,GAAA,SAAAO,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAZ,GAAA,QAAAY,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAf,GAAA,EAAAY,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,GAAA,EAAAY,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAZ,GAAA,CAAAY,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAH,GAAA,MAAAI,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAjB,GAAA,EAAAO,MAAA,YAAAA,MAAA;AAAA,SAAAW,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAZ,MAAA,CAAAY,IAAA,CAAAF,MAAA,OAAAV,MAAA,CAAAa,qBAAA,QAAAC,OAAA,GAAAd,MAAA,CAAAa,qBAAA,CAAAH,MAAA,GAAAC,cAAA,KAAAG,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAhB,MAAA,CAAAE,wBAAA,CAAAQ,MAAA,EAAAM,GAAA,EAAAC,UAAA,OAAAL,IAAA,CAAAM,IAAA,CAAAC,KAAA,CAAAP,IAAA,EAAAE,OAAA,YAAAF,IAAA;AAAA,SAAAQ,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAb,OAAA,CAAAT,MAAA,CAAAyB,MAAA,OAAAC,OAAA,WAAAvB,GAAA,QAAAwB,gBAAA,CAAAjC,OAAA,EAAA2B,MAAA,EAAAlB,GAAA,EAAAsB,MAAA,CAAAtB,GAAA,SAAAH,MAAA,CAAA4B,yBAAA,GAAA5B,MAAA,CAAA6B,gBAAA,CAAAR,MAAA,EAAArB,MAAA,CAAA4B,yBAAA,CAAAH,MAAA,KAAAhB,OAAA,CAAAT,MAAA,CAAAyB,MAAA,GAAAC,OAAA,WAAAvB,GAAA,IAAAH,MAAA,CAAAC,cAAA,CAAAoB,MAAA,EAAAlB,GAAA,EAAAH,MAAA,CAAAE,wBAAA,CAAAuB,MAAA,EAAAtB,GAAA,iBAAAkB,MAAA;AAAA,SAAAS,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,CAAAP,MAAA,qBAAAS,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAX,CAAA,UAAAiB,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAnB,CAAA,IAAAS,CAAA,CAAAP,MAAA,WAAAkB,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAZ,CAAA,CAAAT,CAAA,UAAAsB,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAP,EAAA,GAAAA,EAAA,CAAA3B,IAAA,CAAAyB,CAAA,MAAAU,CAAA,WAAAA,EAAA,QAAAU,IAAA,GAAAlB,EAAA,CAAAmB,IAAA,IAAAJ,gBAAA,GAAAG,IAAA,CAAAT,IAAA,SAAAS,IAAA,KAAAP,CAAA,WAAAA,EAAAS,GAAA,IAAAJ,MAAA,SAAAC,GAAA,GAAAG,GAAA,KAAAP,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAf,EAAA,CAAAqB,MAAA,UAAArB,EAAA,CAAAqB,MAAA,oBAAAL,MAAA,QAAAC,GAAA;AAAA,SAAAZ,4BAAAP,CAAA,EAAAwB,MAAA,SAAAxB,CAAA,qBAAAA,CAAA,sBAAAyB,iBAAA,CAAAzB,CAAA,EAAAwB,MAAA,OAAAd,CAAA,GAAAzC,MAAA,CAAAI,SAAA,CAAAqD,QAAA,CAAAnD,IAAA,CAAAyB,CAAA,EAAA2B,KAAA,aAAAjB,CAAA,iBAAAV,CAAA,CAAA4B,WAAA,EAAAlB,CAAA,GAAAV,CAAA,CAAA4B,WAAA,CAAAC,IAAA,MAAAnB,CAAA,cAAAA,CAAA,mBAAAL,KAAA,CAAAyB,IAAA,CAAA9B,CAAA,OAAAU,CAAA,+DAAAqB,IAAA,CAAArB,CAAA,UAAAe,iBAAA,CAAAzB,CAAA,EAAAwB,MAAA;AAAA,SAAAC,kBAAAO,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAAvC,MAAA,EAAAwC,GAAA,GAAAD,GAAA,CAAAvC,MAAA,WAAAF,CAAA,MAAA2C,IAAA,OAAA7B,KAAA,CAAA4B,GAAA,GAAA1C,CAAA,GAAA0C,GAAA,EAAA1C,CAAA,IAAA2C,IAAA,CAAA3C,CAAA,IAAAyC,GAAA,CAAAzC,CAAA,UAAA2C,IAAA;AAGlG,IAAMC,wBAAwB,GAAG,CAAC;AAClC,IAAMC,uBAAuB,GAAG,CAAC;AAEjC,IAAMC,iBAAiB,GAAG,CAAC;AAC3B,IAAMC,oBAAoB,GAAG,CAAC;AAC9B,IAAMC,wBAAwB,GAAG,CAAC;AAElC,IAAMC,WAAW,GAAG,QAAQ;AAC5B,IAAMC,cAAc,GAAG,OAAO;AAC9B,IAAMC,WAAW,GAAG,SAAS;AAC7B,IAAMC,cAAc,GAAG,OAAO;AAM9B,IAAMC,mCAAmC,GAAG,CAAC,oBAAoB,EAAE,UAAU,EAAE,SAAS,CAAC;AAEzF,IAAIC,aAAa,GAAG,IAAIC,aAAO,CAAC,CAAC;AAAC,SAqBJC,wBAAwBA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;EAAA,OAAAC,yBAAA,CAAAzE,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAqE,0BAAA;EAAAA,yBAAA,OAAAC,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAvC,SAAAC,QACbC,WAA+B,EAC/BC,aAAsB,EACtBC,kBAAwD,EACxDC,iBAAwC,EACxCC,aAAsC,EACtCC,iBAA2B,EAC3BC,oBAAwD,EACxDC,KAAc,EACdC,uBAAgC,EAChCC,oBAA6B,EAC7BC,gBAAuB,EACvBC,SAAiC,EACjCC,aAAsB;IAAA,IAAAC,kBAAA;IAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,2BAAA,EAAAC,cAAA,EAAAC,sBAAA,EAAAC,MAAA,EAAAC,UAAA,EAAAC,MAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,mBAAA,EAAAC,QAAA,EAAAC,OAAA,EAAAC,MAAA;IAAA,OAAA9B,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAA3E,IAAA;QAAA;UAEhB2D,qBAAqB,GAAGN,uBAAuB;UAAAsB,QAAA,CAAA3E,IAAA;UAAA,OACU6E,gBAAgB,EAAAnB,kBAAA,GAC7Eb,WAAW,CAACiC,IAAI,cAAApB,kBAAA,uBAAhBA,kBAAA,CAAkBqB,SAAS,EAC3BzB,oBACF,CAAC;QAAA;UAHKM,sBAAgD,GAAAe,QAAA,CAAAK,IAAA;UAKhDnB,2BAA2B,GAAG,IAAAoB,kDAAkC,EACpEpC,WAAW,EACXC,aAAa,EACbC,kBACF,CAAC;UACKe,cAAc,GAAG,IAAAoB,6CAAyB,EAACrC,WAAW,EAAEY,aAAa,CAAC;UAAAkB,QAAA,CAAA3E,IAAA;UAAA,OACLmF,iBAAiB,CACtFtB,2BAA2B,EAC3BD,sBAAsB,EACtBD,qBAAqB,EACrBG,cACF,CAAC;QAAA;UALKC,sBAAwD,GAAAY,QAAA,CAAAK,IAAA;UAe9D,IAAI3B,uBAAuB,EAAE;YAC3B+B,oCAAoC,CAACrB,sBAAsB,EAAER,gBAAgB,CAAC;UAChF;UAEMS,MAA+B,GAAG,EAAE;UAAAC,UAAA,GAAAvF,0BAAA,CACTkF,sBAAsB;UAAAe,QAAA,CAAAC,IAAA;UAAAX,UAAA,CAAA7E,CAAA;QAAA;UAAA,KAAA8E,MAAA,GAAAD,UAAA,CAAA5E,CAAA,IAAAC,IAAA;YAAAqF,QAAA,CAAA3E,IAAA;YAAA;UAAA;UAA5CmE,kBAAkB,GAAAD,MAAA,CAAA3E,KAAA;UACrB6E,kBAAkB,GAAGD,kBAAkB,CAACkB,eAAe,CAAC,CAAC,CAAC,CAACC,kBAAkB;UAAA,IAC9EvB,sBAAsB,CAACvH,GAAG,CAAC4H,kBAAkB,CAAC;YAAAO,QAAA,CAAA3E,IAAA;YAAA;UAAA;UAAA,OAAA2E,QAAA,CAAAY,MAAA;QAAA;UAG7ClB,mBAAmB,GAAGN,sBAAsB,CAACtH,GAAG,CAAC2H,kBAAkB,CAAC;UAAA,IACrEC,mBAAmB;YAAAM,QAAA,CAAA3E,IAAA;YAAA;UAAA;UAAA,OAAA2E,QAAA,CAAAY,MAAA;QAAA;UAGjBjB,QAAQ,GAAaH,kBAAkB,CAAvCG,QAAQ,EAAEC,OAAO,GAAIJ,kBAAkB,CAA7BI,OAAO;UAAAI,QAAA,CAAA3E,IAAA;UAAA,OACHgD,iBAAiB,CAAC,CAAC;QAAA;UAAlCwB,MAAM,GAAAG,QAAA,CAAAK,IAAA;UAAAL,QAAA,CAAAa,EAAA,GACZxB,MAAM;UAAAW,QAAA,CAAA3E,IAAA;UAAA,OACEyF,kBAAkB,CAAC;YACvBpB,mBAAmB,EAAnBA,mBAAmB;YACnBC,QAAQ,EAARA,QAAQ;YACRC,OAAO,EAAPA,OAAO;YACP1B,WAAW,EAAXA,WAAW;YACX2B,MAAM,EAANA,MAAM;YACNtB,iBAAiB,EAAjBA,iBAAiB;YACjBD,aAAa,EAAbA,aAAa;YACbE,oBAAoB,EAApBA,oBAAoB;YACpBC,KAAK,EAALA,KAAK;YACLI,SAAS,EAATA;UACF,CAAC,CAAC;QAAA;UAAAmB,QAAA,CAAAe,EAAA,GAAAf,QAAA,CAAAK,IAAA;UAAAL,QAAA,CAAAa,EAAA,CAZG1H,IAAI,CAAAZ,IAAA,CAAAyH,QAAA,CAAAa,EAAA,EAAAb,QAAA,CAAAe,EAAA;QAAA;UAAAf,QAAA,CAAA3E,IAAA;UAAA;QAAA;UAAA2E,QAAA,CAAA3E,IAAA;UAAA;QAAA;UAAA2E,QAAA,CAAAC,IAAA;UAAAD,QAAA,CAAAgB,EAAA,GAAAhB,QAAA;UAAAV,UAAA,CAAAzE,CAAA,CAAAmF,QAAA,CAAAgB,EAAA;QAAA;UAAAhB,QAAA,CAAAC,IAAA;UAAAX,UAAA,CAAAvE,CAAA;UAAA,OAAAiF,QAAA,CAAAiB,MAAA;QAAA;UAAA,IAgBR5B,MAAM,CAAC5F,MAAM;YAAAuG,QAAA,CAAA3E,IAAA;YAAA;UAAA;UAAA,OAAA2E,QAAA,CAAAY,MAAA,WACT,IAAI;QAAA;UAAA,OAAAZ,QAAA,CAAAY,MAAA,WAENvB,MAAM;QAAA;QAAA;UAAA,OAAAW,QAAA,CAAAkB,IAAA;MAAA;IAAA,GAAAjD,OAAA;EAAA,CACd;EAAA,OAAAJ,yBAAA,CAAAzE,KAAA,OAAAI,SAAA;AAAA;AAOD,SAASiH,oCAAoCA,CAC3CrB,sBAAwD,EACxDR,gBAAuB,EACvB;EAAA,IAAAuC,SAAA,GAAApH,0BAAA,CACyBqF,sBAAsB,CAACgC,MAAM,CAAC,CAAC;IAAAC,KAAA;EAAA;IAAxD,KAAAF,SAAA,CAAA1G,CAAA,MAAA4G,KAAA,GAAAF,SAAA,CAAAzG,CAAA,IAAAC,IAAA,GAA0D;MAAA,IAA/C2G,UAAU,GAAAD,KAAA,CAAAzG,KAAA;MACnB,IAAM2G,eAAe,GAAG,IAAAC,sDAAiC,EACvDF,UAAU,CAACG,SAAS,EACpB7C,gBACF,CAAC;MAED0C,UAAU,CAACC,eAAe,GAAGA,eAAe;MAC5C,IAAMG,kBAAkB,GAAGH,eAAe,CAACI,GAAG,CAACC,MAAM;MAErD,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGP,UAAU,CAACG,SAAS,CAAChI,MAAM,EAAEoI,KAAK,IAAIxF,iBAAiB,EAAE;QACnF,IAAMyF,MAAM,GAAGR,UAAU,CAACG,SAAS,CAACM,QAAQ,CAACF,KAAK,EAAEA,KAAK,GAAGxF,iBAAiB,CAAC;QAC9E2F,qBAAS,CAACC,KAAK,CAACC,uBAAuB,CAAC7H,KAAK,CAACyB,IAAI,CAACgG,MAAM,CAAC,EAAEjF,aAAa,CAAC;QAC1EA,aAAa,CAAC,CAAC,CAAC,GACdA,aAAa,CAAC,CAAC,CAAC,GAAG+B,gBAAgB,CAACuD,SAAS,CAACtF,aAAa,CAAC,CAAC,CAAC,EAAEA,aAAa,CAAC,CAAC,CAAC,CAAC;QACnFA,aAAa,GAAGA,aAAa,CAACuF,QAAQ,CAACV,kBAAkB,CAAC;QAC1DJ,UAAU,CAACG,SAAS,CAAChJ,GAAG,CAACoE,aAAa,EAAEgF,KAAK,CAAC;MAChD;IACF;EAAC,SAAA1G,GAAA;IAAAgG,SAAA,CAAAtG,CAAA,CAAAM,GAAA;EAAA;IAAAgG,SAAA,CAAApG,CAAA;EAAA;AACH;AAAC,SAiBc+F,kBAAkBA,CAAAuB,IAAA;EAAA,OAAAC,mBAAA,CAAAlJ,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAA8I,oBAAA;EAAAA,mBAAA,OAAAxE,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAjC,SAAAuE,SAAAC,IAAA;IAAA,IAAAC,kBAAA;IAAA,IAAA/C,mBAAA,EAAAC,QAAA,EAAAC,OAAA,EAAA1B,WAAA,EAAA2B,MAAA,EAAAtB,iBAAA,EAAAD,aAAA,EAAAE,oBAAA,EAAAC,KAAA,EAAAI,SAAA,EAAA0C,eAAA,EAAAmB,WAAA,EAAAC,mBAAA,EAAAC,SAAA,EAAAC,UAAA,EAAApB,SAAA,EAAAqB,OAAA,EAAAC,MAAA,EAAAC,SAAA,EAAAC,SAAA,EAAAC,YAAA,EAAAC,aAAA,EAAAC,MAAA,EAAAC,eAAA,EAAAC,UAAA,EAAAC,kBAAA,EAAAjC,UAAA;IAAA,OAAAvD,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAA0D,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAxD,IAAA,GAAAwD,SAAA,CAAApI,IAAA;QAAA;UACEqE,mBAAmB,GAAA8C,IAAA,CAAnB9C,mBAAmB,EACnBC,QAAQ,GAAA6C,IAAA,CAAR7C,QAAQ,EACRC,OAAO,GAAA4C,IAAA,CAAP5C,OAAO,EACP1B,WAAW,GAAAsE,IAAA,CAAXtE,WAAW,EACX2B,MAAM,GAAA2C,IAAA,CAAN3C,MAAM,EACNtB,iBAAiB,GAAAiE,IAAA,CAAjBjE,iBAAiB,EACjBD,aAAa,GAAAkE,IAAA,CAAblE,aAAa,EACbE,oBAAoB,GAAAgE,IAAA,CAApBhE,oBAAoB,EACpBC,KAAK,GAAA+D,IAAA,CAAL/D,KAAK,EACLI,SAAS,GAAA2D,IAAA,CAAT3D,SAAS;UAaH0C,eAAe,GAAG7B,mBAAmB,CAAC6B,eAAe;UACrDmB,WAAW,GAAGhD,mBAAmB,CAAC+B,SAAS,CAAChI,MAAM,GAAG4C,iBAAiB;UAAAsG,mBAAA,GAE1E,IAAAe,sCAAkB,EAAChE,mBAAmB,CAAC,EADlCkD,SAAS,GAAAD,mBAAA,CAATC,SAAS,EAAEC,UAAU,GAAAF,mBAAA,CAAVE,UAAU,EAAEpB,SAAS,GAAAkB,mBAAA,CAATlB,SAAS,EAAEqB,OAAO,GAAAH,mBAAA,CAAPG,OAAO,EAAEC,MAAM,GAAAJ,mBAAA,CAANI,MAAM,EAAEC,SAAS,GAAAL,mBAAA,CAATK,SAAS,EAAEC,SAAS,GAAAN,mBAAA,CAATM,SAAS,EAAEC,YAAY,GAAAP,mBAAA,CAAZO,YAAY;UAGxFC,aAAqC,GAAG,CAAC,CAAC;UAC9C,IAAI7E,aAAa,EAAE;YAMjB6E,aAAa,GAAGQ,oBAAoB,CAClCd,UAAU,EACVnD,mBAAmB,CAACkE,cAAc,EAClCrF,iBAAiB,EACjBD,aACF,CAAC;UACH;UAEM8E,MAAM,GAAG,IAAIS,WAAW,CAAC,CAAC,CAAC;UAC3BR,eAAe,GAAGS,sBAAsB,CAACjB,UAAU,CAAC;UAE1DO,MAAM,CAAC3K,GAAG,CAAC,CAACiK,WAAW,EAAEQ,YAAY,CAAC,EAAE,CAAC,CAAC;UACpCI,UAAU,GAAG,IAAIS,UAAU,CAC/B,IAAAC,oCAAuB,EACrBZ,MAAM,CAACa,MAAM,EACbxC,SAAS,CAACwC,MAAM,EAChBnB,OAAO,CAACmB,MAAM,EACdrE,OAAO,GAAGqD,SAAS,CAACgB,MAAM,GAAG,IAAIC,WAAW,CAAC,CAAC,CAAC,EAC/CnB,MAAM,CAACkB,MAAM,EACbjB,SAAS,EACTK,eAAe,CAACY,MAAM,EACtBrB,SAAS,CAACqB,MACZ,CACF,CAAC;UACKV,kBAAkB,GAAG9E,KAAK,GAC5B0F,0BAA0B,CACxBzB,WAAW,EACXhD,mBAAmB,EACnB;YACE+B,SAAS,EAATA,SAAS;YACTqB,OAAO,EAAPA,OAAO;YACPG,SAAS,EAAErD,OAAO,GAAGqD,SAAS,GAAG,IAAImB,YAAY,CAAC,CAAC,CAAC;YACpDrB,MAAM,EAANA,MAAM;YACNC,SAAS,EAATA,SAAS;YACTH,UAAU,EAAVA,UAAU;YACVD,SAAS,EAATA;UACF,CAAC,EACD/D,SACF,CAAC,GACD,IAAI;UAEJyC,UAAyB,GAAG,EAAE;UAElC,IAAI9C,oBAAoB,IAAIF,aAAa,EAAE;YACzCgD,UAAU,GAAG+C,sCAAsC,CACjDxB,UAAU,EACVM,aAAa,EACb7E,aAAa,EACbE,oBACF,CAAC;UACH;UAAC,OAAAiF,SAAA,CAAA7C,MAAA,WAEM;YACLf,MAAM,EAANA,MAAM;YACNyE,QAAQ,EAAEhB,UAAU;YACpBC,kBAAkB,EAAlBA,kBAAkB;YAClB3D,OAAO,EAAPA,OAAO;YACP2E,YAAY,EAAEC,OAAO,CAACxB,SAAS,CAACvJ,MAAM,CAAC;YACvCgL,eAAe,EAAEC,kBAAkB,CAAC,EAAAjC,kBAAA,GAAAvE,WAAW,CAACiC,IAAI,cAAAsC,kBAAA,uBAAhBA,kBAAA,CAAkBrC,SAAS,KAAI,EAAE,EAAEP,MAAM,CAAC;YAC9E8E,YAAY,EAAEhF,QAAQ;YACtB+C,WAAW,EAAXA,WAAW;YACXpB,UAAU,EAAVA,UAAU;YACV4B,YAAY,EAAZA,YAAY;YACZ3B,eAAe,EAAfA;UACF,CAAC;QAAA;QAAA;UAAA,OAAAkC,SAAA,CAAAvC,IAAA;MAAA;IAAA,GAAAqB,QAAA;EAAA,CACF;EAAA,OAAAD,mBAAA,CAAAlJ,KAAA,OAAAI,SAAA;AAAA;AAAA,SAWqBgH,iBAAiBA,CAAAoE,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;EAAA,OAAAC,kBAAA,CAAA5L,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAwL,mBAAA;EAAAA,kBAAA,OAAAlH,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAhC,SAAAiH,SACLC,cAAkC,EAClCjG,sBAAgD,EAChDD,qBAA8B,EAC9BG,cAA6B;IAAA,IAAAgG,KAAA,EAAAC,MAAA,EAAA1D,kBAAA,EAAA2D,oBAAA,EAAAC,aAAA,EAAAC,UAAA,EAAAC,MAAA,EAAAhG,kBAAA,EAAA8B,UAAA,EAAAmE,UAAA,EAAAC,MAAA,EAAAC,cAAA,EAAAC,UAAA,EAAAC,MAAA,EAAAC,OAAA,EAAAC,WAAA;IAAA,OAAAhI,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAAkG,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAhG,IAAA,GAAAgG,SAAA,CAAA5K,IAAA;QAAA;UAEtB8J,KAAK,GAAsDD,cAAc,CAAzEC,KAAK,EAAEC,MAAM,GAA8CF,cAAc,CAAlEE,MAAM,EAAE1D,kBAAkB,GAA0BwD,cAAc,CAA1DxD,kBAAkB,EAAE2D,oBAAoB,GAAIH,cAAc,CAAtCG,oBAAoB;UACxDC,aAAa,GAAG,IAAIY,GAAG,CAA8B,CAAC;UAAAX,UAAA,GAAAxL,0BAAA,CAE3BkF,sBAAsB;UAAA;YAAvD,KAAAsG,UAAA,CAAA9K,CAAA,MAAA+K,MAAA,GAAAD,UAAA,CAAA7K,CAAA,IAAAC,IAAA,GAAyD;cAA9C6E,kBAAkB,GAAAgG,MAAA,CAAA5K,KAAA;cACrB0G,UAAU,GAAG;gBACjBG,SAAS,EAAE,IAAI2C,YAAY,CAAC,CAAC,CAAC;gBAC9BtB,OAAO,EAAE,IAAIsB,YAAY,CAAC,CAAC,CAAC;gBAC5BnB,SAAS,EAAE,IAAImB,YAAY,CAAC,CAAC,CAAC;gBAC9BrB,MAAM,EAAE,IAAIgB,UAAU,CAAC,CAAC,CAAC;gBACzBf,SAAS,EAAE,IAAImD,WAAW,CAAC,CAAC,CAAC;gBAC7BC,oBAAoB,EAAE,EAAE;gBACxBxC,cAAc,EAAE,EAAE;gBAClBrC,eAAe,EAAE,IAAI;gBACrBb,eAAe,EAAElB,kBAAkB,CAACkB;cACtC,CAAC;cAAA+E,UAAA,GAAA1L,0BAAA,CAC4ByF,kBAAkB,CAACkB,eAAe;cAAA;gBAA/D,KAAA+E,UAAA,CAAAhL,CAAA,MAAAiL,MAAA,GAAAD,UAAA,CAAA/K,CAAA,IAAAC,IAAA,GAAiE;kBAAtDgL,cAAc,GAAAD,MAAA,CAAA9K,KAAA;kBACvB0K,aAAa,CAAC7M,GAAG,CAACkN,cAAc,CAAChF,kBAAkB,EAAEW,UAAU,CAAC;gBAClE;cAAC,SAAAnG,GAAA;gBAAAsK,UAAA,CAAA5K,CAAA,CAAAM,GAAA;cAAA;gBAAAsK,UAAA,CAAA1K,CAAA;cAAA;YACH;UAAC,SAAAI,GAAA;YAAAoK,UAAA,CAAA1K,CAAA,CAAAM,GAAA;UAAA;YAAAoK,UAAA,CAAAxK,CAAA;UAAA;UAEDsL,YAAY,CACVlB,KAAK,EACLC,MAAM,EACN1D,kBAAkB,EAClB2D,oBAAoB,EACpBC,aAAa,EACbtG,qBAAqB,EACrBsH,SAAS,EACTnH,cACF,CAAC;UAACyG,UAAA,GAAA7L,0BAAA,CAEoBuL,aAAa,CAACzM,IAAI,CAAC,CAAC;UAAAoN,SAAA,CAAAhG,IAAA;UAAA2F,UAAA,CAAAnL,CAAA;QAAA;UAAA,KAAAoL,MAAA,GAAAD,UAAA,CAAAlL,CAAA,IAAAC,IAAA;YAAAsL,SAAA,CAAA5K,IAAA;YAAA;UAAA;UAA/ByK,OAAO,GAAAD,MAAA,CAAAjL,KAAA;UACV0G,WAAU,GAAGgE,aAAa,CAACxN,GAAG,CAACgO,OAAO,CAAC;UAAA,IACxCxE,WAAU;YAAA2E,SAAA,CAAA5K,IAAA;YAAA;UAAA;UAAA,OAAA4K,SAAA,CAAArF,MAAA;QAAA;UAAA,MAGXU,WAAU,CAACG,SAAS,CAAChI,MAAM,KAAK,CAAC;YAAAwM,SAAA,CAAA5K,IAAA;YAAA;UAAA;UACnCiK,aAAa,CAACiB,MAAM,CAACT,OAAO,CAAC;UAAC,OAAAG,SAAA,CAAArF,MAAA;QAAA;UAGhC,IAAIU,WAAU,CAAC8E,oBAAoB,EAAE;YACnC9E,WAAU,CAACsC,cAAc,GAAGtC,WAAU,CAAC8E,oBAAoB,CAACI,MAAM,CAAC,UAACC,GAAG,EAAE7L,KAAK;cAAA,OAC5E6L,GAAG,CAACC,MAAM,CAAC9L,KAAK,CAAC;YAAA,CACnB,CAAC;YACD,OAAO0G,WAAU,CAAC8E,oBAAoB;UACxC;QAAC;UAAAH,SAAA,CAAA5K,IAAA;UAAA;QAAA;UAAA4K,SAAA,CAAA5K,IAAA;UAAA;QAAA;UAAA4K,SAAA,CAAAhG,IAAA;UAAAgG,SAAA,CAAApF,EAAA,GAAAoF,SAAA;UAAAL,UAAA,CAAA/K,CAAA,CAAAoL,SAAA,CAAApF,EAAA;QAAA;UAAAoF,SAAA,CAAAhG,IAAA;UAAA2F,UAAA,CAAA7K,CAAA;UAAA,OAAAkL,SAAA,CAAAhF,MAAA;QAAA;UAAA,OAAAgF,SAAA,CAAArF,MAAA,WAGI0E,aAAa;QAAA;QAAA;UAAA,OAAAW,SAAA,CAAA/E,IAAA;MAAA;IAAA,GAAA+D,QAAA;EAAA,CACrB;EAAA,OAAAD,kBAAA,CAAA5L,KAAA,OAAAI,SAAA;AAAA;AAgBD,SAAS6M,YAAYA,CACnBlB,KAA8B,EAC9BC,MAAyC,EACzC1D,kBAA2B,EAC3B2D,oBAA6B,EAC7BC,aAA+C,EAC/CtG,qBAA8B,EAG9B;EAAA,IAFA2H,MAAe,GAAAnN,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,IAAIoN,aAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAAA,IAC/EzH,cAA6B,GAAA3F,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAA8M,SAAA;EAE7B,IAAInB,KAAK,EAAE;IAAA,IAAA0B,UAAA,GAAA9M,0BAAA,CACUoL,KAAK;MAAA2B,MAAA;IAAA;MAAxB,KAAAD,UAAA,CAAApM,CAAA,MAAAqM,MAAA,GAAAD,UAAA,CAAAnM,CAAA,IAAAC,IAAA,GAA0B;QAAA,IAAfoM,IAAI,GAAAD,MAAA,CAAAlM,KAAA;QACboM,WAAW,CACTD,IAAI,EACJ3B,MAAM,EACN1D,kBAAkB,EAClB2D,oBAAoB,EACpBC,aAAa,EACbtG,qBAAqB,EACrB2H,MAAM,EACNxH,cACF,CAAC;MACH;IAAC,SAAAhE,GAAA;MAAA0L,UAAA,CAAAhM,CAAA,CAAAM,GAAA;IAAA;MAAA0L,UAAA,CAAA9L,CAAA;IAAA;EACH;AACF;AAQA,SAASkM,gCAAgCA,CAACF,IAA2B,EAAEJ,MAAe,EAAE;EACtF,IAAIO,oBAAoB,GAAGP,MAAM;EAEjC,IAAeQ,UAAU,GAAkCJ,IAAI,CAAxDJ,MAAM;IAAcS,QAAQ,GAAwBL,IAAI,CAApCK,QAAQ;IAAEC,KAAK,GAAiBN,IAAI,CAA1BM,KAAK;IAAEC,WAAW,GAAIP,IAAI,CAAnBO,WAAW;EAEvD,IAAIH,UAAU,EAAE;IACdD,oBAAoB,GAAGP,MAAM,CAACY,aAAa,CAACJ,UAAU,CAAC;EACzD;EAEA,IAAIG,WAAW,EAAE;IACfJ,oBAAoB,GAAGA,oBAAoB,CAACM,SAAS,CAACF,WAAW,CAAC;EACpE;EAEA,IAAIF,QAAQ,EAAE;IACZF,oBAAoB,GAAGA,oBAAoB,CAACO,SAAS,CAACL,QAAQ,CAAC;EACjE;EAEA,IAAIC,KAAK,EAAE;IACTH,oBAAoB,GAAGA,oBAAoB,CAACG,KAAK,CAACA,KAAK,CAAC;EAC1D;EAEA,OAAOH,oBAAoB;AAC7B;AAeA,SAASF,WAAWA,CAClBD,IAA2B,EAC3B3B,MAAyC,EACzC1D,kBAA2B,EAC3B2D,oBAA6B,EAC7BC,aAA+C,EAC/CtG,qBAAqB,EAGrB;EAAA,IAFA2H,MAAM,GAAAnN,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,IAAIoN,aAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAAA,IACtEzH,cAA6B,GAAA3F,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAA8M,SAAA;EAE7B,IAAMY,oBAAoB,GAAGD,gCAAgC,CAACF,IAAI,EAAEJ,MAAM,CAAC;EAE3E,IAAMe,IAAI,GAAGX,IAAI,CAACW,IAAI;EAEtB,IAAIA,IAAI,EAAE;IACRC,WAAW,CACTD,IAAI,EACJtC,MAAM,EACN1D,kBAAkB,EAClB2D,oBAAoB,EACpBC,aAAa,EACbtG,qBAAqB,EACrBkI,oBAAoB,EACpB/H,cACF,CAAC;EACH;EAEAkH,YAAY,CACVU,IAAI,CAACa,QAAQ,IAAI,EAAE,EACnBxC,MAAM,EACN1D,kBAAkB,EAClB2D,oBAAoB,EACpBC,aAAa,EACbtG,qBAAqB,EACrBkI,oBAAoB,EACpB/H,cACF,CAAC;AACH;AAiBA,SAASwI,WAAWA,CAClBD,IAA2B,EAC3BtC,MAAyC,EACzC1D,kBAA2B,EAC3B2D,oBAA6B,EAC7BC,aAA+C,EAI/C;EAAA,IAHAtG,qBAAqB,GAAAxF,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,KAAK;EAAA,IAC7BmN,MAAM,GAAAnN,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,IAAIoN,aAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAAA,IACtEzH,cAA6B,GAAA3F,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAA8M,SAAA;EAAA,IAAAuB,UAAA,GAAA9N,0BAAA,CAEL2N,IAAI,CAACI,UAAU;IAAAC,MAAA;EAAA;IAAA,IAAAC,KAAA,YAAAA,MAAA,EAAE;MAAA,IAA9BC,SAAS,GAAAF,MAAA,CAAAnN,KAAA;MAClB,IAAIsN,gBAAwD,GAAG,IAAI;MACnE,IAAIC,gBAAyC;MAC7C,IAAIF,SAAS,CAACtI,QAAQ,EAAE;QAAA,IAAAyI,iBAAA,EAAAC,qBAAA;QACtBH,gBAAgB,GAAG5C,aAAa,CAACxN,GAAG,CAACmQ,SAAS,CAACtI,QAAQ,CAAC2I,EAAE,CAAC;QAC3DH,gBAAgB,IAAAC,iBAAA,GAAGF,gBAAgB,cAAAE,iBAAA,wBAAAC,qBAAA,GAAhBD,iBAAA,CAAkB1H,eAAe,CAAC6H,IAAI,CACvD,UAAAC,KAAA;UAAA,IAAAC,mBAAA;UAAA,IAAE9H,kBAAkB,GAAA6H,KAAA,CAAlB7H,kBAAkB;UAAA,OAAMA,kBAAkB,OAAA8H,mBAAA,GAAKR,SAAS,CAACtI,QAAQ,cAAA8I,mBAAA,uBAAlBA,mBAAA,CAAoBH,EAAE;QAAA,CACzE,CAAC,cAAAD,qBAAA,uBAFkBA,qBAAA,CAEhBK,QAAQ;MACb,CAAC,MAAM,IAAIpD,aAAa,CAACzN,GAAG,CAAC,SAAS,CAAC,EAAE;QACvCqQ,gBAAgB,GAAG5C,aAAa,CAACxN,GAAG,CAAC,SAAS,CAAC;MACjD;MACA,IAAA6Q,aAAM,EAACT,gBAAgB,KAAK,IAAI,EAAE,qCAAqC,CAAC;MAGxE,IAAAS,aAAM,EACJV,SAAS,CAACW,IAAI,KAAKtC,SAAS,IAC1B2B,SAAS,CAACW,IAAI,KAAKC,QAAE,CAACC,SAAS,IAC/Bb,SAAS,CAACW,IAAI,KAAKC,QAAE,CAACE,cAAc,kCAAArC,MAAA,CACNuB,SAAS,CAACW,IAAI,CAChD,CAAC;MACD,IAAMtH,UAAU,GAAG2G,SAAS,CAAC3G,UAAU;MACvC,IAAI,CAAC4G,gBAAgB,EAAE;QAAA;MAEvB;MAEA,IAAMc,OAAO,GAAGC,gBAAgB,CAAChB,SAAS,CAAC;MAC3CC,gBAAgB,CAACzG,SAAS,GAAG,IAAAyH,mCAAsB,EACjDhB,gBAAgB,CAACzG,SAAS,EAC1B0H,oBAAoB,CAAC;QACnBC,QAAQ,EAAE9H,UAAU,CAAC+H,QAAQ,CAACzO,KAAK;QACnC8G,kBAAkB,EAAlBA,kBAAkB;QAClB2D,oBAAoB,EAApBA,oBAAoB;QACpB8B,UAAU,EAAER,MAAM;QAClBqC,OAAO,EAAPA,OAAO;QACPM,+BAA+B,EAAEC,wBAAwB;QACzDvK,qBAAqB,EAArBA;MACF,CAAC,CACH,CAAC;MACDkJ,gBAAgB,CAACpF,OAAO,GAAG,IAAAoG,mCAAsB,EAC/ChB,gBAAgB,CAACpF,OAAO,EACxBqG,oBAAoB,CAAC;QACnBC,QAAQ,EAAE9H,UAAU,CAACkI,MAAM,IAAIlI,UAAU,CAACkI,MAAM,CAAC5O,KAAK;QACtD8G,kBAAkB,EAAlBA,kBAAkB;QAClB2D,oBAAoB,EAApBA,oBAAoB;QACpB8B,UAAU,EAAER,MAAM;QAClBqC,OAAO,EAAPA,OAAO;QACPM,+BAA+B,EAAEG,sBAAsB;QACvDzK,qBAAqB,EAAE;MACzB,CAAC,CACH,CAAC;MACDkJ,gBAAgB,CAACjF,SAAS,GAAG,IAAAiG,mCAAsB,EACjDhB,gBAAgB,CAACjF,SAAS,EAC1ByG,gBAAgB,CAACpI,UAAU,CAACqI,UAAU,IAAIrI,UAAU,CAACqI,UAAU,CAAC/O,KAAK,EAAEoO,OAAO,CAChF,CAAC;MAEDd,gBAAgB,CAACnF,MAAM,GAAG,IAAAmG,mCAAsB,EAC9ChB,gBAAgB,CAACnF,MAAM,EACvB6G,aAAa,CAACtI,UAAU,CAACuI,OAAO,EAAEb,OAAO,CAC3C,CAAC;MAED,IAAIb,gBAAgB,EAAE;QACpBD,gBAAgB,CAAClF,SAAS,GAAG,IAAAkG,mCAAsB,EACjDhB,gBAAgB,CAAClF,SAAS,EAC1B8G,cAAc,CAAC3B,gBAAgB,EAAEa,OAAO,CAC1C,CAAC;MACH;MAEAd,gBAAgB,CAAC9B,oBAAoB,GAAG8B,gBAAgB,CAAC9B,oBAAoB,IAAI,EAAE;MACnF8B,gBAAgB,CAAC9B,oBAAoB,CAACjN,IAAI,CACxC4Q,eAAe,CAACC,WAAW,CAAC1I,UAAU,EAAE2G,SAAS,EAAE7C,MAAM,EAAEjG,cAAc,CAAC,EAAE6J,OAAO,CACrF,CAAC;IACH,CAAC;IAvED,KAAAnB,UAAA,CAAApN,CAAA,MAAAsN,MAAA,GAAAF,UAAA,CAAAnN,CAAA,IAAAC,IAAA;MAAA,IAAAsP,IAAA,GAAAjC,KAAA;MAAA,IAAAiC,IAAA,iBAsBI;IAAS;EAiDZ,SAAA9O,GAAA;IAAA0M,UAAA,CAAAhN,CAAA,CAAAM,GAAA;EAAA;IAAA0M,UAAA,CAAA9M,CAAA;EAAA;AACH;AAMA,SAASkO,gBAAgBA,CAAChB,SAAyC,EAAc;EAAA,IAAAiC,kBAAA;EAC/E,IAAIlB,OAA+B,IAAAkB,kBAAA,GAAGjC,SAAS,CAACe,OAAO,cAAAkB,kBAAA,uBAAjBA,kBAAA,CAAmBtP,KAAK;EAC9D,IAAI,CAACoO,OAAO,EAAE;IACZ,IAAMvH,SAAS,GAAGwG,SAAS,CAAC3G,UAAU,CAAC+H,QAAQ,CAACzO,KAAK;IACrD,OAAO,IAAAuP,uCAAwB,EAAC1I,SAAS,CAAChI,MAAM,GAAG4C,iBAAiB,CAAC;EACvE;EAEA,IAAI2M,OAAO,IAAIf,SAAS,CAACW,IAAI,KAAKC,QAAE,CAACE,cAAc,EAAE;IAMnD,IAAMqB,qBAAqB,GAAGpB,OAAO,CAACpN,WAAoC;IAC1E,IAAMyO,UAAU,GAAG,IAAID,qBAAqB,CAAC,CAACpB,OAAO,CAACvP,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAGtE,IAAI6Q,aAAa,GAAG,CAAC;IACrB,IAAIC,eAAe,GAAGvB,OAAO,CAACrN,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC0O,UAAU,CAAC5R,GAAG,CAAC8R,eAAe,EAAE,CAAC,CAAC;IAIlC,KAAK,IAAIhR,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;MAC3C+Q,aAAa,IAAI,CAAC;MAClBC,eAAe,GAAGvB,OAAO,CAACrN,KAAK,CAACpC,CAAC,EAAEA,CAAC,GAAG,CAAC,CAAC;MACzC,IAAIA,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACf8Q,UAAU,CAAC5R,GAAG,CAAC8R,eAAe,EAAED,aAAa,CAAC;MAChD,CAAC,MAAM;QAELD,UAAU,CAAC5R,GAAG,CAAC8R,eAAe,CAACC,OAAO,CAAC,CAAC,EAAEF,aAAa,CAAC;MAC1D;IACF;IACAtB,OAAO,GAAGqB,UAAU;EACtB;EACA,OAAOrB,OAAO;AAChB;AAcA,SAASG,oBAAoBA,CAACsB,IAQ7B,EAAgB;EACf,IAAOrB,QAAQ,GAA8CqB,IAAI,CAA1DrB,QAAQ;IAAEJ,OAAO,GAAqCyB,IAAI,CAAhDzB,OAAO;IAAEM,+BAA+B,GAAImB,IAAI,CAAvCnB,+BAA+B;EACzD,IAAMoB,WAAW,GAAG,IAAItG,YAAY,CAAC4E,OAAO,CAACvP,MAAM,GAAG4C,iBAAiB,CAAC;EACxE,IAAI,CAAC+M,QAAQ,EAAE;IACb,OAAOsB,WAAW;EACpB;EACA,KAAK,IAAInR,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;IACvC,IAAMoR,UAAU,GAAG3B,OAAO,CAACzP,CAAC,CAAC,GAAG8C,iBAAiB;IACjD,IAAMyF,MAAM,GAAGsH,QAAQ,CAACrH,QAAQ,CAAC4I,UAAU,EAAEA,UAAU,GAAGtO,iBAAiB,CAAC;IAC5E,IAAIuO,YAAY,GAAG,IAAI9N,aAAO,CAACzC,KAAK,CAACyB,IAAI,CAACgG,MAAM,CAAC,CAAC;IAElD8I,YAAY,GAAGtB,+BAA+B,CAACsB,YAAY,EAAEH,IAAI,CAAC;IAElEC,WAAW,CAACnR,CAAC,GAAG8C,iBAAiB,CAAC,GAAGuO,YAAY,CAACC,CAAC;IACnDH,WAAW,CAACnR,CAAC,GAAG8C,iBAAiB,GAAG,CAAC,CAAC,GAAGuO,YAAY,CAACE,CAAC;IACvDJ,WAAW,CAACnR,CAAC,GAAG8C,iBAAiB,GAAG,CAAC,CAAC,GAAGuO,YAAY,CAACG,CAAC;EACzD;EACA,OAAOL,WAAW;AACpB;AAYA,SAASnB,wBAAwBA,CAACqB,YAAY,EAAEI,UAAU,EAAY;EACpE,IAAO3F,oBAAoB,GAA2D2F,UAAU,CAAzF3F,oBAAoB;IAAE3D,kBAAkB,GAAuCsJ,UAAU,CAAnEtJ,kBAAkB;IAAEyF,UAAU,GAA2B6D,UAAU,CAA/C7D,UAAU;IAAEnI,qBAAqB,GAAIgM,UAAU,CAAnChM,qBAAqB;EAElF,IAAImI,UAAU,EAAE;IACdyD,YAAY,GAAGA,YAAY,CAACK,SAAS,CAAC9D,UAAU,CAAC;EACnD;EAEAyD,YAAY,GAAGA,YAAY,CAACK,SAAS,CAAC5F,oBAAoB,CAAC;EAE3D,IAAIrG,qBAAqB,EAAE;IACzB,OAAO4L,YAAY;EACrB;EAEA5I,qBAAS,CAACC,KAAK,CAACC,uBAAuB,CACrC,CAAC0I,YAAY,CAAC,CAAC,CAAC,EAAEA,YAAY,CAAC,CAAC,CAAC,EAAEA,YAAY,CAAC,CAAC,CAAC,CAAC,EACnDA,YACF,CAAC;EACDA,YAAY,GAAGA,YAAY,CAACxI,QAAQ,CAACV,kBAAkB,CAAC;EACxD,OAAOkJ,YAAY;AACrB;AAUA,SAASnB,sBAAsBA,CAACmB,YAAY,EAAEI,UAAU,EAAY;EAClE,IAAO3F,oBAAoB,GAAgB2F,UAAU,CAA9C3F,oBAAoB;IAAE8B,UAAU,GAAI6D,UAAU,CAAxB7D,UAAU;EAEvC,IAAIA,UAAU,EAAE;IACdyD,YAAY,GAAGA,YAAY,CAACM,iBAAiB,CAAC/D,UAAU,CAAC;EAC3D;EAEAyD,YAAY,GAAGA,YAAY,CAACM,iBAAiB,CAAC7F,oBAAoB,CAAC;EACnE,OAAOuF,YAAY;AACrB;AAQA,SAASlB,gBAAgBA,CAACzG,SAAqB,EAAE+F,OAAmB,EAAgB;EAClF,IAAMmC,YAAY,GAAG,IAAI/G,YAAY,CAAC4E,OAAO,CAACvP,MAAM,GAAG6C,oBAAoB,CAAC;EAC5E,IAAI,CAAC2G,SAAS,EAAE;IAGdkI,YAAY,CAACC,IAAI,CAAC,CAAC,CAAC;IACpB,OAAOD,YAAY;EACrB;EACA,KAAK,IAAI5R,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;IACvC,IAAMoR,UAAU,GAAG3B,OAAO,CAACzP,CAAC,CAAC,GAAG+C,oBAAoB;IACpD,IAAM+O,QAAQ,GAAGpI,SAAS,CAAClB,QAAQ,CAAC4I,UAAU,EAAEA,UAAU,GAAGrO,oBAAoB,CAAC;IAClF6O,YAAY,CAAC5R,CAAC,GAAG+C,oBAAoB,CAAC,GAAG+O,QAAQ,CAAC,CAAC,CAAC;IACpDF,YAAY,CAAC5R,CAAC,GAAG+C,oBAAoB,GAAG,CAAC,CAAC,GAAG+O,QAAQ,CAAC,CAAC,CAAC;EAC1D;EACA,OAAOF,YAAY;AACrB;AAQA,SAASvB,aAAaA,CACpB0B,eAA0C,EAC1CtC,OAAmB,EACP;EACZ,IAAMuC,UAAU,GAAG,CAAAD,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEC,UAAU,KAAIhP,wBAAwB;EAC1E,IAAMiP,SAAS,GAAG,IAAIzH,UAAU,CAACiF,OAAO,CAACvP,MAAM,GAAG8R,UAAU,CAAC;EAC7D,IAAI,CAACD,eAAe,EAAE;IAEpBE,SAAS,CAACJ,IAAI,CAAC,GAAG,CAAC;IACnB,OAAOI,SAAS;EAClB;EACA,IAAMzI,MAAM,GAAGuI,eAAe,CAAC1Q,KAAK;EACpC,KAAK,IAAIrB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;IACvC,IAAMkS,UAAU,GAAGzC,OAAO,CAACzP,CAAC,CAAC,GAAGgS,UAAU;IAC1C,IAAMG,KAAK,GAAG3I,MAAM,CAAChB,QAAQ,CAAC0J,UAAU,EAAEA,UAAU,GAAGF,UAAU,CAAC;IAClE,IAAMI,UAAU,GAAG,IAAI5H,UAAU,CAACwH,UAAU,CAAC;IAC7C,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,CAACjS,MAAM,EAAEmS,CAAC,EAAE,EAAE;MACrCD,UAAU,CAACC,CAAC,CAAC,GAAGF,KAAK,CAACE,CAAC,CAAC,GAAG,GAAG;IAChC;IACAJ,SAAS,CAAC/S,GAAG,CAACkT,UAAU,EAAEpS,CAAC,GAAGgS,UAAU,CAAC;EAC3C;EACA,OAAOC,SAAS;AAClB;AAQA,SAAS1B,cAAcA,CAAC3B,gBAA6B,EAAEa,OAAmB,EAAe;EACvF,IAAM3J,MAAM,GAAG,IAAI8G,WAAW,CAAC6C,OAAO,CAACvP,MAAM,GAAG,CAAC,CAAC;EAClD,KAAK,IAAIF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8F,MAAM,CAAC5F,MAAM,EAAEF,CAAC,IAAI,CAAC,EAAE;IACzC8F,MAAM,CAAC5G,GAAG,CAAC0P,gBAAgB,EAAE5O,CAAC,CAAC;EACjC;EACA,OAAO8F,MAAM;AACf;AAQA,SAAS0K,eAAeA,CAAC8B,UAAuB,EAAE7C,OAAmB,EAAY;EAC/E,IAAI,CAAC6C,UAAU,CAACpS,MAAM,IAAI,CAACuP,OAAO,CAACvP,MAAM,EAAE;IACzC,OAAO,EAAE;EACX;EACA,IAAMqS,WAAqB,GAAG,EAAE;EAChC,KAAK,IAAIvS,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyP,OAAO,CAACvP,MAAM,EAAEF,CAAC,EAAE,EAAE;IACvC,IAAMoR,UAAU,GAAG3B,OAAO,CAACzP,CAAC,CAAC;IAC7BuS,WAAW,CAAC3S,IAAI,CAAC0S,UAAU,CAAClB,UAAU,CAAC,CAAC;EAC1C;EACA,OAAOmB,WAAW;AACpB;AAUA,SAAS9B,WAAWA,CAClB1I,UAEC,EACD2G,SAAyC,EACzC7C,MAAyC,EACzCjG,cAA6B,EAChB;EACb,IAAM4M,QAAqB,GAAG,IAAAC,4CAAwB,EACpD1K,UAAU,EACV2G,SAAS,EACT7C,MAAM,EACNjG,cACF,CAAC;EAED,IAAI4M,QAAQ,CAACtS,MAAM,EAAE;IACnB,OAAOsS,QAAQ;EACjB;EAEA,KAAK,IAAIlK,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGjF,mCAAmC,CAACnD,MAAM,EAAEoI,KAAK,EAAE,EAAE;IAC/E,IAAMoK,4BAA4B,GAAGrP,mCAAmC,CAACiF,KAAK,CAAC;IAC/E,IACEP,UAAU,CAAC2K,4BAA4B,CAAC,IACxC3K,UAAU,CAAC2K,4BAA4B,CAAC,CAACrR,KAAK,EAC9C;MACA,OAAO0G,UAAU,CAAC2K,4BAA4B,CAAC,CAACrR,KAAK;IACvD;EACF;EAEA,OAAO,EAAE;AACX;AAAC,SAScsF,gBAAgBA,CAAA;EAAA,OAAAgM,iBAAA,CAAA9S,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAA0S,kBAAA;EAAAA,iBAAA,OAAApO,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAA/B,SAAAmO,SAAA;IAAA,IAAAC,eAAA;MAAAzN,oBAAA;MAAAyB,SAAA;MAAAiM,WAAA;MAAAC,OAAA;MAAAC,cAAA;MAAAC,MAAA,GAAAhT,SAAA;IAAA,OAAAuE,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAA2M,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAzM,IAAA,GAAAyM,SAAA,CAAArR,IAAA;QAAA;UACE+Q,eAA4C,GAAAI,MAAA,CAAA/S,MAAA,QAAA+S,MAAA,QAAAlG,SAAA,GAAAkG,MAAA,MAAG,EAAE;UACjD7N,oBAA6B,GAAA6N,MAAA,CAAA/S,MAAA,OAAA+S,MAAA,MAAAlG,SAAA;UAEzBlG,SAAmC,GAAG,EAAE;UAAAiM,WAAA,GAAAtS,0BAAA,CACfqS,eAAe;UAAA;YAA5C,KAAAC,WAAA,CAAA5R,CAAA,MAAA6R,OAAA,GAAAD,WAAA,CAAA3R,CAAA,IAAAC,IAAA,GAA8C;cAAnC4R,cAAc,GAAAD,OAAA,CAAA1R,KAAA;cACvBwF,SAAS,CAACjH,IAAI,CAACwT,eAAe,CAACJ,cAAc,CAAC,CAAC;YACjD;UAAC,SAAApR,GAAA;YAAAkR,WAAA,CAAAxR,CAAA,CAAAM,GAAA;UAAA;YAAAkR,WAAA,CAAAtR,CAAA;UAAA;UAAA,KAEG4D,oBAAoB;YAAA+N,SAAA,CAAArR,IAAA;YAAA;UAAA;UAAAqR,SAAA,CAAArR,IAAA;UAAA,OACJuR,iBAAiB,CAACxM,SAAS,CAAC;QAAA;UAA9CA,SAAS,GAAAsM,SAAA,CAAArM,IAAA;QAAA;UAAA,OAAAqM,SAAA,CAAA9L,MAAA,WAGJR,SAAS;QAAA;QAAA;UAAA,OAAAsM,SAAA,CAAAxL,IAAA;MAAA;IAAA,GAAAiL,QAAA;EAAA,CACjB;EAAA,OAAAD,iBAAA,CAAA9S,KAAA,OAAAI,SAAA;AAAA;AAAA,SAOcoT,iBAAiBA,CAAAC,IAAA;EAAA,OAAAC,kBAAA,CAAA1T,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAsT,mBAAA;EAAAA,kBAAA,OAAAhP,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAhC,SAAA+O,SACE3M,SAAmC;IAAA,IAAAf,MAAA,EAAA2N,WAAA,EAAAC,aAAA,EAAA1T,CAAA,EAAAoG,QAAA,EAAAuN,qBAAA,EAAAC,sBAAA,EAAAC,QAAA,EAAAC,SAAA,EAAAC,QAAA,EAAAC,WAAA,EAAAC,OAAA,EAAAC,gBAAA,EAAAC,IAAA,EAAAC,WAAA,EAAAC,OAAA,EAAA/L,KAAA;IAAA,OAAA9D,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAA+N,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA7N,IAAA,GAAA6N,SAAA,CAAAzS,IAAA;QAAA;UAE7BgE,MAAgC,GAAG,EAAE;QAAA;UAAA,MACpCe,SAAS,CAAC3G,MAAM,GAAG,CAAC;YAAAqU,SAAA,CAAAzS,IAAA;YAAA;UAAA;UACrB2R,WAAW,GAAG5M,SAAS,CAAC2N,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;UACrCd,aAAuB,GAAG,EAAE;UACzB1T,CAAC,GAAG,CAAC;QAAA;UAAA,MAAEA,CAAC,GAAG6G,SAAS,CAAC3G,MAAM;YAAAqU,SAAA,CAAAzS,IAAA;YAAA;UAAA;UAC5BsE,QAAQ,GAAGS,SAAS,CAAC7G,CAAC,CAAC;UAAA,MAE1ByT,WAAW,CAACpN,OAAO,IAAID,QAAQ,CAACC,OAAO,IACvC,CAACoN,WAAW,CAACpN,OAAO,IAAI,CAACD,QAAQ,CAACC,OAAQ;YAAAkO,SAAA,CAAAzS,IAAA;YAAA;UAAA;UAAAyS,SAAA,CAAAzS,IAAA;UAAA,OAEvB2S,cAAc,CAAChB,WAAW,EAAErN,QAAQ,CAAC;QAAA;UAAzDqN,WAAW,GAAAc,SAAA,CAAAzN,IAAA;UACX4M,aAAa,CAAC9T,IAAI,CAACI,CAAC,CAAC;QAAC;UAPYA,CAAC,EAAE;UAAAuU,SAAA,CAAAzS,IAAA;UAAA;QAAA;UAUzC,IAAI2R,WAAW,CAACpN,OAAO,IAAIqN,aAAa,CAACxT,MAAM,EAAE;YACzC2T,QAAQ,IAAAF,qBAAA,GAAGF,WAAW,CAACtM,eAAe,cAAAwM,qBAAA,uBAA3BA,qBAAA,CAA6B1G,MAAM,CAClD,UAACyH,KAAK,EAAAC,KAAA;cAAA,IAAGC,WAAW,GAAAD,KAAA,CAAXC,WAAW;cAAA,OAAMF,KAAK,IAAI,CAAAE,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEC,KAAK,KAAI,CAAC,CAAC;YAAA,GAC3D,CACF,CAAC;YACKf,SAAS,IAAAF,sBAAA,GAAGH,WAAW,CAACtM,eAAe,cAAAyM,sBAAA,uBAA3BA,sBAAA,CAA6B3G,MAAM,CACnD,UAACyH,KAAK,EAAAI,KAAA;cAAA,IAAGF,WAAW,GAAAE,KAAA,CAAXF,WAAW;cAAA,OAAMG,IAAI,CAACC,GAAG,CAACN,KAAK,EAAE,CAAAE,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEK,MAAM,KAAI,CAAC,CAAC;YAAA,GACnE,CACF,CAAC;YACGlB,QAAQ,GAAG,CAAC,CAAC;YAAAC,WAAA,GAAAxT,0BAAA,CACciT,WAAW,CAACtM,eAAe;YAAA;cAA1D,KAAA6M,WAAA,CAAA9S,CAAA,MAAA+S,OAAA,GAAAD,WAAA,CAAA7S,CAAA,IAAAC,IAAA,GAA4D;gBAAjD8S,gBAAgB,GAAAD,OAAA,CAAA5S,KAAA;gBACzB,IAAI6S,gBAAgB,CAACU,WAAW,EAAE;kBAC1BT,IAAI,GACRJ,QAAQ,GACR,CAAC,GACAG,gBAAgB,CAACU,WAAW,CAACC,KAAK,GAAGhB,QAAQ,GAAAkB,IAAA,CAAAG,GAAA,CAC5C,CAAC,EAAKtI,WAAW,CAACuI,iBAAiB,GAAG,CAAC,CAAC,GAC1C,CAAC;kBACHjB,gBAAgB,CAAC/E,QAAQ,GAAG,IAAIvC,WAAW,CAAC,CAC1CmH,QAAQ,GAAG,CAAC,EACZ,CAAC,EACDI,IAAI,EACHD,gBAAgB,CAACU,WAAW,CAACK,MAAM,GAAGnB,SAAS,GAAAiB,IAAA,CAAAG,GAAA,CAC9C,CAAC,EAAKtI,WAAW,CAACuI,iBAAiB,GAAG,CAAC,CAAC,GACxC,CAAC,CACJ,CAAC;kBACFpB,QAAQ,GAAGI,IAAI;gBACjB;cACF;YAAC,SAAAvS,GAAA;cAAAoS,WAAA,CAAA1S,CAAA,CAAAM,GAAA;YAAA;cAAAoS,WAAA,CAAAxS,CAAA;YAAA;YAEDiS,WAAW,CAACpN,OAAO,CAAC+O,KAAK,CAACP,KAAK,GAAGhB,QAAQ;YAC1CJ,WAAW,CAACpN,OAAO,CAAC+O,KAAK,CAACH,MAAM,GAAGnB,SAAS;UAC9C;UAACM,WAAA,GAAA5T,0BAAA,CACmBkT,aAAa,CAACzC,OAAO,CAAC,CAAC;UAAA;YAA3C,KAAAmD,WAAA,CAAAlT,CAAA,MAAAmT,OAAA,GAAAD,WAAA,CAAAjT,CAAA,IAAAC,IAAA,GAA6C;cAAlCkH,KAAK,GAAA+L,OAAA,CAAAhT,KAAA;cACdwF,SAAS,CAAC2N,MAAM,CAAClM,KAAK,EAAE,CAAC,CAAC;YAC5B;UAAC,SAAA1G,GAAA;YAAAwS,WAAA,CAAA9S,CAAA,CAAAM,GAAA;UAAA;YAAAwS,WAAA,CAAA5S,CAAA;UAAA;UACDsE,MAAM,CAAClG,IAAI,CAAC6T,WAAW,CAAC;UAACc,SAAA,CAAAzS,IAAA;UAAA;QAAA;UAG3B,IAAI,CAACgE,MAAM,CAAC5F,MAAM,EAAE;YAClB4F,MAAM,CAAClG,IAAI,CAAC;cACVwG,QAAQ,EAAEiP,kBAAkB,CAAC,CAAC;cAC9BlO,eAAe,EAAE,CAAC;gBAACC,kBAAkB,EAAE;cAAS,CAAC;YACnD,CAAC,CAAC;UACJ;UAAC,OAAAmN,SAAA,CAAAlN,MAAA,WACMvB,MAAM;QAAA;QAAA;UAAA,OAAAyO,SAAA,CAAA5M,IAAA;MAAA;IAAA,GAAA6L,QAAA;EAAA,CACd;EAAA,OAAAD,kBAAA,CAAA1T,KAAA,OAAAI,SAAA;AAAA;AAAA,SAQcwU,cAAcA,CAAAa,IAAA,EAAAC,IAAA;EAAA,OAAAC,eAAA,CAAA3V,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAuV,gBAAA;EAAAA,eAAA,OAAAjR,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAA7B,SAAAgR,SACEC,SAAiC,EACjCC,SAAiC;IAAA,IAAAC,kBAAA,EAAAC,kBAAA;IAAA,IAAAC,OAAA,EAAAC,OAAA,EAAAC,aAAA,EAAAC,UAAA,EAAAC,SAAA;IAAA,OAAA1R,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAA4P,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA1P,IAAA,GAAA0P,SAAA,CAAAtU,IAAA;QAAA;UAAA,MAG/B,CAAA8T,kBAAA,GAAAF,SAAS,CAACrP,OAAO,cAAAuP,kBAAA,eAAjBA,kBAAA,CAAmBS,UAAU,KAAAR,kBAAA,GAC7BF,SAAS,CAACtP,OAAO,cAAAwP,kBAAA,eAAjBA,kBAAA,CAAmBQ,UAAU,IAC7BX,SAAS,CAACvO,eAAe,IACzBwO,SAAS,CAACxO,eAAe;YAAAiP,SAAA,CAAAtU,IAAA;YAAA;UAAA;UAEnBgU,OAAO,GAAGQ,MAAM,CAAC/T,IAAI,CAACmT,SAAS,CAACrP,OAAO,CAACgQ,UAAU,CAACE,IAAI,CAAC;UACxDR,OAAO,GAAGO,MAAM,CAAC/T,IAAI,CAACoT,SAAS,CAACtP,OAAO,CAACgQ,UAAU,CAACE,IAAI,CAAC;UAAAH,SAAA,CAAA1P,IAAA;UAAA0P,SAAA,CAAAtU,IAAA;UAAA,OAAA0U,OAAA,CAAAC,OAAA,GAAAC,IAAA;YAAA,OAAA1Y,uBAAA,CAAArB,OAAA,CAG1B,aAAa;UAAA;QAAA;UAAAqZ,aAAA,GAAAI,SAAA,CAAAtP,IAAA;UAAxCmP,UAAU,GAAAD,aAAA,CAAVC,UAAU;UAAAG,SAAA,CAAAtU,IAAA;UAAA,OACOmU,UAAU,CAAC,CAACH,OAAO,EAAEC,OAAO,CAAC,EAAE;YAACY,SAAS,EAAE;UAAY,CAAC,CAAC;QAAA;UAA3ET,SAAS,GAAAE,SAAA,CAAAtP,IAAA;UAAAsP,SAAA,CAAAtU,IAAA;UAAA,OAC2BoU,SAAS,CAChDU,QAAQ,CAAClB,SAAS,CAACrP,OAAO,CAACwQ,QAAQ,KAAK,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC,CACrEC,QAAQ,CAAC,CAAC;QAAA;UAFbpB,SAAS,CAACrP,OAAO,CAACgQ,UAAU,CAACE,IAAI,GAAAH,SAAA,CAAAtP,IAAA;UAAAsP,SAAA,CAAAtU,IAAA;UAAA;QAAA;UAAAsU,SAAA,CAAA1P,IAAA;UAAA0P,SAAA,CAAA9O,EAAA,GAAA8O,SAAA;UAIjCW,OAAO,CAACC,GAAG,CACT,qLACF,CAAC;UAAC,MAAAZ,SAAA,CAAA9O,EAAA;QAAA;UAIJoO,SAAS,CAACtP,QAAQ,CAAC6Q,oBAAoB,CAACC,gBAAgB,CAACC,sBAAsB,GAAG,CAAC;QAAC;UAEtFzB,SAAS,CAACvO,eAAe,GAAGuO,SAAS,CAACvO,eAAe,CAACgG,MAAM,CAACwI,SAAS,CAACxO,eAAe,CAAC;UAAC,OAAAiP,SAAA,CAAA/O,MAAA,WACjFqO,SAAS;QAAA;QAAA;UAAA,OAAAU,SAAA,CAAAzO,IAAA;MAAA;IAAA,GAAA8N,QAAA;EAAA,CACjB;EAAA,OAAAD,eAAA,CAAA3V,KAAA,OAAAI,SAAA;AAAA;AAOD,SAASmT,eAAeA,CAACJ,cAAyC,EAA0B;EAAA,IAAAoE,qBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EAC1F,IAAMnR,QAA+B,GAAG;IACtCoR,WAAW,EAAExE,cAAc,CAACwE,WAAW;IACvCC,cAAc,GAAAL,qBAAA,GAAEpE,cAAc,CAACyE,cAAc,cAAAL,qBAAA,uBAA7BA,qBAAA,CAA+BM,GAAG,CAAC,UAACC,CAAC;MAAA,OAAK5C,IAAI,CAAC6C,KAAK,CAACD,CAAC,GAAG,GAAG,CAAC;IAAA,EAI5E;IAGDE,SAAS,EAAEC,gBAAgB,CAAC9E,cAAc,CAAC6E,SAAS,CAAC;IACrDZ,oBAAoB,EAAE;MACpBc,eAAe,EACb,CAAA/E,cAAc,aAAdA,cAAc,wBAAAqE,qBAAA,GAAdrE,cAAc,CAAEiE,oBAAoB,cAAAI,qBAAA,uBAApCA,qBAAA,CAAsCU,eAAe,KAAInV,wBAAwB;MACnFoV,cAAc,EACZ,CAAAhF,cAAc,aAAdA,cAAc,wBAAAsE,sBAAA,GAAdtE,cAAc,CAAEiE,oBAAoB,cAAAK,sBAAA,uBAApCA,sBAAA,CAAsCU,cAAc,KAAInV;IAC5D;EACF,CAAC;EAED,IAAIwD,OAAO;EACX,IAAI2M,cAAc,aAAdA,cAAc,gBAAAuE,sBAAA,GAAdvE,cAAc,CAAEiE,oBAAoB,cAAAM,sBAAA,eAApCA,sBAAA,CAAsCL,gBAAgB,EAAE;IAC1D7Q,OAAO,GAAG2M,cAAc,CAACiE,oBAAoB,CAACC,gBAAgB,CAAC7Q,OAAO,CAAClG,MAAM;IAC7EiG,QAAQ,CAAC6Q,oBAAoB,CAACC,gBAAgB,GAAG;MAC/CC,sBAAsB,EAAE;IAC1B,CAAC;EACH,CAAC,MAAM,IAAInE,cAAc,CAACiF,eAAe,EAAE;IACzC5R,OAAO,GAAG2M,cAAc,CAACiF,eAAe,CAAC5R,OAAO,CAAClG,MAAM;IAEvDiG,QAAQ,CAAC6Q,oBAAoB,CAACC,gBAAgB,GAAG;MAC/CC,sBAAsB,EAAE;IAC1B,CAAC;EACH;EAEAnE,cAAc,CAACjE,EAAE,GAAGmJ,MAAM,CAACC,QAAQ,CAACnF,cAAc,CAACjE,EAAE,CAAC,GAAGiE,cAAc,CAACjE,EAAE,GAAG,IAAAqJ,QAAM,EAAC,CAAC;EACrF,IAAIjR,eAAiC,GAAG,CAAC;IAACC,kBAAkB,EAAE4L,cAAc,CAACjE;EAAE,CAAC,CAAC;EACjF,IAAI,CAAC1I,OAAO,EAAE;IAAA,IAAAgS,sBAAA;IAGZ,IAAMC,eAAe,GAAGtF,cAAc,aAAdA,cAAc,wBAAAqF,sBAAA,GAAdrF,cAAc,CAAEiE,oBAAoB,cAAAoB,sBAAA,uBAApCA,sBAAA,CAAsCC,eAAe;IAC7ElS,QAAQ,CAAC6Q,oBAAoB,CAACqB,eAAe,GACzCA,eAAe,IAAIA,eAAe,CAACZ,GAAG,CAAC,UAACC,CAAC;MAAA,OAAK5C,IAAI,CAAC6C,KAAK,CAACD,CAAC,GAAG,GAAG,CAAC;IAAA,EAAC,IAK9D5K,SAAS;EACnB,CAAC,MAAM;IACL5F,eAAe,CAAC,CAAC,CAAC,CAACyN,WAAW,GAAG;MAACC,KAAK,EAAExO,OAAO,CAAC+O,KAAK,CAACP,KAAK;MAAEI,MAAM,EAAE5O,OAAO,CAAC+O,KAAK,CAACH;IAAM,CAAC;EAC7F;EAEA,OAAO;IAAC7O,QAAQ,EAARA,QAAQ;IAAEC,OAAO,EAAPA,OAAO;IAAEc,eAAe,EAAfA;EAAe,CAAC;AAC7C;AAOA,SAAS2Q,gBAAgBA,CACvBS,aAAoD,EACvB;EAC7B,QAAQA,aAAa;IACnB,KAAK,QAAQ;MACX,OAAO,QAAQ;IACjB,KAAK,MAAM;MACT,OAAO,MAAM;IACf,KAAK,OAAO;MACV,OAAO,OAAO;IAChB;MACE,OAAO,QAAQ;EACnB;AACF;AAMA,SAASlD,kBAAkBA,CAAA,EAA0B;EACnD,OAAO;IACLwC,SAAS,EAAE,QAAQ;IACnBZ,oBAAoB,EAAE;MACpBe,cAAc,EAAE,CAAC;MACjBD,eAAe,EAAE;IACnB;EACF,CAAC;AACH;AASA,SAAS5M,kBAAkBA,CACzBqN,aAA0C,EAC1ClS,MAAc,EACS;EACvB,IAAMmS,YAAmC,GAAG,CAAC,CAAC;EAE9C,IAAI,CAACD,aAAa,IAAI,CAACA,aAAa,CAACtY,MAAM,EAAE;IAC3C,OAAOuY,YAAY;EACrB;EAEAA,YAAY,CAACC,uBAAuB,GAAG,EAAE;EAAC,IAAAC,UAAA,GAAAnY,0BAAA,CACfgY,aAAa;IAAAI,MAAA;EAAA;IAAxC,KAAAD,UAAA,CAAAzX,CAAA,MAAA0X,MAAA,GAAAD,UAAA,CAAAxX,CAAA,IAAAC,IAAA,GAA0C;MAAA,IAA/ByX,YAAY,GAAAD,MAAA,CAAAvX,KAAA;MACrB,IAAAyX,qBAAA,GAAwDC,uCAAuC,CAC7FF,YAAY,EACZvS,MACF,CAAC;QAHM0S,sBAAsB,GAAAF,qBAAA,CAAtBE,sBAAsB;QAAEC,qBAAqB,GAAAH,qBAAA,CAArBG,qBAAqB;MAIpDR,YAAY,CAACC,uBAAuB,CAAC9Y,IAAI,CAACoZ,sBAAsB,CAAC;MACjE,IAAIC,qBAAqB,EAAE;QACzBR,YAAY,CAACS,sBAAsB,GAAGT,YAAY,CAACS,sBAAsB,IAAI,EAAE;QAC/ET,YAAY,CAACS,sBAAsB,CAACtZ,IAAI,CAACqZ,qBAAqB,CAAC;MACjE;IACF;EAAC,SAAArX,GAAA;IAAA+W,UAAA,CAAArX,CAAA,CAAAM,GAAA;EAAA;IAAA+W,UAAA,CAAAnX,CAAA;EAAA;EACD,OAAOiX,YAAY;AACrB;AAQA,SAASM,uCAAuCA,CAC9CF,YAAuC,EACvCvS,MAAc,EAId;EAAA,IAAA6S,qBAAA;EACA,IAAM9S,OAAO,GACX,CAAAwS,YAAY,aAAZA,YAAY,wBAAAM,qBAAA,GAAZN,YAAY,CAAE5B,oBAAoB,cAAAkC,qBAAA,uBAAlCA,qBAAA,CAAoCjC,gBAAgB,KAAI2B,YAAY,CAACZ,eAAe;EACtF,IAAIgB,qBAAmD,GAAG,IAAI;EAC9D,IAAI5S,OAAO,EAAE;IACX4S,qBAAqB,GAAGG,iCAAiC,CAAC/S,OAAO,CAACA,OAAO,EAAEC,MAAM,CAAC;EACpF;EACA,IAAA+S,KAAA,GAA0C,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5B,oBAAoB,KAAI,CAAC,CAAC;IAA3EqB,eAAe,GAAAe,KAAA,CAAff,eAAe;IAAEN,cAAc,GAAAqB,KAAA,CAAdrB,cAAc;EACtC,IAAIsB,WAAW,GAAGhB,eAAe;EAEjC,IAAI,CAAC,CAACA,eAAe,IAAIA,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,KAAKO,YAAY,CAACpB,cAAc,EAAE;IACjF6B,WAAW,GAAGT,YAAY,CAACpB,cAAc;IACzC6B,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;EACtC;EAEA,OAAO;IACLN,sBAAsB,EAAEO,kCAAkC,CACxDD,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC3BtB,cACF,CAAC;IACDiB,qBAAqB,EAArBA;EACF,CAAC;AACH;AAiBA,SAASM,kCAAkCA,CACzCjB,eAAyB,EAED;EAAA,IADxBN,cAAsB,GAAA/X,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA8M,SAAA,GAAA9M,SAAA,MAAG,CAAC;EAE1B,IAAMuZ,2BAA2B,GAAG,IAAI,GAAG,GAAG;EAE9C,IAAMC,KAAK,GAAG,IAAIC,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACrC,IAAMC,UAAU,GAAG,IAAID,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAC1C,IAAME,kBAAkB,GAAG,IAAIF,aAAO,CACpCF,2BAA2B,EAC3BA,2BAA2B,EAC3BA,2BAA2B,EAC3B,CACF,CAAC;EACD,IAAMK,eAAe,GAAG,IAAIH,aAAO,CAACpB,eAAe,CAAC;EAGpD,IAAMwB,YAAY,GAAGH,UAAU,CAAC9Q,QAAQ,CAAC+Q,kBAAkB,CAAC,CAACG,QAAQ,CAACF,eAAe,CAAC;EACtF,IAAMG,OAAO,GAAGF,YAAY,CAACG,IAAI,CAACH,YAAY,EAAEL,KAAK,EAAEzB,cAAc,CAAC;EACtE4B,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC;EACzB,IAAMM,QAAQ,GAAGN,kBAAkB,CAACK,IAAI,CAACL,kBAAkB,EAAEC,eAAe,EAAE7B,cAAc,CAAC;EAC7F,OAAO;IACLmC,MAAM,EAAE;MAENH,OAAO,EAAEA,OAAO,CAACI,OAAO,CAAC,CAAC;MAE1BF,QAAQ,EAAEA,QAAQ,CAACE,OAAO,CAAC,CAAC;MAC5BC,UAAU,EAAE;IACd;EACF,CAAC;AACH;AAQA,SAASjB,iCAAiCA,CACxC/S,OAAiC,EACjCC,MAAc,EACS;EAAA,IAAAgU,eAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA;EACvB,OAAO;IACLC,QAAQ,EAAErU,OAAO,aAAPA,OAAO,gBAAAiU,eAAA,GAAPjU,OAAO,CAAElG,MAAM,cAAAma,eAAA,eAAfA,eAAA,CAAiBzD,QAAQ,GAAG,CAACxQ,OAAO,CAAClG,MAAM,CAAC0W,QAAQ,CAAC,GAAG9J,SAAS;IAC3ElB,MAAM,EAAE,CACN;MAGEkD,EAAE,EAAE4L,eAAe,CAACtU,OAAO,EAAEC,MAAM,CAAC;MACpCsU,IAAI,GAAAL,gBAAA,GAAElU,OAAO,CAAClG,MAAM,cAAAoa,gBAAA,uBAAdA,gBAAA,CAAgBnF,KAAK,CAACP,KAAK;MACjC3U,MAAM,EAAE,CAAAsa,gBAAA,GAAAnU,OAAO,CAAClG,MAAM,cAAAqa,gBAAA,eAAdA,gBAAA,CAAgBpF,KAAK,CAACmB,IAAI,CAACrW,MAAM,GAAG,EAAAua,gBAAA,GAACpU,OAAO,CAAClG,MAAM,cAAAsa,gBAAA,uBAAdA,gBAAA,CAAgBrF,KAAK,CAACmB,IAAI,CAACrW,MAAM,CAAC,GAAG6M;IACpF,CAAC;EAEL,CAAC;AACH;AASA,SAAS4N,eAAeA,CAACtU,OAAiC,EAAEC,MAAc,EAAE;EAAA,IAAAuU,gBAAA;EAC1E,IAAAC,KAAA,GAAwB,EAAAD,gBAAA,GAAAxU,OAAO,CAAClG,MAAM,cAAA0a,gBAAA,uBAAdA,gBAAA,CAAgBzF,KAAK,KAAI,CAAC,CAAC;IAA5CP,KAAK,GAAAiG,KAAA,CAALjG,KAAK;IAAEI,MAAM,GAAA6F,KAAA,CAAN7F,MAAM;EACpB,IAAI,CAACJ,KAAK,IAAI,CAACI,MAAM,EAAE;IACrB,OAAO,EAAE;EACX;EACA,IAAM8F,mBAAmB,GAAG,CAAC;EAC7B,IAAMC,YAAY,GAAG,CAAC;EACtB,IAAMC,qBAAqB,GAAG3U,MAAM,GAAG,CAAC;EAExC,IAAM4U,UAAU,GAAG,EAAE,GAAGD,qBAAqB,CAAC9Y,QAAQ,CAAC,CAAC,CAAC,CAACjC,MAAM;EAChE,IAAMib,SAAS,GAAG,GAAG,CAACC,MAAM,CAACF,UAAU,CAAC,CAAC/N,MAAM,CAAC8N,qBAAqB,CAAC9Y,QAAQ,CAAC,CAAC,CAAC,CAAC;EAElF,IAAMkZ,0BAA0B,GAAGN,mBAAmB,IAAI,EAAE;EAC5D,IAAMO,mBAAmB,GAAGN,YAAY,IAAI,EAAE;EAC9C,IAAMO,YAAY,GAAI1G,KAAK,GAAG,CAAC,IAAK,EAAE;EACtC,IAAM2G,aAAa,GAAIvG,MAAM,GAAG,CAAC,IAAK,CAAC;EAEvC,IAAMwG,QAAQ,GAAGJ,0BAA0B,GAAGC,mBAAmB,GAAGC,YAAY,GAAGC,aAAa;EAChG,IAAME,OAAO,GAAGC,MAAM,MAAAxO,MAAA,CAAMsO,QAAQ,CAACtZ,QAAQ,CAAC,CAAC,CAAC,EAAAgL,MAAA,CAAGgO,SAAS,CAAE,CAAC;EAC/D,OAAOO,OAAO,CAACvZ,QAAQ,CAAC,CAAC;AAC3B;AAUA,SAASiI,oBAAoBA,CAC3Bd,UAAoB,EACpBe,cAAwB,EACxBrF,iBAA2B,EAC3B4W,UAAgC,EACR;EACxB,IAAMC,UAAU,GAAGC,qBAAqB,CAACxS,UAAU,EAAEsS,UAAU,EAAE5W,iBAAiB,CAAC;EACnF+W,sBAAsB,CAAC1R,cAAc,EAAEwR,UAAU,CAAC;EAClDE,sBAAsB,CAACzS,UAAU,EAAEuS,UAAU,CAAC;EAC9C,OAAOA,UAAU;AACnB;AASA,SAASC,qBAAqBA,CAC5BxS,UAAiB,EACjBsS,UAAkB,EAClB5W,iBAAwB,EACA;EACxB,IAAMgX,UAAkC,GAAG,CAAC,CAAC;EAE7C,KAAK,IAAI1T,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGgB,UAAU,CAACpJ,MAAM,EAAEoI,KAAK,EAAE,EAAE;IACtD,IAAM2T,YAAY,GAAG3S,UAAU,CAAChB,KAAK,CAAC;IACtC,IAAM4T,eAAe,GAAGC,0BAA0B,CAAC7T,KAAK,EAAEsT,UAAU,EAAE5W,iBAAiB,CAAC;IACxFgX,UAAU,CAACC,YAAY,CAAC9Z,QAAQ,CAAC,CAAC,CAAC,GAAG+Z,eAAe;EACvD;EAEA,OAAOF,UAAU;AACnB;AAQA,SAASI,mCAAmCA,CAACR,UAAkB,EAAEtT,KAAa,EAAU;EACtF,IAAI+T,GAAG,GAAG,EAAE;EACZ,KAAK,IAAMxd,IAAG,IAAI+c,UAAU,EAAE;IAC5BS,GAAG,IAAIT,UAAU,CAAC/c,IAAG,CAAC,CAACyJ,KAAK,CAAC;EAC/B;EACA,OAAO+T,GAAG;AACZ;AASA,SAASF,0BAA0BA,CACjC7T,KAAa,EACbsT,UAAkB,EAClB5W,iBAAwB,EAChB;EACR,IAAMsX,aAAa,GAAGF,mCAAmC,CAACR,UAAU,EAAEtT,KAAK,CAAC;EAC5E,IAAMiU,IAAI,GAAG,IAAAC,WAAG,EAACF,aAAa,CAAC;EAE/B,IAAItX,iBAAiB,CAACyX,QAAQ,CAACF,IAAI,CAAC,EAAE;IACpC,OAAOvX,iBAAiB,CAAC0X,OAAO,CAACH,IAAI,CAAC;EACxC;EACA,OAAOvX,iBAAiB,CAACpF,IAAI,CAAC2c,IAAI,CAAC,GAAG,CAAC;AACzC;AAQA,SAASR,sBAAsBA,CAACY,YAAsB,EAAEX,UAAkC,EAAE;EAC1F,KAAK,IAAI1T,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGqU,YAAY,CAACzc,MAAM,EAAEoI,KAAK,EAAE,EAAE;IACxDqU,YAAY,CAACrU,KAAK,CAAC,GAAG0T,UAAU,CAACW,YAAY,CAACrU,KAAK,CAAC,CAAC;EACvD;AACF;AASA,SAASwC,sCAAsCA,CAC7CxB,UAAoB,EACpBM,aAAqC,EACrC7E,aAA+B,EAC/BE,oBAA4C,EACrC;EACP,IAAM2X,gBAA+B,GAAG,EAAE;EAE1C,IAAMC,wBAAwB,GAAG,IAAAC,wCAAqB,EAACxT,UAAU,EAAEvE,aAAa,CAAC;EACjF,IAAMgY,UAAU,GAAGF,wBAAwB,GACvC,IAAAG,mDAAgC,EAACpT,aAAa,EAAE7E,aAAa,CAAC,GAC9DA,aAAa;EAEjB,IAAMkY,0BAA0B,GAAAnd,aAAA;IAC9Bod,QAAQ,EAAE5T;EAAU,GACjByT,UAAU,CACd;EAED,KAAK,IAAMI,YAAY,IAAIF,0BAA0B,EAAE;IACrD,IAAMG,IAAI,GAAGC,gBAAgB,CAACF,YAAY,EAAElY,oBAAoB,CAAC;IACjE,IAAImY,IAAI,EAAE;MACR,IAAM/b,KAAK,GAAG4b,0BAA0B,CAACE,YAAY,CAAC;MACtD,IAAMG,eAAe,GAAGC,uBAAuB,CAACH,IAAI,EAAE/b,KAAK,CAAC;MAE5Dub,gBAAgB,CAAChd,IAAI,CAAC0d,eAAe,CAAC;IACxC;EACF;EAEA,OAAOV,gBAAgB;AACzB;AAOA,SAASW,uBAAuBA,CAACH,IAAY,EAAE/b,KAAU,EAAe;EACtE,IAAIic,eAA4B;EAEhC,QAAQF,IAAI;IACV,KAAKha,cAAc;IACnB,KAAKF,cAAc;MACjBoa,eAAe,GAAGE,mCAAmC,CAACnc,KAAK,CAAC;MAC5D;IACF,KAAK8B,WAAW;MACdma,eAAe,GAAGG,6BAA6B,CAACpc,KAAK,CAAC;MACtD;IACF,KAAK4B,WAAW;MACdqa,eAAe,GAAGI,6BAA6B,CAACrc,KAAK,CAAC;MACtD;IACF;MACEic,eAAe,GAAGI,6BAA6B,CAACrc,KAAK,CAAC;EAC1D;EAEA,OAAOic,eAAe;AACxB;AAQA,SAASD,gBAAgBA,CAACxe,GAAW,EAAEoG,oBAA2B,EAAU;EAC1E,IAAM0Y,SAAS,GAAG1Y,oBAAoB,CAAC+J,IAAI,CAAC,UAAC4O,IAAI;IAAA,OAAKA,IAAI,CAACtb,IAAI,KAAKzD,GAAG;EAAA,EAAC;EACxE,IAAI,CAAC8e,SAAS,EAAE;IACd5G,OAAO,CAAC8G,KAAK,2BAAA1Q,MAAA,CACetO,GAAG,6BAAAsO,MAAA,CAA0B2Q,IAAI,CAACC,SAAS,CACnE9Y,oBAAoB,EACpB,IAAI,EACJ,CACF,CAAC,CACH,CAAC;IACD,OAAO,EAAE;EACX;EACA,IAAI,CAAC0Y,SAAS,CAACK,eAAe,EAAE;IAC9BjH,OAAO,CAAC8G,KAAK,uCAAA1Q,MAAA,CAAuCwQ,SAAS,CAAE,CAAC;IAChE,OAAO,EAAE;EACX;EACA,OAAOA,SAAS,CAACK,eAAe,CAACC,SAAS;AAC5C;AAOA,SAAST,mCAAmCA,CAAClU,UAAiB,EAAe;EAC3E,IAAM4U,KAAK,GAAG,IAAI5T,WAAW,CAAC,CAAChB,UAAU,CAACpJ,MAAM,CAAC,CAAC;EAClD,IAAMie,WAAW,GAAG,IAAI7T,WAAW,CAAChB,UAAU,CAAC;EAC/C,OAAO,IAAAmB,oCAAuB,EAACyT,KAAK,CAACxT,MAAM,EAAEyT,WAAW,CAACzT,MAAM,CAAC;AAClE;AAOA,SAAS+S,6BAA6BA,CAACnU,UAAiB,EAAe;EACrE,IAAM4U,KAAK,GAAG,IAAI5T,WAAW,CAAC,CAAChB,UAAU,CAACpJ,MAAM,CAAC,CAAC;EAClD,IAAMke,OAAO,GAAG,IAAI5T,UAAU,CAAC,CAAC,CAAC;EACjC,IAAM2T,WAAW,GAAG,IAAIE,YAAY,CAAC/U,UAAU,CAAC;EAEhD,OAAO,IAAAmB,oCAAuB,EAACyT,KAAK,CAACxT,MAAM,EAAE0T,OAAO,CAAC1T,MAAM,EAAEyT,WAAW,CAACzT,MAAM,CAAC;AAClF;AAOA,SAASgT,6BAA6BA,CAACY,eAAsB,EAAe;EAC1E,IAAMC,gBAAgB,GAAG,IAAIjU,WAAW,CAAC,CAACgU,eAAe,CAACpe,MAAM,CAAC,CAAC;EAClE,IAAIse,kBAAkB,GAAG,CAAC;EAC1B,IAAMC,gBAAgB,GAAG,IAAInU,WAAW,CAACgU,eAAe,CAACpe,MAAM,CAAC;EAChE,IAAMwe,iBAAgC,GAAG,EAAE;EAE3C,KAAK,IAAIpW,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGgW,eAAe,CAACpe,MAAM,EAAEoI,KAAK,EAAE,EAAE;IAC3D,IAAMqW,aAAa,MAAAxR,MAAA,CAAMyR,MAAM,CAACN,eAAe,CAAChW,KAAK,CAAC,CAAC,OAAI;IAC3D,IAAMuW,mBAAmB,GAAGvI,MAAM,CAAC/T,IAAI,CAACoc,aAAa,CAAC;IACtD,IAAMG,iBAAiB,GAAGD,mBAAmB,CAAC3e,MAAM;IACpDse,kBAAkB,IAAIM,iBAAiB;IACvCL,gBAAgB,CAACnW,KAAK,CAAC,GAAGwW,iBAAiB;IAC3CJ,iBAAiB,CAAC9e,IAAI,CAACif,mBAAmB,CAAC;EAC7C;EAEA,IAAME,UAAU,GAAG,IAAIzU,WAAW,CAAC,CAACkU,kBAAkB,CAAC,CAAC;EAExD,OAAO/T,oCAAuB,CAAA5K,KAAA,UAC5B0e,gBAAgB,CAAC7T,MAAM,EACvBqU,UAAU,CAACrU,MAAM,EACjB+T,gBAAgB,CAAC/T,MAAM,EAAAyC,MAAA,CACpBuR,iBAAiB,CACtB,CAAC;AACH;AAOA,SAASnU,sBAAsBA,CAACjB,UAAiB,EAAkB;EACjE,IAAMQ,eAAe,GAAG,IAAIkV,cAAc,CAAC1V,UAAU,CAACpJ,MAAM,CAAC;EAC7D,KAAK,IAAIoI,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGgB,UAAU,CAACpJ,MAAM,EAAEoI,KAAK,EAAE,EAAE;IACtDwB,eAAe,CAACxB,KAAK,CAAC,GAAGqT,MAAM,CAACrS,UAAU,CAAChB,KAAK,CAAC,CAAC;EACpD;EACA,OAAOwB,eAAe;AACxB;AAAC,SAUcc,0BAA0BA,CAAAqU,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;EAAA,OAAAC,2BAAA,CAAAxf,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAof,4BAAA;EAAAA,2BAAA,OAAA9a,kBAAA,CAAAnG,OAAA,EAAAoG,YAAA,CAAApG,OAAA,CAAAqG,IAAA,CAAzC,SAAA6a,SACEnW,WAAmB,EACnBhD,mBAAwC,EACxC4B,UAA+B,EAC/BzC,SAAiC;IAAA,IAAA4C,SAAA,EAAAqB,OAAA,EAAAG,SAAA,EAAAF,MAAA,EAAAC,SAAA,EAAAH,UAAA,EAAAD,SAAA,EAAAoG,OAAA,EAAAnH,KAAA,EAAA+B,cAAA,EAAAkV,YAAA,EAAAC,oBAAA,EAAAC,kBAAA;IAAA,OAAAjb,YAAA,CAAApG,OAAA,CAAAmI,IAAA,UAAAmZ,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAjZ,IAAA,GAAAiZ,SAAA,CAAA7d,IAAA;QAAA;UAE1BoG,SAAS,GAAkEH,UAAU,CAArFG,SAAS,EAAEqB,OAAO,GAAyDxB,UAAU,CAA1EwB,OAAO,EAAEG,SAAS,GAA8C3B,UAAU,CAAjE2B,SAAS,EAAEF,MAAM,GAAsCzB,UAAU,CAAtDyB,MAAM,EAAEC,SAAS,GAA2B1B,UAAU,CAA9C0B,SAAS,EAAEH,UAAU,GAAevB,UAAU,CAAnCuB,UAAU,EAAED,SAAS,GAAItB,UAAU,CAAvBsB,SAAS;UACxEoG,OAAO,GAAG,IAAInF,WAAW,CAACnB,WAAW,CAAC;UAE5C,KAASb,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGmH,OAAO,CAACvP,MAAM,EAAEoI,KAAK,EAAE,EAAE;YACnDmH,OAAO,CAACvQ,GAAG,CAAC,CAACoJ,KAAK,CAAC,EAAEA,KAAK,CAAC;UAC7B;UAEM+B,cAAc,GAAG,IAAIC,WAAW,CACpCnE,mBAAmB,CAACkE,cAAc,CAACnK,MAAM,GAAGiG,mBAAmB,CAACkE,cAAc,GAAGlB,WACnF,CAAC;UAEKoW,YAAY,GAAGK,6BAA6B,CAACvV,cAAc,EAAEhB,SAAS,CAAC;UAEvEmW,oBAOL,GAAG;YACFtX,SAAS,EAATA,SAAS;YACTqB,OAAO,EAAPA,OAAO;YACPC,MAAM,EAANA,MAAM;YACN,eAAe,EAAE+V;UACnB,CAAC;UAED,IAAI7V,SAAS,CAACxJ,MAAM,EAAE;YACpBsf,oBAAoB,CAAC9V,SAAS,GAAGA,SAAS;UAC5C;UAEM+V,kBAAkB,GAAG;YACzB,eAAe,EAAE;cACf,oBAAoB,EAAE,eAAe;cACrC,iBAAiB,EAAE,IAAII,UAAU,CAACvW,UAAU;YAC9C;UACF,CAAC;UAED,IAAIG,SAAS,CAACvJ,MAAM,EAAE;YACpBsf,oBAAoB,CAAC,WAAW,CAAC,GAAG/V,SAAS;YAC7CgW,kBAAkB,CAAC,WAAW,CAAC,GAAG;cAChC,oBAAoB,EAAE;YACxB,CAAC;UACH;UAAC,OAAAE,SAAA,CAAAtY,MAAA,WAEM,IAAAyY,aAAM,EAAC;YAAC/X,UAAU,EAAEyX,oBAAoB;YAAE/P,OAAO,EAAPA;UAAO,CAAC,EAAEsQ,wBAAiB,EAAAjgB,aAAA,CAAAA,aAAA,KACvEigB,wBAAiB,CAACC,OAAO,WAAA3f,gBAAA,CAAAjC,OAAA;YAC5B6hB,YAAY,EAAE,IAAI;YAClBC,YAAY,EAAE,IAAI;YAClBC,OAAO,EAAE7a,SAAS;YAClB8a,iBAAiB,EAAE,IAAI;YACvBlb,KAAK,EAAE;cACLmb,MAAM,EAAE,0BAA0B;cAClCZ,kBAAkB,EAAlBA;YACF;UAAC,GACA,cAAc,EAAG;YAEhBa,SAAS,EAAE;UACb,CAAC,EACF,CAAC;QAAA;QAAA;UAAA,OAAAX,SAAA,CAAAhY,IAAA;MAAA;IAAA,GAAA2X,QAAA;EAAA,CACH;EAAA,OAAAD,2BAAA,CAAAxf,KAAA,OAAAI,SAAA;AAAA;AAQD,SAAS2f,6BAA6BA,CACpCL,YAAyB,EACzBlW,SAAsB,EACT;EACb,IAAMkX,qBAAqB,GAAG,IAAIjW,WAAW,CAACiV,YAAY,CAACrf,MAAM,CAAC;EAClE,IAAIsgB,SAAS,GAAG,CAAC;EACjB,IAAIC,UAAU,GAAG,CAAC;EAElB,KAAK,IAAInY,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGe,SAAS,CAACnJ,MAAM,EAAEoI,KAAK,IAAI,CAAC,EAAE;IACxD,IAAMoY,QAAQ,GAAG,CAACrX,SAAS,CAACf,KAAK,CAAC,GAAG,CAAC,IAAIxF,iBAAiB;IAE3Dyd,qBAAqB,CAAC1O,IAAI,CAAC2O,SAAS,EAAEC,UAAU,EAAEC,QAAQ,CAAC;IAE3DF,SAAS,EAAE;IACXC,UAAU,GAAGC,QAAQ,GAAG,CAAC;EAC3B;EAEA,OAAOH,qBAAqB;AAC9B;AASO,SAASI,gBAAgBA,CAC9Bhc,WAAsC,EACtCY,aAAsB,EACG;EACzB,IAAI,CAACZ,WAAW,EAAE;IAChB,OAAO,IAAI;EACb;EACA,IAAII,aAAsC;EAC1C,IAAM6b,cAAc,GAAGjc,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEic,cAAc;EAElD,IAAIA,cAAc,EAAE;IAClB,OAAOA,cAAc;EACvB;EAEA,IAAAC,qBAAA,GAAmCC,yBAAyB,CAACnc,WAAW,CAAC;IAAlEoc,aAAa,GAAAF,qBAAA,CAAbE,aAAa;IAAEC,SAAS,GAAAH,qBAAA,CAATG,SAAS;EAE/B,QAAQD,aAAa;IACnB,KAAKE,uBAAiB;MAAE;QACtBlc,aAAa,GAAGmc,mCAAmC,CACjDF,SAAS,EACTzb,aACF,CAAC;QACD,OAAOR,aAAa;MACtB;IACA,KAAKoc,6BAAuB;MAAE;QAC5Bpc,aAAa,GAAGqc,yCAAyC,CACvDJ,SAAS,EACTzb,aACF,CAAC;QACD,OAAOR,aAAa;MACtB;IACA,KAAKsc,0BAAoB;MAAE;QACzBtc,aAAa,GAAGuc,sCAAsC,CACpDN,SAAS,EACTzb,aACF,CAAC;QACD,OAAOR,aAAa;MACtB;IACA;MACE,OAAO,IAAI;EACf;AACF;AAMA,SAAS+b,yBAAyBA,CAACnc,WAA+B,EAQhE;EAAA,IAAA4c,iBAAA,EAAAC,kBAAA,EAAAC,qBAAA,EAAAC,kBAAA;EACA,IAAMC,4BAA4B,GAAG,CACnCN,0BAAoB,EACpBF,6BAAuB,EACvBF,uBAAiB,CAClB;EACD,IAAMW,cAAc,GAAGjd,WAAW,aAAXA,WAAW,wBAAA4c,iBAAA,GAAX5c,WAAW,CAAEiC,IAAI,cAAA2a,iBAAA,uBAAjBA,iBAAA,CAAmBK,cAAc;EAExD,IAAI,CAACA,cAAc,EAAE;IACnB,OAAO;MAACb,aAAa,EAAE,IAAI;MAAEC,SAAS,EAAE;IAAI,CAAC;EAC/C;EAEA,IAAID,aAAqB,GAAG,EAAE;EAAC,IAAAc,UAAA,GAAArhB,0BAAA,CACH,CAAAmE,WAAW,aAAXA,WAAW,wBAAA+c,kBAAA,GAAX/c,WAAW,CAAEiC,IAAI,cAAA8a,kBAAA,uBAAjBA,kBAAA,CAAmBE,cAAc,KAAI,EAAE;IAAAE,MAAA;EAAA;IAAnE,KAAAD,UAAA,CAAA3gB,CAAA,MAAA4gB,MAAA,GAAAD,UAAA,CAAA1gB,CAAA,IAAAC,IAAA,GAAqE;MAAA,IAA1D2gB,aAAa,GAAAD,MAAA,CAAAzgB,KAAA;MACtB,IAAIsgB,4BAA4B,CAAClF,QAAQ,CAACsF,aAAa,CAAC,EAAE;QACxDhB,aAAa,GAAGgB,aAAa;QAC7B;MACF;IACF;EAAC,SAAAngB,GAAA;IAAAigB,UAAA,CAAAvgB,CAAA,CAAAM,GAAA;EAAA;IAAAigB,UAAA,CAAArgB,CAAA;EAAA;EAED,IAAI,CAACuf,aAAa,EAAE;IAClB,OAAO;MAACA,aAAa,EAAE,IAAI;MAAEC,SAAS,EAAE;IAAI,CAAC;EAC/C;EAEA,IAAMA,SAAS,GAAGrc,WAAW,aAAXA,WAAW,wBAAA6c,kBAAA,GAAX7c,WAAW,CAAEiC,IAAI,cAAA4a,kBAAA,wBAAAC,qBAAA,GAAjBD,kBAAA,CAAmBQ,UAAU,cAAAP,qBAAA,uBAA7BA,qBAAA,CAAgCV,aAAa,CAE7B;EAElC,OAAO;IAACA,aAAa,EAAbA,aAAa;IAAEC,SAAS,EAATA;EAAS,CAAC;AACnC;AAQA,SAASM,sCAAsCA,CAC7CN,SAAyC,EACzCzb,aAAsB,EACG;EACzB,IAAIyb,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEiB,aAAa,EAAE;IAAA,IAAAC,YAAA;IAO5B,IAAMC,qBAAqB,IAAAD,YAAA,GAAGxjB,MAAM,CAACY,IAAI,CAAC0hB,SAAS,CAACiB,aAAa,CAAC,cAAAC,YAAA,uBAApCA,YAAA,CAAuC,CAAC,CAAC;IAEvE,IAAIC,qBAAqB,EAAE;MACzB,IAAMC,YAAY,GAAGpB,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEiB,aAAa,CAACE,qBAAqB,CAAC;MACpE,IAAMpd,aAAa,GAAG,CAAC,CAAC;MAExB,KAAK,IAAMoY,YAAY,IAAIiF,YAAY,CAACrF,UAAU,EAAE;QAClDhY,aAAa,CAACoY,YAAY,CAAC,GAAGiF,YAAY,CAACrF,UAAU,CAACI,YAAY,CAAC,CAAC5G,IAAI;MAC1E;MAEA,OAAOxR,aAAa;IACtB;EACF;EAEA,IAAIic,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEqB,eAAe,EAAE;IAC9B,IAAIzc,cAAkC;IACtC,KAAK,IAAM0c,UAAU,IAAItB,SAAS,CAACqB,eAAe,EAAE;MAClD,IAAMhc,OAAO,GAAG2a,SAAS,CAACqB,eAAe,CAACC,UAAU,CAAC;MACrD,IAAIjc,OAAO,CAACkc,KAAK,KAAKhd,aAAa,EAAE;QACnCK,cAAc,GAAG0c,UAAU;MAC7B;IACF;IAEA,IAAI,OAAO1c,cAAc,KAAK,QAAQ,EAAE;MACtC,IAAMwc,aAAY,GAAGpB,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEqB,eAAe,CAACzc,cAAc,CAAC;MAC/D,IAAMb,cAAa,GAAG,CAAC,CAAC;MAExB,KAAK,IAAMoY,aAAY,IAAIiF,aAAY,CAACrF,UAAU,EAAE;QAClDhY,cAAa,CAACoY,aAAY,CAAC,GAAGiF,aAAY,CAACrF,UAAU,CAACI,aAAY,CAAC,CAAC5G,IAAI;MAC1E;MAEA,OAAOxR,cAAa;IACtB;EACF;EAEAgS,OAAO,CAACyL,IAAI,CACV,wIACF,CAAC;EACD,OAAO,IAAI;AACb;AAQA,SAASpB,yCAAyCA,CAChDJ,SAAuC,EACvCzb,aAAsB,EACG;EACzB,IAAIyb,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEyB,cAAc,EAAE;IAO7B,IAAMC,kBAAkB,GAAG1B,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEyB,cAAc,CAAC,CAAC,CAAC;IACvD,IAAME,qBAAqB,GAAG,CAAC,CAAC;IAEhC,KAAK,IAAMxF,YAAY,IAAIuF,kBAAkB,CAAC3F,UAAU,EAAE;MACxD4F,qBAAqB,CAACxF,YAAY,CAAC,GAAGuF,kBAAkB,CAAC3F,UAAU,CAACI,YAAY,CAAC,CAAC5G,IAAI;IACxF;IAEA,OAAOoM,qBAAqB;EAC9B;EAEA,IAAI3B,SAAS,aAATA,SAAS,eAATA,SAAS,CAAE4B,gBAAgB,EAAE;IAO/B,IAAI5B,SAAS,aAATA,SAAS,eAATA,SAAS,CAAE4B,gBAAgB,EAAE;MAC/B,IAAMC,oBAAoB,GAAG7B,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE4B,gBAAgB,CAAC,CAAC,CAAC;MAC3D,IAAMD,sBAAqB,GAAG,CAAC,CAAC;MAEhC,KAAK,IAAMxF,cAAY,IAAI0F,oBAAoB,CAAC9F,UAAU,EAAE;QAC1D4F,sBAAqB,CAACxF,cAAY,CAAC,GAAG0F,oBAAoB,CAAC9F,UAAU,CAACI,cAAY,CAAC,CAAC5G,IAAI;MAC1F;MAEA,OAAOoM,sBAAqB;IAC9B;EACF;EAEA5L,OAAO,CAACyL,IAAI,CACV,6IACF,CAAC;EACD,OAAO,IAAI;AACb;AAQA,SAAStB,mCAAmCA,CAC1CF,SAAiC,EACjCzb,aAAsB,EACG;EACzB,IAAIyb,SAAS,aAATA,SAAS,eAATA,SAAS,CAAE1X,UAAU,EAAE;IACzB,IAAMwZ,cAAc,GAAG9B,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE1X,UAAU,CAAC,CAAC,CAAC;IAC/C,IAAMqZ,qBAAqB,GAAG,CAAC,CAAC;IAGhC,IAAI,CAACG,cAAc,CAAC/d,aAAa,EAAE;MACjCgS,OAAO,CAACyL,IAAI,CACV,uHACF,CAAC;IACH;IAEA,OAAOG,qBAAqB;EAC9B;EAEA5L,OAAO,CAACyL,IAAI,CACV,yGACF,CAAC;EACD,OAAO,IAAI;AACb"}