astro-viewer 3.3.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DEPENDENCY-LICENSING.md +185 -0
- package/LICENSE-AGPL.md +661 -0
- package/LICENSE-COMMERCIAL.md +37 -0
- package/LICENSE.md +52 -13
- package/README.md +39 -16
- package/dist/astroviewer.cjs +14369 -17858
- package/dist/astroviewer.cjs.map +1 -0
- package/dist/astroviewer.js +19361 -1
- package/dist/astroviewer.js.map +1 -0
- package/dist/astroviewer.min.js +2 -1
- package/dist/astroviewer.min.js.map +1 -0
- package/lib-esm/AstroSphere.d.ts +19 -1
- package/lib-esm/AstroSphere.d.ts.map +1 -0
- package/lib-esm/AstroSphere.js +66 -11
- package/lib-esm/AstroSphere.js.map +1 -0
- package/lib-esm/AstroViewer.d.ts +23 -1
- package/lib-esm/AstroViewer.d.ts.map +1 -0
- package/lib-esm/AstroViewer.js +54 -12
- package/lib-esm/AstroViewer.js.map +1 -0
- package/lib-esm/Camera.d.ts +1 -0
- package/lib-esm/Camera.d.ts.map +1 -0
- package/lib-esm/Camera.js +5 -6
- package/lib-esm/Camera.js.map +1 -0
- package/lib-esm/Config.d.ts +1 -0
- package/lib-esm/Config.d.ts.map +1 -0
- package/lib-esm/Config.js +5 -6
- package/lib-esm/Config.js.map +1 -0
- package/lib-esm/Global.d.ts +2 -1
- package/lib-esm/Global.d.ts.map +1 -0
- package/lib-esm/Global.js +6 -7
- package/lib-esm/Global.js.map +1 -0
- package/lib-esm/index.d.ts +11 -0
- package/lib-esm/index.d.ts.map +1 -0
- package/lib-esm/index.js +9 -6
- package/lib-esm/index.js.map +1 -0
- package/lib-esm/model/AbstractSkyEntity.d.ts +1 -0
- package/lib-esm/model/AbstractSkyEntity.d.ts.map +1 -0
- package/lib-esm/model/AbstractSkyEntity.js +5 -6
- package/lib-esm/model/AbstractSkyEntity.js.map +1 -0
- package/lib-esm/model/AstroGL.d.ts +1 -0
- package/lib-esm/model/AstroGL.d.ts.map +1 -0
- package/lib-esm/model/AstroGL.js +5 -6
- package/lib-esm/model/AstroGL.js.map +1 -0
- package/lib-esm/model/ColorMaps.d.ts +1 -0
- package/lib-esm/model/ColorMaps.d.ts.map +1 -0
- package/lib-esm/model/ColorMaps.js +5 -6
- package/lib-esm/model/ColorMaps.js.map +1 -0
- package/lib-esm/model/MetadataColumn.d.ts +1 -0
- package/lib-esm/model/MetadataColumn.d.ts.map +1 -0
- package/lib-esm/model/MetadataColumn.js +5 -6
- package/lib-esm/model/MetadataColumn.js.map +1 -0
- package/lib-esm/model/MetadataManager.d.ts +1 -0
- package/lib-esm/model/MetadataManager.d.ts.map +1 -0
- package/lib-esm/model/MetadataManager.js +5 -6
- package/lib-esm/model/MetadataManager.js.map +1 -0
- package/lib-esm/model/Point.d.ts +1 -0
- package/lib-esm/model/Point.d.ts.map +1 -0
- package/lib-esm/model/Point.js +5 -6
- package/lib-esm/model/Point.js.map +1 -0
- package/lib-esm/model/Point2D.d.ts +1 -0
- package/lib-esm/model/Point2D.d.ts.map +1 -0
- package/lib-esm/model/Point2D.js +5 -6
- package/lib-esm/model/Point2D.js.map +1 -0
- package/lib-esm/model/Source.d.ts +1 -0
- package/lib-esm/model/Source.d.ts.map +1 -0
- package/lib-esm/model/Source.js +6 -7
- package/lib-esm/model/Source.js.map +1 -0
- package/lib-esm/model/SphereFoV.d.ts +1 -0
- package/lib-esm/model/SphereFoV.d.ts.map +1 -0
- package/lib-esm/model/SphereFoV.js +5 -6
- package/lib-esm/model/SphereFoV.js.map +1 -0
- package/lib-esm/model/catalogues/CatalogueGL.d.ts +1 -0
- package/lib-esm/model/catalogues/CatalogueGL.d.ts.map +1 -0
- package/lib-esm/model/catalogues/CatalogueGL.js +5 -6
- package/lib-esm/model/catalogues/CatalogueGL.js.map +1 -0
- package/lib-esm/model/catalogues/CatalogueProps.d.ts +1 -0
- package/lib-esm/model/catalogues/CatalogueProps.d.ts.map +1 -0
- package/lib-esm/model/catalogues/CatalogueProps.js +5 -6
- package/lib-esm/model/catalogues/CatalogueProps.js.map +1 -0
- package/lib-esm/model/earth/WMTSAdapter.d.ts +1 -0
- package/lib-esm/model/earth/WMTSAdapter.d.ts.map +1 -0
- package/lib-esm/model/earth/WMTSAdapter.js +5 -6
- package/lib-esm/model/earth/WMTSAdapter.js.map +1 -0
- package/lib-esm/model/earth/XYZAnchestorTile.d.ts +1 -0
- package/lib-esm/model/earth/XYZAnchestorTile.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZAnchestorTile.js +5 -6
- package/lib-esm/model/earth/XYZAnchestorTile.js.map +1 -0
- package/lib-esm/model/earth/XYZConfig.d.ts +1 -0
- package/lib-esm/model/earth/XYZConfig.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZConfig.js +5 -6
- package/lib-esm/model/earth/XYZConfig.js.map +1 -0
- package/lib-esm/model/earth/XYZFoVHelper.d.ts +1 -0
- package/lib-esm/model/earth/XYZFoVHelper.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZFoVHelper.js +5 -6
- package/lib-esm/model/earth/XYZFoVHelper.js.map +1 -0
- package/lib-esm/model/earth/XYZMap.d.ts +3 -1
- package/lib-esm/model/earth/XYZMap.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZMap.js +7 -8
- package/lib-esm/model/earth/XYZMap.js.map +1 -0
- package/lib-esm/model/earth/XYZMapDescriptor.d.ts +1 -0
- package/lib-esm/model/earth/XYZMapDescriptor.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZMapDescriptor.js +5 -6
- package/lib-esm/model/earth/XYZMapDescriptor.js.map +1 -0
- package/lib-esm/model/earth/XYZMeshBuilder.d.ts +1 -0
- package/lib-esm/model/earth/XYZMeshBuilder.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZMeshBuilder.js +5 -6
- package/lib-esm/model/earth/XYZMeshBuilder.js.map +1 -0
- package/lib-esm/model/earth/XYZTile.d.ts +1 -0
- package/lib-esm/model/earth/XYZTile.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZTile.js +5 -6
- package/lib-esm/model/earth/XYZTile.js.map +1 -0
- package/lib-esm/model/earth/XYZTileBuffer.d.ts +1 -0
- package/lib-esm/model/earth/XYZTileBuffer.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZTileBuffer.js +5 -6
- package/lib-esm/model/earth/XYZTileBuffer.js.map +1 -0
- package/lib-esm/model/earth/XYZTileRequestScheduler.d.ts +1 -0
- package/lib-esm/model/earth/XYZTileRequestScheduler.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZTileRequestScheduler.js +5 -6
- package/lib-esm/model/earth/XYZTileRequestScheduler.js.map +1 -0
- package/lib-esm/model/earth/XYZTypes.d.ts +1 -0
- package/lib-esm/model/earth/XYZTypes.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZTypes.js +5 -6
- package/lib-esm/model/earth/XYZTypes.js.map +1 -0
- package/lib-esm/model/earth/XYZVisibleTilesManager.d.ts +1 -0
- package/lib-esm/model/earth/XYZVisibleTilesManager.d.ts.map +1 -0
- package/lib-esm/model/earth/XYZVisibleTilesManager.js +5 -6
- package/lib-esm/model/earth/XYZVisibleTilesManager.js.map +1 -0
- package/lib-esm/model/footprints/Footprint.d.ts +1 -0
- package/lib-esm/model/footprints/Footprint.d.ts.map +1 -0
- package/lib-esm/model/footprints/Footprint.js +5 -9
- package/lib-esm/model/footprints/Footprint.js.map +1 -0
- package/lib-esm/model/footprints/FootprintProps.d.ts +1 -0
- package/lib-esm/model/footprints/FootprintProps.d.ts.map +1 -0
- package/lib-esm/model/footprints/FootprintProps.js +5 -6
- package/lib-esm/model/footprints/FootprintProps.js.map +1 -0
- package/lib-esm/model/footprints/FootprintSetGL.d.ts +1 -0
- package/lib-esm/model/footprints/FootprintSetGL.d.ts.map +1 -0
- package/lib-esm/model/footprints/FootprintSetGL.js +5 -6
- package/lib-esm/model/footprints/FootprintSetGL.js.map +1 -0
- package/lib-esm/model/grid/EquatorialGrid.d.ts +3 -1
- package/lib-esm/model/grid/EquatorialGrid.d.ts.map +1 -0
- package/lib-esm/model/grid/EquatorialGrid.js +8 -8
- package/lib-esm/model/grid/EquatorialGrid.js.map +1 -0
- package/lib-esm/model/grid/GridTextHelper.d.ts +13 -4
- package/lib-esm/model/grid/GridTextHelper.d.ts.map +1 -0
- package/lib-esm/model/grid/GridTextHelper.js +72 -30
- package/lib-esm/model/grid/GridTextHelper.js.map +1 -0
- package/lib-esm/model/grid/HealpixGrid.d.ts +3 -1
- package/lib-esm/model/grid/HealpixGrid.d.ts.map +1 -0
- package/lib-esm/model/grid/HealpixGrid.js +8 -8
- package/lib-esm/model/grid/HealpixGrid.js.map +1 -0
- package/lib-esm/model/grid/LonLatGrid.d.ts +3 -1
- package/lib-esm/model/grid/LonLatGrid.d.ts.map +1 -0
- package/lib-esm/model/grid/LonLatGrid.js +8 -8
- package/lib-esm/model/grid/LonLatGrid.js.map +1 -0
- package/lib-esm/model/hips/AllSky.d.ts +1 -0
- package/lib-esm/model/hips/AllSky.d.ts.map +1 -0
- package/lib-esm/model/hips/AllSky.js +5 -6
- package/lib-esm/model/hips/AllSky.js.map +1 -0
- package/lib-esm/model/hips/AncestorTile.d.ts +1 -0
- package/lib-esm/model/hips/AncestorTile.d.ts.map +1 -0
- package/lib-esm/model/hips/AncestorTile.js +5 -6
- package/lib-esm/model/hips/AncestorTile.js.map +1 -0
- package/lib-esm/model/hips/FoVHelper.d.ts +1 -0
- package/lib-esm/model/hips/FoVHelper.d.ts.map +1 -0
- package/lib-esm/model/hips/FoVHelper.js +5 -6
- package/lib-esm/model/hips/FoVHelper.js.map +1 -0
- package/lib-esm/model/hips/HiPS.d.ts +1 -0
- package/lib-esm/model/hips/HiPS.d.ts.map +1 -0
- package/lib-esm/model/hips/HiPS.js +5 -6
- package/lib-esm/model/hips/HiPS.js.map +1 -0
- package/lib-esm/model/hips/HiPSConfig.d.ts +1 -0
- package/lib-esm/model/hips/HiPSConfig.d.ts.map +1 -0
- package/lib-esm/model/hips/HiPSConfig.js +1 -0
- package/lib-esm/model/hips/HiPSConfig.js.map +1 -0
- package/lib-esm/model/hips/HiPSDescriptor.d.ts +1 -0
- package/lib-esm/model/hips/HiPSDescriptor.d.ts.map +1 -0
- package/lib-esm/model/hips/HiPSDescriptor.js +5 -6
- package/lib-esm/model/hips/HiPSDescriptor.js.map +1 -0
- package/lib-esm/model/hips/Tile.d.ts +1 -0
- package/lib-esm/model/hips/Tile.d.ts.map +1 -0
- package/lib-esm/model/hips/Tile.js +5 -6
- package/lib-esm/model/hips/Tile.js.map +1 -0
- package/lib-esm/model/hips/TileBuffer.d.ts +1 -0
- package/lib-esm/model/hips/TileBuffer.d.ts.map +1 -0
- package/lib-esm/model/hips/TileBuffer.js +5 -6
- package/lib-esm/model/hips/TileBuffer.js.map +1 -0
- package/lib-esm/model/hips/VisibleTilesManager.d.ts +1 -0
- package/lib-esm/model/hips/VisibleTilesManager.d.ts.map +1 -0
- package/lib-esm/model/hips/VisibleTilesManager.js +6 -7
- package/lib-esm/model/hips/VisibleTilesManager.js.map +1 -0
- package/lib-esm/model/meships/MeshHiPS.d.ts +1 -0
- package/lib-esm/model/meships/MeshHiPS.d.ts.map +1 -0
- package/lib-esm/model/meships/MeshHiPS.js +1 -0
- package/lib-esm/model/meships/MeshHiPS.js.map +1 -0
- package/lib-esm/model/meships/MeshHiPSDescriptor.d.ts +1 -0
- package/lib-esm/model/meships/MeshHiPSDescriptor.d.ts.map +1 -0
- package/lib-esm/model/meships/MeshHiPSDescriptor.js +1 -0
- package/lib-esm/model/meships/MeshHiPSDescriptor.js.map +1 -0
- package/lib-esm/model/meships/MeshHiPSTile.d.ts +1 -0
- package/lib-esm/model/meships/MeshHiPSTile.d.ts.map +1 -0
- package/lib-esm/model/meships/MeshHiPSTile.js +1 -0
- package/lib-esm/model/meships/MeshHiPSTile.js.map +1 -0
- package/lib-esm/model/meships/MeshHiPSTypes.d.ts +1 -0
- package/lib-esm/model/meships/MeshHiPSTypes.d.ts.map +1 -0
- package/lib-esm/model/meships/MeshHiPSTypes.js +1 -0
- package/lib-esm/model/meships/MeshHiPSTypes.js.map +1 -0
- package/lib-esm/model/meships/OBJMeshParser.d.ts +15 -2
- package/lib-esm/model/meships/OBJMeshParser.d.ts.map +1 -0
- package/lib-esm/model/meships/OBJMeshParser.js +162 -45
- package/lib-esm/model/meships/OBJMeshParser.js.map +1 -0
- package/lib-esm/model/observation/ObservationTrackTimeline.d.ts +26 -0
- package/lib-esm/model/observation/ObservationTrackTimeline.d.ts.map +1 -0
- package/lib-esm/model/observation/ObservationTrackTimeline.js +232 -0
- package/lib-esm/model/observation/ObservationTrackTimeline.js.map +1 -0
- package/lib-esm/model/observation/ObservationTrackTypes.d.ts +130 -0
- package/lib-esm/model/observation/ObservationTrackTypes.d.ts.map +1 -0
- package/lib-esm/model/observation/ObservationTrackTypes.js +2 -0
- package/lib-esm/model/observation/ObservationTrackTypes.js.map +1 -0
- package/lib-esm/model/observation/ObservationTrackViewerAdapter.d.ts +12 -0
- package/lib-esm/model/observation/ObservationTrackViewerAdapter.d.ts.map +1 -0
- package/lib-esm/model/observation/ObservationTrackViewerAdapter.js +328 -0
- package/lib-esm/model/observation/ObservationTrackViewerAdapter.js.map +1 -0
- package/lib-esm/model/observation/index.d.ts +4 -0
- package/lib-esm/model/observation/index.d.ts.map +1 -0
- package/lib-esm/model/observation/index.js +3 -0
- package/lib-esm/model/observation/index.js.map +1 -0
- package/lib-esm/model/tap/TapMetadata.d.ts +1 -0
- package/lib-esm/model/tap/TapMetadata.d.ts.map +1 -0
- package/lib-esm/model/tap/TapMetadata.js +5 -6
- package/lib-esm/model/tap/TapMetadata.js.map +1 -0
- package/lib-esm/model/tap/TapMetadataList.d.ts +1 -0
- package/lib-esm/model/tap/TapMetadataList.d.ts.map +1 -0
- package/lib-esm/model/tap/TapMetadataList.js +5 -6
- package/lib-esm/model/tap/TapMetadataList.js.map +1 -0
- package/lib-esm/model/tap/TapRepo.d.ts +1 -0
- package/lib-esm/model/tap/TapRepo.d.ts.map +1 -0
- package/lib-esm/model/tap/TapRepo.js +5 -6
- package/lib-esm/model/tap/TapRepo.js.map +1 -0
- package/lib-esm/model/terra/SatelliteObjectGL.d.ts +43 -0
- package/lib-esm/model/terra/SatelliteObjectGL.d.ts.map +1 -0
- package/lib-esm/model/terra/SatelliteObjectGL.js +221 -0
- package/lib-esm/model/terra/SatelliteObjectGL.js.map +1 -0
- package/lib-esm/model/terra/SensorConeGL.d.ts +34 -0
- package/lib-esm/model/terra/SensorConeGL.d.ts.map +1 -0
- package/lib-esm/model/terra/SensorConeGL.js +193 -0
- package/lib-esm/model/terra/SensorConeGL.js.map +1 -0
- package/lib-esm/model/terra/TerraFootprintSetGL.d.ts +1 -0
- package/lib-esm/model/terra/TerraFootprintSetGL.d.ts.map +1 -0
- package/lib-esm/model/terra/TerraFootprintSetGL.js +5 -6
- package/lib-esm/model/terra/TerraFootprintSetGL.js.map +1 -0
- package/lib-esm/model/terra/TerraPointSetGL.d.ts +1 -0
- package/lib-esm/model/terra/TerraPointSetGL.d.ts.map +1 -0
- package/lib-esm/model/terra/TerraPointSetGL.js +5 -6
- package/lib-esm/model/terra/TerraPointSetGL.js.map +1 -0
- package/lib-esm/model/terra/TerraPolylineSetGL.d.ts +45 -0
- package/lib-esm/model/terra/TerraPolylineSetGL.d.ts.map +1 -0
- package/lib-esm/model/terra/TerraPolylineSetGL.js +178 -0
- package/lib-esm/model/terra/TerraPolylineSetGL.js.map +1 -0
- package/lib-esm/services/SesameService.d.ts +1 -0
- package/lib-esm/services/SesameService.d.ts.map +1 -0
- package/lib-esm/services/SesameService.js +5 -6
- package/lib-esm/services/SesameService.js.map +1 -0
- package/lib-esm/services/helpers.d.ts +1 -0
- package/lib-esm/services/helpers.d.ts.map +1 -0
- package/lib-esm/services/helpers.js +5 -6
- package/lib-esm/services/helpers.js.map +1 -0
- package/lib-esm/services/hipsNodeService.d.ts +1 -0
- package/lib-esm/services/hipsNodeService.d.ts.map +1 -0
- package/lib-esm/services/hipsNodeService.js +5 -6
- package/lib-esm/services/hipsNodeService.js.map +1 -0
- package/lib-esm/services/parse-hipslist.d.ts +1 -0
- package/lib-esm/services/parse-hipslist.d.ts.map +1 -0
- package/lib-esm/services/parse-hipslist.js +5 -6
- package/lib-esm/services/parse-hipslist.js.map +1 -0
- package/lib-esm/services/queryCatalogueByFoV.d.ts +1 -0
- package/lib-esm/services/queryCatalogueByFoV.d.ts.map +1 -0
- package/lib-esm/services/queryCatalogueByFoV.js +5 -6
- package/lib-esm/services/queryCatalogueByFoV.js.map +1 -0
- package/lib-esm/services/queryFootprintSetByFov.d.ts +1 -0
- package/lib-esm/services/queryFootprintSetByFov.d.ts.map +1 -0
- package/lib-esm/services/queryFootprintSetByFov.js +5 -6
- package/lib-esm/services/queryFootprintSetByFov.js.map +1 -0
- package/lib-esm/services/tapRepoService.d.ts +1 -0
- package/lib-esm/services/tapRepoService.d.ts.map +1 -0
- package/lib-esm/services/tapRepoService.js +5 -6
- package/lib-esm/services/tapRepoService.js.map +1 -0
- package/lib-esm/services/types.d.ts +1 -0
- package/lib-esm/services/types.d.ts.map +1 -0
- package/lib-esm/services/types.js +5 -6
- package/lib-esm/services/types.js.map +1 -0
- package/lib-esm/shader/CatalogueShaderProgram.d.ts +1 -0
- package/lib-esm/shader/CatalogueShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/CatalogueShaderProgram.js +5 -6
- package/lib-esm/shader/CatalogueShaderProgram.js.map +1 -0
- package/lib-esm/shader/FootprintShaderProgram.d.ts +1 -0
- package/lib-esm/shader/FootprintShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/FootprintShaderProgram.js +5 -6
- package/lib-esm/shader/FootprintShaderProgram.js.map +1 -0
- package/lib-esm/shader/GridShaderManager.d.ts +1 -0
- package/lib-esm/shader/GridShaderManager.d.ts.map +1 -0
- package/lib-esm/shader/GridShaderManager.js +5 -6
- package/lib-esm/shader/GridShaderManager.js.map +1 -0
- package/lib-esm/shader/HiPSShaderProgram.d.ts +1 -0
- package/lib-esm/shader/HiPSShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/HiPSShaderProgram.js +5 -6
- package/lib-esm/shader/HiPSShaderProgram.js.map +1 -0
- package/lib-esm/shader/MeshHiPSShaderProgram.d.ts +7 -1
- package/lib-esm/shader/MeshHiPSShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/MeshHiPSShaderProgram.js +10 -3
- package/lib-esm/shader/MeshHiPSShaderProgram.js.map +1 -0
- package/lib-esm/shader/ShaderManager.d.ts +1 -0
- package/lib-esm/shader/ShaderManager.d.ts.map +1 -0
- package/lib-esm/shader/ShaderManager.js +5 -6
- package/lib-esm/shader/ShaderManager.js.map +1 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.d.ts +1 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.d.ts.map +1 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.js +5 -6
- package/lib-esm/shader/ShaderManagerMutliHiPS.js.map +1 -0
- package/lib-esm/shader/XYZShaderProgram.d.ts +1 -0
- package/lib-esm/shader/XYZShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/XYZShaderProgram.js +5 -6
- package/lib-esm/shader/XYZShaderProgram.js.map +1 -0
- package/lib-esm/utils/CoordsType.d.ts +1 -0
- package/lib-esm/utils/CoordsType.d.ts.map +1 -0
- package/lib-esm/utils/CoordsType.js +5 -6
- package/lib-esm/utils/CoordsType.js.map +1 -0
- package/lib-esm/utils/FoVUtils.d.ts +1 -0
- package/lib-esm/utils/FoVUtils.d.ts.map +1 -0
- package/lib-esm/utils/FoVUtils.js +5 -6
- package/lib-esm/utils/FoVUtils.js.map +1 -0
- package/lib-esm/utils/GeoJSONParser.d.ts +1 -0
- package/lib-esm/utils/GeoJSONParser.d.ts.map +1 -0
- package/lib-esm/utils/GeoJSONParser.js +5 -6
- package/lib-esm/utils/GeoJSONParser.js.map +1 -0
- package/lib-esm/utils/GeomUtils.d.ts +1 -0
- package/lib-esm/utils/GeomUtils.d.ts.map +1 -0
- package/lib-esm/utils/GeomUtils.js +5 -6
- package/lib-esm/utils/GeomUtils.js.map +1 -0
- package/lib-esm/utils/MouseHelper.d.ts +1 -0
- package/lib-esm/utils/MouseHelper.d.ts.map +1 -0
- package/lib-esm/utils/MouseHelper.js +6 -7
- package/lib-esm/utils/MouseHelper.js.map +1 -0
- package/lib-esm/utils/PerspectiveMatrixManager.d.ts +1 -0
- package/lib-esm/utils/PerspectiveMatrixManager.d.ts.map +1 -0
- package/lib-esm/utils/PerspectiveMatrixManager.js +5 -6
- package/lib-esm/utils/PerspectiveMatrixManager.js.map +1 -0
- package/lib-esm/utils/RayPickingUtils.d.ts +1 -0
- package/lib-esm/utils/RayPickingUtils.d.ts.map +1 -0
- package/lib-esm/utils/RayPickingUtils.js +5 -6
- package/lib-esm/utils/RayPickingUtils.js.map +1 -0
- package/lib-esm/utils/STCSParser.d.ts +1 -0
- package/lib-esm/utils/STCSParser.d.ts.map +1 -0
- package/lib-esm/utils/STCSParser.js +5 -6
- package/lib-esm/utils/STCSParser.js.map +1 -0
- package/lib-esm/utils/ShaderUtility.d.ts +1 -0
- package/lib-esm/utils/ShaderUtility.d.ts.map +1 -0
- package/lib-esm/utils/ShaderUtility.js +5 -6
- package/lib-esm/utils/ShaderUtility.js.map +1 -0
- package/lib-esm/utils/Utils.d.ts +1 -0
- package/lib-esm/utils/Utils.d.ts.map +1 -0
- package/lib-esm/utils/Utils.js +5 -6
- package/lib-esm/utils/Utils.js.map +1 -0
- package/lib-esm/utils/XYZRayPickingUtils.d.ts +1 -0
- package/lib-esm/utils/XYZRayPickingUtils.d.ts.map +1 -0
- package/lib-esm/utils/XYZRayPickingUtils.js +5 -6
- package/lib-esm/utils/XYZRayPickingUtils.js.map +1 -0
- package/package.json +39 -22
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astroviewer.cjs","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAEA;AACO;AACA;AACA;AACA;;AAEP;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,4CAA4C;AACvD;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA,C;;;AChEwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,UAAmB;AACnC,MAAM,UAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,UAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,UAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,aAAa;AAC1B;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,cAAc;AAC1B,YAAY,MAAM;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,cAAc;AAC1B,YAAY,MAAM;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,YAAY,MAAM;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,cAAc;AAC1B,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB;AACA,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO,YAAY,uDAAO;;AAE1B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO,UAAU,wDAAQ;;AAEzB;AACA,cAAc;AACd;AACA;AACO,UAAU,wDAAQ,G;;;ACx6De;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACO,SAAS,WAAM;AACtB,gBAAgB,UAAmB;AACnC,MAAM,UAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB,gBAAgB,UAAmB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,eAAU;AAC1B,gBAAgB,UAAmB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,SAAI;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,aAAQ;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,aAAQ;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB,WAAW,aAAQ;AACnB,WAAW,aAAQ;AACnB,WAAW,aAAQ;AACnB;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA,UAAU,aAAQ;AAClB,UAAU,aAAQ;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,YAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,YAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,YAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,QAAG;AACnB;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO,SAAS,gBAAW;AAC3B;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAQ,6EAA6E,aAAQ,6EAA6E,aAAQ;AAChN;;AAEA;AACA,cAAc;AACd;AACA;AACO,IAAI,QAAG,GAAG,6DAAQ;;AAEzB;AACA,cAAc;AACd;AACA;AACO,IAAI,QAAG,GAAG,6DAAQ;;AAEzB;AACA,cAAc;AACd;AACA;AACO,UAAU,sDAAM;;AAEvB;AACA,cAAc;AACd;AACA;AACO,WAAW,wDAAQ;;AAE1B;AACA,cAAc;AACd;AACA;AACO,cAAc,+DAAe;;AAEpC;AACA,cAAc;AACd;AACA;AACO,UAAU,2DAAM;;AAEvB;AACA,cAAc;AACd;AACA;AACO,aAAa,6DAAa;;AAEjC;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACO;AACP,YAAY,WAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,G;;;AC5xBuC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACO,SAAS,WAAM;AACtB,gBAAgB,UAAmB;AACnC,MAAM,UAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB,gBAAgB,aAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,eAAU;AAC1B,gBAAgB,UAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,SAAI;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,aAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,aAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,SAAI;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB,WAAW,aAAQ;AACnB,WAAW,aAAQ;AACnB,WAAW,aAAQ;AACnB,WAAW,aAAQ;AACnB;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,gBAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,aAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,oBAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,kBAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,YAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,cAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,QAAG;AACnB;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,SAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,WAAM;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAQ;AACjB;AACA,YAAY,aAAQ;AACpB;AACA,SAAS,aAAQ;AACjB;AACA,YAAY,aAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,kBAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,kBAAa;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO,SAAS,SAAI;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,QAAG;AACnB;AACA;;AA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EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC9C,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC1F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC3E,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7F,CAAC;KACH;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC1F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SACvF,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACxF,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG;SACJ,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzF,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SACpF,CAAC;KACH;IAED,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC3E,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SACnB,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;SAChC,CAAC;KACH;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACvF,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SACrD,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC1F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC/E,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7B,CAAC;KACH;IACD,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACvF,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;SAC5D,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACxF,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG;SACT,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG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EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC9E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACtF,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAClF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC9E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACpE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACtC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACvB,GAAG,EAAE,GAAG;YACR,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC/D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACtC,GAAG,EAAE,GAAG;YACR,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACtC,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;SACJ,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACxF,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAClF,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC1C,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACtE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC9C,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC/D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAClB,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;SACJ,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAChO,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC1E,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACnF,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACnF,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzE,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACnF,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACnF,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YA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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpCiC;AAC1B;AACP;AACA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA;;;ACzBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sBAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;;;AClByC;AACA;AACR;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,qBAAqB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,WAAW;AACvC,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0CAA0C;AAChF;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ,oBAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,kCAAkC;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,4BAA4B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,4BAA4B;AAClD;AACA;AACA;AACA;AACA,SAAS,oBAAY;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,IAAI;AACpC;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA;AACA;AACA,wBAAwB,YAAY;AACpC,qBAAqB,4CAA4C;AACjE;AACA;AACA;AACA,eAAe,IAAI;AACnB;AACA;AACA,eAAe,IAAI;AACnB;AACA;AACA,eAAe,IAAI;AACnB;AACA;AACA,eAAe,IAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA,eAAe,oBAAoB;AACnC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA,eAAe,oBAAoB;AACnC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;;AC5qBuC;AACJ;AACM;AACA;AACR;;;;;;;UCJjC;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,2CAA2C,0CAA0C;WACrF,MAAM;WACN,2CAA2C,gCAAgC;WAC3E;WACA,KAAK,yBAAyB;WAC9B;WACA,GAAG;WACH;WACA;WACA,0CAA0C,wCAAwC;WAClF;WACA;WACA;WACA,E;;;;;WCtBA,wF;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;UENA;UACA;UACA;UACA","sources":["webpack://astro-viewer/./node_modules/gl-matrix/esm/common.js","webpack://astro-viewer/./node_modules/gl-matrix/esm/mat4.js","webpack://astro-viewer/./node_modules/gl-matrix/esm/vec3.js","webpack://astro-viewer/./node_modules/gl-matrix/esm/vec4.js","webpack://astro-viewer/./node_modules/gl-matrix/esm/index.js","webpack://astro-viewer/./src/AstroSphere.ts","webpack://astro-viewer/./src/AstroViewer.ts","webpack://astro-viewer/./src/Camera.ts","webpack://astro-viewer/./src/Config.ts","webpack://astro-viewer/./src/Global.ts","webpack://astro-viewer/./src/index.ts","webpack://astro-viewer/./src/model/AbstractSkyEntity.ts","webpack://astro-viewer/./src/model/ColorMaps.ts","webpack://astro-viewer/./src/model/MetadataColumn.ts","webpack://astro-viewer/./src/model/MetadataManager.ts","webpack://astro-viewer/./src/model/Point.ts","webpack://astro-viewer/./src/model/Point2D.ts","webpack://astro-viewer/./src/model/Source.ts","webpack://astro-viewer/./src/model/SphereFoV.ts","webpack://astro-viewer/./src/model/catalogues/CatalogueGL.ts","webpack://astro-viewer/./src/model/earth/WMTSAdapter.ts","webpack://astro-viewer/./src/model/earth/XYZAnchestorTile.ts","webpack://astro-viewer/./src/model/earth/XYZFoVHelper.ts","webpack://astro-viewer/./src/model/earth/XYZMap.ts","webpack://astro-viewer/./src/model/earth/XYZMapDescriptor.ts","webpack://astro-viewer/./src/model/earth/XYZMeshBuilder.ts","webpack://astro-viewer/./src/model/earth/XYZTile.ts","webpack://astro-viewer/./src/model/earth/XYZTileBuffer.ts","webpack://astro-viewer/./src/model/earth/XYZTileRequestScheduler.ts","webpack://astro-viewer/./src/model/earth/XYZVisibleTilesManager.ts","webpack://astro-viewer/./src/model/footprints/Footprint.ts","webpack://astro-viewer/./src/model/footprints/FootprintSetGL.ts","webpack://astro-viewer/./src/model/grid/EquatorialGrid.ts","webpack://astro-viewer/./src/model/grid/GridTextHelper.ts","webpack://astro-viewer/./src/model/grid/HealpixGrid.ts","webpack://astro-viewer/./src/model/grid/LonLatGrid.ts","webpack://astro-viewer/./src/model/hips/AllSky.ts","webpack://astro-viewer/./src/model/hips/AncestorTile.ts","webpack://astro-viewer/./src/model/hips/FoVHelper.ts","webpack://astro-viewer/./src/model/hips/HiPS.ts","webpack://astro-viewer/./src/model/hips/HiPSDescriptor.ts","webpack://astro-viewer/./src/model/hips/Tile.ts","webpack://astro-viewer/./src/model/hips/TileBuffer.ts","webpack://astro-viewer/./src/model/hips/VisibleTilesManager.ts","webpack://astro-viewer/./src/model/meships/MeshHiPS.ts","webpack://astro-viewer/./src/model/meships/MeshHiPSDescriptor.ts","webpack://astro-viewer/./src/model/meships/MeshHiPSTile.ts","webpack://astro-viewer/./src/model/meships/OBJMeshParser.ts","webpack://astro-viewer/./src/model/observation/ObservationTrackTimeline.ts","webpack://astro-viewer/./src/model/observation/ObservationTrackViewerAdapter.ts","webpack://astro-viewer/./src/model/observation/index.ts","webpack://astro-viewer/./src/model/terra/SatelliteObjectGL.ts","webpack://astro-viewer/./src/model/terra/SensorConeGL.ts","webpack://astro-viewer/./src/model/terra/TerraFootprintSetGL.ts","webpack://astro-viewer/./src/model/terra/TerraPointSetGL.ts","webpack://astro-viewer/./src/model/terra/TerraPolylineSetGL.ts","webpack://astro-viewer/./src/shader/CatalogueShaderProgram.ts","webpack://astro-viewer/./src/shader/FootprintShaderProgram.ts","webpack://astro-viewer/./src/shader/GridShaderManager.ts","webpack://astro-viewer/./src/shader/HiPSShaderProgram.ts","webpack://astro-viewer/./src/shader/MeshHiPSShaderProgram.ts","webpack://astro-viewer/./src/shader/ShaderManager.ts","webpack://astro-viewer/./src/shader/XYZShaderProgram.ts","webpack://astro-viewer/./src/utils/CoordsType.ts","webpack://astro-viewer/./src/utils/FoVUtils.ts","webpack://astro-viewer/./src/utils/GeoJSONParser.ts","webpack://astro-viewer/./src/utils/GeomUtils.ts","webpack://astro-viewer/./src/utils/MouseHelper.ts","webpack://astro-viewer/./src/utils/PerspectiveMatrixManager.ts","webpack://astro-viewer/./src/utils/RayPickingUtils.ts","webpack://astro-viewer/./src/utils/STCSParser.ts","webpack://astro-viewer/./src/utils/Utils.ts","webpack://astro-viewer/./src/utils/XYZRayPickingUtils.ts","webpack://astro-viewer/./node_modules/astrospatial-core/lib-esm/healpix/vec3.js","webpack://astro-viewer/./node_modules/astrospatial-core/lib-esm/healpix/pointing.js","webpack://astro-viewer/./node_modules/astrospatial-core/lib-esm/healpix/rangeset.js","webpack://astro-viewer/./node_modules/astrospatial-core/lib-esm/healpix/healpix.js","webpack://astro-viewer/./node_modules/astrospatial-core/lib-esm/healpix/index.js","webpack://astro-viewer/webpack/bootstrap","webpack://astro-viewer/webpack/runtime/define property getters","webpack://astro-viewer/webpack/runtime/hasOwnProperty shorthand","webpack://astro-viewer/webpack/runtime/make namespace object","webpack://astro-viewer/webpack/before-startup","webpack://astro-viewer/webpack/startup","webpack://astro-viewer/webpack/after-startup"],"sourcesContent":["/**\n * Common utilities\n * @module glMatrix\n */\n\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== \"undefined\" ? Float32Array : Array;\nexport var RANDOM = Math.random;\nexport var ANGLE_ORDER = \"zyx\";\n\n/**\n * Symmetric round\n * see https://www.npmjs.com/package/round-half-up-symmetric#user-content-detailed-background\n *\n * @param {Number} a value to round\n */\nexport function round(a) {\n if (a >= 0) return Math.round(a);\n return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);\n}\n\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\nvar radian = 180 / Math.PI;\n\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\nexport function toRadian(a) {\n return a * degree;\n}\n\n/**\n * Convert Radian To Degree\n *\n * @param {Number} a Angle in Radians\n */\nexport function toDegree(a) {\n return a * radian;\n}\n\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @param {Number} tolerance Absolute or relative tolerance (default glMatrix.EPSILON)\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\nexport function equals(a, b) {\n var tolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EPSILON;\n return Math.abs(a - b) <= tolerance * Math.max(1, Math.abs(a), Math.abs(b));\n}","import * as glMatrix from \"./common.js\";\n\n/**\n * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.\n * @module mat4\n */\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * Create a new mat4 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} A new mat4\n */\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} out\n */\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n return out;\n}\n\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4 | null} out, or null if source matrix is not invertible\n */\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32;\n out[0] = a11 * b11 - a12 * b10 + a13 * b09;\n out[1] = a02 * b10 - a01 * b11 - a03 * b09;\n out[2] = a31 * b05 - a32 * b04 + a33 * b03;\n out[3] = a22 * b04 - a21 * b05 - a23 * b03;\n out[4] = a12 * b08 - a10 * b11 - a13 * b07;\n out[5] = a00 * b11 - a02 * b08 + a03 * b07;\n out[6] = a32 * b02 - a30 * b05 - a33 * b01;\n out[7] = a20 * b05 - a22 * b02 + a23 * b01;\n out[8] = a10 * b10 - a11 * b08 + a13 * b06;\n out[9] = a01 * b08 - a00 * b10 - a03 * b06;\n out[10] = a30 * b04 - a31 * b02 + a33 * b00;\n out[11] = a21 * b02 - a20 * b04 - a23 * b00;\n out[12] = a11 * b07 - a10 * b09 - a12 * b06;\n out[13] = a00 * b09 - a01 * b07 + a02 * b06;\n out[14] = a31 * b01 - a30 * b03 - a32 * b00;\n out[15] = a20 * b03 - a21 * b01 + a22 * b00;\n return out;\n}\n\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b0 = a00 * a11 - a01 * a10;\n var b1 = a00 * a12 - a02 * a10;\n var b2 = a01 * a12 - a02 * a11;\n var b3 = a20 * a31 - a21 * a30;\n var b4 = a20 * a32 - a22 * a30;\n var b5 = a21 * a32 - a22 * a31;\n var b6 = a00 * b5 - a01 * b4 + a02 * b3;\n var b7 = a10 * b5 - a11 * b4 + a12 * b3;\n var b8 = a20 * b2 - a21 * b1 + a22 * b0;\n var b9 = a30 * b2 - a31 * b1 + a32 * b0;\n\n // Calculate the determinant\n return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;\n}\n\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n\n // Cache only the current line of the second matrix\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to translate\n * @param {ReadonlyVec3} v vector to translate by\n * @returns {mat4} out\n */\nexport function translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n return out;\n}\n\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nexport function rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.sqrt(x * x + y * y + z * z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n if (len < glMatrix.EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n\n // Construct the elements of the rotation matrix\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c;\n\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n}\n\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Scaling vector\n * @returns {mat4} out\n */\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nexport function fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.sqrt(x * x + y * y + z * z);\n var s, c, t;\n if (len < glMatrix.EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n\n // Perform rotation-specific matrix multiplication\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n * let quatMat = mat4.create();\n * mat4.fromQuat(quatMat, quat);\n * mat4.multiply(dest, dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a new mat4 from a dual quat.\n *\n * @param {mat4} out Matrix\n * @param {ReadonlyQuat2} a Dual Quaternion\n * @returns {mat4} mat4 receiving operation result\n */\nexport function fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw;\n //Only scale if it makes sense\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n fromRotationTranslation(out, a, translation);\n return out;\n}\n\n/**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n\n/**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion parameter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\nexport function getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n return out;\n}\n\n/**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\nexport function getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n return out;\n}\n\n/**\n * Decomposes a transformation matrix into its rotation, translation\n * and scale components. Returns only the rotation component\n * @param {quat} out_r Quaternion to receive the rotation component\n * @param {vec3} out_t Vector to receive the translation vector\n * @param {vec3} out_s Vector to receive the scaling factor\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @returns {quat} out_r\n */\nexport function decompose(out_r, out_t, out_s, mat) {\n out_t[0] = mat[12];\n out_t[1] = mat[13];\n out_t[2] = mat[14];\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n var is1 = 1 / out_s[0];\n var is2 = 1 / out_s[1];\n var is3 = 1 / out_s[2];\n var sm11 = m11 * is1;\n var sm12 = m12 * is2;\n var sm13 = m13 * is3;\n var sm21 = m21 * is1;\n var sm22 = m22 * is2;\n var sm23 = m23 * is3;\n var sm31 = m31 * is1;\n var sm32 = m32 * is2;\n var sm33 = m33 * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out_r[3] = 0.25 * S;\n out_r[0] = (sm23 - sm32) / S;\n out_r[1] = (sm31 - sm13) / S;\n out_r[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out_r[3] = (sm23 - sm32) / S;\n out_r[0] = 0.25 * S;\n out_r[1] = (sm12 + sm21) / S;\n out_r[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out_r[3] = (sm31 - sm13) / S;\n out_r[0] = (sm12 + sm21) / S;\n out_r[1] = 0.25 * S;\n out_r[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out_r[3] = (sm12 - sm21) / S;\n out_r[0] = (sm31 + sm13) / S;\n out_r[1] = (sm23 + sm32) / S;\n out_r[2] = 0.25 * S;\n }\n return out_r;\n}\n\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n * let quatMat = mat4.create();\n * mat4.fromQuat(quatMat, quat);\n * mat4.multiply(dest, dest, quatMat);\n * mat4.scale(dest, dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @returns {mat4} out\n */\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n * mat4.translate(dest, dest, origin);\n * let quatMat = mat4.create();\n * mat4.fromQuat(quatMat, quat);\n * mat4.multiply(dest, dest, quatMat);\n * mat4.scale(dest, dest, scale)\n * mat4.translate(dest, dest, negativeOrigin);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\n * @returns {mat4} out\n */\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n\n/**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\nexport function perspectiveNO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n var nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n return out;\n}\n\n/**\n * Alias for {@link mat4.perspectiveNO}\n * @function\n */\nexport var perspective = perspectiveNO;\n\n/**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\nexport function perspectiveZO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n var nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -near;\n }\n return out;\n}\n\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function orthoNO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n\n/**\n * Alias for {@link mat4.orthoNO}\n * @function\n */\nexport var ortho = orthoNO;\n\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function orthoZO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\nexport function lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} target Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\nexport function targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n\n/**\n * Returns a string representation of a mat4\n *\n * @param {ReadonlyMat4} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nexport function str(a) {\n return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nexport function frob(a) {\n return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + a[6] * a[6] + a[7] * a[7] + a[8] * a[8] + a[9] * a[9] + a[10] * a[10] + a[11] * a[11] + a[12] * a[12] + a[13] * a[13] + a[14] * a[14] + a[15] * a[15]);\n}\n\n/**\n * Adds two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat4} out\n */\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n\n/**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat4} out the receiving vector\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat4} out\n */\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link mat4.subtract}\n * @function\n */\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n return out;\n}\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n\n/**\n * symmetric round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\nexport function round(out, a) {\n out[0] = glMatrix.round(a[0]);\n out[1] = glMatrix.round(a[1]);\n out[2] = glMatrix.round(a[2]);\n return out;\n}\n\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n\n/**\n * Performs a spherical linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function slerp(out, a, b, t) {\n var angle = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));\n var sinTotal = Math.sin(angle);\n var ratioA = Math.sin((1 - t) * angle) / sinTotal;\n var ratioB = Math.sin(t * angle) / sinTotal;\n out[0] = ratioA * a[0] + ratioB * b[0];\n out[1] = ratioA * a[1] + ratioB * b[1];\n out[2] = ratioA * a[2] + ratioB * b[2];\n return out;\n}\n\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns {vec3} out\n */\nexport function random(out, scale) {\n scale = scale === undefined ? 1.0 : scale;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q normalized quaternion to transform with\n * @returns {vec3} out\n */\nexport function transformQuat(out, a, q) {\n // Fast Vector Rotation using Quaternions by Robert Eisele\n // https://raw.org/proof/vector-rotation-using-quaternions/\n\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var vx = a[0],\n vy = a[1],\n vz = a[2];\n\n // t = q x v\n var tx = qy * vz - qz * vy;\n var ty = qz * vx - qx * vz;\n var tz = qx * vy - qy * vx;\n\n // t = 2t\n tx = tx + tx;\n ty = ty + ty;\n tz = tz + tz;\n\n // v + w t + q x t\n out[0] = vx + qw * tx + qy * tz - qz * ty;\n out[1] = vy + qw * ty + qz * tx - qx * tz;\n out[2] = vz + qw * tz + qx * ty - qy * tx;\n return out;\n}\n\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n\n //translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n\n //translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n\n //translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz)),\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\nexport var sub = subtract;\n\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\nexport var div = divide;\n\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\nexport var dist = distance;\n\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\nexport var sqrDist = squaredDistance;\n\n/**\n * Alias for {@link vec3.length}\n * @function\n */\nexport var len = length;\n\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\nexport var sqrLen = squaredLength;\n\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n if (!stride) {\n stride = 3;\n }\n if (!offset) {\n offset = 0;\n }\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n return out;\n}\n\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {ReadonlyVec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\nexport function fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the source vector\n * @returns {vec4} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n\n/**\n * Math.ceil the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to ceil\n * @returns {vec4} out\n */\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n\n/**\n * Math.floor the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to floor\n * @returns {vec4} out\n */\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n\n/**\n * symmetric round the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to round\n * @returns {vec4} out\n */\nexport function round(out, a) {\n out[0] = glMatrix.round(a[0]);\n out[1] = glMatrix.round(a[1]);\n out[2] = glMatrix.round(a[2]);\n out[3] = glMatrix.round(a[3]);\n return out;\n}\n\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n}\n\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n\n/**\n * Calculates the length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n}\n\n/**\n * Calculates the squared length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to negate\n * @returns {vec4} out\n */\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to invert\n * @returns {vec4} out\n */\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to normalize\n * @returns {vec4} out\n */\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n\n/**\n * Returns the cross-product of three vectors in a 4-dimensional space\n *\n * @param {ReadonlyVec4} out the receiving vector\n * @param {ReadonlyVec4} u the first vector\n * @param {ReadonlyVec4} v the second vector\n * @param {ReadonlyVec4} w the third vector\n * @returns {vec4} result\n */\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec4} out\n */\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns {vec4} out\n */\nexport function random(out, scale) {\n scale = scale === undefined ? 1.0 : scale;\n\n // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n var v1, v2, v3, v4;\n var s1, s2;\n var rand;\n rand = glMatrix.RANDOM();\n v1 = rand * 2 - 1;\n v2 = (4 * glMatrix.RANDOM() - 2) * Math.sqrt(rand * -rand + rand);\n s1 = v1 * v1 + v2 * v2;\n rand = glMatrix.RANDOM();\n v3 = rand * 2 - 1;\n v4 = (4 * glMatrix.RANDOM() - 2) * Math.sqrt(rand * -rand + rand);\n s2 = v3 * v3 + v4 * v4;\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec4} out\n */\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyQuat} q normalized quaternion to transform with\n * @returns {vec4} out\n */\nexport function transformQuat(out, a, q) {\n // Fast Vector Rotation using Quaternions by Robert Eisele\n // https://raw.org/proof/vector-rotation-using-quaternions/\n\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var vx = a[0],\n vy = a[1],\n vz = a[2];\n\n // t = q x v\n var tx = qy * vz - qz * vy;\n var ty = qz * vx - qx * vz;\n var tz = qx * vy - qy * vx;\n\n // t = 2t\n tx = tx + tx;\n ty = ty + ty;\n tz = tz + tz;\n\n // v + w t + q x t\n out[0] = vx + qw * tx + qy * tz - qz * ty;\n out[1] = vy + qw * ty + qz * tx - qx * tz;\n out[2] = vz + qw * tz + qx * ty - qy * tx;\n out[3] = a[3];\n return out;\n}\n\n/**\n * Set the components of a vec4 to zero\n *\n * @param {vec4} out the receiving vector\n * @returns {vec4} out\n */\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec4} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\nexport var sub = subtract;\n\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\nexport var div = divide;\n\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\nexport var dist = distance;\n\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\nexport var sqrDist = squaredDistance;\n\n/**\n * Alias for {@link vec4.length}\n * @function\n */\nexport var len = length;\n\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\nexport var sqrLen = squaredLength;\n\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n if (!stride) {\n stride = 4;\n }\n if (!offset) {\n offset = 0;\n }\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\nimport * as mat2 from \"./mat2.js\";\nimport * as mat2d from \"./mat2d.js\";\nimport * as mat3 from \"./mat3.js\";\nimport * as mat4 from \"./mat4.js\";\nimport * as quat from \"./quat.js\";\nimport * as quat2 from \"./quat2.js\";\nimport * as vec2 from \"./vec2.js\";\nimport * as vec3 from \"./vec3.js\";\nimport * as vec4 from \"./vec4.js\";\nexport { glMatrix, mat2, mat2d, mat3, mat4, quat, quat2, vec2, vec3, vec4 };","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { bootSetup } from \"./Config.js\";\nimport Camera from \"./Camera.js\";\nimport RayPickingUtils from \"./utils/RayPickingUtils.js\";\nimport global from \"./Global.js\";\nimport MouseHelper from \"./utils/MouseHelper.js\";\n\nimport {\n cartesianToSpherical,\n sphericalToAstroDeg,\n raDegToHMS,\n decDegToDMS,\n AstroCoords,\n HMS,\n SphericalCoords,\n DMS,\n} from \"./utils/Utils.js\";\n\nimport { HiPS } from \"./model/hips/HiPS.js\";\nimport { HiPSDescriptor } from \"./model/hips/HiPSDescriptor.js\";\nimport { PerspectiveMatrixManager } from \"./utils/PerspectiveMatrixManager.js\";\nimport { SphereFoV } from \"./model/SphereFoV.js\";\nimport { Point } from \"./model/Point.js\";\nimport { FoVUtils } from \"./utils/FoVUtils.js\";\nimport { CatalogueGL } from \"./model/catalogues/CatalogueGL.js\";\nimport {\n FootprintSetGL,\n HoveredFootprintDetail,\n} from \"./model/footprints/FootprintSetGL.js\";\nimport { Source } from \"./model/Source.js\";\n\nimport { EquatorialGrid } from \"./model/grid/EquatorialGrid.js\";\nimport { HealpixGrid } from \"./model/grid/HealpixGrid.js\";\nimport type { GridLabelContainers } from \"./model/grid/GridTextHelper.js\";\nimport { SkyEntityDrawInput } from \"./model/AbstractSkyEntity.js\";\nimport { CoordsType } from \"./utils/CoordsType.js\";\nimport ColorMaps, { ColorMapName, ColorMap } from \"./model/ColorMaps.js\";\nimport type {\n WMTSLayerConfig,\n XYZDebugStats,\n XYZLayerConfig,\n} from \"./model/earth/XYZConfig.js\";\nimport type { HiPSDebugStats } from \"./model/hips/HiPSConfig.js\";\nimport { xyzTileRequestScheduler } from \"./model/earth/XYZTileRequestScheduler.js\";\nimport { WMTSAdapter } from \"./model/earth/WMTSAdapter.js\";\nimport { XYZMapDescriptor } from \"./model/earth/XYZMapDescriptor.js\";\nimport { XYZMap } from \"./model/earth/XYZMap.js\";\nimport { MeshHiPS } from \"./model/meships/MeshHiPS.js\";\nimport { MeshHiPSDescriptor } from \"./model/meships/MeshHiPSDescriptor.js\";\nimport type { MeshHiPSDebugStats } from \"./model/meships/MeshHiPSTypes.js\";\nimport { TerraPolylineSetGL } from \"./model/terra/TerraPolylineSetGL.js\";\nimport { SatelliteObjectGL } from \"./model/terra/SatelliteObjectGL.js\";\nimport { SensorConeGL } from \"./model/terra/SensorConeGL.js\";\nimport { mat4, vec3, vec4 } from \"gl-matrix\";\n\nexport type PointCoordinates = {\n astroDeg: AstroCoords;\n raHMS: HMS;\n decDMS: DMS;\n sphericalDeg: SphericalCoords;\n};\n\nexport type CameraChangedDetail = {\n colorMap: ColorMap;\n fovDeg: number;\n fovXDeg: number;\n fovYDeg: number;\n position: [number, number, number];\n vMatrix: Float32Array;\n pMatrix: Float32Array;\n mMatrix: Float32Array;\n camera: Camera;\n timestamp: number;\n centralPoint: Point;\n mouseHoverPoint: PointCoordinates | undefined;\n getFoVPolygon: Point[];\n};\n\nexport type AstroSphereOptions = {\n gridLabelContainers?: GridLabelContainers;\n};\n\n/**\n * AstroSphere — main WebGL scene controller (TS port)\n */\nclass AstroSphere {\n private static readonly MIN_WHEEL_SCALE = 0.85;\n private static readonly MAX_WHEEL_SCALE = 1.8;\n\n private _camera!: Camera;\n private _perspectiveMatrixManager: PerspectiveMatrixManager;\n\n private centralPoinCoords: PointCoordinates | undefined;\n private mousePointCoords: PointCoordinates | undefined;\n\n private canvas: HTMLCanvasElement;\n private _healpixGrid: HealpixGrid;\n private _equatorialGrid: EquatorialGrid;\n\n private mouseHelper: MouseHelper;\n\n private mouseDown = false;\n private lastMouseX: number | null = null;\n private lastMouseY: number | null = null;\n private inertiaX = 0.0;\n private inertiaY = 0.0;\n private zoomInertia = 0.0;\n private pointerDownX: number | null = null;\n private pointerDownY: number | null = null;\n private pointerDownAt = 0;\n\n private _activeHiPS: HiPS | null = null;\n private _activeXYZ2: XYZMap | null = null;\n private _activeMeshHiPS: MeshHiPS | null = null;\n private _activeBaseLayer: \"hips\" | \"xyz\" | \"meships\" | null = null;\n\n private startup = true;\n\n private fov: SphereFoV;\n\n private activeCatalogues: CatalogueGL[] = [];\n private activeFootprintSets: FootprintSetGL[] = [];\n private activePolylineSets: TerraPolylineSetGL[] = [];\n private activeSensorCones: SensorConeGL[] = [];\n private activeSatelliteObjects: SatelliteObjectGL[] = [];\n private _webgl: WebGL2RenderingContext;\n private _selectedColorMap: any;\n private _cameraStatusChanged: boolean = false;\n private lastCameraChangedAt = 0;\n private lastCameraMotionAt = 0;\n private lastHoveredSource: Source | null = null;\n private lastHoveredCatalogue: CatalogueGL | null = null;\n private zoomSensitivity = 1.0;\n private lockedEastWestRaDeg: number | null = null;\n private lockedNorthSouthDecDeg: number | null = null;\n private keepCameraNorthUp = true;\n private gridLabelContainers?: GridLabelContainers;\n\n constructor(canvas: HTMLCanvasElement, webgl: WebGL2RenderingContext, options: AstroSphereOptions = {}) {\n console.log(\"[AstroSphere] new instance for canvas\", canvas.id);\n // Keep global GL context (as in original JS)\n this._webgl = webgl;\n this.mouseHelper = new MouseHelper();\n this.canvas = canvas;\n this.gridLabelContainers = options.gridLabelContainers;\n\n const nativeColorMap: ColorMapName = \"native\";\n this._selectedColorMap = ColorMaps[nativeColorMap];\n\n global.insideSphere = bootSetup.insideSphere;\n\n this.initCamera();\n\n this._healpixGrid = new HealpixGrid(this._webgl, this.gridLabelContainers);\n this._perspectiveMatrixManager = new PerspectiveMatrixManager(\n canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n bootSetup.insideSphere,\n );\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n bootSetup.insideSphere,\n );\n\n this._equatorialGrid = new EquatorialGrid(this._webgl, this._healpixGrid, this.gridLabelContainers);\n this._equatorialGrid.init(this._healpixGrid.getMinFoV());\n\n this.updateCentralPoint();\n this.startup = true;\n this.addEventListeners(canvas);\n this.fov = this._healpixGrid.refreshFoV(\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n this._camera.refreshFoV(this.fov.minFoV);\n }\n\n private initCamera() {\n if (bootSetup.insideSphere) {\n this._camera = new Camera([0.0, 0.0, -0.005], true);\n } else {\n this._camera = new Camera([0.0, 0.0, 4.0], false);\n }\n }\n\n setCamera(camera: Camera) {\n this._camera = camera;\n }\n\n setCameraRotationSensitivity(value: number): void {\n this._camera.setRotationSensitivity(value);\n }\n\n getCameraRotationSensitivity(): number {\n return this._camera.getRotationSensitivity();\n }\n\n get healpixGrid() {\n return this._healpixGrid;\n }\n\n get equatorialGrid() {\n return this._equatorialGrid;\n }\n\n // This is a lickely a duplication of FoVUtils.getCenterJ2000(this.canvas)\n private updateCentralPoint(): PointCoordinates {\n const sphericalCoords = this.getPhiThetaDeg(this.canvas);\n const astroCoords = sphericalToAstroDeg(\n sphericalCoords.phi,\n sphericalCoords.theta,\n );\n const raHMS = raDegToHMS(astroCoords.ra);\n const decDMS = decDegToDMS(astroCoords.dec);\n this.centralPoinCoords = {\n astroDeg: astroCoords,\n sphericalDeg: sphericalCoords,\n raHMS: raHMS,\n decDMS: decDMS,\n };\n return this.centralPoinCoords;\n }\n\n private updateLastMousePoint(): PointCoordinates {\n const sphericalCoords = {\n phi: this.mouseHelper.phi,\n theta: this.mouseHelper.theta,\n } as SphericalCoords;\n const astroCoords = {\n ra: this.mouseHelper.ra,\n dec: this.mouseHelper.dec,\n } as AstroCoords;\n const raHMS = this.mouseHelper.raHMS as HMS;\n const decDMS = this.mouseHelper.decDMS as DMS;\n this.mousePointCoords = {\n astroDeg: astroCoords,\n sphericalDeg: sphericalCoords,\n raHMS: raHMS,\n decDMS: decDMS,\n };\n return this.mousePointCoords;\n }\n\n private clearLastMousePoint(): void {\n this.mousePointCoords = undefined;\n }\n\n // This should call FoVUtils.getJ200Centre(this.canvas)\n getCentralPointCoordinates(): PointCoordinates | undefined {\n return this.centralPoinCoords;\n }\n\n getLastMousePointCoordinates(): PointCoordinates | undefined {\n return this.mousePointCoords;\n }\n\n private clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n }\n\n private computeZoomStep(currentFov: number, deltaY: number): number {\n const direction = deltaY < 0 ? -1 : 1;\n const wheelScale = this.clamp(\n Math.abs(deltaY) / 120,\n AstroSphere.MIN_WHEEL_SCALE,\n AstroSphere.MAX_WHEEL_SCALE,\n );\n\n const baseMagnitude = this.clamp(\n 0.0012 + 0.0025 * Math.sqrt(Math.max(currentFov, 0)),\n 0.0012,\n 0.04,\n );\n\n return direction * baseMagnitude * wheelScale * this.zoomSensitivity;\n }\n\n setZoomSensitivity(value: number): void {\n this.zoomSensitivity = this.clamp(value, 0.2, 3);\n }\n\n getZoomSensitivity(): number {\n return this.zoomSensitivity;\n }\n\n private filterRotationDeltaByAstroLocks(\n deltaX: number,\n deltaY: number,\n ): { deltaX: number; deltaY: number } {\n const lockEastWest = this._camera.isRotationLockedY();\n const lockNorthSouth = this._camera.isRotationLockedX();\n if (!lockEastWest && !lockNorthSouth) {\n return { deltaX, deltaY };\n }\n\n const center = RayPickingUtils.getIntersectionPointWithSingleModel(\n this.canvas.clientWidth / 2,\n this.canvas.clientHeight / 2,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n if (!center || center.length < 3) {\n return { deltaX, deltaY };\n }\n\n const centerVec = vec3.normalize(\n vec3.create(),\n vec3.fromValues(center[0], center[1], center[2]),\n );\n const northAxis = vec3.fromValues(0, 0, 1);\n const eastVec = vec3.cross(vec3.create(), northAxis, centerVec);\n if (vec3.length(eastVec) < 1e-6) {\n vec3.set(eastVec, 1, 0, 0);\n } else {\n vec3.normalize(eastVec, eastVec);\n }\n\n const northProjection = vec3.scale(\n vec3.create(),\n centerVec,\n vec3.dot(northAxis, centerVec),\n );\n const northVec = vec3.subtract(vec3.create(), northAxis, northProjection);\n if (vec3.length(northVec) < 1e-6) {\n vec3.cross(northVec, centerVec, eastVec);\n }\n vec3.normalize(northVec, northVec);\n\n const eastScreen = this.projectModelDirectionToScreen(centerVec, eastVec);\n const northScreen = this.projectModelDirectionToScreen(centerVec, northVec);\n if (!eastScreen || !northScreen) {\n return { deltaX, deltaY };\n }\n\n let nextDeltaX = deltaX;\n let nextDeltaY = deltaY;\n\n if (lockEastWest) {\n const amount = nextDeltaX * eastScreen.x + nextDeltaY * eastScreen.y;\n nextDeltaX -= amount * eastScreen.x;\n nextDeltaY -= amount * eastScreen.y;\n }\n\n if (lockNorthSouth) {\n const amount = nextDeltaX * northScreen.x + nextDeltaY * northScreen.y;\n nextDeltaX -= amount * northScreen.x;\n nextDeltaY -= amount * northScreen.y;\n }\n\n return {\n deltaX: nextDeltaX,\n deltaY: nextDeltaY,\n };\n }\n\n private projectModelDirectionToScreen(\n centerModel: vec3,\n directionModel: vec3,\n ): { x: number; y: number } | null {\n const offsetModel = vec3.scaleAndAdd(\n vec3.create(),\n centerModel,\n directionModel,\n 0.01,\n );\n const centerScreen = this.projectModelPointToScreen(centerModel);\n const offsetScreen = this.projectModelPointToScreen(offsetModel);\n if (!centerScreen || !offsetScreen) {\n return null;\n }\n\n const x = offsetScreen.x - centerScreen.x;\n const y = offsetScreen.y - centerScreen.y;\n const len = Math.hypot(x, y);\n if (len < 1e-6) {\n return null;\n }\n\n return { x: x / len, y: y / len };\n }\n\n private projectModelPointToScreen(\n pointModel: vec3,\n ): { x: number; y: number } | null {\n const vMatrix = this._camera.getCameraMatrix();\n const mMatrix = this._healpixGrid.getModelMatrix();\n const mvMatrix = mat4.create();\n const mvpMatrix = mat4.create();\n mat4.multiply(mvMatrix, vMatrix, mMatrix);\n mat4.multiply(mvpMatrix, this._perspectiveMatrixManager.pMatrix, mvMatrix);\n\n const clip = vec4.fromValues(\n pointModel[0],\n pointModel[1],\n pointModel[2],\n 1,\n );\n vec4.transformMat4(clip, clip, mvpMatrix);\n if (Math.abs(clip[3]) < 1e-6) {\n return null;\n }\n\n return {\n x: clip[0] / clip[3],\n y: -(clip[1] / clip[3]),\n };\n }\n\n private enforceAstronomicalRotationLocks(): boolean {\n if (\n this.lockedEastWestRaDeg == null &&\n this.lockedNorthSouthDecDeg == null\n ) {\n return false;\n }\n\n const center = this.updateCentralPoint();\n if (!center) {\n return false;\n }\n\n const nextRa = this.lockedEastWestRaDeg ?? center.astroDeg.ra;\n const nextDec = this.lockedNorthSouthDecDeg ?? center.astroDeg.dec;\n const needsCorrection =\n Math.abs(nextRa - center.astroDeg.ra) > 1e-6 ||\n Math.abs(nextDec - center.astroDeg.dec) > 1e-6;\n\n if (!needsCorrection) {\n return false;\n }\n\n this._camera.goTo(nextRa, nextDec);\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere,\n );\n this.updateCentralPoint();\n return true;\n }\n\n private enforceCameraNorthUp(): boolean {\n if (!this.keepCameraNorthUp) {\n return false;\n }\n\n const center = this.updateCentralPoint();\n if (!center) {\n return false;\n }\n\n this._camera.goTo(center.astroDeg.ra, center.astroDeg.dec);\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere,\n );\n this.updateCentralPoint();\n return true;\n }\n\n private emitCameraChanged(reason: string) {\n // avoid dispatch before scene is ready\n if (!this._activeHiPS && !this._activeXYZ2 && !this._activeMeshHiPS) return;\n if (!(this._healpixGrid as any)?.fovObj) return;\n\n const detail = this.getCurrentStatus();\n if (!detail) return;\n\n // optional debug\n // console.log('[AstroSphere] emit camera-changed:', reason);\n\n this.canvas.dispatchEvent(\n new CustomEvent<CameraChangedDetail>(\"camera-changed\", {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private addEventListeners(canvas: HTMLCanvasElement) {\n if (global.debug) {\n console.log(\"[AstroSphere::addEventListeners]\");\n }\n\n const CLICK_MAX_DISTANCE_PX = 4;\n const CLICK_MAX_DURATION_MS = 250;\n\n const rect = canvas.getBoundingClientRect();\n this.lastMouseX = rect.left; // locale al canvas\n this.lastMouseY = rect.top;\n\n const handleMouseDown = (event: PointerEvent) => {\n canvas.setPointerCapture(event.pointerId);\n this.mouseDown = true;\n\n const rect = canvas.getBoundingClientRect();\n this.lastMouseX = event.clientX - rect.left; // locale al canvas\n this.lastMouseY = event.clientY - rect.top; // locale al canvas\n this.pointerDownX = this.lastMouseX;\n this.pointerDownY = this.lastMouseY;\n this.pointerDownAt = Date.now();\n\n const mousePoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n this.lastMouseX,\n this.lastMouseY,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n\n if (mousePoint && mousePoint.length > 0) {\n this.mouseHelper.update(mousePoint);\n\n this.updateLastMousePoint();\n } else {\n this.clearLastMousePoint();\n }\n\n event.preventDefault();\n\n return false;\n };\n\n const handleMouseUp = (event: PointerEvent) => {\n canvas.releasePointerCapture(event.pointerId);\n this.mouseDown = false;\n document.body.style.cursor = \"auto\";\n\n if (event.button !== 0) {\n event.preventDefault();\n return false;\n }\n\n const rect = canvas.getBoundingClientRect();\n const localX = event.clientX - rect.left;\n const localY = event.clientY - rect.top;\n this.lastMouseX = localX;\n this.lastMouseY = localY;\n\n const moveDist = Math.hypot(\n localX - (this.pointerDownX ?? localX),\n localY - (this.pointerDownY ?? localY),\n );\n const elapsedMs = Date.now() - this.pointerDownAt;\n const isClick =\n moveDist <= CLICK_MAX_DISTANCE_PX && elapsedMs <= CLICK_MAX_DURATION_MS;\n\n if (isClick) {\n const mousePoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n localX,\n localY,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n\n if (mousePoint && mousePoint.length > 0) {\n this.mouseHelper.update(mousePoint);\n this.updateLastMousePoint();\n\n for (const cat of this.activeCatalogues) {\n const clickResult = cat.selectPrimarySourceFromClick(\n this.mouseHelper,\n );\n if (!clickResult?.sources.length) continue;\n this._webgl.canvas.dispatchEvent(\n new CustomEvent(\"source-clicked\", {\n detail: {\n source: clickResult.sources,\n selectionState: clickResult.selectionState,\n catalogue: cat,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n for (const fset of this.activeFootprintSets) {\n const clickResult = fset.selectPrimaryFootprintFromClick(\n this.mouseHelper,\n );\n if (!clickResult?.footprints.length) continue;\n this._webgl.canvas.dispatchEvent(\n new CustomEvent(\"footprint-clicked\", {\n detail: {\n footprint: clickResult.footprints,\n selectionState: clickResult.selectionState,\n footprintSet: fset,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n }\n } else {\n this.clearLastMousePoint();\n }\n };\n\n const handleMouseMove = (event: PointerEvent) => {\n const rect = canvas.getBoundingClientRect();\n\n // 🔹 canvas-local coordinates\n const localX = event.clientX - rect.left;\n const localY = event.clientY - rect.top;\n\n const newX = localX;\n const newY = localY;\n\n // if (!healpixGridSingleton) return;\n if (!this._healpixGrid) return;\n\n if (this.mouseDown) {\n document.body.style.cursor = \"grab\";\n const dragDirection = global.insideSphere ? -1 : 1;\n const dragSpeed = global.insideSphere ? 10.0 : 1;\n const deltaX =\n (dragDirection * dragSpeed * (newX - (this.lastMouseX ?? newX)) * Math.PI) /\n canvas.width;\n const deltaY =\n (dragDirection * dragSpeed * (newY - (this.lastMouseY ?? newY)) * Math.PI) /\n canvas.height;\n const filteredDelta = this.filterRotationDeltaByAstroLocks(\n deltaX,\n deltaY,\n );\n\n this.inertiaX += 0.1 * filteredDelta.deltaX;\n this.inertiaY += 0.1 * filteredDelta.deltaY;\n\n this.updateCentralPoint();\n } else {\n // Use canvas-local coords for picking\n const mousePoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n localX,\n localY,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n\n if (mousePoint && mousePoint.length > 0) {\n this.mouseHelper.update(mousePoint);\n\n this.updateLastMousePoint();\n } else {\n this.clearLastMousePoint();\n }\n }\n\n if (!this.centralPoinCoords) {\n this.updateCentralPoint();\n }\n\n this.lastMouseX = newX;\n this.lastMouseY = newY;\n\n // During drag, camera rotation is applied in the render loop via inertia.\n // Defer the camera-changed event to that loop so coordinates reflect the\n // actual updated camera state instead of the pre-rotation state.\n this._cameraStatusChanged = true;\n event.preventDefault();\n };\n\n const handleMouseWheel = (event: WheelEvent) => {\n const currentFov = this._healpixGrid.getMinFoV();\n const zoomStep = this.computeZoomStep(currentFov, event.deltaY);\n\n // Apply wheel zoom immediately and discard any queued inertia so reversing\n // direction feels responsive instead of \"buffered\".\n this.zoomInertia = 0;\n this._camera.zoom(zoomStep);\n this.lastCameraMotionAt = performance.now();\n\n this.fov = this._healpixGrid.refreshFoV(\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n this._camera.refreshFoV(this.fov.minFoV);\n\n this._cameraStatusChanged = true;\n this.emitCameraChanged(\"wheel\");\n event.preventDefault();\n };\n\n const handleContextMenu = (event: MouseEvent) => {\n event.preventDefault();\n\n const rect = canvas.getBoundingClientRect();\n const localX = event.clientX - rect.left;\n const localY = event.clientY - rect.top;\n\n const mousePoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n localX,\n localY,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n\n if (!mousePoint || mousePoint.length === 0) {\n return false;\n }\n\n this.mouseHelper.update(mousePoint);\n this.updateLastMousePoint();\n\n for (const cat of this.activeCatalogues) {\n const pickResult = cat.getSourcesFromPointer(this.mouseHelper);\n if (!pickResult?.sources.length) continue;\n\n this._webgl.canvas.dispatchEvent(\n new CustomEvent(\"source-contextmenu\", {\n detail: {\n source: pickResult.sources,\n catalogue: cat,\n clientX: event.clientX,\n clientY: event.clientY,\n },\n bubbles: true,\n composed: true,\n }),\n );\n break;\n }\n\n for (const fset of this.activeFootprintSets) {\n const pickResult = fset.getFootprintsFromPointer(this.mouseHelper);\n if (!pickResult?.footprints.length) continue;\n\n this._webgl.canvas.dispatchEvent(\n new CustomEvent(\"footprint-contextmenu\", {\n detail: {\n footprint: pickResult.footprints,\n footprintSet: fset,\n clientX: event.clientX,\n clientY: event.clientY,\n },\n bubbles: true,\n composed: true,\n }),\n );\n break;\n }\n\n return false;\n };\n\n const onKeyDown = (evt: KeyboardEvent) => {\n if (!evt.ctrlKey) {\n return;\n }\n\n // console.log('[AstroSphere::onKeyDown] key=', evt.key)\n switch (evt.key) {\n case \"1\":\n // Free camera\n this._camera.clearRotationLock();\n break;\n\n case \"2\":\n // Lock X axis rotation\n this._camera.setRotationLock({ x: true, y: false, z: false });\n break;\n\n case \"3\":\n // Lock Y axis rotation\n this._camera.setRotationLock({ x: false, y: true, z: false });\n break;\n\n case \"4\":\n // Lock Z axis rotation\n this._camera.setRotationLock({ x: false, y: false, z: true });\n break;\n }\n };\n\n console.log(\n \"[AstroSphere] registering pointer and wheel listeners on canvas\",\n );\n canvas.onpointerdown = handleMouseDown;\n canvas.onpointerup = handleMouseUp;\n canvas.onpointermove = handleMouseMove;\n canvas.onpointerleave = () => {\n this.clearLastMousePoint();\n this._cameraStatusChanged = true;\n this.emitCameraChanged(\"pointerleave\");\n };\n\n console.log(\n \"[AstroSphere] adding wheel event listener with passive: false\",\n );\n canvas.addEventListener(\"wheel\", handleMouseWheel, { passive: false });\n canvas.addEventListener(\"contextmenu\", handleContextMenu);\n\n console.log(\n \"[AstroSphere] registering global keydown listener on document\",\n );\n document.addEventListener(\"keydown\", onKeyDown, { capture: true });\n }\n\n // REVIEW THIS METHOD AND MOVE IT\n getPhiThetaDeg(canvas: HTMLCanvasElement) {\n const rect = canvas.getBoundingClientRect();\n const maxX = rect.width;\n const maxY = rect.height;\n const pickerPoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n maxX / 2,\n maxY / 2,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n\n return cartesianToSpherical(pickerPoint);\n }\n\n private collectViewportSphericalSamples(\n sampleCount = 5,\n ): Array<{ phi: number; theta: number }> {\n const rect = this.canvas.getBoundingClientRect();\n const width = rect.width;\n const height = rect.height;\n const samples: Array<{ phi: number; theta: number }> = [];\n\n for (let ix = 0; ix < sampleCount; ix++) {\n const x =\n sampleCount === 1 ? width / 2 : (ix / (sampleCount - 1)) * width;\n for (let iy = 0; iy < sampleCount; iy++) {\n const y =\n sampleCount === 1 ? height / 2 : (iy / (sampleCount - 1)) * height;\n const hit = RayPickingUtils.getIntersectionPointWithSingleModel(\n x,\n y,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n\n if (hit && hit.length > 0) {\n samples.push(cartesianToSpherical(hit));\n }\n }\n }\n\n return samples;\n }\n\n activateHiPS(hipsDescriptor: HiPSDescriptor) {\n this._activeHiPS = new HiPS(\n 1,\n [0.0, 0.0, 0.0],\n\n 0,\n 0,\n\n hipsDescriptor,\n this._webgl,\n this._healpixGrid,\n );\n this._activeBaseLayer = \"hips\";\n }\n\n activateXYZ(config: XYZLayerConfig) {\n this.activateXYZ2(\n new XYZMapDescriptor(\n config.name ?? \"XYZ Earth2 Layer\",\n config.urlTemplate,\n config.minZoom ?? 0,\n config.maxZoom ?? 8,\n config.segmentsPerSide ?? 48,\n config.maxCachedTiles ?? 384,\n 8,\n config.urlResolver,\n ),\n );\n this._activeBaseLayer = \"xyz\";\n }\n activateXYZ2(config: XYZMapDescriptor) {\n this._activeXYZ2 = new XYZMap(\n 1,\n [0.0, 0.0, 0.0],\n 0,\n 0,\n config,\n this._webgl,\n this.gridLabelContainers,\n );\n this._activeBaseLayer = \"xyz\";\n }\n\n activateMeshHiPS(descriptor: MeshHiPSDescriptor) {\n this._activeMeshHiPS = new MeshHiPS(\n descriptor.meshRadius,\n [0.0, 0.0, 0.0],\n 0,\n 0,\n descriptor,\n this._webgl,\n this._healpixGrid,\n );\n this._activeBaseLayer = \"meships\";\n }\n\n activateWMTS(config: WMTSLayerConfig) {\n const adapter = new WMTSAdapter(config);\n const xyzConfig = adapter.toXYZLayerConfig();\n this._activeXYZ2 = new XYZMap(\n 1,\n [0.0, 0.0, 0.0],\n 0,\n 0,\n new XYZMapDescriptor(\n config.layer ? `WMTS ${config.layer}` : \"WMTS Earth2 Layer\",\n xyzConfig.urlTemplate,\n xyzConfig.minZoom ?? 0,\n xyzConfig.maxZoom ?? 8,\n xyzConfig.segmentsPerSide ?? 48,\n xyzConfig.maxCachedTiles ?? 384,\n 8,\n xyzConfig.urlResolver,\n ),\n this._webgl,\n this.gridLabelContainers,\n );\n this._activeBaseLayer = \"xyz\";\n }\n\n // Catalogue section\n async showCatalogue(cat: CatalogueGL) {\n // console.log(cat)\n if (cat) this.activeCatalogues.push(cat);\n return cat;\n }\n\n deleteCatalogue(catalogue: CatalogueGL) {\n this.activeCatalogues = this.activeCatalogues.filter(\n (c) => c !== catalogue,\n );\n }\n // End Catalogue section\n\n // Footprint section\n async showFootprintSet(fset: FootprintSetGL) {\n // console.log(fset)\n if (fset) this.activeFootprintSets.push(fset);\n return fset;\n }\n\n deleteFootprintSet(footprintSet: FootprintSetGL) {\n this.activeFootprintSets = this.activeFootprintSets.filter(\n (fst) => fst !== footprintSet,\n );\n }\n\n async showPolylineSet(polylineSet: TerraPolylineSetGL) {\n if (polylineSet) this.activePolylineSets.push(polylineSet);\n return polylineSet;\n }\n\n deletePolylineSet(polylineSet: TerraPolylineSetGL) {\n this.activePolylineSets = this.activePolylineSets.filter(\n (set) => set !== polylineSet,\n );\n polylineSet.dispose();\n }\n\n async showSensorCone(sensorCone: SensorConeGL) {\n if (sensorCone) this.activeSensorCones.push(sensorCone);\n return sensorCone;\n }\n\n deleteSensorCone(sensorCone: SensorConeGL) {\n this.activeSensorCones = this.activeSensorCones.filter(\n (cone) => cone !== sensorCone,\n );\n sensorCone.dispose();\n }\n\n async showSatelliteObject(satelliteObject: SatelliteObjectGL) {\n if (satelliteObject) this.activeSatelliteObjects.push(satelliteObject);\n return satelliteObject;\n }\n\n deleteSatelliteObject(satelliteObject: SatelliteObjectGL) {\n this.activeSatelliteObjects = this.activeSatelliteObjects.filter(\n (object) => object !== satelliteObject,\n );\n satelliteObject.dispose();\n }\n\n getHoveredFootprints(): HoveredFootprintDetail[] {\n let footprintsHovered: HoveredFootprintDetail[] = [];\n this.activeFootprintSets.forEach((fset) => {\n footprintsHovered.push(fset.hoveredFootprints);\n });\n return footprintsHovered;\n }\n // End Footprint section\n\n goTo(raDeg: number, decDeg: number): void {\n this._camera.goTo(raDeg, decDeg);\n }\n\n getActiveCoordinateMode(): \"equatorial\" | \"galactic\" | \"lonlat\" {\n if (this._activeBaseLayer === \"xyz\") {\n return \"lonlat\";\n }\n\n if (this._activeBaseLayer === \"hips\" && this._activeHiPS?.isGalacticHips) {\n return \"galactic\";\n }\n\n return \"equatorial\";\n }\n\n resetAxesOrientation(): void {\n const center = this.updateCentralPoint();\n if (!center) return;\n\n this.inertiaX = 0;\n this.inertiaY = 0;\n this._camera.goTo(center.astroDeg.ra, center.astroDeg.dec);\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere,\n );\n this.updateCentralPoint();\n this._cameraStatusChanged = true;\n }\n\n setKeepCameraNorthUp(enabled: boolean): void {\n this.keepCameraNorthUp = enabled;\n if (enabled) {\n this.resetAxesOrientation();\n }\n }\n\n isKeepCameraNorthUp(): boolean {\n return this.keepCameraNorthUp;\n }\n\n getFoV(): SphereFoV {\n if (this._activeBaseLayer === \"xyz\" && this._activeXYZ2) {\n return this._activeXYZ2.getFoV();\n }\n\n return this.fov;\n }\n\n getFoVPolygon(): Point[] {\n if (this.healpixGrid == null)\n throw new Error(`healpixGrid is ${this.healpixGrid}`);\n return FoVUtils.getFoVPolygon(\n this._camera,\n this.canvas,\n this._healpixGrid,\n this._healpixGrid,\n this._webgl,\n this._perspectiveMatrixManager.pMatrix,\n );\n }\n\n changeFoV(deg: number) {\n const distance = this._healpixGrid.getFoV().computeDistanceFromAngle(deg);\n this._camera.translate(distance);\n this.fov = this._healpixGrid.refreshFoV(\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n this._camera.refreshFoV(this.fov.minFoV);\n }\n\n changeFoV2(deg: number) {\n const newCameraPos = this._healpixGrid\n .getFoV()\n .computeCameraPositionForFoV(deg);\n this._camera.setCameraPosition(newCameraPos);\n }\n\n changeFoV3(deg: number) {\n const newPos = this._healpixGrid\n .getFoV()\n .computeCameraPositionForAngularDiameter(deg);\n this._camera.setCameraPosition(newPos);\n\n // Recompute projection after moving the camera\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n false,\n );\n }\n\n getInsideSphere(): boolean {\n return global.insideSphere;\n }\n\n toggleInsideSphere() {\n const centerBeforeToggle = this.updateCentralPoint();\n this.inertiaX = 0;\n this.inertiaY = 0;\n this.zoomInertia = 0;\n global.insideSphere = !global.insideSphere;\n // console.log(global.insideSphere)\n this._camera.toggleInsideSphere();\n this._camera.goTo(\n centerBeforeToggle.astroDeg.ra,\n centerBeforeToggle.astroDeg.dec,\n );\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere,\n );\n this.fov = this._healpixGrid.refreshFoV(\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n this._camera.refreshFoV(this.fov.minFoV);\n this.updateCentralPoint();\n this.lastCameraMotionAt = performance.now();\n this._cameraStatusChanged = true;\n this.emitCameraChanged(\"inside-sphere-toggle\");\n requestAnimationFrame(() => this.draw(this.canvas));\n }\n\n // imposta posizione camera\n public setCameraPosition(pos: [number, number, number]) {\n this._camera.setCameraPosition(pos);\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere,\n );\n }\n\n // imposta orientamento camera tramite view matrix\n public setCameraMatrix(viewMatrix: Float32Array) {\n this._camera.setCameraMatrix(viewMatrix);\n\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere,\n );\n }\n\n private _refreshingStatus: boolean = false;\n // set completo camera (pos + orientamento)\n public applyFullCameraState(\n detail: CameraChangedDetail,\n applyColor: boolean,\n ) {\n this._refreshingStatus = true;\n this._camera = detail.camera;\n // this.goTo(detail.centralPoint.raDeg, detail.centralPoint.decDeg)\n\n this._healpixGrid.setModelMatrix(detail.mMatrix);\n this._perspectiveMatrixManager.pMatrix = detail.pMatrix;\n\n this.setCameraMatrix(detail.vMatrix);\n // this.goTo(detail.centralPoint.raDeg, detail.centralPoint.decDeg)\n if (applyColor) {\n this._activeHiPS?.changeColorMap(detail.colorMap);\n }\n this._refreshingStatus = false;\n }\n\n public getCurrentStatus(): CameraChangedDetail | null {\n this.updateCentralPoint();\n const centralradeg = this.centralPoinCoords?.astroDeg.ra;\n const centraldecdeg = this.centralPoinCoords?.astroDeg.dec;\n // if (!centraldecdeg || !centralradeg) {\n if (centralradeg == null || centraldecdeg == null) {\n return null;\n }\n let fovPolygon: Point[] = [];\n try {\n fovPolygon = this.getFoVPolygon();\n } catch (error) {\n console.warn(\"[AstroSphere] getCurrentStatus: FoV polygon is not available.\", error);\n }\n // if (this._rotating && centraldecdeg && centralradeg) {\n const detail: CameraChangedDetail = {\n fovDeg: this.fov.minFoV,\n fovXDeg: this.fov.xFoV,\n fovYDeg: this.fov.yFoV,\n position: this._camera.getCameraPosition(),\n vMatrix: this._camera.getCameraMatrix() as Float32Array,\n pMatrix: this._perspectiveMatrixManager.pMatrix as Float32Array,\n mMatrix: this._healpixGrid.getModelMatrix() as Float32Array,\n camera: this._camera,\n timestamp: performance.now(),\n centralPoint: new Point(\n { raDeg: centralradeg, decDeg: centraldecdeg },\n CoordsType.ASTRO,\n ),\n mouseHoverPoint: this.mousePointCoords,\n colorMap: this._selectedColorMap,\n getFoVPolygon: fovPolygon,\n };\n return detail;\n // }\n // return null\n }\n\n changeColorMap(cm: ColorMap) {\n if (!this._activeHiPS && !this._activeXYZ2 && !this._activeMeshHiPS) return;\n this._selectedColorMap = cm;\n this._activeHiPS?.changeColorMap(cm);\n this._activeXYZ2?.changeColorMap(cm);\n }\n\n private prevFov: number = 0;\n private prevCentralRaDeg: number | null = null;\n private prevCentralDecDeg: number | null = null;\n\n get activeHiPS(): HiPS | null {\n return this._activeHiPS;\n }\n\n get activeXYZ(): XYZMap | null {\n return this._activeXYZ2;\n }\n\n get activeMeshHiPS(): MeshHiPS | null {\n return this._activeMeshHiPS;\n }\n\n isLonLatGridVisible(): boolean {\n return this._activeXYZ2?.isLonLatGridVisible() ?? false;\n }\n\n toggleLonLatGrid(): boolean {\n return this._activeXYZ2?.toggleLonLatGrid() ?? false;\n }\n\n setEastWestRotationLocked(locked: boolean): void {\n this._camera.setRotationLock({ y: locked });\n if (locked) this.inertiaX = 0;\n this.lockedEastWestRaDeg = locked\n ? (this.updateCentralPoint()?.astroDeg.ra ?? null)\n : null;\n }\n\n isEastWestRotationLocked(): boolean {\n return this._camera.isRotationLockedY();\n }\n\n setNorthSouthRotationLocked(locked: boolean): void {\n this._camera.setRotationLock({ x: locked });\n if (locked) this.inertiaY = 0;\n this.lockedNorthSouthDecDeg = locked\n ? (this.updateCentralPoint()?.astroDeg.dec ?? null)\n : null;\n }\n\n isNorthSouthRotationLocked(): boolean {\n return this._camera.isRotationLockedX();\n }\n\n getXYZDebugStats(): XYZDebugStats {\n return {\n activeBaseLayer: this._activeBaseLayer,\n layer: this._activeXYZ2?.getDebugStats() ?? null,\n requests: xyzTileRequestScheduler.getDebugStats(),\n };\n }\n\n getHiPSDebugStats(): HiPSDebugStats | null {\n if (!this._activeHiPS) return null;\n return this._activeHiPS.getDebugStats();\n }\n\n getMeshHiPSDebugStats(): MeshHiPSDebugStats | null {\n if (!this._activeMeshHiPS) return null;\n return this._activeMeshHiPS.getDebugStats();\n }\n\n draw(canvas: HTMLCanvasElement) {\n if (this._refreshingStatus) return;\n if (!this._webgl) return;\n if (!this._activeHiPS && !this._activeXYZ2 && !this._activeMeshHiPS) return;\n\n if (!this._healpixGrid || Object.keys(this._healpixGrid).length === 0)\n return;\n if ((this._healpixGrid as any).fovObj === undefined) return;\n\n // In WebGL2, OES_element_index_uint is core, no need to fetch the extension each frame.\n // global.gl.getExtension('OES_element_index_uint')\n // global.gl.clear(global.gl.COLOR_BUFFER_BIT | global.gl.DEPTH_BUFFER_BIT)\n\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere,\n );\n\n let cameraRotated = false;\n let THETA = 0;\n let PHI = 0;\n\n this._webgl.viewport(\n 0,\n 0,\n this._webgl.drawingBufferWidth,\n this._webgl.drawingBufferHeight,\n );\n this._webgl.clear(\n this._webgl.COLOR_BUFFER_BIT | this._webgl.DEPTH_BUFFER_BIT,\n );\n\n // Zoom inertia\n if (this.zoomInertia !== 0) {\n if (Math.abs(this.zoomInertia) > 0.0001) {\n this._camera.zoom(this.zoomInertia);\n this.zoomInertia *= 0.95;\n this.lastCameraMotionAt = performance.now();\n\n this.fov = this._healpixGrid.refreshFoV(\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n this._camera.refreshFoV(this.fov.minFoV);\n if (this.prevFov !== this.fov.minFoV) {\n if (!this.centralPoinCoords) {\n this.centralPoinCoords = this.updateCentralPoint();\n }\n\n this.prevFov = this.fov.minFoV;\n }\n } else {\n this.zoomInertia = 0;\n }\n this._cameraStatusChanged = true;\n }\n\n // Rotation inertia\n if (\n this.mouseDown ||\n Math.abs(this.inertiaX) > 0.02 ||\n Math.abs(this.inertiaY) > 0.02\n ) {\n cameraRotated = true;\n const filteredInertia = this.filterRotationDeltaByAstroLocks(\n this.inertiaX,\n this.inertiaY,\n );\n PHI = filteredInertia.deltaX;\n THETA = filteredInertia.deltaY;\n this.inertiaX = filteredInertia.deltaX * 0.95;\n this.inertiaY = filteredInertia.deltaY * 0.95;\n this._camera.rotate(PHI, THETA);\n this.lastCameraMotionAt = performance.now();\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere,\n );\n const lockCorrected = this.enforceAstronomicalRotationLocks();\n if (!lockCorrected) {\n this.enforceCameraNorthUp();\n }\n } else {\n this.inertiaY = 0;\n this.inertiaX = 0;\n }\n\n const nextFoV = this._healpixGrid.refreshFoV(\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n if (Number.isFinite(nextFoV.minFoV) && nextFoV.minFoV > 0) {\n this.fov = nextFoV;\n this._camera.refreshFoV(this.fov.minFoV);\n this.prevFov = this.fov.minFoV;\n }\n\n // Se la camera è ruotata (anche solo per inerzia), aggiorna punto centrale + emetti cameraChanged\n if (cameraRotated) {\n // Ricalcola il punto centrale\n const center = this.updateCentralPoint();\n const centralRaDeg = center.astroDeg.ra;\n const centralDecDeg = center.astroDeg.dec;\n\n // Evita spam: emetti solo se è cambiato abbastanza\n const raChanged =\n this.prevCentralRaDeg === null ||\n Math.abs(centralRaDeg - this.prevCentralRaDeg) > 1e-5;\n const decChanged =\n this.prevCentralDecDeg === null ||\n Math.abs(centralDecDeg - this.prevCentralDecDeg) > 1e-5;\n\n if (raChanged || decChanged) {\n this.prevCentralRaDeg = centralRaDeg;\n this.prevCentralDecDeg = centralDecDeg;\n }\n }\n\n if (this._cameraStatusChanged) {\n const now = performance.now();\n const shouldEmitCameraChanged = !this.mouseDown || now - this.lastCameraChangedAt > 100;\n const detail = shouldEmitCameraChanged ? this.getCurrentStatus() : null;\n if (detail) {\n // console.log('[AstroSphere::draw] emitting camera-changed event due to camera status change', detail)\n // console.log('[AstroSphere::draw] inertia', this.zoomInertia, this.inertiaX, this.inertiaY)\n this.canvas.dispatchEvent(\n new CustomEvent<CameraChangedDetail>(\"camera-changed\", {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n this.lastCameraChangedAt = now;\n }\n if (!this.startup && shouldEmitCameraChanged) {\n this._cameraStatusChanged = false;\n }\n }\n\n // GL state\n this._webgl.disable(this._webgl.DEPTH_TEST);\n this._webgl.enable(this._webgl.BLEND);\n this._webgl.enable(this._webgl.CULL_FACE);\n this._webgl.cullFace(\n global.insideSphere ? this._webgl.FRONT : this._webgl.BACK,\n );\n this._webgl.blendFunc(\n this._webgl.SRC_ALPHA,\n this._webgl.ONE_MINUS_SRC_ALPHA,\n );\n\n if (this._activeBaseLayer === \"hips\" && this._activeHiPS) {\n const visibleOrder = Math.min(\n this._healpixGrid.visibleorder,\n this._activeHiPS.maxOrder,\n );\n this._healpixGrid.visibleTilesManager.computeVisiblePixels(\n visibleOrder,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n }\n if (this._activeBaseLayer === \"meships\" && this._activeMeshHiPS) {\n const visibleOrder = this._activeMeshHiPS.refreshOrder(\n this.fov?.minFoV ?? this._healpixGrid.getMinFoV(),\n );\n this._healpixGrid.visibleTilesManager.computeVisiblePixels(\n visibleOrder,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n );\n }\n\n // DRAW HiPS\n const stableFovDeg = this.fov?.minFoV ?? this._healpixGrid.getMinFoV();\n const nowForGrid = performance.now();\n const cameraMovingForGrid =\n this.mouseDown ||\n Math.abs(this.zoomInertia) > 0.0001 ||\n Math.abs(this.inertiaX) > 0.02 ||\n Math.abs(this.inertiaY) > 0.02 ||\n nowForGrid - this.lastCameraMotionAt < 220;\n // const skyEntityDrawInput: SkyEntityDrawInput = {\n // fovDeg: this._healpixGrid.getMinFoV(),\n // camera: this._camera,\n // pMatrix: this._perspectiveMatrixManager.pMatrix,\n // centerSphericalDeg: this.updateCentralPoint().sphericalDeg,\n // fovPolygon: this._activeBaseLayer === 'xyz' ? this.getFoVPolygon() : undefined,\n // viewportSphericalSamples: this._activeBaseLayer === 'xyz' ? this.collectViewportSphericalSamples(7) : undefined,\n // }\n const skyEntityDrawInput: SkyEntityDrawInput = {\n fovDeg: stableFovDeg,\n camera: this._camera,\n pMatrix: this._perspectiveMatrixManager.pMatrix,\n centerSphericalDeg: this.updateCentralPoint().sphericalDeg,\n fovPolygon: undefined,\n viewportSphericalSamples: undefined,\n cameraMoving: cameraMovingForGrid,\n };\n if (this._activeBaseLayer === \"hips\") {\n this._activeHiPS?.draw(skyEntityDrawInput);\n }\n if (this._activeBaseLayer === \"xyz\") {\n this._activeXYZ2?.draw(skyEntityDrawInput);\n }\n if (this._activeBaseLayer === \"meships\") {\n this._activeMeshHiPS?.draw(skyEntityDrawInput);\n }\n\n this._healpixGrid.draw(skyEntityDrawInput);\n this._equatorialGrid.draw(skyEntityDrawInput);\n\n this._webgl.enable(this._webgl.DEPTH_TEST);\n this._webgl.disable(this._webgl.CULL_FACE);\n\n if (this.startup) {\n this.startup = false;\n const phiTheta = this.getPhiThetaDeg(canvas);\n const raDecDeg = sphericalToAstroDeg(phiTheta.phi, phiTheta.theta);\n const raHMS = raDegToHMS(raDecDeg.ra);\n const decDMS = decDegToDMS(raDecDeg.dec);\n // this.prevFov = this._healpixGrid.getMinFoV();\n this.prevFov = this.fov?.minFoV ?? this._healpixGrid.getMinFoV()\n this._cameraStatusChanged = true;\n console.log(\"(startup coords)\", {\n raDeg: raDecDeg.ra,\n decDeg: raDecDeg.dec,\n raHMS,\n decDMS,\n });\n }\n\n this.activeCatalogues.forEach((cat) => {\n const activeModelMatrix =\n this._activeHiPS?.getModelMatrix() ??\n this._activeXYZ2?.getModelMatrix() ??\n this._activeMeshHiPS?.getModelMatrix();\n if (activeModelMatrix) {\n cat.draw(\n activeModelMatrix as Float32Array,\n this.mouseHelper,\n this._camera.getCameraMatrix() as Float32Array,\n this._perspectiveMatrixManager.pMatrix as Float32Array,\n );\n }\n });\n\n this.emitHoveredSourceIfChanged();\n\n this.activeFootprintSets.forEach((fst) => {\n const activeModelMatrix =\n this._activeHiPS?.getModelMatrix() ??\n this._activeXYZ2?.getModelMatrix() ??\n this._activeMeshHiPS?.getModelMatrix();\n if (activeModelMatrix) {\n fst.draw(\n activeModelMatrix as Float32Array,\n this.mouseHelper,\n this._camera.getCameraMatrix() as Float32Array,\n this._perspectiveMatrixManager.pMatrix as Float32Array,\n );\n }\n });\n\n this.activePolylineSets.forEach((polylineSet) => {\n const activeModelMatrix =\n this._activeHiPS?.getModelMatrix() ??\n this._activeXYZ2?.getModelMatrix() ??\n this._activeMeshHiPS?.getModelMatrix();\n if (activeModelMatrix) {\n polylineSet.draw(\n activeModelMatrix as Float32Array,\n this.mouseHelper,\n this._camera.getCameraMatrix() as Float32Array,\n this._perspectiveMatrixManager.pMatrix as Float32Array,\n );\n }\n });\n\n this.activeSensorCones.forEach((sensorCone) => {\n const activeModelMatrix =\n this._activeHiPS?.getModelMatrix() ??\n this._activeXYZ2?.getModelMatrix() ??\n this._activeMeshHiPS?.getModelMatrix();\n if (activeModelMatrix) {\n sensorCone.draw(\n this._perspectiveMatrixManager.pMatrix as Float32Array,\n this._camera.getCameraMatrix() as Float32Array,\n activeModelMatrix as Float32Array,\n );\n }\n });\n\n this.activeSatelliteObjects.forEach((satelliteObject) => {\n const activeModelMatrix =\n this._activeHiPS?.getModelMatrix() ??\n this._activeXYZ2?.getModelMatrix() ??\n this._activeMeshHiPS?.getModelMatrix();\n if (activeModelMatrix) {\n satelliteObject.draw(\n this._perspectiveMatrixManager.pMatrix as Float32Array,\n this._camera.getCameraMatrix() as Float32Array,\n activeModelMatrix as Float32Array,\n );\n }\n });\n }\n\n private emitHoveredSourceIfChanged() {\n let nextHoveredSource: Source | null = null;\n let nextHoveredCatalogue: CatalogueGL | null = null;\n\n for (const cat of this.activeCatalogues) {\n const hovered = cat.getPrimaryHoveredSource();\n if (!hovered) continue;\n nextHoveredSource = hovered;\n nextHoveredCatalogue = cat;\n break;\n }\n\n const unchanged =\n nextHoveredSource === this.lastHoveredSource &&\n nextHoveredCatalogue === this.lastHoveredCatalogue;\n if (unchanged) return;\n\n this.lastHoveredSource = nextHoveredSource;\n this.lastHoveredCatalogue = nextHoveredCatalogue;\n\n this._webgl.canvas.dispatchEvent(\n new CustomEvent(\"source-hovered\", {\n detail: { source: nextHoveredSource, catalogue: nextHoveredCatalogue },\n bubbles: true,\n composed: true,\n }),\n );\n }\n}\nexport default AstroSphere;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// import global from './Global.js'\nimport AstroSphere from './AstroSphere.js'\nimport { HiPSDescriptor } from './model/hips/HiPSDescriptor.js'\nimport { SphereFoV } from './model/SphereFoV.js'\nimport { Point } from './model/Point.js'\nimport { CatalogueGL } from './model/catalogues/CatalogueGL.js'\nimport type { CameraChangedDetail, PointCoordinates } from './AstroSphere.js'\nimport { FootprintSetGL, HoveredFootprintDetail } from './model/footprints/FootprintSetGL.js'\nimport { bootSetup } from './Config.js'\nimport { MetadataManager } from './model/MetadataManager.js'\nimport Camera from './Camera.js'\nimport { ReadonlyMat4 } from 'gl-matrix'\nimport ColorMaps, { ColorMap, ColorMapName } from './model/ColorMaps.js'\nimport {HiPS} from './model/hips/HiPS.js'\nimport type { WMTSLayerConfig, XYZDebugStats, XYZLayerConfig } from './model/earth/XYZConfig.js'\nimport type { HiPSDebugStats } from './model/hips/HiPSConfig.js'\nimport { xyzTileRequestScheduler } from './model/earth/XYZTileRequestScheduler.js'\nimport { XYZMapDescriptor } from './model/earth/XYZMapDescriptor.js'\nimport { XYZMap } from './model/earth/XYZMap.js'\nimport { TerraPointSetGL } from './model/terra/TerraPointSetGL.js'\nimport { TerraFootprintSetGL } from './model/terra/TerraFootprintSetGL.js'\nimport { TerraPolylineSetGL } from './model/terra/TerraPolylineSetGL.js'\nimport { SatelliteObjectGL, type SatelliteObjectOptions } from './model/terra/SatelliteObjectGL.js'\nimport { SensorConeGL, type SensorConeOptions } from './model/terra/SensorConeGL.js'\nimport { MeshHiPSDescriptor } from './model/meships/MeshHiPSDescriptor.js'\nimport type { MeshHiPSConfig, MeshHiPSDebugStats } from './model/meships/MeshHiPSTypes.js'\nimport type { GridLabelContainers } from './model/grid/GridTextHelper.js'\n// import healpixGridSingleton from './model/grid/HealpixGridSingleton.js'\n// import equatorialGridSingleton from './model/grid/EquatorialGrid.js'\ntype GL2WithViewport = WebGL2RenderingContext \n// & {\n// viewportWidth: number\n// viewportHeight: number\n// }\n\nexport type AstroViewerOptions = {\n gridLabelContainers?: GridLabelContainers;\n};\n\nexport class AstroViewer {\n private astroSphere!: AstroSphere\n private canvas!: HTMLCanvasElement\n private webgl!: GL2WithViewport\n private rafId: number | null = null\n private webglContextList: Map<string, GL2WithViewport> = new Map<string, GL2WithViewport>()\n private viewfinderEl: HTMLDivElement | null = null\n private viewfinderVisible = bootSetup.showViewfinder\n private viewfinderColor = 'rgba(75,148,226,0.68)'\n private options: AstroViewerOptions = {}\n\n\n\n // API\n run(): number {\n return this.tick()\n }\n\n // CATALOGUES\n createCatalogue(catalogueName: string,\n catalogueDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n ): CatalogueGL {\n return new CatalogueGL(catalogueName, catalogueDescription,\n providerUrl, metadataManager, this.webgl, this.astroSphere.healpixGrid.visibleTilesManager)\n }\n\n showCatalogue(catalogue: CatalogueGL) {\n this.astroSphere.showCatalogue(catalogue)\n }\n\n hideCatalogue(catalogue: CatalogueGL, isVisible: boolean) {\n catalogue.setIsVisible(isVisible)\n }\n\n deleteCatalogue(catalogue: CatalogueGL) {\n this.astroSphere.deleteCatalogue(catalogue)\n }\n\n changeCatalogueRA(catalogue: CatalogueGL, raColumnName: string): CatalogueGL {\n catalogue.changeMetaRA(raColumnName)\n // catalogue.catalogueProps.changeCatalogueMetaRA(raColumnName)\n return catalogue\n }\n\n changeCatalogueDec(catalogue: CatalogueGL, decColumnName: string): CatalogueGL {\n catalogue.changeMetaDec(decColumnName)\n // catalogue.catalogueProps.changeCatalogueMetaDec(decColumnName)\n return catalogue\n }\n\n changeCatalogueColor(catalogue: CatalogueGL, hexColor: string): CatalogueGL {\n catalogue.changeColor(hexColor)\n // catalogue.catalogueProps.changeColor(hexColor)\n return catalogue\n }\n\n setCatalogueShapeHue(catalogue: CatalogueGL, metadataColumnName: string): CatalogueGL {\n catalogue.changeMetaShapeHue(metadataColumnName)\n return catalogue\n }\n\n setCatalogueShapeSize(catalogue: CatalogueGL, metadataColumnName: string): CatalogueGL {\n catalogue.changeMetaShapeSize(metadataColumnName)\n return catalogue\n }\n\n //FOOTPRINT\ncreateFootprintSet(footprintSetName: string,\n footprintSetDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n ): FootprintSetGL {\n return new FootprintSetGL(footprintSetName, footprintSetDescription,\n providerUrl, metadataManager, this.webgl, this.astroSphere.healpixGrid.visibleTilesManager)\n }\n\n showFootprintSet(footprintSet: FootprintSetGL) {\n this.astroSphere.showFootprintSet(footprintSet)\n }\n\n hideFootprintSet(footprintSet: FootprintSetGL, isVisible: boolean) {\n footprintSet.setIsVisible(isVisible)\n }\n\n deleteFootprintSet(footprintSet: FootprintSetGL) {\n this.astroSphere.deleteFootprintSet(footprintSet)\n }\n\n // TERRA OVERLAYS\n createTerraPointSet(\n pointSetName: string,\n pointSetDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n ): TerraPointSetGL {\n return new TerraPointSetGL(\n pointSetName,\n pointSetDescription,\n providerUrl,\n metadataManager,\n this.webgl,\n this.astroSphere.healpixGrid.visibleTilesManager,\n )\n }\n\n showTerraPointSet(pointSet: TerraPointSetGL) {\n this.astroSphere.showCatalogue(pointSet)\n }\n\n hideTerraPointSet(pointSet: TerraPointSetGL, isVisible: boolean) {\n pointSet.setIsVisible(isVisible)\n }\n\n deleteTerraPointSet(pointSet: TerraPointSetGL) {\n this.astroSphere.deleteCatalogue(pointSet)\n }\n\n createTerraFootprintSet(\n footprintSetName: string,\n footprintSetDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n ): TerraFootprintSetGL {\n return new TerraFootprintSetGL(\n footprintSetName,\n footprintSetDescription,\n providerUrl,\n metadataManager,\n this.webgl,\n this.astroSphere.healpixGrid.visibleTilesManager,\n )\n }\n\n showTerraFootprintSet(footprintSet: TerraFootprintSetGL) {\n this.astroSphere.showFootprintSet(footprintSet)\n }\n\n hideTerraFootprintSet(footprintSet: TerraFootprintSetGL, isVisible: boolean) {\n footprintSet.setIsVisible(isVisible)\n }\n\n deleteTerraFootprintSet(footprintSet: TerraFootprintSetGL) {\n this.astroSphere.deleteFootprintSet(footprintSet)\n }\n\n createTerraPolylineSet(\n polylineSetName: string,\n polylineSetDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n ): TerraPolylineSetGL {\n return new TerraPolylineSetGL(\n polylineSetName,\n polylineSetDescription,\n providerUrl,\n metadataManager,\n this.webgl,\n this.astroSphere.healpixGrid.visibleTilesManager,\n )\n }\n\n showTerraPolylineSet(polylineSet: TerraPolylineSetGL) {\n this.astroSphere.showPolylineSet(polylineSet)\n }\n\n hideTerraPolylineSet(polylineSet: TerraPolylineSetGL, isVisible: boolean) {\n polylineSet.setIsVisible(isVisible)\n }\n\n deleteTerraPolylineSet(polylineSet: TerraPolylineSetGL) {\n this.astroSphere.deletePolylineSet(polylineSet)\n }\n\n changeTerraPolylineSetColor(polylineSet: TerraPolylineSetGL, hexColor: string): TerraPolylineSetGL {\n polylineSet.changeColor(hexColor)\n return polylineSet\n }\n\n createSensorCone(options: SensorConeOptions): SensorConeGL {\n return new SensorConeGL(options, this.webgl)\n }\n\n showSensorCone(sensorCone: SensorConeGL) {\n this.astroSphere.showSensorCone(sensorCone)\n }\n\n hideSensorCone(sensorCone: SensorConeGL, isVisible: boolean) {\n sensorCone.setIsVisible(isVisible)\n }\n\n deleteSensorCone(sensorCone: SensorConeGL) {\n this.astroSphere.deleteSensorCone(sensorCone)\n }\n\n createSatelliteObject(options: SatelliteObjectOptions): SatelliteObjectGL {\n return new SatelliteObjectGL(options, this.webgl)\n }\n\n showSatelliteObject(satelliteObject: SatelliteObjectGL) {\n this.astroSphere.showSatelliteObject(satelliteObject)\n }\n\n hideSatelliteObject(satelliteObject: SatelliteObjectGL, isVisible: boolean) {\n satelliteObject.setIsVisible(isVisible)\n }\n\n deleteSatelliteObject(satelliteObject: SatelliteObjectGL) {\n this.astroSphere.deleteSatelliteObject(satelliteObject)\n }\n\n changeFootprintSetColor(footprintSet: FootprintSetGL, hexColor: string) {\n // footprintSet.footprintsetProps.changeColor(hexColor)\n footprintSet.changeColor(hexColor)\n }\n\n getHoveredFootprints(): HoveredFootprintDetail[] {\n return this.astroSphere.getHoveredFootprints()\n }\n\n // HIPS\n getDefaultHiPSURL(): string {\n return bootSetup.defaultHipsUrl\n }\n\n activateHiPS(hipsDescriptor: HiPSDescriptor): void {\n this.astroSphere.activateHiPS(hipsDescriptor)\n }\n\n activateXYZ(config: XYZLayerConfig): void {\n this.astroSphere.activateXYZ(config)\n }\n\n activateXYZ2(config: XYZLayerConfig & { name?: string }): void {\n const descriptor = new XYZMapDescriptor(\n config.name ?? 'XYZ Earth2 Layer',\n config.urlTemplate,\n config.minZoom ?? 0,\n config.maxZoom ?? 8,\n config.segmentsPerSide ?? 48,\n config.maxCachedTiles ?? 384,\n 8,\n config.urlResolver,\n )\n this.astroSphere.activateXYZ2(descriptor)\n }\n\n activateWMTS(config: WMTSLayerConfig): void {\n this.astroSphere.activateWMTS(config)\n }\n\n activateMeshHiPS(config: MeshHiPSConfig): void {\n this.astroSphere.activateMeshHiPS(new MeshHiPSDescriptor(config))\n }\n\n setXYZMaxConcurrentRequests(value: number): void {\n xyzTileRequestScheduler.setMaxConcurrent(value)\n }\n\n getXYZMaxConcurrentRequests(): number {\n return xyzTileRequestScheduler.getMaxConcurrent()\n }\n\n getXYZDebugStats(): XYZDebugStats {\n return this.astroSphere.getXYZDebugStats()\n }\n\n getHiPSDebugStats(): HiPSDebugStats | null {\n return this.astroSphere.getHiPSDebugStats()\n }\n\n getMeshHiPSDebugStats(): MeshHiPSDebugStats | null {\n return this.astroSphere.getMeshHiPSDebugStats()\n }\n\n async loadHiPS(baseUrl: string): Promise<string> {\n const hipsUrl = baseUrl.endsWith('/') ? baseUrl : baseUrl + '/';\n const resp = await fetch(hipsUrl + 'properties');\n if (!resp.ok) throw new Error(`HTTP ${resp.status} fetching properties`);\n const propsText = await resp.text();\n const desc = new HiPSDescriptor(propsText, hipsUrl);\n this.astroSphere.activateHiPS(desc)\n return desc.surveyName\n // this.activateHiPS(desc);\n }\n\n async loadMeshHiPS(baseUrl: string, config: Omit<MeshHiPSConfig, 'baseUrl'> = {}): Promise<string> {\n const meshHiPSUrl = baseUrl.endsWith('/') ? baseUrl : baseUrl + '/'\n let propsText = ''\n const resp = await fetch(meshHiPSUrl + 'properties')\n if (resp.ok) {\n propsText = await resp.text()\n } else {\n const jsonResp = await fetch(meshHiPSUrl + 'properties.json')\n if (!jsonResp.ok) throw new Error(`HTTP ${jsonResp.status} fetching MeshHiPS properties`)\n const json = await jsonResp.json()\n propsText = Object.entries(json)\n .map(([key, value]) => `${key}=${String(value)}`)\n .join('\\n')\n }\n const desc = new MeshHiPSDescriptor({ ...config, baseUrl: meshHiPSUrl }, propsText)\n this.astroSphere.activateMeshHiPS(desc)\n return desc.name\n }\n\n // changeColorMap(hips: HiPS, colorMapName: ColorMapName) {\n changeColorMap(colorMapName: ColorMapName) {\n const colorMap = ColorMaps[colorMapName]\n // hips.changeColorMap(colorMap)\n this.astroSphere.changeColorMap(colorMap)\n }\n\n changeCustomColorMap(colorMap: ColorMap) {\n this.astroSphere.changeColorMap(colorMap)\n }\n\n getActiveHiPS(): HiPS | null {\n return this.astroSphere.activeHiPS\n }\n\n getActiveXYZ(): XYZMap | null {\n return this.astroSphere.activeXYZ\n }\n\n // Camera: GOTOs and COORDS\n setCamera(camera: Camera) {\n this.astroSphere.setCamera(camera)\n }\n\n setCameraPosition(pos: [number, number, number]){\n this.astroSphere.setCameraPosition(pos)\n }\n\n setCameraMatrix(viewMatrix: Float32Array){\n this.astroSphere.setCameraMatrix(viewMatrix)\n }\n\n restoreAstroViewerState(detail: CameraChangedDetail, applyColorMap: boolean) {\n this.astroSphere.applyFullCameraState(detail, applyColorMap)\n }\n\n getCurrentAstroViewerStatus(): CameraChangedDetail | null{\n return this.astroSphere.getCurrentStatus()\n }\n\n goTo(raDeg: number, decDeg: number): void {\n // console.log(`AstroViewer.goTo goto(${raDeg}, ${decDeg})`)\n this.astroSphere.goTo(raDeg, decDeg)\n }\n\n getActiveCoordinateMode(): 'equatorial' | 'galactic' | 'lonlat' {\n return this.astroSphere.getActiveCoordinateMode()\n }\n\n getCenterCoordinates(): PointCoordinates | undefined {\n return this.astroSphere.getCentralPointCoordinates()\n }\n\n getCoordinatesFromMouse(): PointCoordinates | undefined {\n return this.astroSphere.getLastMousePointCoordinates()\n }\n\n // GRIDs\n setModelMatrix(modelMatrix: ReadonlyMat4){\n this.astroSphere.healpixGrid.setModelMatrix(modelMatrix)\n }\n toggleHealpixGrid() {\n // healpixGridSingleton.toggleShowGrid()\n this.astroSphere.healpixGrid.toggleShowGrid()\n }\n\n isHealpixGridVisible(): boolean {\n // return healpixGridSingleton.isVisible()\n return this.astroSphere.healpixGrid.isVisible()\n }\n\n toggleEquatorialGrid() {\n // equatorialGridSingleton.toggleShowGrid()\n return this.astroSphere.equatorialGrid.toggleShowGrid()\n }\n\n isEquatorialGridVisible(): boolean {\n // return equatorialGridSingleton.isVisible()\n return this.astroSphere.equatorialGrid.isVisible()\n }\n\n toggleLonLatGrid(): boolean {\n return this.astroSphere.toggleLonLatGrid()\n }\n\n isLonLatGridVisible(): boolean {\n return this.astroSphere.isLonLatGridVisible()\n }\n\n setEastWestRotationLocked(locked: boolean): void {\n this.astroSphere.setEastWestRotationLocked(locked)\n }\n\n isEastWestRotationLocked(): boolean {\n return this.astroSphere.isEastWestRotationLocked()\n }\n\n setNorthSouthRotationLocked(locked: boolean): void {\n this.astroSphere.setNorthSouthRotationLocked(locked)\n }\n\n isNorthSouthRotationLocked(): boolean {\n return this.astroSphere.isNorthSouthRotationLocked()\n }\n\n resetAxesOrientation(): void {\n this.astroSphere.resetAxesOrientation()\n }\n\n setKeepCameraNorthUp(enabled: boolean): void {\n this.astroSphere.setKeepCameraNorthUp(enabled)\n }\n\n isKeepCameraNorthUp(): boolean {\n return this.astroSphere.isKeepCameraNorthUp()\n }\n\n // FOV\n getFoV(): SphereFoV {\n return this.astroSphere.getFoV()\n }\n\n getFoVPolygon(): Point[] {\n return this.astroSphere.getFoVPolygon()\n }\n\n changeFoV(deg: number) {\n this, this.astroSphere.changeFoV(deg)\n }\n\n changeFoV2(deg: number) {\n this, this.astroSphere.changeFoV2(deg)\n }\n changeFoV3(deg: number) {\n this, this.astroSphere.changeFoV3(deg)\n }\n\n getInsideSphere(): boolean {\n return this.astroSphere.getInsideSphere()\n }\n\n toggleInsideSphere() {\n this.astroSphere.toggleInsideSphere()\n }\n\n toggleViewfinder(): boolean {\n this.viewfinderVisible = !this.viewfinderVisible\n this.syncViewfinderVisibility()\n return this.viewfinderVisible\n }\n\n setViewfinderVisible(visible: boolean): void {\n this.viewfinderVisible = visible\n this.syncViewfinderVisibility()\n }\n\n isViewfinderVisible(): boolean {\n return this.viewfinderVisible\n }\n\n setViewfinderColor(color: string): void {\n this.viewfinderColor = color\n this.syncViewfinderColor()\n }\n\n getViewfinderColor(): string {\n return this.viewfinderColor\n }\n\n setRotationSensitivity(value: number): void {\n this.astroSphere.setCameraRotationSensitivity(value)\n }\n\n getRotationSensitivity(): number {\n return this.astroSphere.getCameraRotationSensitivity()\n }\n\n setZoomSensitivity(value: number): void {\n this.astroSphere.setZoomSensitivity(value)\n }\n\n getZoomSensitivity(): number {\n return this.astroSphere.getZoomSensitivity()\n }\n\n // Internal\n constructor(canvasEl: HTMLCanvasElement, options: AstroViewerOptions = {}) {\n this.options = options\n this.init(canvasEl)\n this.webglContextList = new Map<string, GL2WithViewport>()\n }\n\n private init(canvasEl: HTMLCanvasElement): void {\n console.log('init webgl')\n this.canvas = canvasEl\n this.initViewfinder()\n\n const gl = this.canvas.getContext('webgl2', { alpha: false })\n if (!gl) {\n alert('Could not initialise WebGL, sorry :-(')\n throw new Error('WebGL2 not available')\n }\n\n // Extend with custom fields used elsewhere\n this.webgl = gl as GL2WithViewport\n // this.webgl.viewportWidth = this.canvas.width\n // this.webgl.viewportHeight = this.canvas.height\n\n try {\n // 1/255 = 0.00392156862\n this.webgl.clearColor(0 * 0.00392156862, 16 * 0.00392156862, 50 * 0.00392156862, 0.7)\n } catch (e) {\n console.log('Error instantiating WebGL context')\n }\n\n this.initListeners()\n // ; (global as any).gl = this.webgl\n this.astroSphere = new AstroSphere(this.canvas, this.webgl, {\n gridLabelContainers: this.options.gridLabelContainers,\n })\n }\n\n private initViewfinder(): void {\n const parent = this.canvas.parentElement\n if (!parent) return\n\n if (window.getComputedStyle(parent).position === 'static') {\n parent.style.position = 'relative'\n }\n\n const viewfinder = document.createElement('div')\n viewfinder.setAttribute('data-astro-viewfinder', 'true')\n viewfinder.setAttribute('aria-hidden', 'true')\n viewfinder.style.position = 'absolute'\n viewfinder.style.left = '50%'\n viewfinder.style.top = '50%'\n viewfinder.style.width = '44px'\n viewfinder.style.height = '44px'\n viewfinder.style.transform = 'translate(-50%, -50%)'\n viewfinder.style.pointerEvents = 'none'\n viewfinder.style.zIndex = '1'\n viewfinder.style.boxSizing = 'border-box'\n\n const segments: Array<{\n left?: string;\n right?: string;\n top?: string;\n bottom?: string;\n width: string;\n height: string;\n transform: string;\n }> = [\n { left: '50%', top: '7px', width: '1px', height: '11px', transform: 'translateX(-50%)' },\n { left: '50%', bottom: '7px', width: '1px', height: '11px', transform: 'translateX(-50%)' },\n { left: '7px', top: '50%', width: '11px', height: '1px', transform: 'translateY(-50%)' },\n { right: '7px', top: '50%', width: '11px', height: '1px', transform: 'translateY(-50%)' },\n ]\n\n for (const segmentDef of segments) {\n const segment = document.createElement('div')\n segment.style.position = 'absolute'\n segment.style.left = segmentDef.left ?? 'auto'\n segment.style.right = segmentDef.right ?? 'auto'\n segment.style.top = segmentDef.top ?? 'auto'\n segment.style.bottom = segmentDef.bottom ?? 'auto'\n segment.style.width = segmentDef.width\n segment.style.height = segmentDef.height\n segment.style.transform = segmentDef.transform\n segment.style.background = 'currentColor'\n segment.style.borderRadius = '999px'\n segment.style.boxShadow = '0 0 0 1px rgba(0, 0, 0, 0.14)'\n viewfinder.appendChild(segment)\n }\n parent.appendChild(viewfinder)\n\n this.viewfinderEl = viewfinder\n this.syncViewfinderVisibility()\n this.syncViewfinderColor()\n }\n\n private syncViewfinderVisibility(): void {\n if (!this.viewfinderEl) return\n this.viewfinderEl.style.display = this.viewfinderVisible ? 'block' : 'none'\n }\n\n private syncViewfinderColor(): void {\n if (!this.viewfinderEl) return\n this.viewfinderEl.style.color = this.viewfinderColor\n }\n\n private initListeners(): void {\n console.log('inside initListeners')\n\n const resizeCanvas = () => {\n console.log('[resizeCanvas]')\n\n const rect = this.canvas.getBoundingClientRect();\n const dpr = window.devicePixelRatio || 1;\n const newWidth = Math.max(1, Math.floor(rect.width * dpr));\n const newHeight = Math.max(1, Math.floor(rect.height * dpr));\n\n if (this.canvas.width !== newWidth || this.canvas.height !== newHeight) {\n\n this.canvas.width = newWidth;\n this.canvas.height = newHeight;\n\n // this.webgl.viewportWidth = this.canvas.width\n // this.webgl.viewportHeight = this.canvas.height\n this.webgl.viewport(0, 0, this.canvas.width, this.canvas.height)\n }\n }\n\n const handleContextLost = (event: Event) => {\n console.log('[handleContextLost]')\n event.preventDefault()\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n }\n\n const handleContextRestored = (_event: Event) => {\n console.log('[handleContextRestored]')\n // this.webgl.viewportWidth = this.canvas.width\n // this.webgl.viewportHeight = this.canvas.height\n this.webgl.clearColor(0 * 0.00392156862, 16 * 0.00392156862, 50 * 0.00392156862, 0.7)\n this.webgl.enable(this.webgl.DEPTH_TEST)\n this.rafId = requestAnimationFrame(() => this.tick())\n }\n\n // 🔥 ResizeObserver per pannelli / split / layout dinamici\n if ('ResizeObserver' in window) {\n const ro = new ResizeObserver(() => {\n resizeCanvas();\n });\n\n // Osserva il canvas o il suo parent (a tua scelta)\n ro.observe(this.canvas);\n \n }\n\n window.addEventListener('resize', resizeCanvas)\n this.canvas.addEventListener('webglcontextlost', handleContextLost as EventListener, false)\n this.canvas.addEventListener('webglcontextrestored', handleContextRestored as EventListener, false)\n resizeCanvas()\n }\n\n\n private tick(): number {\n this.drawScene()\n this.rafId = requestAnimationFrame(() => this.tick())\n return this.rafId\n }\n\n private drawScene(): void {\n this.astroSphere.draw(this.canvas)\n }\n\n\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/**\n * @author Fabrizio Giordano (Fab)\n */\nimport { vec3, mat4 } from \"gl-matrix\";\nimport {\n astroDegToSpherical,\n cartesianToSpherical,\n sphericalToCartesian,\n type SphericalCoords,\n} from \"./utils/Utils.js\";\n\nimport global from './Global.js'\n\ntype Vec3Tuple = [number, number, number];\n\ninterface CameraLike {\n getCameraMatrix(): mat4;\n}\n\nclass Camera implements CameraLike {\n\n private insideSphere = false;\n\n private cam_pos: vec3 = vec3.create(); // camera position\n private cam_speed = 1.0;\n\n private vMatrix: mat4 = mat4.create(); // view matrix\n private T: mat4 = mat4.create(); // translation matrix\n private R: mat4 = mat4.create(); // rotation matrix\n\n // Optional state used in rotate helpers\n private FoV = 180.0;\n private previousFoV = 180.0;\n private move: vec3 = vec3.create();\n private phi = 0; // accumulated yaw (radians)\n private theta = 0; // accumulated pitch (radians)\n private rotationSensitivity = 1.0\n\n // lock rotation around world axes\n private lockRotX = false;\n private lockRotY = false;\n private lockRotZ = false;\n\n constructor(in_position: vec3, in_sphere: boolean) {\n this.init(in_position, in_sphere);\n }\n\n private init(in_position: vec3, in_sphere: boolean): void {\n this.insideSphere = in_sphere;\n this.cam_pos = vec3.clone(in_position);\n\n this.vMatrix = mat4.create();\n this.T = mat4.create();\n this.R = mat4.create();\n\n mat4.translate(this.T, this.T, [this.cam_pos[0], this.cam_pos[1], this.cam_pos[2]]);\n\n // reset helpers\n this.FoV = this.previousFoV = 180.0;\n this.move = vec3.clone([0, 0, 0]);\n\n const raDeg = 0;\n const decDeg = 0;\n this.goTo(raDeg, decDeg);\n }\n\n goTo(raDeg: number, decDeg: number): void {\n this.goToPhiTheta(astroDegToSpherical(raDeg, decDeg));\n }\n\n private goToPhiTheta(ptDeg: SphericalCoords): void {\n const xyz = sphericalToCartesian(ptDeg.phi, ptDeg.theta, this.cam_pos[2]);\n const targetDirection = vec3.normalize(\n vec3.create(),\n vec3.fromValues(xyz[0], xyz[1], xyz[2])\n );\n const celestialNorth = vec3.fromValues(0.0, 0.0, 1.0);\n const northProjection = vec3.scale(\n vec3.create(),\n targetDirection,\n vec3.dot(celestialNorth, targetDirection)\n );\n const cameraUp = vec3.subtract(vec3.create(), celestialNorth, northProjection);\n\n if (vec3.length(cameraUp) < 1e-6) {\n vec3.set(cameraUp, 0.0, 1.0, 0.0);\n } else {\n vec3.normalize(cameraUp, cameraUp);\n }\n\n let cameraMatrix = mat4.create();\n cameraMatrix = mat4.translate(cameraMatrix, cameraMatrix, vec3.fromValues(xyz[0], xyz[1], xyz[2]));\n\n const focusPoint: Vec3Tuple = [0.0, 0.0, 0.0];\n const cameraPos: Vec3Tuple = [cameraMatrix[12], cameraMatrix[13], cameraMatrix[14]];\n\n cameraMatrix = mat4.targetTo(cameraMatrix, cameraPos, focusPoint, cameraUp);\n\n this.R = mat4.clone(cameraMatrix);\n this.R[12] = 0;\n this.R[13] = 0;\n this.R[14] = 0;\n\n const viewMatrix = mat4.create();\n if (this.cam_pos[2] !== 0) {\n mat4.invert(viewMatrix, cameraMatrix);\n }\n this.vMatrix = viewMatrix;\n }\n\n toggleInsideSphere(): void {\n // if (inside !== global.insideSphere) {\n // global.insideSphere = inside;\n this.insideSphere = global.insideSphere;\n\n if (global.insideSphere) {\n this.cam_pos[0] = 0;\n this.cam_pos[1] = 0;\n this.cam_pos[2] = -0.005;\n } else {\n this.cam_pos[2] = 2.0 + this.cam_pos[2];\n }\n\n mat4.translate(this.T, mat4.create(), this.cam_pos);\n this.refreshViewMatrix();\n // }\n }\n\n zoom(inertia: number): void {\n this.move = vec3.clone([0, 0, 0]);\n this.move[2] += this.cam_speed * inertia;\n\n if (global.insideSphere) {\n if (this.cam_pos[2] + this.move[2] >= -0.005 && inertia > 0) {\n this.cam_pos[2] = -0.005;\n inertia = 0;\n } else if (this.cam_pos[2] + this.move[2] <= -0.9885 && inertia < 0) {\n this.cam_pos[2] = -0.9885;\n inertia = 0;\n } else {\n this.cam_pos[2] += this.move[2];\n }\n } else {\n // Keep zoom responsive near the sphere surface without the abrupt\n // threshold jumps that made the 0.2 -> 0.05 deg range feel sticky.\n const distanceFromSurface = Math.max(this.cam_pos[2] - 1, 1e-6);\n const normalizedDistance = Math.min(1, distanceFromSurface / 0.3);\n const zoomScale = 0.015 + 0.985 * Math.pow(normalizedDistance, 1.2);\n this.move[2] *= zoomScale;\n\n if (this.cam_pos[2] + this.move[2] <= 1.000001 && inertia < 0) {\n this.cam_pos[2] = 1.000001;\n } else {\n this.cam_pos[2] += this.move[2];\n }\n\n }\n\n const identity = mat4.create();\n mat4.translate(this.T, identity, this.cam_pos);\n\n this.refreshViewMatrix();\n }\n\n /**\n * Move the camera forward/backward along its current viewing direction.\n * Positive distance moves *forward* (toward where the camera is looking),\n * negative distance moves *backward*.\n *\n * This does not enforce inside/outside-sphere bounds; if you want clamping,\n * handle it before calling or we can extend this to mimic `zoom()` bounds.\n */\n moveAlongView(distance: number): void {\n // World-space forward vector: transform camera-space -Z by inverse rotation\n const R_inverse = mat4.create();\n mat4.invert(R_inverse, this.R);\n\n const forwardCam = vec3.fromValues(0, 0, -1); // camera looks along -Z in its local space\n const fwdWorld = vec3.create();\n vec3.transformMat4(fwdWorld, forwardCam, R_inverse);\n\n // Normalise to get direction only\n const len = Math.hypot(fwdWorld[0], fwdWorld[1], fwdWorld[2]);\n if (len > 0) {\n fwdWorld[0] /= len;\n fwdWorld[1] /= len;\n fwdWorld[2] /= len;\n }\n\n // Update camera position\n this.cam_pos[0] += fwdWorld[0] * distance;\n this.cam_pos[1] += fwdWorld[1] * distance;\n this.cam_pos[2] += fwdWorld[2] * distance;\n\n // Rebuild translation matrix and view matrix\n const identity = mat4.create();\n mat4.translate(this.T, identity, this.cam_pos);\n this.refreshViewMatrix();\n }\n\n translate(distance: number) {\n\n this.cam_pos[2] = distance + 1\n const identity = mat4.create();\n mat4.translate(this.T, identity, this.cam_pos);\n\n this.refreshViewMatrix();\n }\n\n rotateX(sign: number): void {\n if (this.lockRotX) return;\n const factorRad = sign * 0.01;\n this.theta += factorRad;\n mat4.rotate(this.R, this.R, factorRad, [1, 0, 0]);\n this.refreshViewMatrix();\n }\n\n rotateY(sign: number): void {\n if (this.lockRotY) return;\n const factorRad = sign * 0.01;\n this.phi += factorRad;\n mat4.rotate(this.R, this.R, factorRad, [0, 1, 0]);\n this.refreshViewMatrix();\n }\n\n rotateZ(sign: number): void {\n if (this.lockRotZ) return;\n const factorRad = sign * 0.01;\n // this.phi += factorRad;\n mat4.rotate(this.R, this.R, factorRad, [0, 0, 1]);\n this.refreshViewMatrix();\n }\n\n rotateXRadian(radian: number): void {\n if (this.lockRotX) return;\n mat4.rotate(this.R, this.R, radian, [1, 0, 0]);\n this.refreshViewMatrix();\n }\n\n rotateYRadian(radian: number): void {\n if (this.lockRotY) return;\n this.phi += radian;\n mat4.rotate(this.R, this.R, radian, [0, 1, 0]);\n this.refreshViewMatrix();\n }\n\n rotateZRadian(radian: number): void {\n if (this.lockRotZ) return;\n mat4.rotate(this.R, this.R, radian, [0, 0, 1]);\n this.refreshViewMatrix();\n }\n\n rotate(phi: number, theta: number): void {\n // If Z is locked, completely disable orbit rotation\n if (this.lockRotZ) {\n return;\n }\n\n const totRot = Math.sqrt(phi * phi + theta * theta);\n if (totRot === 0) return;\n\n const pos = this.getCameraPosition();\n const dist2Center = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]);\n const distanceFromSurface = Math.max(dist2Center - 1, 1e-6);\n const normalizedDistance = Math.min(1, distanceFromSurface / 0.45);\n const distanceFactor = 0.02 + 0.98 * Math.pow(normalizedDistance, 1.55);\n\n // Keep tiny FoV more stable and predictable while preserving responsiveness\n // at medium and wide fields of view.\n const normalizedFoV = Math.min(1, this.FoV / 18);\n const fovFactor = 0.06 + 1.55 * Math.pow(normalizedFoV, 0.52);\n const usedRot = ((totRot * distanceFactor * fovFactor) / 1.9) * this.rotationSensitivity;\n\n let axisX = theta;\n let axisY = phi;\n const axisLen = Math.sqrt(axisX * axisX + axisY * axisY);\n\n // If after locking we have no axis left, do nothing\n if (axisLen === 0) {\n return;\n }\n\n axisX /= axisLen;\n axisY /= axisLen;\n\n mat4.rotate(this.R, this.R, -usedRot, [axisX, axisY, 0]);\n this.refreshViewMatrix();\n }\n\n setRotationSensitivity(value: number): void {\n this.rotationSensitivity = Math.min(3, Math.max(0.2, value))\n }\n\n getRotationSensitivity(): number {\n return this.rotationSensitivity\n }\n\n // rotate(phi: number, theta: number): void {\n // // totRot is the magnitude of the requested rotation\n // const totRot = Math.sqrt(phi * phi + theta * theta);\n // if (totRot === 0) return;\n\n // // If both X and Y rotations are locked, nothing to do\n // if (this.lockRotX && this.lockRotY) {\n // return;\n // }\n\n // const pos = this.getCameraPosition();\n // const dist2Center = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]);\n // const usedRot = (totRot * (dist2Center - 1)) / 3.0;\n\n // // Build an axis from phi/theta, but zero components that are locked\n // let axisX = this.lockRotX ? 0 : theta;\n // let axisY = this.lockRotY ? 0 : phi;\n // const axisLen = Math.sqrt(axisX * axisX + axisY * axisY);\n\n // // If after locking we have no axis left, do nothing\n // if (axisLen === 0) {\n // return;\n // }\n\n // axisX /= axisLen;\n // axisY /= axisLen;\n\n // mat4.rotate(this.R, this.R, -usedRot, [axisX, axisY, 0]);\n // this.refreshViewMatrix();\n // }\n\n\n // rotate(phi: number, theta: number): void {\n // const totRot = Math.sqrt(phi * phi + theta * theta);\n // if (totRot === 0) return;\n\n // const pos = this.getCameraPosition();\n // const dist2Center = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]);\n // const usedRot = (totRot * (dist2Center - 1)) / 3.0;\n\n // mat4.rotate(this.R, this.R, -usedRot, [theta / totRot, phi / totRot, 0]);\n // this.refreshViewMatrix();\n // }\n\n private refreshViewMatrix(): void {\n const T_inverse = mat4.create();\n const R_inverse = mat4.create();\n\n mat4.invert(T_inverse, this.T);\n mat4.invert(R_inverse, this.R);\n\n mat4.multiply(this.vMatrix, T_inverse, R_inverse);\n }\n\n refreshFoV(currentFoV: number): void {\n this.previousFoV = this.FoV;\n this.FoV = currentFoV;\n }\n\n getCameraMatrix(): mat4 {\n return this.vMatrix;\n }\n\n getCameraPosition(): Vec3Tuple {\n const inv = mat4.create();\n if (!mat4.invert(inv, this.vMatrix)) {\n // fallback — we already maintain cam_pos\n return [this.cam_pos[0], this.cam_pos[1], this.cam_pos[2]];\n }\n return [inv[12], inv[13], inv[14]];\n }\n\n setCameraMatrix(viewMatrix: Float32Array<ArrayBufferLike>) {\n this.vMatrix = viewMatrix\n }\n\n\n setCameraPosition(position: [number, number, number]): void {\n\n\n // Update authoritative position\n this.cam_pos = vec3.fromValues(position[0], position[1], position[2]);\n\n // Rebuild translation matrix from cam_pos\n mat4.translate(this.T, mat4.create(), this.cam_pos);\n\n // Do NOT touch this.R here (keep orientation)\n // Recompute view: vMatrix = inv(T) * inv(R)\n this.refreshViewMatrix();\n }\n\n getCameraAngle(): SphericalCoords {\n const [x, y, z] = this.getCameraPosition();\n const posVec = vec3.fromValues(x, y, z);\n const ptDeg = cartesianToSpherical(posVec);\n // eslint-disable-next-line no-console\n console.log(\"[Camera::getCameraAngle]\", ptDeg);\n return ptDeg;\n }\n\n /**\n * Lock/unlock rotation around world axes X, Y, Z.\n * Passing `undefined` leaves that axis as-is.\n */\n setRotationLock(options: { x?: boolean; y?: boolean; z?: boolean }): void {\n if (options.x !== undefined) this.lockRotX = options.x;\n if (options.y !== undefined) this.lockRotY = options.y;\n if (options.z !== undefined) this.lockRotZ = options.z;\n }\n\n /** Convenience helpers */\n clearRotationLock(): void {\n this.lockRotX = this.lockRotY = this.lockRotZ = false;\n }\n\n isRotationLockedX(): boolean { return this.lockRotX; }\n isRotationLockedY(): boolean { return this.lockRotY; }\n isRotationLockedZ(): boolean { return this.lockRotZ; }\n}\n\nexport default Camera;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nexport const hipsNodes: string[] = [\n \"https://skies.esac.esa.int/\",\n \"https://alasky.cds.unistra.fr/\",\n];\n\n// If you want to re-enable multiple TAP repos, just uncomment and extend the array\n// export const tapRepos: string[] = [\n// \"https://archive.eso.org/tap_cat/\",\n// \"https://archive.eso.org/tap_obs/\",\n// \"https://sky.esa.int/esasky-tap/tap/\",\n// \"https://ws.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/argus\",\n// ];\n\nexport const tapRepos: string[] = [\n \"https://sky.esa.int/esasky-tap/tap/\",\n];\n\nexport interface BootSetup {\n insideSphere: boolean;\n defaultHips: string;\n camera_fov_deg: number;\n camera_fov_rad: number;\n inside_camera_fov_deg: number;\n inside_camera_fov_rad: number;\n camera_near_plane: number;\n camera_far_plane: number;\n corsProxyUrl: string;\n useCORSProxy: boolean;\n maxDecimals: number;\n defaultHipsUrl: string;\n version: string;\n debug: boolean;\n insideView: boolean;\n showViewfinder: boolean;\n}\n\nexport const bootSetup: BootSetup = {\n insideSphere: false,\n defaultHips: \"\",\n camera_fov_deg: 34,\n camera_fov_rad: 34 * Math.PI / 180.0,\n inside_camera_fov_deg: 60,\n inside_camera_fov_rad: 60 * Math.PI / 180.0,\n camera_near_plane: 0.00001,\n camera_far_plane: 2.5,\n corsProxyUrl: \"http://localhost:4000/\",\n useCORSProxy: false,\n maxDecimals: 15,\n // defaultHipsUrl: \"//alasky.u-strasbg.fr/DSS/DSSColor/\",\n defaultHipsUrl: \"https://cdn.skies.esac.esa.int/DSSColor/\",\n version: \"Astrobrowser v1.0.0\",\n debug: false,\n insideView: false,\n showViewfinder: true,\n};\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n'use strict';\n\n\nimport { Healpix } from 'astrospatial-core/healpix';\nimport { bootSetup } from './Config.js';\n// import Camera from './Camera.js';\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\nclass Global {\n // --- cached / runtime state ---\n // private _camera: Camera | null;\n // private _gl: GL | null;\n private _healpix: Record<number, Healpix>;\n\n // --- config/state flags ---\n private _selectionnside: number;\n // private _healpix4footprints: boolean;\n\n private _useCORSProxy: boolean;\n private _corsProxyUrl: string;\n private _maxDecimals: number;\n private _debug: boolean;\n private _insideSphere: boolean;\n private _version: string;\n\n constructor() {\n\n this._useCORSProxy = bootSetup.useCORSProxy;\n this._corsProxyUrl = bootSetup.corsProxyUrl;\n this._maxDecimals = bootSetup.maxDecimals;\n this._debug = bootSetup.debug;\n this._insideSphere = bootSetup.insideView;\n this._version = bootSetup.version;\n\n this._healpix = {};\n\n this._selectionnside = 32;\n }\n\n init(): void {\n console.log('Global.init()');\n }\n\n // --- getters/setters ---\n\n get version(): string { return this._version; }\n\n set corsProxyUrl(url: string) { this._corsProxyUrl = url; }\n get corsProxyUrl(): string { return this._corsProxyUrl; }\n\n get useCORSProxy(): boolean { return this._useCORSProxy; }\n set useCORSProxy(enabled: boolean) { this._useCORSProxy = enabled; }\n\n get debug(): boolean { return this._debug; }\n\n getHealpix(order: number): Healpix {\n if (this._healpix[order] === undefined) {\n // order is HEALPix \"order\" ⇒ nside = 2^order\n this._healpix[order] = new Healpix(Math.pow(2, order));\n }\n return this._healpix[order];\n }\n\n get MAX_DECIMALS(): number { return this._maxDecimals; }\n\n set insideSphere(v: boolean) { this._insideSphere = v; }\n get insideSphere(): boolean { return this._insideSphere; }\n\n get nsideForSelection(): number { return this._selectionnside; }\n \n}\n\nconst global = new Global();\nexport default global;","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nexport { AstroViewer } from './AstroViewer.js';\nexport type { AstroViewerOptions } from './AstroViewer.js';\nexport { HiPSDescriptor } from './model/hips/HiPSDescriptor.js';\nexport { SphereFoV as FoV } from './model/SphereFoV.js'\nexport { SphereFoV } from './model/SphereFoV.js'\n\nexport type { PointCoordinates, CameraChangedDetail } from './AstroSphere.js';\nexport { HoveredFootprintDetail, FootprintSetGL } from './model/footprints/FootprintSetGL.js'\nexport { CatalogueGL } from './model/catalogues/CatalogueGL.js'\nexport { TerraPointSetGL } from './model/terra/TerraPointSetGL.js'\nexport { TerraFootprintSetGL } from './model/terra/TerraFootprintSetGL.js'\nexport { TerraPolylineSetGL } from './model/terra/TerraPolylineSetGL.js'\nexport type { TerraPolylineMetadata, TerraPolylinePoint } from './model/terra/TerraPolylineSetGL.js'\nexport { SatelliteObjectGL } from './model/terra/SatelliteObjectGL.js'\nexport type { SatelliteObjectOptions, SatelliteObjectPosition } from './model/terra/SatelliteObjectGL.js'\nexport { SensorConeGL } from './model/terra/SensorConeGL.js'\nexport type { SensorConeFootprintPosition, SensorConeOptions, SensorConePoint } from './model/terra/SensorConeGL.js'\nexport {\n createObservationTrackTimeline,\n footprintToRing,\n ObservationTrackTimeline,\n ObservationTrackViewerAdapter,\n} from './model/observation/index.js'\nexport type {\n FootprintGeometryLike,\n FootprintGeoPositionLike,\n FootprintMultiPolygonLike,\n FootprintPolygonLike,\n GroundTrackPointLike,\n ObservationSampleLike,\n ObservationTargetLike,\n ObservationTimelineSample,\n ObservationTrackFrame,\n ObservationTrackLike,\n ObservationTrackTimelineController,\n ObservationTrackTimelineOptions,\n ObservationTrackTimelineState,\n ObservationTrackViewerAdapterOptions,\n ObservationTrackViewerColors,\n ObservationTrackViewerHandle,\n ObservationVisualisationLike,\n SatelliteConfigLike,\n SatelliteModelConfigLike,\n SensorConfigLike,\n} from './model/observation/index.js'\n\nexport { MetadataManager } from './model/MetadataManager.js'\nexport { MetadataColumn, MetadataInit, ColumnType } from './model/MetadataColumn.js'\nexport { Point, SphericalOpts, AstroOpts, PointInitOpts, CartesianOpts } from './model/Point.js'\nexport { FoVUtils } from './utils/FoVUtils.js'\nexport { CoordsType } from './utils/CoordsType.js'\nexport { default as GeoJSONParser } from './utils/GeoJSONParser.js'\nexport type { ParsedGeoJSONFeature, GeoJSONProperties } from './utils/GeoJSONParser.js'\nexport { ColorMaps, COLOR_MAP_SAMPLE_COUNT, createColorMapFromSamples } from './model/ColorMaps.js';\nexport type { ColorMap, ColorMapName } from './model/ColorMaps.js';\nexport { HiPS } from './model/hips/HiPS.js'\nexport { XYZMap } from './model/earth/XYZMap.js'\nexport { WMTSAdapter } from './model/earth/WMTSAdapter.js'\nexport { MeshHiPS } from './model/meships/MeshHiPS.js'\nexport { MeshHiPSDescriptor } from './model/meships/MeshHiPSDescriptor.js'\nexport type { XYZLayerConfig, WMTSLayerConfig, WMTSRequestEncoding } from './model/earth/XYZConfig.js'\nexport type { XYZTileCoord, XYZTileMesh } from './model/earth/XYZTypes.js'\nexport type { GridLabelContainers } from './model/grid/GridTextHelper.js'\nexport type { MeshHiPSConfig, MeshHiPSDebugStats, MeshHiPSTileCoord } from './model/meships/MeshHiPSTypes.js'\n\nexport {Source} from './model/Source.js'\nexport {Footprint} from './model/footprints/Footprint.js'\n\n\nconsole.log('astroviewer UMD loaded')\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/**\n * @author Fabrizio Giordano (Fab)\n */\n\nimport { vec3, mat4, ReadonlyVec3, ReadonlyMat4 } from \"gl-matrix\";\nimport global from \"../Global.js\";\n\nimport { HiPSShaderProgram } from '../shader/HiPSShaderProgram.js'\n// import { VisibleTilesManager } from \"./hips/VisibleTilesManager.js\";\n// import { TileBuffer } from \"./hips/TileBuffer.js\";\nimport Camera from \"../Camera.js\";\nimport { Point } from \"./Point.js\";\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\nexport interface SkyEntityDrawInput {\n fovDeg?: number\n // cameraMatrix?: Float32Array\n camera: Camera\n pMatrix: ReadonlyMat4\n centerSphericalDeg?: {\n phi: number\n theta: number\n }\n fovPolygon?: Point[]\n viewportSphericalSamples?: Array<{\n phi: number\n theta: number\n }>\n cameraMoving?: boolean\n}\n\nexport abstract class AbstractSkyEntity {\n // Public-ish properties used elsewhere in the app\n public refreshMe = false;\n public fovX_deg = 180;\n public fovY_deg = 180;\n public xRad: number;\n public yRad: number;\n public prevFoV = this.fovX_deg;\n public _name: string;\n // public insideSphere: boolean = bootSetup.insideSphere\n\n // Picking/sphere\n public center: vec3;\n public radius: number;\n public isGalacticHips: boolean;\n\n // GL resources\n protected vertexTextureCoordBuffer: WebGLBuffer | null = null;\n protected vertexPositionBuffer: WebGLBuffer | null = null;\n protected vertexIndexBuffer: WebGLBuffer | null = null;\n protected shaderProgram: WebGLProgram | null = null;\n\n // Matrices\n protected T: mat4 = mat4.create();\n protected R: mat4 = mat4.create();\n protected modelMatrix: mat4 = mat4.create();\n protected inverseModelMatrix: mat4 = mat4.create();\n\n // Precomputed transform from galactic to equatorial (already inverted)\n protected galacticMatrixInverted: mat4 = mat4.create();\n\n protected _webgl: WebGL2RenderingContext\n protected _hipsShaderProgram: HiPSShaderProgram;\n // protected _visibleTilesManager: VisibleTilesManager\n // protected _tileBuffer: TileBuffer\n\n constructor(\n in_radius: number,\n in_position: ReadonlyVec3,\n in_xRad: number,\n in_yRad: number,\n in_name: string,\n webgl: WebGL2RenderingContext,\n isGalacticHips?: boolean,\n ) {\n this._webgl = webgl\n this.xRad = in_xRad;\n this.yRad = in_yRad;\n this._name = in_name;\n this.center = vec3.clone(in_position);\n this.radius = in_radius;\n // this.insideSphere = global.insideSphere\n this.isGalacticHips = !!isGalacticHips;\n\n // Fill the matrix via Float32Array.set (safer than mat4.set with 16 scalars)\n mat4.set(\n this.galacticMatrixInverted,\n -0.054875582456588745, -0.8734370470046997, -0.48383501172065735, 0,\n 0.49410945177078247, -0.4448296129703522, 0.7469822764396667, 0,\n -0.8676661849021912, -0.19807636737823486, 0.4559837877750397, 0,\n 0, 0, 0, 1,\n )\n // this._tileBuffer = new TileBuffer(1, this._webgl)\n // this._visibleTilesManager = new VisibleTilesManager(this._tileBuffer)\n \n // this._visibleTilesManager = new VisibleTilesManager()\n this._hipsShaderProgram = new HiPSShaderProgram(this._webgl)\n }\n\n get name() {\n return this._name\n }\n\n get hipsShaderProgram() {\n return this._hipsShaderProgram\n }\n // get tileBuffer() {\n // return this._tileBuffer\n // }\n get webgl() {\n return this._webgl\n }\n /** GL setup and initial model transform */\n initGL(gl: GL): void {\n // GL resources\n this.vertexTextureCoordBuffer = gl.createBuffer();\n this.vertexPositionBuffer = gl.createBuffer();\n this.vertexIndexBuffer = gl.createBuffer();\n this.shaderProgram = gl.createProgram();\n\n // Reset object transforms\n this.T = mat4.create();\n this.R = mat4.create();\n this.modelMatrix = mat4.create();\n this.inverseModelMatrix = mat4.create();\n\n // Initial pose\n this.translate(this.center);\n this.rotate(this.xRad, this.yRad);\n }\n\n translate(translation: ReadonlyVec3): void {\n mat4.translate(this.T, this.T, translation);\n this.refreshModelMatrix();\n }\n\n rotate(rad1: number, rad2: number): void {\n mat4.rotate(this.R, this.R, rad2, [0, 0, 1]);\n mat4.rotate(this.R, this.R, rad1, [1, 0, 0]);\n this.refreshModelMatrix();\n }\n\n rotateFromZero(rad1: number, rad2: number): void {\n mat4.identity(this.R);\n mat4.rotate(this.R, this.R, rad1, [1, 0, 0]);\n mat4.rotate(this.R, this.R, rad2, [0, 0, 1]);\n this.refreshModelMatrix();\n }\n\n protected refreshModelMatrix(): void {\n const R_inverse = mat4.create();\n mat4.invert(R_inverse, this.R);\n mat4.multiply(this.modelMatrix, this.T, R_inverse);\n\n // Apply galactic frame transform if needed\n if (this.isGalacticHips) {\n mat4.multiply(this.modelMatrix, this.modelMatrix, this.galacticMatrixInverted);\n }\n }\n\n getModelMatrixInverse(): ReadonlyMat4 {\n mat4.identity(this.inverseModelMatrix);\n mat4.invert(this.inverseModelMatrix, this.modelMatrix);\n return this.inverseModelMatrix;\n }\n\n getModelMatrix(): ReadonlyMat4 {\n return this.modelMatrix;\n }\n\n setModelMatrix(modelMatrix: ReadonlyMat4) {\n this.modelMatrix = modelMatrix\n }\n\n /** Children with hierarchical geometry (e.g., HiPS) can override this. */\n setGeometryNeedsToBeRefreshed(): void {\n (this as any).refreshGeometryOnFoVChanged = false;\n }\n\n // Helpers operating on raw mat4 buffers (kept from your JS)\n rotateX(m: mat4, angle: number): mat4 {\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const mv1 = m[1], mv5 = m[5], mv9 = m[9];\n\n m[1] = m[1] * c - m[2] * s;\n m[5] = m[5] * c - m[6] * s;\n m[9] = m[9] * c - m[10] * s;\n\n m[2] = m[2] * c + mv1 * s;\n m[6] = m[6] * c + mv5 * s;\n m[10] = m[10] * c + mv9 * s;\n\n return m;\n }\n\n rotateY(m: mat4, angle: number): mat4 {\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const mv0 = m[0], mv4 = m[4], mv8 = m[8];\n\n m[0] = c * m[0] + s * m[2];\n m[4] = c * m[4] + s * m[6];\n m[8] = c * m[8] + s * m[10];\n\n m[2] = c * m[2] - s * mv0;\n m[6] = c * m[6] - s * mv4;\n m[10] = c * m[10] - s * mv8;\n\n return m;\n }\n\n // ---------- Abstract hooks ----------\n \n abstract draw(input: SkyEntityDrawInput): void;\n\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nexport type ColorMapName =\n | 'grayscale'\n | 'native'\n | 'planck'\n | 'cmb'\n | 'rainbow'\n | 'eosb'\n | 'cubehelix'\n | 'hot'\n | 'gray';\n\nexport interface ColorMap {\n name: string;\n r: Float32Array;\n g: Float32Array;\n b: Float32Array;\n // r: number[];\n // g: number[];\n // b: number[];\n}\n\nexport const COLOR_MAP_SAMPLE_COUNT = 256;\n\ntype ColorChannelSamples = {\n r: number[];\n g: number[];\n b: number[];\n};\n\nfunction validateColorChannel(name: string, values: number[]): void {\n if (!Array.isArray(values)) {\n throw new Error(`Channel \"${name}\" must be an array.`);\n }\n if (values.length !== COLOR_MAP_SAMPLE_COUNT) {\n throw new Error(\n `Channel \"${name}\" must contain exactly ${COLOR_MAP_SAMPLE_COUNT} samples.`,\n );\n }\n\n for (let i = 0; i < values.length; i += 1) {\n const value = values[i];\n if (!Number.isFinite(value)) {\n throw new Error(`Channel \"${name}\" contains a non-finite value at index ${i}.`);\n }\n if (value < 0 || value > 255) {\n throw new Error(`Channel \"${name}\" contains an out-of-range value at index ${i}. Expected 0..255.`);\n }\n }\n}\n\nfunction packColorChannel(values: number[]): Float32Array {\n const packed = new Float32Array(COLOR_MAP_SAMPLE_COUNT * 4);\n for (let i = 0; i < COLOR_MAP_SAMPLE_COUNT; i += 1) {\n packed[i * 4] = values[i];\n }\n return packed;\n}\n\nexport function createColorMapFromSamples(\n name: string,\n channels: ColorChannelSamples,\n): ColorMap {\n const trimmedName = name.trim();\n if (!trimmedName) {\n throw new Error(\"Color map name must not be empty.\");\n }\n\n validateColorChannel(\"r\", channels.r);\n validateColorChannel(\"g\", channels.g);\n validateColorChannel(\"b\", channels.b);\n\n return {\n name: trimmedName,\n r: packColorChannel(channels.r),\n g: packColorChannel(channels.g),\n b: packColorChannel(channels.b),\n };\n}\n\nexport const ColorMaps: Record<ColorMapName, ColorMap> = {\n grayscale: {\n name: 'grayscale',\n r: new Float32Array([]),\n g: new Float32Array([]),\n b: new Float32Array([]),\n // r: [],\n // g: [],\n // b: [],\n },\n\n native: {\n name: 'native',\n r: new Float32Array([]),\n g: new Float32Array([]),\n b: new Float32Array([]),\n // r: [],\n // g: [],\n // b: [],\n },\n planck: {\n name: 'planck',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.769231, 0.0, 0.0, 0.0, 1.53846, 0.0, 0.0, 0.0, 2.30769, 0.0, 0.0, 0.0,\n 3.07692, 0.0, 0.0, 0.0, 3.84615, 0.0, 0.0, 0.0, 4.61538, 0.0, 0.0, 0.0, 5.38462, 0.0, 0.0,\n 0.0, 6.15385, 0.0, 0.0, 0.0, 6.92308, 0.0, 0.0, 0.0, 7.69231, 0.0, 0.0, 0.0, 8.46154, 0.0,\n 0.0, 0.0, 9.23077, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 11.5385, 0.0, 0.0, 0.0, 13.0769, 0.0,\n 0.0, 0.0, 14.6154, 0.0, 0.0, 0.0, 16.1538, 0.0, 0.0, 0.0, 17.6923, 0.0, 0.0, 0.0, 19.2308,\n 0.0, 0.0, 0.0, 20.7692, 0.0, 0.0, 0.0, 22.3077, 0.0, 0.0, 0.0, 23.8462, 0.0, 0.0, 0.0,\n 25.3846, 0.0, 0.0, 0.0, 26.9231, 0.0, 0.0, 0.0, 28.4615, 0.0, 0.0, 0.0, 30.0, 0.0, 0.0, 0.0,\n 33.8462, 0.0, 0.0, 0.0, 37.6923, 0.0, 0.0, 0.0, 41.5385, 0.0, 0.0, 0.0, 45.3846, 0.0, 0.0,\n 0.0, 49.2308, 0.0, 0.0, 0.0, 53.0769, 0.0, 0.0, 0.0, 56.9231, 0.0, 0.0, 0.0, 60.7692, 0.0,\n 0.0, 0.0, 64.6154, 0.0, 0.0, 0.0, 68.4615, 0.0, 0.0, 0.0, 72.3077, 0.0, 0.0, 0.0, 76.1538,\n 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 88.5385, 0.0, 0.0, 0.0, 97.0769, 0.0, 0.0, 0.0, 105.615,\n 0.0, 0.0, 0.0, 114.154, 0.0, 0.0, 0.0, 122.692, 0.0, 0.0, 0.0, 131.231, 0.0, 0.0, 0.0,\n 139.769, 0.0, 0.0, 0.0, 148.308, 0.0, 0.0, 0.0, 156.846, 0.0, 0.0, 0.0, 165.385, 0.0, 0.0,\n 0.0, 173.923, 0.0, 0.0, 0.0, 182.462, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 193.846, 0.0, 0.0,\n 0.0, 196.692, 0.0, 0.0, 0.0, 199.538, 0.0, 0.0, 0.0, 202.385, 0.0, 0.0, 0.0, 205.231, 0.0,\n 0.0, 0.0, 208.077, 0.0, 0.0, 0.0, 210.923, 0.0, 0.0, 0.0, 213.769, 0.0, 0.0, 0.0, 216.615,\n 0.0, 0.0, 0.0, 219.462, 0.0, 0.0, 0.0, 222.308, 0.0, 0.0, 0.0, 225.154, 0.0, 0.0, 0.0, 228.0,\n 0.0, 0.0, 0.0, 229.182, 0.0, 0.0, 0.0, 230.364, 0.0, 0.0, 0.0, 231.545, 0.0, 0.0, 0.0,\n 232.727, 0.0, 0.0, 0.0, 233.909, 0.0, 0.0, 0.0, 235.091, 0.0, 0.0, 0.0, 236.273, 0.0, 0.0,\n 0.0, 237.455, 0.0, 0.0, 0.0, 238.636, 0.0, 0.0, 0.0, 239.818, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0,\n 0.0, 241.0, 0.0, 0.0, 0.0, 241.364, 0.0, 0.0, 0.0, 241.727, 0.0, 0.0, 0.0, 242.091, 0.0, 0.0,\n 0.0, 242.455, 0.0, 0.0, 0.0, 242.818, 0.0, 0.0, 0.0, 243.182, 0.0, 0.0, 0.0, 243.545, 0.0,\n 0.0, 0.0, 243.909, 0.0, 0.0, 0.0, 244.273, 0.0, 0.0, 0.0, 244.636, 0.0, 0.0, 0.0, 245.0, 0.0,\n 0.0, 0.0, 245.231, 0.0, 0.0, 0.0, 245.462, 0.0, 0.0, 0.0, 245.692, 0.0, 0.0, 0.0, 245.923,\n 0.0, 0.0, 0.0, 246.154, 0.0, 0.0, 0.0, 246.385, 0.0, 0.0, 0.0, 246.615, 0.0, 0.0, 0.0,\n 246.846, 0.0, 0.0, 0.0, 247.077, 0.0, 0.0, 0.0, 247.308, 0.0, 0.0, 0.0, 247.538, 0.0, 0.0,\n 0.0, 247.769, 0.0, 0.0, 0.0, 248.0, 0.0, 0.0, 0.0, 248.146, 0.0, 0.0, 0.0, 248.292, 0.0, 0.0,\n 0.0, 248.438, 0.0, 0.0, 0.0, 248.585, 0.0, 0.0, 0.0, 248.731, 0.0, 0.0, 0.0, 248.877, 0.0,\n 0.0, 0.0, 249.023, 0.0, 0.0, 0.0, 249.169, 0.0, 0.0, 0.0, 249.315, 0.0, 0.0, 0.0, 249.462,\n 0.0, 0.0, 0.0, 249.608, 0.0, 0.0, 0.0, 249.754, 0.0, 0.0, 0.0, 249.9, 0.0, 0.0, 0.0, 249.312,\n 0.0, 0.0, 0.0, 248.723, 0.0, 0.0, 0.0, 248.135, 0.0, 0.0, 0.0, 247.546, 0.0, 0.0, 0.0,\n 246.958, 0.0, 0.0, 0.0, 246.369, 0.0, 0.0, 0.0, 245.781, 0.0, 0.0, 0.0, 245.192, 0.0, 0.0,\n 0.0, 244.604, 0.0, 0.0, 0.0, 244.015, 0.0, 0.0, 0.0, 243.427, 0.0, 0.0, 0.0, 242.838, 0.0,\n 0.0, 0.0, 242.25, 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 236.365, 0.0, 0.0, 0.0, 233.423, 0.0,\n 0.0, 0.0, 230.481, 0.0, 0.0, 0.0, 227.538, 0.0, 0.0, 0.0, 224.596, 0.0, 0.0, 0.0, 221.654,\n 0.0, 0.0, 0.0, 218.712, 0.0, 0.0, 0.0, 215.769, 0.0, 0.0, 0.0, 212.827, 0.0, 0.0, 0.0,\n 209.885, 0.0, 0.0, 0.0, 206.942, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0,\n 198.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 192.0, 0.0, 0.0, 0.0, 189.0, 0.0, 0.0, 0.0, 186.0,\n 0.0, 0.0, 0.0, 183.0, 0.0, 0.0, 0.0, 180.0, 0.0, 0.0, 0.0, 177.0, 0.0, 0.0, 0.0, 174.0, 0.0,\n 0.0, 0.0, 171.0, 0.0, 0.0, 0.0, 168.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 161.077, 0.0, 0.0,\n 0.0, 157.154, 0.0, 0.0, 0.0, 153.231, 0.0, 0.0, 0.0, 149.308, 0.0, 0.0, 0.0, 145.385, 0.0,\n 0.0, 0.0, 141.462, 0.0, 0.0, 0.0, 137.538, 0.0, 0.0, 0.0, 133.615, 0.0, 0.0, 0.0, 129.692,\n 0.0, 0.0, 0.0, 125.769, 0.0, 0.0, 0.0, 121.846, 0.0, 0.0, 0.0, 117.923, 0.0, 0.0, 0.0, 114.0,\n 0.0, 0.0, 0.0, 115.038, 0.0, 0.0, 0.0, 116.077, 0.0, 0.0, 0.0, 117.115, 0.0, 0.0, 0.0,\n 118.154, 0.0, 0.0, 0.0, 119.192, 0.0, 0.0, 0.0, 120.231, 0.0, 0.0, 0.0, 121.269, 0.0, 0.0,\n 0.0, 122.308, 0.0, 0.0, 0.0, 123.346, 0.0, 0.0, 0.0, 124.385, 0.0, 0.0, 0.0, 125.423, 0.0,\n 0.0, 0.0, 126.462, 0.0, 0.0, 0.0, 127.5, 0.0, 0.0, 0.0, 131.423, 0.0, 0.0, 0.0, 135.346, 0.0,\n 0.0, 0.0, 139.269, 0.0, 0.0, 0.0, 143.192, 0.0, 0.0, 0.0, 147.115, 0.0, 0.0, 0.0, 151.038,\n 0.0, 0.0, 0.0, 154.962, 0.0, 0.0, 0.0, 158.885, 0.0, 0.0, 0.0, 162.808, 0.0, 0.0, 0.0,\n 166.731, 0.0, 0.0, 0.0, 170.654, 0.0, 0.0, 0.0, 174.577, 0.0, 0.0, 0.0, 178.5, 0.0, 0.0, 0.0,\n 180.462, 0.0, 0.0, 0.0, 182.423, 0.0, 0.0, 0.0, 184.385, 0.0, 0.0, 0.0, 186.346, 0.0, 0.0,\n 0.0, 188.308, 0.0, 0.0, 0.0, 190.269, 0.0, 0.0, 0.0, 192.231, 0.0, 0.0, 0.0, 194.192, 0.0,\n 0.0, 0.0, 196.154, 0.0, 0.0, 0.0, 198.115, 0.0, 0.0, 0.0, 200.077, 0.0, 0.0, 0.0, 202.038,\n 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 205.962, 0.0, 0.0, 0.0, 207.923, 0.0, 0.0, 0.0, 209.885,\n 0.0, 0.0, 0.0, 211.846, 0.0, 0.0, 0.0, 213.808, 0.0, 0.0, 0.0, 215.769, 0.0, 0.0, 0.0,\n 217.731, 0.0, 0.0, 0.0, 219.692, 0.0, 0.0, 0.0, 221.654, 0.0, 0.0, 0.0, 223.615, 0.0, 0.0,\n 0.0, 225.577, 0.0, 0.0, 0.0, 227.538, 0.0, 0.0, 0.0, 229.5, 0.0, 0.0, 0.0, 230.481, 0.0, 0.0,\n 0.0, 231.462, 0.0, 0.0, 0.0, 232.442, 0.0, 0.0, 0.0, 233.423, 0.0, 0.0, 0.0, 234.404, 0.0,\n 0.0, 0.0, 235.385, 0.0, 0.0, 0.0, 236.365, 0.0, 0.0, 0.0, 237.346, 0.0, 0.0, 0.0, 238.327,\n 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 240.288, 0.0, 0.0, 0.0, 241.269, 0.0, 0.0, 0.0, 242.25,\n 0.0, 0.0, 0.0, 242.642, 0.0, 0.0, 0.0, 243.035, 0.0, 0.0, 0.0, 243.427, 0.0, 0.0, 0.0,\n 243.819, 0.0, 0.0, 0.0, 244.212, 0.0, 0.0, 0.0, 244.604, 0.0, 0.0, 0.0, 244.996, 0.0, 0.0,\n 0.0, 245.388, 0.0, 0.0, 0.0, 245.781, 0.0, 0.0, 0.0, 246.173, 0.0, 0.0, 0.0, 246.565, 0.0,\n 0.0, 0.0, 246.958, 0.0, 0.0, 0.0, 247.35, 0.0, 0.0, 0.0, 247.814, 0.0, 0.0, 0.0, 248.277, 0.0,\n 0.0, 0.0, 248.741, 0.0, 0.0, 0.0, 249.205, 0.0, 0.0, 0.0, 249.668, 0.0, 0.0, 0.0, 250.132,\n 0.0, 0.0, 0.0, 250.595, 0.0, 0.0, 0.0, 251.059, 0.0, 0.0, 0.0, 251.523, 0.0, 0.0, 0.0,\n 251.986, 0.0, 0.0, 0.0, 252.45, 0.0, 0.0, 0.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 1.53846, 0.0, 0.0, 0.0, 3.07692, 0.0, 0.0, 0.0, 4.61538, 0.0, 0.0, 0.0,\n 6.15385, 0.0, 0.0, 0.0, 7.69231, 0.0, 0.0, 0.0, 9.23077, 0.0, 0.0, 0.0, 10.7692, 0.0, 0.0,\n 0.0, 12.3077, 0.0, 0.0, 0.0, 13.8462, 0.0, 0.0, 0.0, 15.3846, 0.0, 0.0, 0.0, 16.9231, 0.0,\n 0.0, 0.0, 18.4615, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 32.6154, 0.0, 0.0, 0.0, 45.2308, 0.0,\n 0.0, 0.0, 57.8462, 0.0, 0.0, 0.0, 70.4615, 0.0, 0.0, 0.0, 83.0769, 0.0, 0.0, 0.0, 95.6923,\n 0.0, 0.0, 0.0, 108.308, 0.0, 0.0, 0.0, 120.923, 0.0, 0.0, 0.0, 133.538, 0.0, 0.0, 0.0,\n 146.154, 0.0, 0.0, 0.0, 158.769, 0.0, 0.0, 0.0, 171.385, 0.0, 0.0, 0.0, 184.0, 0.0, 0.0, 0.0,\n 187.923, 0.0, 0.0, 0.0, 191.846, 0.0, 0.0, 0.0, 195.769, 0.0, 0.0, 0.0, 199.692, 0.0, 0.0,\n 0.0, 203.615, 0.0, 0.0, 0.0, 207.538, 0.0, 0.0, 0.0, 211.462, 0.0, 0.0, 0.0, 215.385, 0.0,\n 0.0, 0.0, 219.308, 0.0, 0.0, 0.0, 223.231, 0.0, 0.0, 0.0, 227.154, 0.0, 0.0, 0.0, 231.077,\n 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 235.308, 0.0, 0.0, 0.0, 235.615, 0.0, 0.0, 0.0, 235.923,\n 0.0, 0.0, 0.0, 236.231, 0.0, 0.0, 0.0, 236.538, 0.0, 0.0, 0.0, 236.846, 0.0, 0.0, 0.0,\n 237.154, 0.0, 0.0, 0.0, 237.462, 0.0, 0.0, 0.0, 237.769, 0.0, 0.0, 0.0, 238.077, 0.0, 0.0,\n 0.0, 238.385, 0.0, 0.0, 0.0, 238.692, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 239.077, 0.0, 0.0,\n 0.0, 239.154, 0.0, 0.0, 0.0, 239.231, 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 239.385, 0.0,\n 0.0, 0.0, 239.462, 0.0, 0.0, 0.0, 239.538, 0.0, 0.0, 0.0, 239.615, 0.0, 0.0, 0.0, 239.692,\n 0.0, 0.0, 0.0, 239.769, 0.0, 0.0, 0.0, 239.846, 0.0, 0.0, 0.0, 239.923, 0.0, 0.0, 0.0, 240.0,\n 0.0, 0.0, 0.0, 240.091, 0.0, 0.0, 0.0, 240.182, 0.0, 0.0, 0.0, 240.273, 0.0, 0.0, 0.0,\n 240.364, 0.0, 0.0, 0.0, 240.455, 0.0, 0.0, 0.0, 240.545, 0.0, 0.0, 0.0, 240.636, 0.0, 0.0,\n 0.0, 240.727, 0.0, 0.0, 0.0, 240.818, 0.0, 0.0, 0.0, 240.909, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0,\n 0.0, 241.0, 0.0, 0.0, 0.0, 240.909, 0.0, 0.0, 0.0, 240.818, 0.0, 0.0, 0.0, 240.727, 0.0, 0.0,\n 0.0, 240.636, 0.0, 0.0, 0.0, 240.545, 0.0, 0.0, 0.0, 240.455, 0.0, 0.0, 0.0, 240.364, 0.0,\n 0.0, 0.0, 240.273, 0.0, 0.0, 0.0, 240.182, 0.0, 0.0, 0.0, 240.091, 0.0, 0.0, 0.0, 240.0, 0.0,\n 0.0, 0.0, 239.615, 0.0, 0.0, 0.0, 239.231, 0.0, 0.0, 0.0, 238.846, 0.0, 0.0, 0.0, 238.462,\n 0.0, 0.0, 0.0, 238.077, 0.0, 0.0, 0.0, 237.692, 0.0, 0.0, 0.0, 237.308, 0.0, 0.0, 0.0,\n 236.923, 0.0, 0.0, 0.0, 236.538, 0.0, 0.0, 0.0, 236.154, 0.0, 0.0, 0.0, 235.769, 0.0, 0.0,\n 0.0, 235.385, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 232.615, 0.0, 0.0, 0.0, 230.231, 0.0, 0.0,\n 0.0, 227.846, 0.0, 0.0, 0.0, 225.462, 0.0, 0.0, 0.0, 223.077, 0.0, 0.0, 0.0, 220.692, 0.0,\n 0.0, 0.0, 218.308, 0.0, 0.0, 0.0, 215.923, 0.0, 0.0, 0.0, 213.538, 0.0, 0.0, 0.0, 211.154,\n 0.0, 0.0, 0.0, 208.769, 0.0, 0.0, 0.0, 206.385, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 200.077,\n 0.0, 0.0, 0.0, 196.154, 0.0, 0.0, 0.0, 192.231, 0.0, 0.0, 0.0, 188.308, 0.0, 0.0, 0.0,\n 184.385, 0.0, 0.0, 0.0, 180.462, 0.0, 0.0, 0.0, 176.538, 0.0, 0.0, 0.0, 172.615, 0.0, 0.0,\n 0.0, 168.692, 0.0, 0.0, 0.0, 164.769, 0.0, 0.0, 0.0, 160.846, 0.0, 0.0, 0.0, 156.923, 0.0,\n 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 147.115, 0.0, 0.0, 0.0, 141.231, 0.0, 0.0, 0.0, 135.346, 0.0,\n 0.0, 0.0, 129.462, 0.0, 0.0, 0.0, 123.577, 0.0, 0.0, 0.0, 117.692, 0.0, 0.0, 0.0, 111.808,\n 0.0, 0.0, 0.0, 105.923, 0.0, 0.0, 0.0, 100.038, 0.0, 0.0, 0.0, 94.1538, 0.0, 0.0, 0.0,\n 88.2692, 0.0, 0.0, 0.0, 82.3846, 0.0, 0.0, 0.0, 76.5, 0.0, 0.0, 0.0, 73.0769, 0.0, 0.0, 0.0,\n 69.6538, 0.0, 0.0, 0.0, 66.2308, 0.0, 0.0, 0.0, 62.8077, 0.0, 0.0, 0.0, 59.3846, 0.0, 0.0,\n 0.0, 55.9615, 0.0, 0.0, 0.0, 52.5385, 0.0, 0.0, 0.0, 49.1154, 0.0, 0.0, 0.0, 45.6923, 0.0,\n 0.0, 0.0, 42.2692, 0.0, 0.0, 0.0, 38.8462, 0.0, 0.0, 0.0, 35.4231, 0.0, 0.0, 0.0, 32.0, 0.0,\n 0.0, 0.0, 29.5385, 0.0, 0.0, 0.0, 27.0769, 0.0, 0.0, 0.0, 24.6154, 0.0, 0.0, 0.0, 22.1538,\n 0.0, 0.0, 0.0, 19.6923, 0.0, 0.0, 0.0, 17.2308, 0.0, 0.0, 0.0, 14.7692, 0.0, 0.0, 0.0,\n 12.3077, 0.0, 0.0, 0.0, 9.84615, 0.0, 0.0, 0.0, 7.38462, 0.0, 0.0, 0.0, 4.92308, 0.0, 0.0,\n 0.0, 2.46154, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.80769, 0.0, 0.0, 0.0, 19.6154, 0.0, 0.0,\n 0.0, 29.4231, 0.0, 0.0, 0.0, 39.2308, 0.0, 0.0, 0.0, 49.0385, 0.0, 0.0, 0.0, 58.8462, 0.0,\n 0.0, 0.0, 68.6538, 0.0, 0.0, 0.0, 78.4615, 0.0, 0.0, 0.0, 88.2692, 0.0, 0.0, 0.0, 98.0769,\n 0.0, 0.0, 0.0, 107.885, 0.0, 0.0, 0.0, 117.692, 0.0, 0.0, 0.0, 127.5, 0.0, 0.0, 0.0, 131.423,\n 0.0, 0.0, 0.0, 135.346, 0.0, 0.0, 0.0, 139.269, 0.0, 0.0, 0.0, 143.192, 0.0, 0.0, 0.0,\n 147.115, 0.0, 0.0, 0.0, 151.038, 0.0, 0.0, 0.0, 154.962, 0.0, 0.0, 0.0, 158.885, 0.0, 0.0,\n 0.0, 162.808, 0.0, 0.0, 0.0, 166.731, 0.0, 0.0, 0.0, 170.654, 0.0, 0.0, 0.0, 174.577, 0.0,\n 0.0, 0.0, 178.5, 0.0, 0.0, 0.0, 180.462, 0.0, 0.0, 0.0, 182.423, 0.0, 0.0, 0.0, 184.385, 0.0,\n 0.0, 0.0, 186.346, 0.0, 0.0, 0.0, 188.308, 0.0, 0.0, 0.0, 190.269, 0.0, 0.0, 0.0, 192.231,\n 0.0, 0.0, 0.0, 194.192, 0.0, 0.0, 0.0, 196.154, 0.0, 0.0, 0.0, 198.115, 0.0, 0.0, 0.0,\n 200.077, 0.0, 0.0, 0.0, 202.038, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 205.962, 0.0, 0.0, 0.0,\n 207.923, 0.0, 0.0, 0.0, 209.885, 0.0, 0.0, 0.0, 211.846, 0.0, 0.0, 0.0, 213.808, 0.0, 0.0,\n 0.0, 215.769, 0.0, 0.0, 0.0, 217.731, 0.0, 0.0, 0.0, 219.692, 0.0, 0.0, 0.0, 221.654, 0.0,\n 0.0, 0.0, 223.615, 0.0, 0.0, 0.0, 225.577, 0.0, 0.0, 0.0, 227.538, 0.0, 0.0, 0.0, 229.5, 0.0,\n 0.0, 0.0, 230.481, 0.0, 0.0, 0.0, 231.462, 0.0, 0.0, 0.0, 232.442, 0.0, 0.0, 0.0, 233.423,\n 0.0, 0.0, 0.0, 234.404, 0.0, 0.0, 0.0, 235.385, 0.0, 0.0, 0.0, 236.365, 0.0, 0.0, 0.0,\n 237.346, 0.0, 0.0, 0.0, 238.327, 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 240.288, 0.0, 0.0,\n 0.0, 241.269, 0.0, 0.0, 0.0, 242.25, 0.0, 0.0, 0.0, 242.642, 0.0, 0.0, 0.0, 243.035, 0.0, 0.0,\n 0.0, 243.427, 0.0, 0.0, 0.0, 243.819, 0.0, 0.0, 0.0, 244.212, 0.0, 0.0, 0.0, 244.604, 0.0,\n 0.0, 0.0, 244.996, 0.0, 0.0, 0.0, 245.388, 0.0, 0.0, 0.0, 245.781, 0.0, 0.0, 0.0, 246.173,\n 0.0, 0.0, 0.0, 246.565, 0.0, 0.0, 0.0, 246.958, 0.0, 0.0, 0.0, 247.35, 0.0, 0.0, 0.0, 247.814,\n 0.0, 0.0, 0.0, 248.277, 0.0, 0.0, 0.0, 248.741, 0.0, 0.0, 0.0, 249.205, 0.0, 0.0, 0.0,\n 249.668, 0.0, 0.0, 0.0, 250.132, 0.0, 0.0, 0.0, 250.595, 0.0, 0.0, 0.0, 251.059, 0.0, 0.0,\n 0.0, 251.523, 0.0, 0.0, 0.0, 251.986, 0.0, 0.0, 0.0, 252.45, 0.0, 0.0, 0.0\n ]),\n b: new Float32Array([\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 254.615, 0.0, 0.0, 0.0, 254.231, 0.0, 0.0, 0.0, 253.846,\n 0.0, 0.0, 0.0, 253.462, 0.0, 0.0, 0.0, 253.077, 0.0, 0.0, 0.0, 252.692, 0.0, 0.0, 0.0,\n 252.308, 0.0, 0.0, 0.0, 251.923, 0.0, 0.0, 0.0, 251.538, 0.0, 0.0, 0.0, 251.154, 0.0, 0.0,\n 0.0, 250.769, 0.0, 0.0, 0.0, 250.385, 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 249.615, 0.0, 0.0,\n 0.0, 249.231, 0.0, 0.0, 0.0, 248.846, 0.0, 0.0, 0.0, 248.462, 0.0, 0.0, 0.0, 248.077, 0.0,\n 0.0, 0.0, 247.692, 0.0, 0.0, 0.0, 247.308, 0.0, 0.0, 0.0, 246.923, 0.0, 0.0, 0.0, 246.538,\n 0.0, 0.0, 0.0, 246.154, 0.0, 0.0, 0.0, 245.769, 0.0, 0.0, 0.0, 245.385, 0.0, 0.0, 0.0, 245.0,\n 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 233.0, 0.0,\n 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0,\n 0.0, 218.0, 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0,\n 208.636, 0.0, 0.0, 0.0, 205.273, 0.0, 0.0, 0.0, 201.909, 0.0, 0.0, 0.0, 198.545, 0.0, 0.0,\n 0.0, 195.182, 0.0, 0.0, 0.0, 191.818, 0.0, 0.0, 0.0, 188.455, 0.0, 0.0, 0.0, 185.091, 0.0,\n 0.0, 0.0, 181.727, 0.0, 0.0, 0.0, 178.364, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0, 171.538, 0.0,\n 0.0, 0.0, 168.077, 0.0, 0.0, 0.0, 164.615, 0.0, 0.0, 0.0, 161.154, 0.0, 0.0, 0.0, 157.692,\n 0.0, 0.0, 0.0, 154.231, 0.0, 0.0, 0.0, 150.769, 0.0, 0.0, 0.0, 147.308, 0.0, 0.0, 0.0,\n 143.846, 0.0, 0.0, 0.0, 140.385, 0.0, 0.0, 0.0, 136.923, 0.0, 0.0, 0.0, 133.462, 0.0, 0.0,\n 0.0, 130.0, 0.0, 0.0, 0.0, 122.942, 0.0, 0.0, 0.0, 115.885, 0.0, 0.0, 0.0, 108.827, 0.0, 0.0,\n 0.0, 101.769, 0.0, 0.0, 0.0, 94.7115, 0.0, 0.0, 0.0, 87.6539, 0.0, 0.0, 0.0, 80.5962, 0.0,\n 0.0, 0.0, 73.5385, 0.0, 0.0, 0.0, 66.4808, 0.0, 0.0, 0.0, 59.4231, 0.0, 0.0, 0.0, 52.3654,\n 0.0, 0.0, 0.0, 45.3077, 0.0, 0.0, 0.0, 38.25, 0.0, 0.0, 0.0, 36.2885, 0.0, 0.0, 0.0, 34.3269,\n 0.0, 0.0, 0.0, 32.3654, 0.0, 0.0, 0.0, 30.4038, 0.0, 0.0, 0.0, 28.4423, 0.0, 0.0, 0.0,\n 26.4808, 0.0, 0.0, 0.0, 24.5192, 0.0, 0.0, 0.0, 22.5577, 0.0, 0.0, 0.0, 20.5962, 0.0, 0.0,\n 0.0, 18.6346, 0.0, 0.0, 0.0, 16.6731, 0.0, 0.0, 0.0, 14.7115, 0.0, 0.0, 0.0, 12.75, 0.0, 0.0,\n 0.0, 11.7692, 0.0, 0.0, 0.0, 10.7885, 0.0, 0.0, 0.0, 9.80769, 0.0, 0.0, 0.0, 8.82692, 0.0,\n 0.0, 0.0, 7.84615, 0.0, 0.0, 0.0, 6.86539, 0.0, 0.0, 0.0, 5.88461, 0.0, 0.0, 0.0, 4.90385,\n 0.0, 0.0, 0.0, 3.92308, 0.0, 0.0, 0.0, 2.94231, 0.0, 0.0, 0.0, 1.96154, 0.0, 0.0, 0.0,\n 0.980769, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.46154, 0.0, 0.0, 0.0, 4.92308, 0.0, 0.0, 0.0,\n 7.38462, 0.0, 0.0, 0.0, 9.84616, 0.0, 0.0, 0.0, 12.3077, 0.0, 0.0, 0.0, 14.7692, 0.0, 0.0,\n 0.0, 17.2308, 0.0, 0.0, 0.0, 19.6923, 0.0, 0.0, 0.0, 22.1538, 0.0, 0.0, 0.0, 24.6154, 0.0,\n 0.0, 0.0, 27.0769, 0.0, 0.0, 0.0, 29.5385, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0,\n 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0,\n 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0,\n 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 41.3077, 0.0, 0.0, 0.0,\n 50.6154, 0.0, 0.0, 0.0, 59.9231, 0.0, 0.0, 0.0, 69.2308, 0.0, 0.0, 0.0, 78.5385, 0.0, 0.0,\n 0.0, 87.8462, 0.0, 0.0, 0.0, 97.1539, 0.0, 0.0, 0.0, 106.462, 0.0, 0.0, 0.0, 115.769, 0.0,\n 0.0, 0.0, 125.077, 0.0, 0.0, 0.0, 134.385, 0.0, 0.0, 0.0, 143.692, 0.0, 0.0, 0.0, 153.0, 0.0,\n 0.0, 0.0, 156.923, 0.0, 0.0, 0.0, 160.846, 0.0, 0.0, 0.0, 164.769, 0.0, 0.0, 0.0, 168.692,\n 0.0, 0.0, 0.0, 172.615, 0.0, 0.0, 0.0, 176.538, 0.0, 0.0, 0.0, 180.462, 0.0, 0.0, 0.0,\n 184.385, 0.0, 0.0, 0.0, 188.308, 0.0, 0.0, 0.0, 192.231, 0.0, 0.0, 0.0, 196.154, 0.0, 0.0,\n 0.0, 200.077, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 205.962, 0.0, 0.0, 0.0, 207.923, 0.0, 0.0,\n 0.0, 209.885, 0.0, 0.0, 0.0, 211.846, 0.0, 0.0, 0.0, 213.808, 0.0, 0.0, 0.0, 215.769, 0.0,\n 0.0, 0.0, 217.731, 0.0, 0.0, 0.0, 219.692, 0.0, 0.0, 0.0, 221.654, 0.0, 0.0, 0.0, 223.615,\n 0.0, 0.0, 0.0, 225.577, 0.0, 0.0, 0.0, 227.538, 0.0, 0.0, 0.0, 229.5, 0.0, 0.0, 0.0, 230.481,\n 0.0, 0.0, 0.0, 231.462, 0.0, 0.0, 0.0, 232.442, 0.0, 0.0, 0.0, 233.423, 0.0, 0.0, 0.0,\n 234.404, 0.0, 0.0, 0.0, 235.385, 0.0, 0.0, 0.0, 236.365, 0.0, 0.0, 0.0, 237.346, 0.0, 0.0,\n 0.0, 238.327, 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 240.288, 0.0, 0.0, 0.0, 241.269, 0.0,\n 0.0, 0.0, 242.25, 0.0, 0.0, 0.0, 242.838, 0.0, 0.0, 0.0, 243.427, 0.0, 0.0, 0.0, 244.015, 0.0,\n 0.0, 0.0, 244.604, 0.0, 0.0, 0.0, 245.192, 0.0, 0.0, 0.0, 245.781, 0.0, 0.0, 0.0, 246.369,\n 0.0, 0.0, 0.0, 246.958, 0.0, 0.0, 0.0, 247.546, 0.0, 0.0, 0.0, 248.135, 0.0, 0.0, 0.0,\n 248.723, 0.0, 0.0, 0.0, 249.312, 0.0, 0.0, 0.0, 249.9, 0.0, 0.0, 0.0, 250.096, 0.0, 0.0, 0.0,\n 250.292, 0.0, 0.0, 0.0, 250.488, 0.0, 0.0, 0.0, 250.685, 0.0, 0.0, 0.0, 250.881, 0.0, 0.0,\n 0.0, 251.077, 0.0, 0.0, 0.0, 251.273, 0.0, 0.0, 0.0, 251.469, 0.0, 0.0, 0.0, 251.665, 0.0,\n 0.0, 0.0, 251.862, 0.0, 0.0, 0.0, 252.058, 0.0, 0.0, 0.0, 252.254, 0.0, 0.0, 0.0, 252.45, 0.0,\n 0.0, 0.0, 252.682, 0.0, 0.0, 0.0, 252.914, 0.0, 0.0, 0.0, 253.145, 0.0, 0.0, 0.0, 253.377,\n 0.0, 0.0, 0.0, 253.609, 0.0, 0.0, 0.0, 253.841, 0.0, 0.0, 0.0, 254.073, 0.0, 0.0, 0.0,\n 254.305, 0.0, 0.0, 0.0, 254.536, 0.0, 0.0, 0.0, 254.768, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0\n ]),\n },\n cmb: {\n name: 'cmb',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 18.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0,\n 30.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 54.0, 0.0,\n 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0,\n 85.0, 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0, 97.0, 0.0, 0.0, 0.0, 103.0, 0.0, 0.0, 0.0, 109.0,\n 0.0, 0.0, 0.0, 115.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 133.0, 0.0,\n 0.0, 0.0, 139.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0, 0.0, 151.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0,\n 0.0, 163.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0, 0.0, 176.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0,\n 188.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 206.0, 0.0, 0.0, 0.0, 212.0,\n 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 236.0, 0.0,\n 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 248.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 251.0, 0.0, 0.0,\n 0.0, 247.0, 0.0, 0.0, 0.0, 244.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0,\n 233.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 218.0,\n 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 204.0, 0.0,\n 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 190.0, 0.0, 0.0,\n 0.0, 186.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 179.0, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0,\n 172.0, 0.0, 0.0, 0.0, 168.0, 0.0, 0.0, 0.0, 164.0, 0.0, 0.0, 0.0, 161.0, 0.0, 0.0, 0.0, 157.0,\n 0.0, 0.0, 0.0, 154.0, 0.0, 0.0, 0.0, 150.0, 0.0, 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 143.0, 0.0,\n 0.0, 0.0, 139.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0, 128.0, 0.0, 0.0,\n 0.0, 125.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 118.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0,\n 110.0, 0.0, 0.0, 0.0, 107.0, 0.0, 0.0, 0.0, 103.0, 0.0, 0.0, 0.0, 100.0, 0.0, 0.0, 0.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 10.0, 0.0,\n 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 18.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0,\n 24.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 34.0, 0.0,\n 0.0, 0.0, 37.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0,\n 48.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 56.0, 0.0, 0.0, 0.0, 58.0, 0.0,\n 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 69.0, 0.0, 0.0, 0.0,\n 72.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 82.0, 0.0,\n 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 88.0, 0.0, 0.0, 0.0, 90.0, 0.0, 0.0, 0.0, 93.0, 0.0, 0.0, 0.0,\n 96.0, 0.0, 0.0, 0.0, 98.0, 0.0, 0.0, 0.0, 101.0, 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 106.0,\n 0.0, 0.0, 0.0, 109.0, 0.0, 0.0, 0.0, 112.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0, 117.0, 0.0,\n 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 124.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0,\n 0.0, 129.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0, 134.0, 0.0, 0.0, 0.0, 137.0, 0.0, 0.0, 0.0,\n 139.0, 0.0, 0.0, 0.0, 142.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 150.0,\n 0.0, 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 155.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 160.0, 0.0,\n 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0,\n 0.0, 172.0, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0, 177.0, 0.0, 0.0, 0.0, 180.0, 0.0, 0.0, 0.0,\n 182.0, 0.0, 0.0, 0.0, 185.0, 0.0, 0.0, 0.0, 188.0, 0.0, 0.0, 0.0, 190.0, 0.0, 0.0, 0.0, 193.0,\n 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 203.0, 0.0,\n 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0,\n 0.0, 215.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0,\n 221.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 223.0,\n 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 224.0, 0.0,\n 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0,\n 0.0, 226.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0,\n 228.0, 0.0, 0.0, 0.0, 228.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0,\n 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 231.0, 0.0,\n 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0,\n 0.0, 233.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 234.0, 0.0, 0.0, 0.0,\n 234.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 236.0,\n 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 237.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 234.0, 0.0,\n 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0,\n 0.0, 227.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0,\n 222.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 219.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 217.0,\n 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 214.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 211.0, 0.0,\n 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 206.0, 0.0, 0.0,\n 0.0, 205.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 202.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0,\n 199.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 194.0,\n 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 190.0, 0.0, 0.0, 0.0, 189.0, 0.0,\n 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 185.0, 0.0, 0.0, 0.0, 183.0, 0.0, 0.0,\n 0.0, 182.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0, 180.0, 0.0, 0.0, 0.0, 177.0, 0.0, 0.0, 0.0,\n 175.0, 0.0, 0.0, 0.0, 172.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 165.0,\n 0.0, 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 160.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 155.0, 0.0,\n 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 150.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0,\n 0.0, 142.0, 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 137.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0,\n 132.0, 0.0, 0.0, 0.0, 130.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 125.0, 0.0, 0.0, 0.0, 122.0,\n 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 117.0, 0.0, 0.0, 0.0, 115.0, 0.0, 0.0, 0.0, 112.0, 0.0,\n 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 107.0, 0.0, 0.0, 0.0, 105.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0,\n 0.0, 100.0, 0.0, 0.0, 0.0, 97.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 92.0, 0.0, 0.0, 0.0,\n 90.0, 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 82.0, 0.0, 0.0, 0.0, 80.0, 0.0,\n 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 73.0, 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0,\n 69.0, 0.0, 0.0, 0.0, 68.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 62.0, 0.0,\n 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0,\n 54.0, 0.0, 0.0, 0.0, 52.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 47.0, 0.0,\n 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 43.0, 0.0, 0.0, 0.0, 41.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0,\n 38.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 34.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 31.0, 0.0,\n 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0,\n 22.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 15.0, 0.0,\n 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0,\n 6.0, 0.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0\n ]),\n b: new Float32Array([\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 254.0, 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 252.0, 0.0, 0.0, 0.0, 251.0,\n 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 249.0, 0.0, 0.0, 0.0, 248.0, 0.0, 0.0, 0.0, 247.0, 0.0,\n 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 244.0, 0.0, 0.0,\n 0.0, 243.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0,\n 239.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 237.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 236.0,\n 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 234.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 232.0, 0.0,\n 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 228.0, 0.0, 0.0,\n 0.0, 227.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0,\n 224.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 220.0,\n 0.0, 0.0, 0.0, 219.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 217.0, 0.0, 0.0, 0.0, 217.0, 0.0,\n 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 206.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0,\n 0.0, 191.0, 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0, 176.0, 0.0, 0.0, 0.0,\n 171.0, 0.0, 0.0, 0.0, 166.0, 0.0, 0.0, 0.0, 161.0, 0.0, 0.0, 0.0, 156.0, 0.0, 0.0, 0.0, 151.0,\n 0.0, 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 141.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0, 0.0, 131.0, 0.0,\n 0.0, 0.0, 126.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 116.0, 0.0, 0.0, 0.0, 111.0, 0.0, 0.0,\n 0.0, 105.0, 0.0, 0.0, 0.0, 100.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 90.0, 0.0, 0.0, 0.0,\n 85.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0, 0.0, 65.0, 0.0,\n 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0,\n 40.0, 0.0, 0.0, 0.0, 35.0, 0.0, 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 20.0, 0.0,\n 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0\n ]),\n },\n\n rainbow: {\n name: 'rainbow',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 18.0, 0.0,\n 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 31.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0,\n 40.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 54.0, 0.0, 0.0, 0.0, 58.0, 0.0,\n 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 68.0, 0.0, 0.0, 0.0, 69.0, 0.0, 0.0, 0.0,\n 72.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 79.0, 0.0, 0.0, 0.0, 80.0, 0.0,\n 0.0, 0.0, 82.0, 0.0, 0.0, 0.0, 83.0, 0.0, 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0,\n 86.0, 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 88.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0, 0.0, 87.0, 0.0,\n 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0,\n 84.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 83.0, 0.0, 0.0, 0.0, 79.0, 0.0, 0.0, 0.0, 78.0, 0.0,\n 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0, 0.0,\n 68.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 58.0, 0.0, 0.0, 0.0, 55.0, 0.0,\n 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 43.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0,\n 36.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 16.0, 0.0,\n 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 21.0, 0.0,\n 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0,\n 46.0, 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 67.0, 0.0,\n 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 89.0, 0.0, 0.0, 0.0,\n 93.0, 0.0, 0.0, 0.0, 97.0, 0.0, 0.0, 0.0, 101.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 114.0,\n 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 135.0, 0.0,\n 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0,\n 0.0, 161.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0,\n 182.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 203.0,\n 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 225.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 246.0, 0.0, 0.0,\n 0.0, 250.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 4.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 25.0,\n 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0,\n 0.0, 51.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 72.0,\n 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 89.0, 0.0, 0.0, 0.0, 93.0, 0.0, 0.0,\n 0.0, 97.0, 0.0, 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0,\n 119.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0, 140.0,\n 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 161.0, 0.0,\n 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 174.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0,\n 0.0, 187.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0,\n 208.0, 0.0, 0.0, 0.0, 216.0, 0.0, 0.0, 0.0, 220.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 229.0,\n 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 250.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 233.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 216.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0,\n 0.0, 208.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0,\n 187.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 174.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0, 0.0, 165.0,\n 0.0, 0.0, 0.0, 161.0, 0.0, 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 144.0, 0.0,\n 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0,\n 0.0, 119.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0, 0.0,\n 97.0, 0.0, 0.0, 0.0, 89.0, 0.0, 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 76.0, 0.0,\n 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0,\n 51.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 34.0, 0.0, 0.0, 0.0, 29.0, 0.0,\n 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0\n ]),\n b: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 7.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 14.0, 0.0,\n 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 28.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0,\n 38.0, 0.0, 0.0, 0.0, 43.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 59.0, 0.0,\n 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 68.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0,\n 81.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 100.0,\n 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 109.0, 0.0, 0.0, 0.0, 113.0, 0.0, 0.0, 0.0, 118.0, 0.0,\n 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0,\n 0.0, 141.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0, 0.0, 150.0, 0.0, 0.0, 0.0, 154.0, 0.0, 0.0, 0.0,\n 159.0, 0.0, 0.0, 0.0, 163.0, 0.0, 0.0, 0.0, 168.0, 0.0, 0.0, 0.0, 173.0, 0.0, 0.0, 0.0, 177.0,\n 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 195.0, 0.0,\n 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0, 214.0, 0.0, 0.0,\n 0.0, 218.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0, 0.0,\n 236.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 246.0, 0.0,\n 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0,\n 0.0, 220.0, 0.0, 0.0, 0.0, 216.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0,\n 199.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 178.0,\n 0.0, 0.0, 0.0, 174.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 157.0, 0.0,\n 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0,\n 0.0, 131.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0,\n 110.0, 0.0, 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0, 0.0, 97.0, 0.0, 0.0, 0.0, 89.0,\n 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0,\n 0.0, 63.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 42.0,\n 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 34.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0,\n 0.0, 16.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0\n ]),\n },\n eosb: {\n name: 'eosb',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 18.0,\n 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 49.0, 0.0, 0.0,\n 0.0, 57.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 81.0, 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0,\n 100.0, 0.0, 0.0, 0.0, 109.0, 0.0, 0.0, 0.0, 118.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 136.0,\n 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 139.0, 0.0, 0.0, 0.0, 163.0, 0.0, 0.0, 0.0, 173.0, 0.0,\n 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0,\n 0.0, 218.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0,\n 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 251.0, 0.0, 0.0, 0.0, 249.0, 0.0,\n 0.0, 0.0, 247.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0,\n 0.0, 215.0, 0.0, 0.0, 0.0, 214.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 234.0, 0.0, 0.0, 0.0,\n 232.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 228.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 224.0,\n 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 216.0, 0.0,\n 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0,\n 0.0, 207.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0,\n 179.0, 0.0, 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 192.0,\n 0.0, 0.0, 0.0, 190.0, 0.0, 0.0, 0.0, 188.0, 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 184.0, 0.0,\n 0.0, 0.0, 164.0, 0.0, 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 176.0, 0.0, 0.0,\n 0.0, 175.0, 0.0, 0.0, 0.0, 173.0, 0.0, 0.0, 0.0, 171.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0,\n 167.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0, 0.0, 159.0,\n 0.0, 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 156.0, 0.0, 0.0, 0.0, 154.0, 0.0, 0.0, 0.0, 152.0, 0.0,\n 0.0, 0.0, 150.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 130.0, 0.0, 0.0,\n 0.0, 128.0, 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 138.0, 0.0, 0.0, 0.0, 137.0, 0.0, 0.0, 0.0,\n 135.0, 0.0, 0.0, 0.0, 133.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 129.0, 0.0, 0.0, 0.0, 127.0,\n 0.0, 0.0, 0.0, 113.0, 0.0, 0.0, 0.0, 111.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 119.0, 0.0,\n 0.0, 0.0, 117.0, 0.0, 0.0, 0.0, 117.0, 0.0, 0.0, 0.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.0,\n 0.0, 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 31.0, 0.0, 0.0, 0.0, 39.0, 0.0, 0.0,\n 0.0, 47.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 79.0,\n 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 103.0, 0.0, 0.0, 0.0, 111.0, 0.0,\n 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0, 129.0, 0.0, 0.0,\n 0.0, 136.0, 0.0, 0.0, 0.0, 159.0, 0.0, 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0,\n 183.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 215.0,\n 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 247.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 250.0,\n 0.0, 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 233.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0,\n 0.0, 212.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0,\n 195.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 160.0,\n 0.0, 0.0, 0.0, 156.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 161.0, 0.0,\n 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0,\n 0.0, 140.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 118.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0,\n 125.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 116.0,\n 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0, 112.0, 0.0, 0.0, 0.0, 99.0, 0.0, 0.0, 0.0, 97.0, 0.0,\n 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0, 0.0, 99.0, 0.0, 0.0,\n 0.0, 97.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 93.0, 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0, 80.0,\n 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 82.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0,\n 0.0, 78.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 70.0,\n 0.0, 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 61.0, 0.0, 0.0,\n 0.0, 59.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 50.0,\n 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0,\n 0.0, 40.0, 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 31.0,\n 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0,\n 0.0, 21.0, 0.0, 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 14.0, 0.0, 0.0, 0.0, 12.0,\n 0.0, 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0,\n 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0\n ]),\n b: new Float32Array([\n 116.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 136.0,\n 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 153.0, 0.0,\n 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0, 0.0, 149.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0,\n 0.0, 174.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0,\n 191.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 183.0, 0.0, 0.0, 0.0, 187.0,\n 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 216.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 225.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0,\n 0.0, 221.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0, 0.0,\n 239.0, 0.0, 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 207.0,\n 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 172.0, 0.0, 0.0, 0.0, 164.0, 0.0, 0.0, 0.0, 175.0, 0.0,\n 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 159.0, 0.0, 0.0, 0.0, 151.0, 0.0, 0.0, 0.0, 143.0, 0.0, 0.0,\n 0.0, 135.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 100.0, 0.0, 0.0, 0.0,\n 93.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 79.0, 0.0, 0.0, 0.0, 71.0, 0.0,\n 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 39.0, 0.0, 0.0, 0.0,\n 28.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 7.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0\n ]),\n },\n cubehelix: {\n name: 'cubehelix',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0,\n 0.0, 8.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 13.0,\n 0.0, 0.0, 0.0, 14.0, 0.0, 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 18.0, 0.0, 0.0,\n 0.0, 19.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 22.0,\n 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0,\n 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0,\n 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0,\n 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0,\n 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0,\n 0.0, 24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 23.0,\n 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0,\n 0.0, 22.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0,\n 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0,\n 0.0, 20.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0,\n 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0,\n 0.0, 23.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 26.0,\n 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 28.0, 0.0, 0.0, 0.0, 30.0, 0.0, 0.0,\n 0.0, 31.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 35.0, 0.0, 0.0, 0.0, 36.0,\n 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 39.0, 0.0, 0.0, 0.0, 41.0, 0.0, 0.0, 0.0, 43.0, 0.0, 0.0,\n 0.0, 45.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 49.0, 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 53.0,\n 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 62.0, 0.0, 0.0,\n 0.0, 65.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 75.0,\n 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 81.0, 0.0, 0.0, 0.0, 83.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0,\n 0.0, 89.0, 0.0, 0.0, 0.0, 92.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 98.0, 0.0, 0.0, 0.0,\n 101.0, 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 107.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 113.0,\n 0.0, 0.0, 0.0, 116.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 126.0, 0.0,\n 0.0, 0.0, 129.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0, 138.0, 0.0, 0.0,\n 0.0, 141.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 150.0, 0.0, 0.0, 0.0,\n 153.0, 0.0, 0.0, 0.0, 155.0, 0.0, 0.0, 0.0, 158.0, 0.0, 0.0, 0.0, 161.0, 0.0, 0.0, 0.0, 164.0,\n 0.0, 0.0, 0.0, 166.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0, 171.0, 0.0, 0.0, 0.0, 174.0, 0.0,\n 0.0, 0.0, 176.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0, 183.0, 0.0, 0.0,\n 0.0, 185.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 189.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0,\n 193.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 199.0,\n 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0, 202.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 204.0, 0.0,\n 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 206.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0,\n 0.0, 209.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0,\n 211.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0,\n 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0,\n 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0,\n 0.0, 210.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0,\n 208.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 206.0,\n 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 203.0, 0.0,\n 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 202.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0,\n 0.0, 200.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0,\n 197.0, 0.0, 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 195.0,\n 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 194.0, 0.0,\n 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0,\n 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0,\n 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 195.0,\n 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 197.0, 0.0,\n 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0,\n 0.0, 202.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0,\n 206.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 212.0,\n 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 217.0, 0.0, 0.0, 0.0, 218.0, 0.0,\n 0.0, 0.0, 220.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0,\n 0.0, 227.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0, 0.0,\n 234.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 242.0,\n 0.0, 0.0, 0.0, 244.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0, 0.0, 249.0, 0.0,\n 0.0, 0.0, 251.0, 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 255.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0,\n 0.0, 2.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 5.0, 0.0,\n 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 7.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 9.0,\n 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0,\n 0.0, 13.0, 0.0, 0.0, 0.0, 14.0, 0.0, 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 18.0,\n 0.0, 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0,\n 0.0, 24.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 28.0, 0.0, 0.0, 0.0, 29.0,\n 0.0, 0.0, 0.0, 31.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 34.0, 0.0, 0.0, 0.0, 35.0, 0.0, 0.0,\n 0.0, 37.0, 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0, 41.0, 0.0, 0.0, 0.0, 43.0,\n 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0,\n 0.0, 52.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 58.0,\n 0.0, 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 62.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0,\n 0.0, 67.0, 0.0, 0.0, 0.0, 69.0, 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0, 73.0, 0.0, 0.0, 0.0, 74.0,\n 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 79.0, 0.0, 0.0, 0.0, 81.0, 0.0, 0.0,\n 0.0, 83.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0, 0.0, 88.0, 0.0, 0.0, 0.0, 89.0,\n 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0, 92.0, 0.0, 0.0, 0.0, 94.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0,\n 0.0, 97.0, 0.0, 0.0, 0.0, 98.0, 0.0, 0.0, 0.0, 99.0, 0.0, 0.0, 0.0, 101.0, 0.0, 0.0, 0.0,\n 102.0, 0.0, 0.0, 0.0, 103.0, 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 107.0,\n 0.0, 0.0, 0.0, 108.0, 0.0, 0.0, 0.0, 109.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 111.0, 0.0,\n 0.0, 0.0, 112.0, 0.0, 0.0, 0.0, 113.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0,\n 0.0, 115.0, 0.0, 0.0, 0.0, 116.0, 0.0, 0.0, 0.0, 116.0, 0.0, 0.0, 0.0, 117.0, 0.0, 0.0, 0.0,\n 118.0, 0.0, 0.0, 0.0, 118.0, 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 120.0,\n 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0,\n 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0,\n 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0,\n 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0,\n 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0,\n 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0,\n 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0,\n 121.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0,\n 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0,\n 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0,\n 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0,\n 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 124.0,\n 0.0, 0.0, 0.0, 124.0, 0.0, 0.0, 0.0, 125.0, 0.0, 0.0, 0.0, 125.0, 0.0, 0.0, 0.0, 126.0, 0.0,\n 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 128.0, 0.0, 0.0, 0.0, 129.0, 0.0, 0.0,\n 0.0, 130.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0,\n 133.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0, 0.0, 137.0, 0.0, 0.0, 0.0, 138.0,\n 0.0, 0.0, 0.0, 139.0, 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 142.0, 0.0, 0.0, 0.0, 143.0, 0.0,\n 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 149.0, 0.0, 0.0,\n 0.0, 150.0, 0.0, 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 154.0, 0.0, 0.0, 0.0, 155.0, 0.0, 0.0, 0.0,\n 157.0, 0.0, 0.0, 0.0, 158.0, 0.0, 0.0, 0.0, 160.0, 0.0, 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 164.0,\n 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0, 171.0, 0.0,\n 0.0, 0.0, 172.0, 0.0, 0.0, 0.0, 174.0, 0.0, 0.0, 0.0, 176.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0,\n 0.0, 180.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 183.0, 0.0, 0.0, 0.0, 185.0, 0.0, 0.0, 0.0,\n 187.0, 0.0, 0.0, 0.0, 189.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 194.0,\n 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 202.0, 0.0,\n 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0,\n 0.0, 210.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0,\n 216.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 219.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 222.0,\n 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 228.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0,\n 0.0, 233.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 237.0, 0.0, 0.0, 0.0,\n 238.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 241.0,\n 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 244.0, 0.0, 0.0, 0.0, 244.0, 0.0,\n 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0,\n 0.0, 248.0, 0.0, 0.0, 0.0, 248.0, 0.0, 0.0, 0.0, 249.0, 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0,\n 250.0, 0.0, 0.0, 0.0, 251.0, 0.0, 0.0, 0.0, 251.0, 0.0, 0.0, 0.0, 252.0, 0.0, 0.0, 0.0, 252.0,\n 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 254.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0\n ]),\n b: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0,\n 0.0, 8.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 15.0,\n 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0,\n 0.0, 25.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 31.0, 0.0, 0.0, 0.0, 33.0,\n 0.0, 0.0, 0.0, 35.0, 0.0, 0.0, 0.0, 37.0, 0.0, 0.0, 0.0, 39.0, 0.0, 0.0, 0.0, 41.0, 0.0, 0.0,\n 0.0, 43.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 50.0,\n 0.0, 0.0, 0.0, 52.0, 0.0, 0.0, 0.0, 54.0, 0.0, 0.0, 0.0, 56.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0,\n 0.0, 59.0, 0.0, 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 62.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 65.0,\n 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 69.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0,\n 0.0, 71.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 73.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 74.0,\n 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0,\n 0.0, 77.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0,\n 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0,\n 0.0, 77.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 76.0,\n 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 73.0, 0.0, 0.0,\n 0.0, 73.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0, 0.0, 69.0,\n 0.0, 0.0, 0.0, 68.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0,\n 0.0, 65.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 60.0,\n 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 58.0, 0.0, 0.0, 0.0, 58.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0,\n 0.0, 56.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 54.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 52.0,\n 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 49.0, 0.0, 0.0,\n 0.0, 49.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 47.0,\n 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0,\n 0.0, 46.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 47.0,\n 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 49.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0,\n 0.0, 50.0, 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 52.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 55.0,\n 0.0, 0.0, 0.0, 56.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 60.0, 0.0, 0.0,\n 0.0, 62.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 65.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 69.0,\n 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0,\n 0.0, 81.0, 0.0, 0.0, 0.0, 83.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0, 0.0, 88.0, 0.0, 0.0, 0.0, 91.0,\n 0.0, 0.0, 0.0, 94.0, 0.0, 0.0, 0.0, 96.0, 0.0, 0.0, 0.0, 99.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0,\n 0.0, 105.0, 0.0, 0.0, 0.0, 108.0, 0.0, 0.0, 0.0, 111.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0,\n 117.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 124.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 130.0,\n 0.0, 0.0, 0.0, 133.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 143.0, 0.0,\n 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 149.0, 0.0, 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 156.0, 0.0, 0.0,\n 0.0, 159.0, 0.0, 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0,\n 172.0, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0, 184.0,\n 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 189.0, 0.0, 0.0, 0.0, 192.0, 0.0, 0.0, 0.0, 195.0, 0.0,\n 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0,\n 0.0, 207.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 214.0, 0.0, 0.0, 0.0,\n 216.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 220.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 224.0,\n 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 230.0, 0.0,\n 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 234.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0,\n 0.0, 236.0, 0.0, 0.0, 0.0, 237.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0,\n 239.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 242.0,\n 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0,\n 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0,\n 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0,\n 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 241.0,\n 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 240.0, 0.0,\n 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0,\n 0.0, 239.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0,\n 238.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 238.0,\n 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 239.0, 0.0,\n 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0,\n 0.0, 241.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0,\n 244.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0, 0.0, 248.0,\n 0.0, 0.0, 0.0, 249.0, 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 252.0, 0.0, 0.0, 0.0, 253.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0\n ]),\n },\n hot: {\n name: 'hot',\n r: new Float32Array([\n 0.0, 4.0, 8.0, 12.0, 16.0, 20.0, 24.0, 28.0, 32.0, 36.0, 40.0, 44.0, 48.0, 52.0, 56.0, 60.0,\n 64.0, 68.0, 72.0, 76.0, 80.0, 84.0, 88.0, 92.0, 96.0, 100.0, 104.0, 108.0, 112.0, 116.0,\n 120.0, 124.0, 128.0, 132.0, 136.0, 140.0, 144.0, 148.0, 152.0, 156.0, 160.0, 164.0, 168.0,\n 172.0, 176.0, 180.0, 184.0, 188.0, 192.0, 196.0, 200.0, 204.0, 208.0, 212.0, 216.0, 220.0,\n 224.0, 228.0, 232.0, 236.0, 240.0, 244.0, 248.0, 252.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.30769,\n 4.61538, 6.92308, 9.23077, 11.5385, 13.8462, 16.1538, 18.4615, 20.7692, 23.0769, 25.3846, 27.6923,\n 30.0, 32.3077, 34.6154, 36.9231, 39.2308, 41.5385, 43.8462, 46.1538, 48.4615, 50.7692, 53.0769,\n 55.3846, 57.6923, 60.0, 62.3077, 64.6154, 66.9231, 69.2308, 71.5385, 73.8462, 76.1538, 78.4615,\n 80.7692, 83.0769, 85.3846, 87.6923, 90.0, 92.3077, 94.6154, 96.9231, 99.2308, 101.538, 103.846, 106.154,\n 108.462, 110.769, 113.077, 115.385, 117.692, 120.0, 122.308, 124.615, 126.923, 129.231, 131.538,\n 133.846, 136.154, 138.462, 140.769, 143.077, 145.385, 147.692, 150.0, 152.308, 154.615, 156.923,\n 159.231, 161.538, 163.846, 166.154, 168.462, 170.769, 173.077, 175.385, 177.692, 180.0, 182.308,\n 184.615, 186.923, 189.231, 191.538, 193.846, 196.154, 198.462, 200.769, 203.077, 205.385,\n 207.692, 210.0, 212.308, 214.615, 216.923, 219.231, 221.538, 223.846, 226.154, 228.462, 230.769,\n 233.077, 235.385, 237.692, 240.0, 242.308, 244.615, 246.923, 249.231, 251.538, 253.846, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0\n ]),\n b: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.980769,\n 1.96154, 2.94231, 3.92308, 4.90385, 5.88461, 6.86539, 7.84615, 8.82692, 9.80769, 10.7885, 11.7692, 12.75,\n 13.7308, 14.7115, 15.6923, 16.6731, 17.6538, 18.6346, 19.6154, 20.5962, 21.5769, 22.5577, 23.5385,\n 24.5192, 25.5, 26.4808, 27.4615, 28.4423, 29.4231, 30.4038, 31.3846, 32.3654, 33.3462, 34.3269,\n 35.3077, 36.2885, 37.2692, 38.25, 39.2308, 40.2115, 41.1923, 42.1731, 43.1538, 44.1346, 45.1154, 46.0962,\n 47.0769, 48.0577, 49.0385, 50.0192, 51.0, 51.9808, 52.9615, 53.9423, 54.9231, 55.9038, 56.8846,\n 57.8654, 58.8462, 59.8269, 60.8077, 61.7885, 62.7692, 63.75, 64.7308, 65.7115, 66.6923, 67.6731,\n 68.6538, 69.6346, 70.6154, 71.5962, 72.5769, 73.5577, 74.5385, 75.5192, 76.5, 77.4808, 78.4615, 79.4423,\n 80.4231, 81.4038, 82.3846, 83.3654, 84.3462, 85.3269, 86.3077, 87.2885, 88.2692, 89.25, 90.2308,\n 91.2115, 92.1923, 93.1731, 94.1538, 95.1346, 96.1154, 97.0962, 98.0769, 99.0577, 100.038,\n 101.019, 102.0, 102.981, 103.962, 104.942, 105.923, 106.904, 107.885, 108.865, 109.846, 110.827,\n 111.808, 112.788, 113.769, 114.75, 115.731, 116.711, 117.692, 118.673, 119.654, 120.634,\n 121.615, 122.596, 123.577, 124.557, 125.538, 126.519, 127.5\n ])\n },\n gray: {\n name: 'gray',\n r: new Float32Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,\n 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,\n 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,\n 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,\n 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,\n 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,\n 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,\n 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,\n 165, 166, 167, 168, 169, 170, 171, 172,\n 173, 174, 175, 176, 177,\n 178, 179,\n 180,\n 181,\n 182,\n 183,\n 184,\n 185,\n 186,\n 187,\n 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,\n 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,\n 213, 214, 215, 216, 217, 218, 219, 220,\n 221, 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 228,\n 229,\n 230,\n 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,\n 243, 244, 245, 246, 247, 248, 249, 250,\n 251,\n 252,\n 253,\n 254,\n 255\n ]),\n g: new Float32Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,\n 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,\n 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 100,\n 101,\n 102,\n 103,\n 104,\n 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,\n 115,\n 116,\n 117,\n 118,\n 119,\n 120,\n 121,\n 122,\n 123,\n 124,\n 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,\n 135,\n 136,\n 137,\n 138,\n 139,\n 140,\n 141,\n 142,\n 143,\n 144,\n 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,\n 155,\n 156,\n 157,\n 158,\n 159,\n 160,\n 161,\n 162,\n 163,\n 164,\n 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,\n 175,\n 176,\n 177,\n 178,\n 179,\n 180,\n 181,\n 182,\n 183,\n 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,\n 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,\n 207,\n 208,\n 209,\n 210,\n 211,\n 212,\n 213,\n 214,\n 215,\n 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,\n 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,\n 238,\n 239,\n 240,\n 241,\n 242,\n 243,\n 244,\n 245,\n 246,\n 247, 248, 249, 250,\n 251,\n 252,\n 253,\n 254,\n 255\n ]),\n b: new Float32Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65,\n 66,\n 67,\n 68,\n 69,\n 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,\n 117,\n 118,\n 119,\n 120,\n 121,\n 122,\n 123,\n 124,\n 125,\n 126,\n 127,\n 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,\n 145,\n 146,\n 147,\n 148,\n 149,\n 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,\n 165,\n 166,\n 167,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,\n 193,\n 194,\n 195,\n 196,\n 197,\n 198,\n 199,\n 200,\n 201,\n 202,\n 203,\n 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 228,\n 229,\n 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,\n 241,\n 242,\n 243,\n 244,\n 245,\n 246,\n 247,\n 248,\n 249,\n 250,\n 251,\n 252,\n 253,\n 254,\n 255\n ])\n },\n}\n\nexport default ColorMaps;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n'use strict'\n/**\n * @author Fabrizio Giordano (Fab77)\n */\n\nexport type DetailValue = string | number;\n\nexport enum ColumnType {\n STRING = \"STRING\",\n NUMBER = \"NUMBER\",\n GEOM_RA = \"GEOM_RA\",\n GEOM_DEC = \"GEOM_DEC\",\n GEOM_FOOTPRINT = \"GEOM_FOOTPRINT\",\n MAIN_NAME = \"MAIN_NAME\"\n}\n\nexport interface MetadataInit {\n index: number;\n name: string;\n columnType: ColumnType;\n description?: string; // default: \"\"\n unit: string\n details?: Map<string, DetailValue>;\n}\n\nexport class MetadataColumn {\n \n private _index: number // mandatory\n\n private _name: string // mandatory\n private _description: string = \"\" // mandatory default \"\"\n private _columnType: ColumnType // mandatory\n private _unit: string // mandatory\n private _details: Map<string, string | number> = new Map()\n\n constructor(init: MetadataInit) {\n \n if (!init.name) throw new Error(`No name column defined.`)\n this._name = init.name\n\n if (init.index < 0 || isNaN(init.index)) throw new Error(`No index column defined.`)\n this._index = init.index\n \n this._columnType = init.columnType ?? ColumnType.STRING;\n\n this._unit = init.unit ?? \"\"\n\n this._description = init.description ?? \"\"\n \n if (init.details) this._details = new Map(init.details)\n }\n\n get details(): ReadonlyMap<string, DetailValue> {\n return new Map(this._details);\n }\n\n /** Get any detail; optional fallback. */\n getDetail(key: string, fallback?: DetailValue): DetailValue | undefined {\n return this._details.has(key) ? this._details.get(key) : fallback;\n }\n\n /** Type-leaning getters with fallbacks. */\n getString(key: string, fallback = \"\"): string {\n const v = this._details.get(key);\n return typeof v === \"string\" ? v : fallback;\n }\n\n getNumber(key: string, fallback = NaN): number {\n const v = this._details.get(key);\n return typeof v === \"number\" ? v : fallback;\n }\n\n /** Set or update a detail. */\n setDetail(key: string, value: DetailValue): void {\n this._details.set(key, value);\n }\n\n /** Add many details at once. */\n setDetails(details: Record<string, DetailValue> | Map<string, DetailValue>): void {\n const entries = details instanceof Map ? details.entries() : Object.entries(details);\n for (const [k, v] of entries) this._details.set(k, v);\n }\n\n /** Keys, values, entries (as arrays). */\n detailKeys(): string[] {\n return Array.from(this._details.keys());\n }\n\n detailValues(): DetailValue[] {\n return Array.from(this._details.values());\n }\n\n detailEntries(): [string, DetailValue][] {\n return Array.from(this._details.entries());\n }\n\n // ---------- core getters/setters ----------\n get name(): string {\n return this._name;\n }\n\n get description(): string {\n return this._description;\n }\n\n get columnType(): string {\n return this._columnType;\n }\n\n get index(): number | undefined {\n return this._index;\n }\n\n get unit(): string {\n return this._unit\n }\n\n // ---------- serialisation ----------\n toJSON(): Record<string, unknown> {\n return {\n name: this._name,\n description: this._description,\n columnType: this._columnType,\n index: this._index,\n unit: this._unit,\n details: Object.fromEntries(this._details),\n };\n }\n\n\n}","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { ColumnType, MetadataColumn } from \"./MetadataColumn.js\"\n\nexport class MetadataManager {\n\n static STANDARD_SIZE: string = \"STANDARD_SIZE\"\n static STANDARD_HUE: string = \"STANDARD_HUE\"\n\n private _outlineColumnList: MetadataColumn[] = []\n private _raColumnList: MetadataColumn[] = []\n private _decColumnList: MetadataColumn[] = []\n private _shapeColumnList: MetadataColumn[] = []\n private _hueColumnList: MetadataColumn[] = []\n\n private _selectedOutlineColumn?: MetadataColumn\n private _selectedRaColumn?: MetadataColumn\n private _selectedDecColumn?: MetadataColumn\n private _selectedShapeColumn?: MetadataColumn\n private _selectedHueColumn?: MetadataColumn\n private _selectedNameColumn?: MetadataColumn\n\n private _columns: MetadataColumn[] = []\n\n constructor(metadataColumns: MetadataColumn[]) {\n metadataColumns.forEach(c => {\n if (c.columnType == ColumnType.NUMBER) {\n this.addHueColumn(c)\n this.addShapeColumn(c)\n }\n if (c.columnType == ColumnType.GEOM_RA) {\n this.addRaColumn(c)\n }\n if (c.columnType == ColumnType.GEOM_DEC) {\n this.addDecColumn(c)\n }\n if (c.columnType == ColumnType.GEOM_FOOTPRINT) {\n this.addOutlineColumn(c)\n }\n if (c.columnType == ColumnType.MAIN_NAME) {\n this._selectedNameColumn = c\n }\n\n this._columns.push(c)\n })\n\n // if (!this._selectedNameColumn) {\n // throw new Error(\"No name column found\")\n // }\n }\n\n addOutlineColumn(outlineColumn: MetadataColumn) {\n this._outlineColumnList.push(outlineColumn)\n this._selectedOutlineColumn = outlineColumn\n }\n\n addRaColumn(column: MetadataColumn) {\n this._selectedRaColumn = this._selectedRaColumn || column\n this._raColumnList.push(column)\n }\n\n addDecColumn(column: MetadataColumn) {\n this._selectedDecColumn = this._selectedDecColumn || column\n this._decColumnList.push(column)\n }\n\n addHueColumn(column: MetadataColumn) {\n this._hueColumnList.push(column)\n }\n\n addShapeColumn(column: MetadataColumn) {\n this._shapeColumnList.push(column)\n }\n\n get selectedRaColumn(): MetadataColumn | undefined {\n return this._selectedRaColumn\n }\n get selectedDecColumn(): MetadataColumn | undefined {\n return this._selectedDecColumn\n }\n get selectedHueColumn(): MetadataColumn | undefined {\n return this._selectedHueColumn\n }\n get selectedShapeColumn(): MetadataColumn | undefined {\n return this._selectedShapeColumn\n }\n get selectedOutlineColumn(): MetadataColumn | undefined {\n return this._selectedOutlineColumn\n }\n get selectedNameColumn(): MetadataColumn | undefined {\n return this._selectedNameColumn\n }\n get columns(): MetadataColumn[] {\n return this._columns\n }\n\n get raColumnList() {\n return this._raColumnList\n }\n get decColumnList() {\n return this._decColumnList\n }\n get outlineColumnList() {\n return this._outlineColumnList\n }\n get hueColumnList() {\n return this._hueColumnList\n }\n get shapeColumnList() {\n return this._shapeColumnList\n }\n\n set selectedRaColumn(columnName: string) {\n this._selectedRaColumn = this._raColumnList.find(c => c.name === columnName) || this._selectedRaColumn\n }\n set selectedDecColumn(columnName: string) {\n this._selectedDecColumn = this._decColumnList.find(c => c.name === columnName) || this._selectedDecColumn\n }\n set selectedOutlineColumn(columnName: string) {\n this._selectedOutlineColumn = this._outlineColumnList.find(c => c.name === columnName) || this._selectedOutlineColumn\n }\n set selectedHueColumn(columnName: string) {\n this._selectedHueColumn = this._hueColumnList.find(c => c.name === columnName)\n }\n set selectedShapeColumn(columnName: string) {\n this._selectedShapeColumn = this._shapeColumnList.find(c => c.name === columnName)\n }\n set selectedNameColumn(columnName: string) {\n this._selectedNameColumn = this._columns.find(c => c.name === columnName)\n }\n\n resetShapeColumn() {\n this._selectedShapeColumn = undefined\n }\n\n resetHueColumn() {\n this._selectedHueColumn = undefined\n }\n\n\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/**\n * @author Fabrizio Giordano (Fab77)\n */\n'use strict';\n\nimport { vec3 } from 'gl-matrix';\nimport {\n cartesianToSpherical,\n sphericalToCartesian,\n sphericalToAstroDeg,\n astroDegToSpherical,\n type SphericalCoords,\n} from '../utils/Utils.js';\nimport {CoordsType} from '../utils/CoordsType.js';\nimport global from '../Global.js';\n\nexport type CartesianOpts = { x: number; y: number; z: number };\nexport type AstroOpts = { raDeg: number; decDeg: number };\nexport type GeographicOpts = { lonDeg: number; latDeg: number };\nexport type SphericalOpts = { phiDeg: number; thetaDeg: number };\nexport type PointInitOpts = CartesianOpts | AstroOpts | GeographicOpts | SphericalOpts;\n\nexport class Point {\n private _x!: number;\n private _y!: number;\n private _z!: number;\n private _xyz!: [number, number, number];\n\n private _raDeg!: number;\n private _decDeg!: number;\n private _raRad!: number;\n private _decRad!: number;\n private _raDecDeg!: [number, number];\n private _lonLatDeg?: [number, number];\n\n constructor(in_options: PointInitOpts, in_type: CoordsType) {\n this._xyz = [0, 0, 0];\n this._raDecDeg = [0, 0];\n\n // Prefer config value if present, fallback to 12\n const MAX_DECIMALS: number =\n global.MAX_DECIMALS ?? 12;\n\n if (in_type === CoordsType.CARTESIAN) {\n const { x, y, z } = in_options as CartesianOpts;\n this._x = Number(x.toFixed(MAX_DECIMALS));\n this._y = Number(y.toFixed(MAX_DECIMALS));\n this._z = Number(z.toFixed(MAX_DECIMALS));\n this._xyz = [this._x, this._y, this._z];\n\n const [ra, dec] = this.computeAstroCoords();\n this._raDeg = Number(ra);\n this._decDeg = Number(dec);\n this._raRad = (this._raDeg * Math.PI) / 180;\n this._decRad = (this._decDeg * Math.PI) / 180;\n this._raDecDeg = [this._raDeg, this._decDeg];\n } else if (in_type === CoordsType.ASTRO) {\n const { raDeg, decDeg } = in_options as AstroOpts;\n this._raDeg = Number(raDeg);\n this._decDeg = Number(decDeg);\n this._raDecDeg = [this._raDeg, this._decDeg];\n this._raRad = (this._raDeg * Math.PI) / 180;\n this._decRad = (this._decDeg * Math.PI) / 180;\n\n const [x, y, z] = this.computeCartesianCoords();\n this._x = Number(x.toFixed(MAX_DECIMALS));\n this._y = Number(y.toFixed(MAX_DECIMALS));\n this._z = Number(z.toFixed(MAX_DECIMALS));\n this._xyz = [this._x, this._y, this._z];\n } else if (in_type === CoordsType.GEOGRAPHIC) {\n const { lonDeg, latDeg } = in_options as GeographicOpts;\n this._lonLatDeg = [Number(lonDeg), Number(latDeg)];\n this._raDeg = this._lonLatDeg[0];\n this._decDeg = this._lonLatDeg[1];\n this._raDecDeg = [this._raDeg, this._decDeg];\n this._raRad = (this._raDeg * Math.PI) / 180;\n this._decRad = (this._decDeg * Math.PI) / 180;\n\n const [x, y, z] = this.computeCartesianCoords();\n this._x = Number(x.toFixed(MAX_DECIMALS));\n this._y = Number(y.toFixed(MAX_DECIMALS));\n this._z = Number(z.toFixed(MAX_DECIMALS));\n this._xyz = [this._x, this._y, this._z];\n } else if (in_type === CoordsType.SPHERICAL) {\n // Not implemented in original; keep behavior\n console.log(`${CoordsType.SPHERICAL} not implemented yet`);\n this._x = 0; this._y = 0; this._z = 0;\n this._raDeg = 0; this._decDeg = 0;\n this._raRad = 0; this._decRad = 0;\n } else {\n console.error('CoordsType ' + String(in_type) + ' not recognised.');\n // Initialize to zeroed state to keep object consistent\n this._x = 0; this._y = 0; this._z = 0;\n this._raDeg = 0; this._decDeg = 0;\n this._raRad = 0; this._decRad = 0;\n }\n }\n\n private computeAstroCoords(): [number, number] {\n const phiThetaDeg = cartesianToSpherical(\n vec3.fromValues(this._xyz[0], this._xyz[1], this._xyz[2])\n );\n const rad = sphericalToAstroDeg(phiThetaDeg.phi, phiThetaDeg.theta);\n return [rad.ra, rad.dec];\n }\n\n private computeCartesianCoords(): [number, number, number] {\n const phiThetaDeg = astroDegToSpherical(this._raDeg, this._decDeg);\n const [x, y, z] = sphericalToCartesian(phiThetaDeg.phi, phiThetaDeg.theta, 1);\n return [x, y, z];\n }\n\n /**\n * @return {phi, theta} (degrees)\n */\n computeHealpixPhiTheta(): SphericalCoords {\n return astroDegToSpherical(this._raDeg, this._decDeg);\n }\n\n /** Scale the vector by a given factor */\n scale(n: number): Point {\n return new Point({ x: this.x * n, y: this.y * n, z: this.z * n }, CoordsType.CARTESIAN);\n }\n\n dot(v: Point): number {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n }\n\n cross(v: Point): Point {\n return new Point(\n {\n x: this.y * v.z - v.y * this.z,\n y: this.z * v.x - v.z * this.x,\n z: this.x * v.y - v.x * this.y,\n },\n CoordsType.CARTESIAN\n );\n }\n\n norm(): Point {\n const d = 1 / this.length();\n return new Point({ x: this.x * d, y: this.y * d, z: this.z * d }, CoordsType.CARTESIAN);\n }\n\n length(): number {\n return Math.sqrt(this.lengthSquared());\n }\n\n lengthSquared(): number {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n\n subtract(v: Point): Point {\n return new Point(\n { x: this.x - v.x, y: this.y - v.y, z: this.z - v.z },\n CoordsType.CARTESIAN\n );\n }\n\n add(v: Point): Point {\n return new Point(\n { x: this.x + v.x, y: this.y + v.y, z: this.z + v.z },\n CoordsType.CARTESIAN\n );\n }\n\n get x(): number { return this._x; }\n get y(): number { return this._y; }\n get z(): number { return this._z; }\n get xyz(): [number, number, number] { return this._xyz; }\n\n get raDeg(): number { return this._raDeg; }\n get decDeg(): number { return this._decDeg; }\n get raDecDeg(): [number, number] { return this._raDecDeg; }\n get lonDeg(): number { return this._lonLatDeg?.[0] ?? this._raDeg; }\n get latDeg(): number { return this._lonLatDeg?.[1] ?? this._decDeg; }\n get lonLatDeg(): [number, number] { return this._lonLatDeg ?? [this._raDeg, this._decDeg]; }\n\n toADQL(): string {\n return `${this._raDecDeg[0]},${this._raDecDeg[1]}`;\n }\n\n toString(): string {\n return `(raDeg, decDeg) => (${this._raDecDeg[0]},${this._raDecDeg[1]}) (x, y,z) => (${this._xyz[0]},${this._xyz[1]},${this._xyz[2]})`;\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nclass Point2D {\n private _x: number;\n private _y: number;\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number {\n return this._x;\n }\n\n get y(): number {\n return this._y;\n }\n}\n\nexport default Point2D;","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n'use strict';\n\nimport { Healpix, Vec3, Pointing } from 'astrospatial-core/healpix';\nimport global from '../Global.js';\nimport {Point} from './Point.js';\n\nexport interface SourceDetail {\n key: string;\n value: string | number;\n valueType?: string;\n unit?: string;\n}\n\nexport class Source {\n private _point: Point;\n private _name?: string;\n private _details: any[];\n private _h_pix!: number;\n private _shapesize: number;\n private _brightnessFactor: number;\n\n /**\n * @param in_point Point.js (Cartesian/RA-Dec wrapper)\n * @param in_details Optional array of key/value metadata\n */\n constructor(in_point: Point, in_details: any[] = []) {\n this._point = in_point;\n this._details = in_details;\n this._shapesize = 16.0;\n this._brightnessFactor = -99;\n\n this.computeHealpixPixel();\n }\n \n getDetailByindex(index: number): string | number | undefined {\n if (index < 0 || index >= this._details.length) {\n return undefined;\n }\n return this._details[index];\n }\n\n get details(): any[] {\n return this._details;\n }\n private computeHealpixPixel(): void {\n // Get Healpix instance from global\n const healpix: Healpix = global.getHealpix(global.nsideForSelection);\n const vec3 = new Vec3(this._point.x, this._point.y, this._point.z);\n const ptg = new Pointing(vec3, false);\n this._h_pix = healpix.ang2pix(ptg, false);\n }\n\n get point(): Point {\n return this._point;\n }\n\n get name(): string | undefined {\n return this._name;\n }\n\n get healpixPixel(): number {\n return this._h_pix;\n }\n\n get shapeSize(): number {\n return this._shapesize;\n }\n set shapeSize(size: number) {\n this._shapesize = size;\n }\n\n get brightnessFactor(): number {\n return this._brightnessFactor;\n }\n /**\n * @param factor Must be in [-1..1]\n */\n set brightnessFactor(factor: number) {\n this._brightnessFactor = factor;\n }\n}","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { mat4, ReadonlyMat4, ReadonlyVec3, vec3 } from 'gl-matrix';\n\nimport Camera from '../Camera.js';\nimport { AbstractSkyEntity } from './AbstractSkyEntity.js';\nimport { radToDeg } from '../utils/Utils.js';\n\ntype FoVComputed = {\n angleDeg: number;\n distance: number;\n}\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\nexport class SphereFoV {\n private static readonly MIN_FOV_DEG = 1e-6;\n\n private fovXDeg = 180;\n private fovYDeg = 180;\n private ratio = 0;\n private _minFoV = 180;\n private _webgl: WebGL2RenderingContext;\n private _lastModel: AbstractSkyEntity | null = null;\n private _lastCamera: Camera | null = null;\n\n constructor(webgl: WebGL2RenderingContext) {\n this._webgl = webgl;\n }\n\n public getFoV(\n insideSphere: boolean,\n model: AbstractSkyEntity,\n camera: Camera,\n pMatrix: ReadonlyMat4,\n ): SphereFoV {\n this._lastModel = model;\n this._lastCamera = camera;\n\n const canvas = this._webgl.canvas as HTMLCanvasElement | undefined;\n if (!canvas) {\n this.fovXDeg = 180;\n this.fovYDeg = 180;\n this._minFoV = this.minFoV;\n return this;\n }\n\n const rect = canvas.getBoundingClientRect();\n const canvasWidth = rect.width;\n const canvasHeight = rect.height;\n\n this.fovXDeg = this.computeAngle(0, canvasHeight / 2, insideSphere, model, camera, pMatrix).angleDeg;\n this.fovYDeg = this.computeAngle(canvasWidth / 2, 0, insideSphere, model, camera, pMatrix).angleDeg;\n this._minFoV = this.minFoV;\n this.ratio = this.computeRatio(camera);\n\n return this;\n }\n\n private computeRatio(camera: Camera): number {\n const pos = camera.getCameraPosition();\n const distanceFromCenter = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]);\n return distanceFromCenter / this.fovYDeg;\n }\n\n get minFoV(): number {\n const minFov = this.fovYDeg <= this.fovXDeg ? this.fovYDeg : this.fovXDeg;\n this._minFoV = Math.max(minFov, SphereFoV.MIN_FOV_DEG);\n return this._minFoV;\n }\n\n get xFoV(): number {\n return this.fovXDeg;\n }\n\n get yFoV(): number {\n return this.fovYDeg;\n }\n\n public computeDistanceFromAngle(angleDeg: number): number {\n return angleDeg * this.ratio;\n }\n\n public changeMinFov(deg: number): void {\n if (this.fovYDeg <= this.fovXDeg) {\n this.fovYDeg = deg;\n } else {\n this.fovXDeg = deg;\n }\n this.minFoV;\n }\n\n public computeCameraPositionForMinFoV(targetMinFoVDeg: number): [number, number, number] {\n return this.computeCameraPositionForFoV(targetMinFoVDeg);\n }\n\n public computeCameraPositionForFoV(targetFoVDeg: number): [number, number, number] {\n return this.computeCameraPositionForAngularDiameter(targetFoVDeg);\n }\n\n public computeCameraPositionForAngularDiameter(targetAngularDiameterDeg: number): [number, number, number] {\n if (!this._lastModel || !this._lastCamera) {\n return [0, 0, 0];\n }\n\n const eps = 1e-6;\n const clamped = Math.max(eps, Math.min(180 - eps, targetAngularDiameterDeg));\n const halfRad = (clamped * Math.PI) / 360.0;\n const sinHalf = Math.sin(halfRad);\n if (sinHalf <= 0) {\n return [0, 0, 0];\n }\n\n const model = this._lastModel;\n const camera = this._lastCamera;\n const targetDistance = Math.max(model.radius / sinHalf, model.radius + 1e-4);\n const camPos = camera.getCameraPosition();\n const direction = vec3.fromValues(\n camPos[0] - model.center[0],\n camPos[1] - model.center[1],\n camPos[2] - model.center[2],\n );\n\n if (vec3.length(direction) < eps) {\n vec3.set(direction, 0, 0, 1);\n } else {\n vec3.normalize(direction, direction);\n }\n\n return [\n model.center[0] + direction[0] * targetDistance,\n model.center[1] + direction[1] * targetDistance,\n model.center[2] + direction[2] * targetDistance,\n ];\n }\n\n private computeAngle(\n canvasX: number,\n canvasY: number,\n insideSphere: boolean,\n model: AbstractSkyEntity,\n camera: Camera,\n pMatrix: ReadonlyMat4,\n ): FoVComputed {\n const canvas = this._webgl.canvas as HTMLCanvasElement;\n const rect = canvas.getBoundingClientRect();\n const centerHit = this.getIntersectionPointWithModel(rect.width / 2, rect.height / 2, model, camera, pMatrix);\n const edgeHit = this.getIntersectionPointWithModel(canvasX, canvasY, model, camera, pMatrix);\n\n if (!centerHit || !edgeHit) {\n return { angleDeg: 180, distance: -1 };\n }\n\n const angleDeg = 2 * this.computeAngularDistanceDeg(centerHit.point, edgeHit.point);\n return {\n angleDeg,\n distance: edgeHit.distance,\n };\n }\n\n private computeAngularDistanceDeg(a: ReadonlyVec3, b: ReadonlyVec3): number {\n const aNorm = vec3.normalize(vec3.create(), a);\n const bNorm = vec3.normalize(vec3.create(), b);\n const dot = vec3.dot(aNorm, bNorm);\n const cross = vec3.cross(vec3.create(), aNorm, bNorm);\n const angleRad = Math.atan2(vec3.length(cross), Math.min(1, Math.max(-1, dot)));\n return radToDeg(angleRad);\n }\n\n private getIntersectionPointWithModel(\n mouseX: number,\n mouseY: number,\n model: AbstractSkyEntity,\n camera: Camera,\n pMatrix: ReadonlyMat4,\n ): { point: vec3; distance: number } | null {\n const rayWorld = this.getRayFromMouse(mouseX, mouseY, pMatrix, camera.getCameraMatrix());\n const distance = this.raySphere(camera.getCameraPosition(), rayWorld, model);\n\n if (distance < 0) {\n return null;\n }\n\n const worldHit = vec3.create();\n vec3.scale(worldHit, rayWorld, distance);\n vec3.add(worldHit, camera.getCameraPosition(), worldHit);\n\n const worldHit4: [number, number, number, number] = [worldHit[0], worldHit[1], worldHit[2], 1.0];\n const modelHit4: [number, number, number, number] = [0, 0, 0, 0];\n this.mat4MultiplyVec4(model.getModelMatrixInverse(), worldHit4, modelHit4);\n\n return {\n point: vec3.fromValues(modelHit4[0], modelHit4[1], modelHit4[2]),\n distance,\n };\n }\n\n private getRayFromMouse(\n mouseX: number,\n mouseY: number,\n pMatrix: ReadonlyMat4,\n vMatrix: ReadonlyMat4,\n ): vec3 {\n const gl = this._webgl as GL;\n const canvas = gl.canvas as HTMLCanvasElement;\n const rect = canvas.getBoundingClientRect();\n\n const x = (2.0 * mouseX) / rect.width - 1.0;\n const y = 1.0 - (2.0 * mouseY) / rect.height;\n const rayClip: [number, number, number, number] = [x, y, -1.0, 1.0];\n\n const pInv = mat4.create();\n mat4.invert(pInv, pMatrix);\n const rayEye4: [number, number, number, number] = [0, 0, 0, 0];\n this.mat4MultiplyVec4(pInv, rayClip, rayEye4);\n\n const rayEye: [number, number, number, number] = [rayEye4[0], rayEye4[1], -1.0, 0.0];\n const vInv = mat4.create();\n mat4.invert(vInv, vMatrix);\n const rayWorld4: [number, number, number, number] = [0, 0, 0, 0];\n this.mat4MultiplyVec4(vInv, rayEye, rayWorld4);\n\n const rayWorld = vec3.fromValues(rayWorld4[0], rayWorld4[1], rayWorld4[2]);\n vec3.normalize(rayWorld, rayWorld);\n return rayWorld;\n }\n\n private raySphere(\n rayOrigWorld: ReadonlyVec3,\n rayDirectionWorld: ReadonlyVec3,\n sphere: Pick<AbstractSkyEntity, 'center' | 'radius'>,\n ): number {\n let intersectionDistance = -1;\n const L = vec3.create();\n vec3.subtract(L, rayOrigWorld, sphere.center);\n\n const b = vec3.dot(rayDirectionWorld, L);\n const c = vec3.dot(L, L) - sphere.radius * sphere.radius;\n const disc = b * b - c;\n\n if (disc > 0.0) {\n const s = Math.sqrt(disc);\n const ta = -b + s;\n const tb = -b - s;\n\n if (ta >= 0.0 || tb >= 0.0) {\n intersectionDistance = tb < 0.0 ? ta : Math.min(ta, tb);\n }\n } else if (disc === 0.0) {\n const t = -b;\n if (t >= 0.0) {\n intersectionDistance = t;\n }\n }\n\n return intersectionDistance;\n }\n\n private mat4MultiplyVec4(\n m: ReadonlyMat4,\n v: [number, number, number, number],\n out: [number, number, number, number],\n ): void {\n out[0] = m[0] * v[0] + m[4] * v[1] + m[8] * v[2] + m[12] * v[3];\n out[1] = m[1] * v[0] + m[5] * v[1] + m[9] * v[2] + m[13] * v[3];\n out[2] = m[2] * v[0] + m[6] * v[1] + m[10] * v[2] + m[14] * v[3];\n out[3] = m[3] * v[0] + m[7] * v[1] + m[11] * v[2] + m[15] * v[3];\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport {Source} from '../Source.js';\nimport { Point } from '../Point.js';\nimport { CoordsType } from '../..//utils/CoordsType.js';\nimport { colorHex2RGB } from '../../utils/Utils.js';\nimport MouseHelper from '../../utils/MouseHelper.js';\nimport { CatalogueShaderProgram } from '../../shader/CatalogueShaderProgram.js';\nimport { MetadataManager } from '../MetadataManager.js';\nimport { MetadataColumn } from '../MetadataColumn.js';\nimport { VisibleTilesManager } from '../hips/VisibleTilesManager.js';\n\nexport type ClickedSourceState = {\n source: Source;\n selected: boolean;\n};\n\nexport type CatalogueClickResult = {\n sources: Source[];\n selectionState: ClickedSourceState[];\n};\n\nexport type CataloguePickResult = {\n sources: Source[];\n pickedIndexes: number[];\n};\n\nexport class CatalogueGL {\n\n _kind: string = \"CatalogueGL\"\n static ELEM_SIZE: number = 6\n static BYTES_X_ELEM: number = new Float32Array().BYTES_PER_ELEMENT;\n static STANDARD_SHAPE_SIZE: number = 10.0\n static STANDARD_SHAPE_HUE: number = 3.0\n\n _ready: boolean;\n _name: string;\n _description: string;\n\n // Data\n _sources: Source[];\n\n // gl: GL;\n\n // Buffers & arrays\n vertexCataloguePositionBuffer: WebGLBuffer | null = null\n vertexhoveredCataloguePositionBuffer: WebGLBuffer | null = null\n vertexCataloguePosition: Float32Array;\n private _bufferInitialised = false\n private _webgl: WebGL2RenderingContext\n\n // Index/selection bookkeeping\n hoveredIndexes: number[];\n selectedIndexes: number[];\n extHoveredIndexes: number[];\n // extSelectedIndexes: number[];\n\n _oldMouseCoords: [number, number, number] | null;\n\n private _metadataManager: MetadataManager\n _isVisible: boolean = true\n\n _shapeColor = '#8F00FF';\n _healpixDensityMap: Map<number, number[]>;\n _providerUrl: string;\n _catalogueShaderProgram: CatalogueShaderProgram\n private _visibleTilesManager: VisibleTilesManager;\n\n constructor(\n catalogueName: string,\n catalogueDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n webgl: WebGL2RenderingContext,\n visibleTilesManager: VisibleTilesManager\n ) {\n this._webgl = webgl\n this._ready = false;\n this._visibleTilesManager = visibleTilesManager;\n\n (this as any).TYPE = 'SOURCE_CATALOGUE';\n\n this._name = catalogueName;\n this._description = catalogueDescription;\n this._providerUrl = providerUrl;\n this._metadataManager = metadataManager\n\n this._sources = [];\n\n // GL init\n // this.gl = global.gl as GL;\n // this.vertexCataloguePositionBuffer = this.gl.createBuffer();\n // this.vertexhoveredCataloguePositionBuffer = this.gl.createBuffer();\n\n this.vertexCataloguePosition = new Float32Array(0);\n this.hoveredIndexes = [];\n this.selectedIndexes = [];\n this.extHoveredIndexes = [];\n // this.extSelectedIndexes = [];\n\n this._oldMouseCoords = null;\n\n this._healpixDensityMap = new Map<number, number[]>();\n\n // this.catalogueProps = new CatalogueProps(metadataManager, defaultColor);\n\n // call catalogueShaderProgram to init shaders if they are not yet initialised \n this._catalogueShaderProgram = new CatalogueShaderProgram(this._webgl)\n this._catalogueShaderProgram.shaderProgram\n // catalogueShaderProgram.shaderProgram\n\n this._isVisible = true\n\n }\n\n setIsVisible(visibility: boolean) {\n this._isVisible = visibility\n }\n\n get shapeColor() {\n return this._shapeColor\n }\n\n get providerUrl() {\n return this._providerUrl\n }\n\n get name() {\n return this._name\n }\n\n get isVisible() {\n return this._isVisible\n }\n\n private minMax(columnindex: number): { min: number, max: number } {\n if (!this._sources.length) return { min: 0, max: 0 };\n let min = this._sources[0].details[columnindex]\n\n if (isNaN(Number(min))) {\n // console.warn(`${this.catalogueProps.tapMetadataList.metadataList[columnindex].name} doesn't contain only number values`)\n console.warn(`${this._metadataManager.columns[columnindex].name} doesn't contain only number values`)\n return { min: 0, max: 0 };\n }\n let max = min;\n\n for (const source of this._sources) {\n const v = source.details[columnindex]\n if (isNaN(Number(v))) {\n // console.warn(`${this.catalogueProps.tapMetadataList.metadataList[columnindex].name} doesn't contain number only values`)\n console.warn(`${this._metadataManager.columns[columnindex].name} doesn't contain number only values`)\n return { min: 0, max: 0 };\n }\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return {\n min: Number(min),\n max: Number(max)\n };\n }\n\n get metadataManager() {\n return this._metadataManager\n }\n\n changeMetaRA(raColumnName: string) {\n this._metadataManager.selectedRaColumn = raColumnName\n }\n\n changeMetaDec(decColumnName: string) {\n this._metadataManager.selectedDecColumn = decColumnName\n }\n\n changeColor(color: string): void {\n this._shapeColor = color;\n }\n\n changeMetaShapeSize(metacolumnName: string) {\n if (!this._webgl) return\n if (metacolumnName == MetadataManager.STANDARD_SIZE) {\n\n this._metadataManager.resetShapeColumn()\n for (const source of this._sources) {\n const size = CatalogueGL.STANDARD_SHAPE_SIZE;\n source.shapeSize = size;\n }\n this._bufferInitialised = false\n // this.initBuffer(this._webgl);\n return\n }\n // const oldShapeSizeName = this.catalogueProps.shapeSizeColumn?.name\n // this.catalogueProps.changeCatalogueMetaShapeSize(metacolumnName);\n // const idx = this.catalogueProps.shapeSizeColumn?.index ?? this.catalogueProps.shapeSizeColumn?.index;\n const oldShapeSizeName = this._metadataManager.selectedShapeColumn?.name\n this._metadataManager.selectedShapeColumn = metacolumnName;\n const idx = this._metadataManager.selectedShapeColumn?.index ?? -1\n if (idx < 0) {\n // if (oldShapeSizeName) this.catalogueProps.changeCatalogueMetaShapeSize(oldShapeSizeName);\n if (oldShapeSizeName) this._metadataManager.selectedShapeColumn = oldShapeSizeName\n return;\n }\n const minmax = this.minMax(idx);\n if (minmax.min == minmax.max) {\n console.warn(`${minmax} min and max are equals. No resizing will be applied.`)\n return\n }\n\n for (const source of this._sources) {\n const raw = Number(source.getDetailByindex(idx));\n const min = Number(minmax.min);\n const max = Number(minmax.max);\n const norm = (raw - min) / Math.max(1e-12, (max - min));\n const size = norm * (20 - 8) + 8;\n source.shapeSize = size;\n }\n this._bufferInitialised = false\n // this.initBuffer(this._webgl);\n }\n\n changeMetaShapeHue(metacolumnName: string) {\n if (!this._webgl) return\n if (metacolumnName == MetadataManager.STANDARD_HUE) {\n this._metadataManager.resetHueColumn()\n for (const source of this._sources) {\n const hue = CatalogueGL.STANDARD_SHAPE_HUE;\n source.brightnessFactor = hue;\n }\n this._bufferInitialised = false\n // this.initBuffer(this._webgl);\n return\n }\n\n const oldHueSizeName = this._metadataManager.selectedShapeColumn?.name\n this._metadataManager.selectedHueColumn = metacolumnName;\n const idx = this._metadataManager.selectedHueColumn?.index ?? -1\n if (idx < 0) {\n if (oldHueSizeName) this._metadataManager.selectedHueColumn = oldHueSizeName\n return;\n }\n const minmax = this.minMax(idx);\n if (minmax.min == minmax.max) {\n console.warn(`${minmax} min and max are equals. No resizing will be applied.`)\n return\n }\n\n for (const source of this._sources) {\n const raw = Number(source.getDetailByindex(idx));\n const min = Number(minmax.min);\n const max = Number(minmax.max);\n const norm = (raw - min) / Math.max(1e-12, (max - min));\n // map [0,1] -> [1,-1]\n source.brightnessFactor = -(norm * 2 - 1);\n }\n this._bufferInitialised = false\n // this.initBuffer(this._webgl);\n }\n\n get sources(): Source[] {\n return this._sources\n }\n\n addSource(source: Source) {\n this._sources.push(source);\n }\n\n /**\n * @param in_data Rows of TAP results\n * @param columnsmeta TapMetadataList (unused here because `CatalogueProps` already holds indices)\n */\n addSources(in_data: any[][], columnsmeta: MetadataColumn[]) {\n this._ready = false;\n this._sources = []\n\n this._metadataManager = new MetadataManager(columnsmeta)\n // const raDataIndex = (this.catalogueProps.raColumn as any).index ?? (this.catalogueProps.raColumn as any)._index;\n // const decDataIndex = (this.catalogueProps.decColumn as any).index ?? (this.catalogueProps.decColumn as any)._index;\n const raDataIndex = this._metadataManager.selectedRaColumn?.index ?? -1\n const decDataIndex = this._metadataManager.selectedDecColumn?.index ?? -1\n\n if (raDataIndex < 0 || decDataIndex < 0) throw new Error(`(ra, dec) idx not defined (${raDataIndex}, ${decDataIndex}) `)\n\n for (let j = 0; j < in_data.length; j++) {\n const point = new Point(\n {\n raDeg: in_data[j][raDataIndex],\n decDeg: in_data[j][decDataIndex]\n },\n CoordsType.ASTRO\n );\n\n const source = new Source(point, in_data[j]);\n\n // Ensure optional fields exist\n source.shapeSize = source.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n source.brightnessFactor = 3;\n\n this.addSource(source);\n // if (this.catalogueProps.shapeHueColumn?.name) {\n if (this._metadataManager.selectedHueColumn?.name) {\n // this.changeCatalogueMetaShapeHue(this.catalogueProps.shapeHueColumn.name)\n this.changeMetaShapeHue(this._metadataManager.selectedHueColumn.name)\n }\n // if (this.catalogueProps.shapeSizeColumn?.name) {\n if (this._metadataManager.selectedShapeColumn?.name) {\n // this.changeCatalogueMetaShapeSize(this.shapeSizeColumn.name)\n this.changeMetaShapeSize(this._metadataManager.selectedShapeColumn.name)\n }\n\n }\n\n // this.initBuffer();\n this._ready = true;\n this._bufferInitialised = false\n }\n\n clearSources() {\n this._sources = [];\n this.hoveredIndexes = [];\n this._healpixDensityMap.clear();\n this.vertexCataloguePosition = new Float32Array(0);\n }\n\n private sourceMatches(left: Source, right: Source): boolean {\n if (left === right) return true;\n\n const leftPoint = left.point;\n const rightPoint = right.point;\n if (\n leftPoint.raDeg !== rightPoint.raDeg ||\n leftPoint.decDeg !== rightPoint.decDeg\n ) {\n return false;\n }\n\n if (left.details.length !== right.details.length) {\n return false;\n }\n\n for (let i = 0; i < left.details.length; i++) {\n if (!Object.is(left.details[i], right.details[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n private findSourceIndex(source: Source): number {\n const sourceIndex = this._sources.indexOf(source);\n if (sourceIndex >= 0) {\n return sourceIndex;\n }\n\n return this._sources.findIndex((candidate) => this.sourceMatches(candidate, source));\n }\n\n extHighlightSource(source: Source, highlighted: boolean) {\n const sIdx = this.findSourceIndex(source);\n if (sIdx < 0) return;\n const base = sIdx * CatalogueGL.ELEM_SIZE;\n if (highlighted) {\n if (!this.hoveredIndexes.includes(sIdx)) {\n this.hoveredIndexes.push(sIdx);\n }\n } else {\n \n if (base + 4 >= this.vertexCataloguePosition.length) return;\n const i = this.hoveredIndexes.indexOf(sIdx);\n if (i >= 0) {\n this.hoveredIndexes.splice(i, 1);\n this.vertexCataloguePosition[base + 3] = 0.0; // not hovered\n this.vertexCataloguePosition[base + 4] = this._sources[sIdx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n }\n }\n \n }\n\n extAddSources2Selected(source: Source) {\n\n if (!this._bufferInitialised) {\n this.initBuffer();\n }\n const sIdx = this.findSourceIndex(source);\n if (sIdx < 0) return;\n const base = sIdx * CatalogueGL.ELEM_SIZE;\n \n if (!this.selectedIndexes.includes(sIdx)) {\n this.selectedIndexes.push(sIdx);\n // this.vertexCataloguePosition[base + 3] = 2.0; // selected\n // this.vertexCataloguePosition[base + 4] = this._sources[sIdx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n } else {\n if (base + 4 >= this.vertexCataloguePosition.length) return;\n const i = this.selectedIndexes.indexOf(sIdx);\n if (i >= 0) {\n this.selectedIndexes.splice(i, 1);\n this.vertexCataloguePosition[base + 3] = 0.0; // not selected\n this.vertexCataloguePosition[base + 4] = this._sources[sIdx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n }\n }\n }\n \n private initBuffer() {\n\n // this._webgl = webgl\n this.vertexCataloguePositionBuffer = this._webgl.createBuffer();\n this.vertexhoveredCataloguePositionBuffer = this._webgl.createBuffer();\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.vertexCataloguePositionBuffer);\n\n const nSources = this._sources.length;\n this.vertexCataloguePosition = new Float32Array(nSources * CatalogueGL.ELEM_SIZE);\n let positionIndex = 0;\n\n for (let j = 0; j < nSources; j++) {\n const currSource = this._sources[j];\n const currPix = currSource.healpixPixel;\n\n // density map\n const bucket = this._healpixDensityMap.get(currPix);\n if (bucket) {\n if (!bucket.includes(j)) bucket.push(j);\n } else {\n this._healpixDensityMap.set(currPix, [j]);\n }\n\n // position\n this.vertexCataloguePosition[positionIndex + 0] = currSource.point.x;\n this.vertexCataloguePosition[positionIndex + 1] = currSource.point.y;\n this.vertexCataloguePosition[positionIndex + 2] = currSource.point.z;\n\n // hovered flag\n this.vertexCataloguePosition[positionIndex + 3] = 0.0;\n\n // size\n this.vertexCataloguePosition[positionIndex + 4] = currSource.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n\n // brightness\n this.vertexCataloguePosition[positionIndex + 5] = currSource.brightnessFactor ?? 0.0;\n\n positionIndex += CatalogueGL.ELEM_SIZE;\n }\n this._webgl.bufferData(this._webgl.ARRAY_BUFFER, this.vertexCataloguePosition, this._webgl.STATIC_DRAW);\n this._bufferInitialised = true\n }\n\n private getSelectionRadius(): number {\n const order = this._visibleTilesManager.getVisibleOrder();\n switch (order) {\n case 0:\n case 1:\n case 2:\n // return 0.005;\n return 0.01;\n case 3:\n // return 0.001;\n case 4:\n // return 0.0009;\n case 5:\n // return 0.0005;\n return 0.005;\n case 6:\n // return 0.0001;\n case 7:\n // return 0.00009;\n case 8:\n // return 0.00005;\n return 0.001;\n case 9:\n return 0.0005;\n default:\n return 0.0001;\n }\n }\n\n private checkClicking(in_mouseHelper: MouseHelper): number[] {\n\n if (in_mouseHelper.x == null || in_mouseHelper.y == null || in_mouseHelper.z == null) {\n console.log('CatalogueGL.checkClicking: missing mouse coords');\n return [];\n }\n\n const clickedIndexes: number[] = [];\n const mousePix = in_mouseHelper.computeNpix();\n\n if (mousePix != null && this._healpixDensityMap.has(mousePix)) {\n const candidates = this._healpixDensityMap.get(mousePix)!;\n const selR = this.getSelectionRadius();\n\n for (let i = 0; i < candidates.length; i++) {\n const sourceIdx = candidates[i];\n const source = this._sources[sourceIdx];\n if (!source) continue;\n\n const dx = source.point.x - in_mouseHelper.x;\n const dy = source.point.y - in_mouseHelper.y;\n const dz = source.point.z - in_mouseHelper.z;\n const dist = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n if (dist <= selR) {\n clickedIndexes.push(sourceIdx);\n }\n }\n }\n return clickedIndexes;\n }\n\n // private setSelectedIndexes(nextSelected: number[]) {\n // const deduped = Array.from(new Set(nextSelected))\n // .filter((idx) => idx >= 0 && idx < this._sources.length);\n\n // if (this.vertexCataloguePosition.length) {\n // for (const prevIdx of this.selectedIndexes) {\n // if (deduped.includes(prevIdx)) continue;\n // const base = prevIdx * CatalogueGL.ELEM_SIZE;\n // if (base + 4 >= this.vertexCataloguePosition.length) continue;\n // if (!this.hoveredIndexes.includes(prevIdx) && !this.extHoveredIndexes.includes(prevIdx)) {\n // this.vertexCataloguePosition[base + 3] = 0.0;\n // }\n // this.vertexCataloguePosition[base + 4] = this._sources[prevIdx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n // }\n // }\n\n // this.selectedIndexes = deduped;\n // }\n\n private setSelectedIndexes(selectedIndex: number[]) {\n selectedIndex.forEach(idx => {\n if (idx < 0 || idx >= this._sources.length) return;\n\n const base = idx * CatalogueGL.ELEM_SIZE;\n if (base + 4 >= this.vertexCataloguePosition.length) return;\n\n if (this.selectedIndexes.includes(idx)) {\n this.selectedIndexes.splice(this.selectedIndexes.indexOf(idx), 1);\n this.vertexCataloguePosition[base + 3] = 0.0; // not selected\n this.vertexCataloguePosition[base + 4] = this._sources[idx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n } else {\n this.selectedIndexes.push(idx);\n this.vertexCataloguePosition[base + 3] = 2.0; // selected\n this.vertexCataloguePosition[base + 4] = this._sources[idx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n }\n })\n }\n\n /**\n * Run click-picking and update selection with the nearest candidate in current pixel.\n * Returns the selected source or null if no source was hit.\n */\n getSourcesFromPointer(in_mouseHelper: MouseHelper): CataloguePickResult | null {\n const pickedIndexes = this.checkClicking(in_mouseHelper);\n if (!pickedIndexes.length) {\n return {\n sources: [],\n pickedIndexes: [],\n };\n }\n\n const sources: Source[] = [];\n pickedIndexes.forEach(idx => {\n const source = this._sources[idx];\n if (source) sources.push(source);\n });\n\n return sources.length ? { sources, pickedIndexes } : null;\n }\n\n /**\n * Run click-picking and update selection with the nearest candidate in current pixel.\n * Returns the selected source or null if no source was hit.\n */\n selectPrimarySourceFromClick(in_mouseHelper: MouseHelper): CatalogueClickResult | null {\n const picked = this.getSourcesFromPointer(in_mouseHelper);\n const clickedIndexes = picked?.pickedIndexes ?? [];\n // if (!clickedIndexes.length) {\n // this.setSelectedIndexes([]);\n // return null;\n // }\n // const selectedIdx = clickedIndexes[0];\n // this.setSelectedIndexes([selectedIdx]);\n // return this._sources[selectedIdx] ?? null;\n this.setSelectedIndexes(clickedIndexes);\n if (!clickedIndexes.length) {\n return {\n sources: [],\n selectionState: [],\n };\n }\n\n const selectionState: ClickedSourceState[] = [];\n const selectedSources: Source[] = [];\n\n clickedIndexes.forEach(idx => {\n const source = this._sources[idx];\n if (!source) return;\n\n const selected = this.selectedIndexes.includes(idx);\n selectionState.push({ source, selected });\n selectedSources.push(source);\n })\n\n return selectedSources.length\n ? { sources: selectedSources, selectionState }\n : null;\n }\n\n getPrimaryHoveredSource(): Source | null {\n if (!this.hoveredIndexes.length) return null;\n const idx = this.hoveredIndexes[0];\n return this._sources[idx] ?? null;\n }\n \n private checkHovering(in_mouseHelper: MouseHelper): number[] {\n\n if (in_mouseHelper.x == null || in_mouseHelper.y == null || in_mouseHelper.z == null) {\n console.log('CatalogueGL.checkHovering: missing mouse coords');\n return [];\n }\n\n const hoveredIndexes: number[] = [];\n const mousePix = in_mouseHelper.computeNpix();\n\n if (mousePix != null && this._healpixDensityMap.has(mousePix)) {\n const candidates = this._healpixDensityMap.get(mousePix)!;\n const selR = this.getSelectionRadius();\n\n for (let i = 0; i < candidates.length; i++) {\n const sourceIdx = candidates[i];\n const source = this._sources[sourceIdx];\n if (!source) continue;\n\n const dx = source.point.x - in_mouseHelper.x;\n const dy = source.point.y - in_mouseHelper.y;\n const dz = source.point.z - in_mouseHelper.z;\n const dist = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n if (dist <= selR) {\n hoveredIndexes.push(sourceIdx);\n }\n }\n }\n return hoveredIndexes;\n }\n\n\n /**\n * @param in_mMatrix Model matrix the current catalogue is associated to (e.g. HiPS matrix)\n */\n draw(in_mMatrix: Float32Array, in_mouseHelper: MouseHelper, \n vMatrix: Float32Array, pMatrix: Float32Array) {\n if (!this.isVisible) return\n if (!this._ready) return\n if (!vMatrix) return\n if (!this._bufferInitialised) this.initBuffer()\n if (!this._webgl) return\n\n this._catalogueShaderProgram.enableShaders(\n pMatrix,\n in_mMatrix,\n vMatrix\n )\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.vertexCataloguePositionBuffer);\n\n // positions\n this._webgl.vertexAttribPointer(\n this._catalogueShaderProgram.locations.position,\n 3,\n this._webgl.FLOAT,\n false,\n CatalogueGL.BYTES_X_ELEM * CatalogueGL.ELEM_SIZE,\n 0\n );\n this._webgl.enableVertexAttribArray(this._catalogueShaderProgram.locations.position);\n\n // hovered flag\n this._webgl.vertexAttribPointer(\n this._catalogueShaderProgram.locations.hovered,\n 1,\n this._webgl.FLOAT,\n false,\n CatalogueGL.BYTES_X_ELEM * CatalogueGL.ELEM_SIZE,\n CatalogueGL.BYTES_X_ELEM * 3\n );\n this._webgl.enableVertexAttribArray(this._catalogueShaderProgram.locations.hovered);\n\n // point size\n this._webgl.vertexAttribPointer(\n this._catalogueShaderProgram.locations.pointSize,\n 1,\n this._webgl.FLOAT,\n false,\n CatalogueGL.BYTES_X_ELEM * CatalogueGL.ELEM_SIZE,\n CatalogueGL.BYTES_X_ELEM * 4\n );\n this._webgl.enableVertexAttribArray(this._catalogueShaderProgram.locations.pointSize);\n\n // brightness\n this._webgl.vertexAttribPointer(\n this._catalogueShaderProgram.locations.brightness,\n 1,\n this._webgl.FLOAT,\n false,\n CatalogueGL.BYTES_X_ELEM * CatalogueGL.ELEM_SIZE,\n CatalogueGL.BYTES_X_ELEM * 5\n );\n this._webgl.enableVertexAttribArray(this._catalogueShaderProgram.locations.brightness);\n\n // color\n const rgb = colorHex2RGB(this._shapeColor);\n if (this._catalogueShaderProgram.locations.color) {\n this._webgl.uniform4f(this._catalogueShaderProgram.locations.color, rgb[0], rgb[1], rgb[2], 1.0);\n }\n\n // selected flags\n for (let s = 0; s < this.selectedIndexes.length; s++) {\n const idx = this.selectedIndexes[s];\n const base = idx * CatalogueGL.ELEM_SIZE;\n this.vertexCataloguePosition[base + 3] = 2.0; // selected\n this.vertexCataloguePosition[base + 4] = this._sources[idx].shapeSize; // size\n }\n\n \n // clear old hovered\n for (let k = 0; k < this.hoveredIndexes.length; k++) {\n const base = this.hoveredIndexes[k] * CatalogueGL.ELEM_SIZE;\n // if (this.vertexCataloguePosition[base + 3] == 2.0) continue; // selected, skip hover\n\n this.vertexCataloguePosition[base + 3] = 0.0; // not hovered\n this.vertexCataloguePosition[base + 4] = this._sources[this.hoveredIndexes[k]].shapeSize; // size\n }\n \n // Hover logic on mouse move\n if (in_mouseHelper != null && in_mouseHelper.xyz !== this._oldMouseCoords) {\n // // clear old hovered\n // for (let k = 0; k < this.hoveredIndexes.length; k++) {\n // const base = this.hoveredIndexes[k] * CatalogueGL.ELEM_SIZE;\n // if (this.vertexCataloguePosition[base + 3] == 2.0) continue; // selected, skip hover\n\n // this.vertexCataloguePosition[base + 3] = 0.0; // not hovered\n // this.vertexCataloguePosition[base + 4] = this._sources[this.hoveredIndexes[k]].shapeSize; // size\n // }\n\n this.hoveredIndexes = this.checkHovering(in_mouseHelper);\n\n // // new hovered\n // for (let i = 0; i < this.hoveredIndexes.length; i++) {\n // const idx = this.hoveredIndexes[i];\n // const base = idx * CatalogueGL.ELEM_SIZE;\n\n // if (this.vertexCataloguePosition[base + 3] == 2.0) continue; // selected, skip hover\n // this.vertexCataloguePosition[base + 3] = 1.0; // hovered\n // this.vertexCataloguePosition[base + 4] = this._sources[idx].shapeSize; // size\n // }\n }\n // new hovered\n for (let i = 0; i < this.hoveredIndexes.length; i++) {\n const idx = this.hoveredIndexes[i];\n const base = idx * CatalogueGL.ELEM_SIZE;\n\n // if (this.vertexCataloguePosition[base + 3] == 2.0) continue; // selected, skip hover\n this.vertexCataloguePosition[base + 3] = 1.0; // hovered\n this.vertexCataloguePosition[base + 4] = this._sources[idx].shapeSize; // size\n }\n\n \n // upload buffer\n this._webgl.bufferData(this._webgl.ARRAY_BUFFER, this.vertexCataloguePosition, this._webgl.STATIC_DRAW);\n\n // draw\n const numItems = this.vertexCataloguePosition.length / CatalogueGL.ELEM_SIZE;\n this._webgl.drawArrays(this._webgl.POINTS, 0, numItems);\n\n this._oldMouseCoords = in_mouseHelper.xyz;\n }\n\n}\n\n// export default CatalogueGL;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport type { WMTSLayerConfig, XYZLayerConfig } from './XYZConfig.js'\nimport type { XYZTileCoord } from './XYZTypes.js'\n\nfunction replaceTokens(template: string, values: Record<string, string>): string {\n return Object.entries(values).reduce(\n (result, [key, value]) => result.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), value),\n template,\n )\n}\n\nexport class WMTSAdapter {\n private _config: WMTSLayerConfig\n\n constructor(config: WMTSLayerConfig) {\n this._config = config\n }\n\n toXYZLayerConfig(): XYZLayerConfig {\n const inferredMaxZoom = this.getInferredMaxZoom()\n\n return {\n urlTemplate: this._config.urlTemplate ?? this._config.baseUrl,\n minZoom: this._config.minZoom,\n maxZoom: inferredMaxZoom,\n segmentsPerSide: this._config.segmentsPerSide,\n tileSize: this._config.tileSize,\n maxCachedTiles: this._config.maxCachedTiles,\n subdomains: this._config.subdomains,\n attribution: this._config.attribution,\n flipY: this._config.flipY,\n urlResolver: (tile) => this.getTileUrl(tile),\n }\n }\n\n private getInferredMaxZoom(): number | undefined {\n const matrixLabelCount = this._config.matrixLabels?.length ?? 0\n const maxFromLabels = matrixLabelCount > 0 ? matrixLabelCount - 1 : undefined\n\n if (maxFromLabels == null) {\n return this._config.maxZoom\n }\n\n if (this._config.maxZoom == null) {\n return maxFromLabels\n }\n\n return Math.min(this._config.maxZoom, maxFromLabels)\n }\n\n getTileUrl(tile: XYZTileCoord): string {\n return this._config.requestEncoding === 'rest'\n ? this.buildRestUrl(tile)\n : this.buildKvpUrl(tile)\n }\n\n private buildRestUrl(tile: XYZTileCoord): string {\n const template = this._config.urlTemplate ?? this._config.baseUrl\n const values = this.getCommonTokenValues(tile)\n const resolved = replaceTokens(template, values)\n return resolved.replace(/(?<!:)\\/{2,}/g, '/')\n }\n\n private buildKvpUrl(tile: XYZTileCoord): string {\n const baseUrl = new URL(this._config.baseUrl)\n const values = this.getCommonTokenValues(tile)\n const params = baseUrl.searchParams\n\n params.set('SERVICE', 'WMTS')\n params.set('REQUEST', 'GetTile')\n params.set('VERSION', this._config.version ?? '1.0.0')\n params.set('LAYER', this._config.layer)\n params.set('STYLE', this._config.style ?? 'default')\n params.set('FORMAT', this._config.format ?? 'image/png')\n params.set('TILEMATRIXSET', this._config.tileMatrixSet)\n params.set('TILEMATRIX', values.TileMatrix)\n params.set('TILEROW', values.TileRow)\n params.set('TILECOL', values.TileCol)\n\n for (const [key, value] of Object.entries(this._config.dimensions ?? {})) {\n params.set(key, value)\n }\n\n return baseUrl.toString()\n }\n\n private getCommonTokenValues(tile: XYZTileCoord): Record<string, string> {\n const dim = 2 ** tile.z\n const effectiveY = this._config.flipY ? dim - 1 - tile.y : tile.y\n const matrixLabel = this._config.matrixLabels?.[tile.z] ?? String(tile.z)\n const tileFormat = this._config.format ?? 'image/png'\n const tileFormatExtension = tileFormat.replace(/^image\\//, '')\n\n return {\n Layer: this._config.layer,\n Style: this._config.style ?? 'default',\n Time: this._config.time ?? '',\n TileMatrixSet: this._config.tileMatrixSet,\n TileMatrix: matrixLabel,\n TileRow: String(effectiveY),\n TileCol: String(tile.x),\n Format: tileFormatExtension,\n TileFormat: tileFormat,\n TileFormatExtension: tileFormatExtension,\n ...Object.fromEntries(Object.entries(this._config.dimensions ?? {}).map(([key, value]) => [key, value])),\n }\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { XYZShaderProgram } from '../../shader/XYZShaderProgram.js';\nimport { XYZMeshBuilder } from './XYZMeshBuilder.js';\nimport { XYZTile } from './XYZTile.js';\nimport type { XYZTileCoord, XYZTileGpuMesh } from './XYZTypes.js';\n\ntype Mat4 = Float32Array;\n\nexport class XYZAnchestorTile extends XYZTile {\n private _ancestorMeshBuilder: XYZMeshBuilder;\n private _ancestorWebgl: WebGL2RenderingContext;\n private _segmentsPerSide: number;\n private _meshCache = new Map<string, XYZTileGpuMesh>();\n\n constructor(\n coord: XYZTileCoord,\n url: string,\n webgl: WebGL2RenderingContext,\n shaderProgram: XYZShaderProgram,\n meshBuilder = new XYZMeshBuilder(),\n segmentsPerSide = 16,\n ) {\n super(coord, url, webgl, shaderProgram, meshBuilder, segmentsPerSide);\n this._ancestorMeshBuilder = meshBuilder;\n this._ancestorWebgl = webgl;\n this._segmentsPerSide = segmentsPerSide;\n }\n\n override draw(\n pMatrixOrVisibleZoom: Mat4 | number,\n vMatrixOrVisibleTiles: Mat4 | XYZTileCoord[],\n mMatrixOrAncestorsMap: Mat4 | Map<string, XYZTileCoord>,\n colorMapIdxOrPMatrix: number | Mat4,\n vMatrix?: Mat4,\n mMatrix?: Mat4,\n colorMapIdx?: number,\n ): boolean {\n if (typeof pMatrixOrVisibleZoom !== 'number') {\n return super.draw(\n pMatrixOrVisibleZoom,\n vMatrixOrVisibleTiles as Mat4,\n mMatrixOrAncestorsMap as Mat4,\n colorMapIdxOrPMatrix as number,\n );\n }\n\n if (!vMatrix || !mMatrix || colorMapIdx === undefined) {\n return false;\n }\n\n const visibleZoom = pMatrixOrVisibleZoom;\n const visibleTiles = vMatrixOrVisibleTiles as XYZTileCoord[];\n const ancestorsMap = mMatrixOrAncestorsMap as Map<string, XYZTileCoord>;\n const pMatrix = colorMapIdxOrPMatrix as Mat4;\n let drawn = false;\n\n if (visibleZoom <= this.coord.z) {\n return super.draw(pMatrix, vMatrix, mMatrix, colorMapIdx);\n }\n\n for (const targetTile of visibleTiles) {\n if (!this.isAncestorOf(targetTile)) {\n continue;\n }\n\n const ancestorKey = `${this.coord.z}/${this.coord.x}/${this.coord.y}`;\n if (!ancestorsMap.has(ancestorKey)) {\n continue;\n }\n\n const mesh = this.getRemappedMesh(targetTile);\n drawn = super.drawRemapped(mesh, pMatrix, vMatrix, mMatrix, colorMapIdx) || drawn;\n }\n\n return drawn;\n }\n\n override dispose(): void {\n for (const mesh of this._meshCache.values()) {\n if (mesh.positionBuffer) this._ancestorWebgl.deleteBuffer(mesh.positionBuffer);\n if (mesh.uvBuffer) this._ancestorWebgl.deleteBuffer(mesh.uvBuffer);\n if (mesh.indexBuffer) this._ancestorWebgl.deleteBuffer(mesh.indexBuffer);\n }\n this._meshCache.clear();\n super.dispose();\n }\n\n private getRemappedMesh(targetTile: XYZTileCoord): XYZTileGpuMesh {\n const key = `${targetTile.z}/${targetTile.x}/${targetTile.y}->${this.coord.z}/${this.coord.x}/${this.coord.y}`;\n const existing = this._meshCache.get(key);\n if (existing) {\n return existing;\n }\n\n const mesh = this._ancestorMeshBuilder.buildAncestorMesh(targetTile, this.coord, this._segmentsPerSide);\n const uploaded = this._ancestorMeshBuilder.uploadMesh(mesh, this._ancestorWebgl);\n this._meshCache.set(key, uploaded);\n return uploaded;\n }\n\n private isAncestorOf(targetTile: XYZTileCoord): boolean {\n if (targetTile.z <= this.coord.z) {\n return targetTile.z === this.coord.z\n && targetTile.x === this.coord.x\n && targetTile.y === this.coord.y;\n }\n\n const dz = targetTile.z - this.coord.z;\n return (targetTile.x >> dz) === this.coord.x && (targetTile.y >> dz) === this.coord.y;\n }\n}\n\nexport { XYZAnchestorTile as XYZAncestorTile };\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// FoVHelper.ts\n'use strict'\n\nclass XYZFoVHelper {\n\n private static readonly LEVEL_HYSTERESIS = 0.12\n\n private static readonly ZOOM_MIN_FOV: Record<number, number> = {\n 2: 179,\n 3: 90,\n 4: 30,\n 5: 20,\n 6: 6,\n 7: 3.2,\n 8: 1.6,\n 9: 0.85,\n 10: 0.42,\n 11: 0.21,\n 12: 0.12,\n 13: 0.06,\n 14: 0.015,\n 15: 0,\n }\n\n getZoom(fov: number, currentZoom?: number): number {\n const rawZoom = this.getRawZoom(fov)\n if (currentZoom === undefined || currentZoom === rawZoom) return rawZoom\n\n if (rawZoom > currentZoom) {\n const boundary = XYZFoVHelper.ZOOM_MIN_FOV[currentZoom]\n if (boundary > 0 && fov > boundary * (1 - XYZFoVHelper.LEVEL_HYSTERESIS)) return currentZoom\n } else {\n const boundary = XYZFoVHelper.ZOOM_MIN_FOV[rawZoom]\n if (boundary > 0 && fov < boundary * (1 + XYZFoVHelper.LEVEL_HYSTERESIS)) return currentZoom\n }\n\n return rawZoom\n }\n\n private getRawZoom(fov: number): number {\n if (fov >= 179) return 2\n if (fov >= 90) return 3\n if (fov >= 30) return 4\n if (fov >= 20) return 5\n if (fov >= 6) return 6\n if (fov >= 3.2) return 7\n if (fov >= 1.6) return 8\n if (fov >= 0.85) return 9\n if (fov >= 0.42) return 10\n if (fov >= 0.21) return 11\n if (fov >= 0.12) return 12\n if (fov >= 0.06) return 13\n if (fov >= 0.015) return 14\n return 15\n }\n\n // used in grid drawing\n getLonLatSteps(fov: number, coarse = false): { lonStep: number; latStep: number } {\n let lonStep: number\n let latStep: number\n\n if (coarse && fov < 0.21) { lonStep = 10; latStep = 10 }\n else if (fov >= 179) { lonStep = 10; latStep = 10 }\n else if (fov >= 25) { lonStep = 9; latStep = 9 }\n else if (fov >= 12.5){ lonStep = 8; latStep = 8 }\n else if (fov >= 6) { lonStep = 6; latStep = 6 }\n else if (fov >= 3.2) { lonStep = 5; latStep = 5 }\n else if (fov >= 1.6) { lonStep = 4; latStep = 4 }\n else if (fov >= 0.85){ lonStep = 3; latStep = 3 }\n else if (fov >= 0.42){ lonStep = 2; latStep = 2 }\n else if (fov >= 0.21){ lonStep = 1; latStep = 1 }\n else if (fov >= 0.12){ lonStep = 0.5; latStep = 0.5 }\n else if (fov >= 0.06){ lonStep = 0.25; latStep = 0.25 }\n else { lonStep = 10; latStep = 10 }\n\n return { lonStep, latStep }\n }\n\n}\n\nexport const xyzFovHelper = new XYZFoVHelper()\nexport default XYZFoVHelper\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { AbstractSkyEntity, SkyEntityDrawInput } from \"../AbstractSkyEntity.js\";\nimport { XYZMapDescriptor } from \"./XYZMapDescriptor.js\";\nimport { XYZVisibleTilesManager } from \"./XYZVisibleTilesManager.js\";\nimport { xyzFovHelper } from \"./XYZFoVHelper.js\";\nimport { ColorMap, ColorMaps } from \"../ColorMaps.js\";\nimport { LatLonGrid } from \"../grid/LonLatGrid.js\";\nimport type { GridLabelContainers } from \"../grid/GridTextHelper.js\";\nimport { XYZShaderProgram } from \"../../shader/XYZShaderProgram.js\";\nimport { XYZTileBuffer } from \"./XYZTileBuffer.js\";\nimport { XYZAnchestorTile } from \"./XYZAnchestorTile.js\";\nimport { XYZMeshBuilder } from \"./XYZMeshBuilder.js\";\nimport { SphereFoV } from \"../SphereFoV.js\";\nimport type { XYZLayerDebugStats } from \"./XYZConfig.js\";\nimport type { XYZTileCoord } from \"./XYZTypes.js\";\n\nexport class XYZMap extends AbstractSkyEntity {\n\n private _xyzShaderProgram: XYZShaderProgram\n private _descriptor: XYZMapDescriptor;\n private _visibleTilesManager: XYZVisibleTilesManager\n private _tileBuffer: XYZTileBuffer<XYZAnchestorTile>\n private _meshBuilder: XYZMeshBuilder\n private _baseurl: string\n private _zoom\n private _latLonGrid: LatLonGrid\n private _colorMapIdx = 0\n private _colorMap = ColorMaps['native']\n\n\n constructor(\n radius: number,\n position: [number, number, number],\n xrad: number,\n yrad: number,\n descriptor: XYZMapDescriptor,\n webgl: WebGL2RenderingContext,\n gridLabelContainers?: GridLabelContainers,\n ) {\n super(radius, position, xrad, yrad, descriptor.name, webgl, false)\n this._descriptor = descriptor\n this._xyzShaderProgram = new XYZShaderProgram(webgl)\n this._meshBuilder = new XYZMeshBuilder()\n this._tileBuffer = new XYZTileBuffer<XYZAnchestorTile>(1)\n\n this.initGL(webgl as WebGL2RenderingContext)\n\n this._latLonGrid = new LatLonGrid(radius, position, xrad, yrad, 'LatLonGrid', this._webgl, gridLabelContainers)\n\n this._visibleTilesManager = new XYZVisibleTilesManager()\n this._baseurl = descriptor.url\n\n this.initShaders()\n const fov = 180\n this._zoom = xyzFovHelper.getZoom(fov)\n\n }\n\n changeColorMap(colorMap: ColorMap): void {\n this._colorMap = colorMap\n switch (colorMap.name) {\n case 'grayscale':\n this._colorMapIdx = 1\n this._colorMap = ColorMaps['grayscale']\n break\n case 'planck':\n this._colorMapIdx = 2\n this._colorMap = ColorMaps['planck']\n break\n case 'cmb':\n this._colorMapIdx = 3\n this._colorMap = ColorMaps['cmb']\n break\n case 'rainbow':\n this._colorMapIdx = 4\n this._colorMap = ColorMaps['rainbow']\n break\n case 'eosb':\n this._colorMapIdx = 5\n this._colorMap = ColorMaps['eosb']\n break\n case 'cubehelix':\n this._colorMapIdx = 6\n this._colorMap = ColorMaps['cubehelix']\n break\n case 'hot':\n this._colorMapIdx = 7\n this._colorMap = ColorMaps['hot']\n break\n case 'gray':\n this._colorMapIdx = 8\n this._colorMap = ColorMaps['gray']\n break\n case 'native':\n this._colorMapIdx = 0\n this._colorMap = ColorMaps['native']\n break\n default:\n this._colorMapIdx = 9\n this._colorMap = colorMap\n }\n }\n\n private initShaders(): void {\n this._xyzShaderProgram.enableProgram()\n }\n\n isLonLatGridVisible(): boolean {\n return this._latLonGrid.isVisible()\n }\n\n toggleLonLatGrid(): boolean {\n return this._latLonGrid.toggleShowGrid()\n }\n\n getFoV(): SphereFoV {\n return this._latLonGrid.getFoV()\n }\n\n private refresh(input: SkyEntityDrawInput): void {\n const fov = this._latLonGrid.refreshFoV(input)\n // this._zoom = this.resolveVisibleZoom(fov)\n this._zoom = xyzFovHelper.getZoom(fov)\n }\n\n\n\n draw(input: SkyEntityDrawInput): void {\n const vMatrix = input.camera.getCameraMatrix() as Float32Array\n if (!vMatrix) return\n\n const pMatrix = input.pMatrix\n if (!pMatrix) return\n\n this.refresh(input)\n\n const mMatrix = this.getModelMatrix() as Float32Array\n this._xyzShaderProgram.setRuntimeColorMap(this._colorMap)\n const tileSelection = this._visibleTilesManager.computeVisibleTiles(\n this._zoom,\n this,\n this._webgl,\n input.camera,\n input.pMatrix,\n )\n\n const visibleTiles = tileSelection.visibleTiles\n const ancestorsMap = tileSelection.ancestorsMap\n const tileKeys = this._tileBuffer.ensureTiles(\n this.getTilesToEnsure(visibleTiles, ancestorsMap),\n (coord) => this.createTile(coord),\n )\n this._tileBuffer.evictCached(this._descriptor.maxCachedTiles)\n\n for (const tileKey of tileKeys) {\n const tile = this._tileBuffer.getActiveTile(tileKey)\n if (!tile || tile.coord.z !== tileSelection.currentZoom) {\n continue\n }\n\n const drawn = tile.draw(pMatrix as Float32Array, vMatrix, mMatrix, this._colorMapIdx)\n if (drawn) {\n continue\n }\n\n const ancestorTile = this.findBestAvailableAncestor(tile.coord)\n ancestorTile?.draw(\n tileSelection.currentZoom,\n [tile.coord],\n ancestorsMap,\n pMatrix as Float32Array,\n vMatrix,\n mMatrix,\n this._colorMapIdx\n )\n }\n\n this._latLonGrid.draw(input)\n\n }\n\n private createTile(coord: XYZTileCoord): XYZAnchestorTile {\n return new XYZAnchestorTile(\n coord,\n this.resolveTileUrl(coord),\n this._webgl,\n this._xyzShaderProgram,\n this._meshBuilder,\n this._descriptor.segmentsPerSide,\n )\n }\n\n private getTilesToEnsure(\n visibleTiles: XYZTileCoord[],\n ancestorsMap: Map<string, XYZTileCoord>,\n ): XYZTileCoord[] {\n const tilesByKey = new Map<string, XYZTileCoord>()\n\n for (const tile of visibleTiles) {\n tilesByKey.set(this.tileKey(tile), tile)\n }\n for (const ancestor of ancestorsMap.values()) {\n tilesByKey.set(this.tileKey(ancestor), ancestor)\n }\n\n return Array.from(tilesByKey.values())\n }\n\n private findBestAvailableAncestor(targetTile: XYZTileCoord): XYZAnchestorTile | null {\n for (let z = targetTile.z - 1; z >= 0; z--) {\n const dz = targetTile.z - z\n const ancestorCoord = {\n z,\n x: targetTile.x >> dz,\n y: targetTile.y >> dz,\n }\n const ancestorTile = this._tileBuffer.getAnyTile(this.tileKey(ancestorCoord))\n if (ancestorTile?.ready) {\n return ancestorTile\n }\n }\n\n return null\n }\n\n private resolveTileUrl(tile: XYZTileCoord): string {\n const urlResolver = this._descriptor.urlResolver\n if (urlResolver) {\n return urlResolver(tile)\n }\n\n const dim = 2 ** tile.z\n const y = this._descriptor.flipY ? dim - 1 - tile.y : tile.y\n const subdomains = this._descriptor.subdomains\n const subdomain = subdomains.length > 0\n ? subdomains[Math.abs(tile.x + tile.y + tile.z) % subdomains.length]\n : ''\n\n return this._baseurl\n .replace(/\\{z\\}/g, String(tile.z))\n .replace(/\\{x\\}/g, String(tile.x))\n .replace(/\\{y\\}/g, String(y))\n .replace(/\\{s\\}/g, subdomain ?? '')\n }\n\n getDebugStats(): XYZLayerDebugStats {\n const activeTiles = Array.from(this._tileBuffer.activeTiles.values(), (entry) => entry.tile)\n const cachedTiles = Array.from(this._tileBuffer.cachedTiles.values(), (entry) => entry.tile)\n const allTiles = [...activeTiles, ...cachedTiles]\n const selection = this._visibleTilesManager.selection\n\n return {\n cacheSize: this._tileBuffer.size,\n visibleTileCount: selection.visibleTiles.length,\n currentTileCount: activeTiles.filter((tile) => tile.coord.z === selection.currentZoom).length,\n fallbackTileCount: selection.ancestorsMap.size,\n coreTileCount: selection.visibleTiles.length,\n coverageTileCount: selection.visibleTiles.length,\n readyTileCount: allTiles.filter((tile) => tile.ready).length,\n loadingTileCount: allTiles.filter((tile) => tile.loading).length,\n coolingDownTileCount: 0,\n currentZoom: selection.currentZoom,\n tileSelectionKey: selection.key,\n isSettling: false,\n coarseTileCount: selection.ancestorsMap.size,\n hasPendingSelection: false,\n pendingSelectionKey: null,\n }\n }\n\n private tileKey(tile: XYZTileCoord): string {\n return `${tile.z}/${tile.x}/${tile.y}`\n }\n\n // private resolveVisibleZoom(fovDeg: number): number {\n // const rawZoom = xyzFovHelper.getZoom(fovDeg)\n // const minUsefulZoom = 2\n // const minZoom = Math.max(this._descriptor.minZoom, minUsefulZoom)\n // const maxZoom = Math.max(minZoom, this._descriptor.maxZoom)\n\n // return Math.max(minZoom, Math.min(maxZoom, rawZoom))\n // }\n\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport type { XYZTileCoord } from './XYZTypes.js'\n\nexport class XYZMapDescriptor {\n\n _name: string\n _url: string\n _urlResolver?: (tile: XYZTileCoord) => string\n _minZoom?: number\n _maxZoom?: number\n _segmentsPerSide?: number\n _tileSize?: number\n _maxCachedTiles?: number\n _interactionDebounceMs?: number\n _subdomains?: string[]\n _attribution?: string\n _flipY?: boolean\n _maxConcurrentLoads?: number\n\n\n constructor(\n name: string,\n url: string,\n minZoom: number = 0,\n maxZoom: number = 8,\n segmentsPerSide: number = 16,\n maxCachedTiles: number = 384,\n maxConcurrentLoads: number = 8,\n urlResolver?: (tile: XYZTileCoord) => string,\n ) {\n this._name = name\n this._url = url\n this._urlResolver = urlResolver\n this._minZoom = minZoom\n this._maxZoom = maxZoom\n this._segmentsPerSide = segmentsPerSide\n this._maxCachedTiles = maxCachedTiles\n this._interactionDebounceMs = 100\n this._subdomains = ['a', 'b', 'c']\n this._attribution = ''\n this._flipY = false\n this._maxConcurrentLoads = maxConcurrentLoads\n }\n\n get url(): string {\n return this._url\n }\n\n get urlResolver(): ((tile: XYZTileCoord) => string) | undefined {\n return this._urlResolver\n }\n\n get name(): string {\n return this._name\n }\n\n get minZoom(): number {\n return this._minZoom as number\n }\n\n get maxZoom(): number {\n return this._maxZoom as number\n }\n\n get segmentsPerSide(): number {\n return this._segmentsPerSide as number\n }\n\n get maxCachedTiles(): number {\n return this._maxCachedTiles as number\n }\n\n get interactionDebounceMs(): number {\n return this._interactionDebounceMs as number\n }\n\n get subdomains(): string[] {\n return this._subdomains as string[]\n }\n\n get attribution(): string {\n return this._attribution as string\n }\n\n get flipY(): boolean {\n return this._flipY as boolean\n }\n\n get maxConcurrentLoads(): number {\n return this._maxConcurrentLoads as number\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { sphericalToCartesian } from '../../utils/Utils.js';\nimport type { XYZTileCoord, XYZTileGpuMesh, XYZTileMesh } from './XYZTypes.js';\n\nconst MAX_MERCATOR_LAT = 85.0511287798066;\n\nfunction mercatorYToLatDeg(yNormalized: number): number {\n const mercator = Math.PI * (1 - 2 * yNormalized);\n return (Math.atan(Math.sinh(mercator)) * 180) / Math.PI;\n}\n\nfunction wrapLonToPhi(lonDeg: number): number {\n return lonDeg < 0 ? lonDeg + 360 : lonDeg;\n}\n\nexport class XYZMeshBuilder {\n buildTileMesh(tile: XYZTileCoord, segmentsPerSide = 16): XYZTileMesh {\n const segments = Math.max(1, Math.floor(segmentsPerSide));\n const gridSize = segments + 1;\n const vertexCount = gridSize * gridSize;\n const positions = new Float32Array(vertexCount * 3);\n const uvs = new Float32Array(vertexCount * 2);\n const tileCount = 2 ** tile.z;\n\n let p = 0;\n let uv = 0;\n\n for (let row = 0; row <= segments; row++) {\n const v = row / segments;\n const yNormalized = (tile.y + v) / tileCount;\n const latDeg = Math.max(\n -MAX_MERCATOR_LAT,\n Math.min(MAX_MERCATOR_LAT, mercatorYToLatDeg(yNormalized)),\n );\n const thetaDeg = 90 - latDeg;\n\n for (let col = 0; col <= segments; col++) {\n const u = col / segments;\n const xNormalized = (tile.x + u) / tileCount;\n const lonDeg = xNormalized * 360 - 180;\n const phiDeg = wrapLonToPhi(lonDeg);\n const [x, y, z] = sphericalToCartesian(phiDeg, thetaDeg, 1);\n\n positions[p++] = x;\n positions[p++] = y;\n positions[p++] = z;\n\n uvs[uv++] = u;\n uvs[uv++] = 1 - v;\n }\n }\n\n const rawIndices = new Uint32Array(segments * segments * 2 * 3);\n let i = 0;\n\n for (let row = 0; row < segments; row++) {\n for (let col = 0; col < segments; col++) {\n const topLeft = row * gridSize + col;\n const topRight = topLeft + 1;\n const bottomLeft = topLeft + gridSize;\n const bottomRight = bottomLeft + 1;\n\n rawIndices[i++] = topLeft;\n rawIndices[i++] = bottomLeft;\n rawIndices[i++] = topRight;\n\n rawIndices[i++] = topRight;\n rawIndices[i++] = bottomLeft;\n rawIndices[i++] = bottomRight;\n }\n }\n\n const indices = rawIndices.length > 65535 ? rawIndices : new Uint16Array(rawIndices);\n return { positions, uvs, indices };\n }\n\n buildAncestorMesh(\n targetTile: XYZTileCoord,\n ancestorTile: XYZTileCoord,\n segmentsPerSide = 16,\n ): XYZTileMesh {\n const baseMesh = this.buildTileMesh(targetTile, segmentsPerSide);\n const dz = targetTile.z - ancestorTile.z;\n const scale = 2 ** dz;\n const subTileX = targetTile.x - (ancestorTile.x << dz);\n const subTileY = targetTile.y - (ancestorTile.y << dz);\n const uvs = new Float32Array(baseMesh.uvs.length);\n\n for (let i = 0; i < baseMesh.uvs.length; i += 2) {\n const u = baseMesh.uvs[i] ?? 0;\n const baseV = baseMesh.uvs[i + 1] ?? 0;\n const v = 1 - baseV;\n\n uvs[i] = (subTileX + u) / scale;\n uvs[i + 1] = 1 - (subTileY + v) / scale;\n }\n\n return {\n positions: baseMesh.positions,\n uvs,\n indices: baseMesh.indices,\n };\n }\n\n uploadMesh(mesh: XYZTileMesh, webgl: WebGL2RenderingContext): XYZTileGpuMesh {\n const positionBuffer = webgl.createBuffer();\n const uvBuffer = webgl.createBuffer();\n const indexBuffer = webgl.createBuffer();\n const indexType = mesh.indices instanceof Uint32Array ? webgl.UNSIGNED_INT : webgl.UNSIGNED_SHORT;\n\n webgl.bindBuffer(webgl.ARRAY_BUFFER, positionBuffer);\n webgl.bufferData(webgl.ARRAY_BUFFER, mesh.positions, webgl.STATIC_DRAW);\n\n webgl.bindBuffer(webgl.ARRAY_BUFFER, uvBuffer);\n webgl.bufferData(webgl.ARRAY_BUFFER, mesh.uvs, webgl.STATIC_DRAW);\n\n webgl.bindBuffer(webgl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n webgl.bufferData(webgl.ELEMENT_ARRAY_BUFFER, mesh.indices, webgl.STATIC_DRAW);\n\n return {\n positionBuffer,\n uvBuffer,\n indexBuffer,\n indexCount: mesh.indices.length,\n indexType,\n };\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { XYZShaderProgram } from '../../shader/XYZShaderProgram.js';\nimport type { XYZBufferedTile } from './XYZTileBuffer.js';\nimport { XYZMeshBuilder } from './XYZMeshBuilder.js';\nimport type { XYZTileCoord, XYZTileGpuMesh, XYZTileMesh } from './XYZTypes.js';\n\ntype Mat4 = Float32Array;\n\nexport class XYZTile implements XYZBufferedTile {\n private _coord: XYZTileCoord;\n private _url: string;\n private _webgl: WebGL2RenderingContext;\n private _shaderProgram: XYZShaderProgram;\n private _meshBuilder: XYZMeshBuilder;\n private _gpuMesh: XYZTileGpuMesh;\n private _texture: WebGLTexture | null = null;\n private _image?: HTMLImageElement;\n private _ready = false;\n private _loading = false;\n private _aborted = false;\n private _failedUntil = 0;\n private _lastUsedAt = 0;\n private _createdAt = Date.now();\n\n constructor(\n coord: XYZTileCoord,\n url: string,\n webgl: WebGL2RenderingContext,\n shaderProgram: XYZShaderProgram,\n meshBuilder = new XYZMeshBuilder(),\n segmentsPerSide = 16,\n ) {\n this._coord = coord;\n this._url = url;\n this._webgl = webgl;\n this._shaderProgram = shaderProgram;\n this._meshBuilder = meshBuilder;\n\n const mesh = this._meshBuilder.buildTileMesh(coord, segmentsPerSide);\n this._gpuMesh = this._meshBuilder.uploadMesh(mesh, this._webgl);\n this.initImage();\n }\n\n get coord(): XYZTileCoord {\n return this._coord;\n }\n\n get ready(): boolean {\n return this._ready;\n }\n\n get loading(): boolean {\n return this._loading;\n }\n\n get failedUntil(): number {\n return this._failedUntil;\n }\n\n get lastUsedAt(): number {\n return this._lastUsedAt;\n }\n\n get createdAt(): number {\n return this._createdAt;\n }\n\n touch(): void {\n this._lastUsedAt = Date.now();\n }\n\n private initImage(): void {\n if (this._loading || this._ready || this._aborted) {\n return;\n }\n\n const now = Date.now();\n if (this._failedUntil > now) {\n return;\n }\n\n this._loading = true;\n const image = new Image();\n this._image = image;\n image.crossOrigin = 'anonymous';\n image.onload = () => this.imageLoaded();\n image.onerror = () => {\n this._ready = false;\n this._loading = false;\n this._failedUntil = Date.now() + 30_000;\n };\n image.src = this._url;\n }\n\n private imageLoaded(): void {\n if (!this._image || this._aborted) {\n return;\n }\n\n this.textureLoaded(this._image);\n this._loading = false;\n this._failedUntil = 0;\n this._ready = true;\n }\n\n private textureLoaded(image: HTMLImageElement): void {\n const gl = this._webgl;\n this._shaderProgram.enableProgram();\n\n const texture = gl.createTexture();\n if (!texture) {\n throw new Error(`Could not create XYZ texture for ${this.key}`);\n }\n\n this._texture = texture;\n gl.activeTexture(gl.TEXTURE0);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n }\n\n draw(\n pMatrix: Mat4,\n vMatrix: Mat4,\n mMatrix: Mat4,\n colorMapIdx: number,\n ): boolean {\n this.touch();\n\n if (!this._ready || !this._texture || this._aborted) {\n return false;\n }\n\n this.drawWithGpuMesh(this._gpuMesh, pMatrix, vMatrix, mMatrix, colorMapIdx);\n return true;\n }\n\n drawRemapped(\n mesh: XYZTileGpuMesh,\n pMatrix: Mat4,\n vMatrix: Mat4,\n mMatrix: Mat4,\n colorMapIdx: number,\n ): boolean {\n this.touch();\n\n if (!this._ready || !this._texture || this._aborted) {\n return false;\n }\n\n this.drawWithGpuMesh(mesh, pMatrix, vMatrix, mMatrix, colorMapIdx);\n return true;\n }\n\n dispose(): void {\n const gl = this._webgl;\n\n if (this._texture) {\n gl.deleteTexture(this._texture);\n this._texture = null;\n }\n if (this._gpuMesh.positionBuffer) {\n gl.deleteBuffer(this._gpuMesh.positionBuffer);\n this._gpuMesh.positionBuffer = null;\n }\n if (this._gpuMesh.uvBuffer) {\n gl.deleteBuffer(this._gpuMesh.uvBuffer);\n this._gpuMesh.uvBuffer = null;\n }\n if (this._gpuMesh.indexBuffer) {\n gl.deleteBuffer(this._gpuMesh.indexBuffer);\n this._gpuMesh.indexBuffer = null;\n }\n\n this._image = undefined;\n this._ready = false;\n this._loading = false;\n this._aborted = true;\n }\n\n private drawWithGpuMesh(\n mesh: XYZTileGpuMesh,\n pMatrix: Mat4,\n vMatrix: Mat4,\n mMatrix: Mat4,\n colorMapIdx: number,\n ): void {\n if (!this._texture) {\n return;\n }\n\n const gl = this._webgl;\n this._shaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, mesh.positionBuffer);\n gl.vertexAttribPointer(\n this._shaderProgram.locations.vertexPositionAttribute,\n 3,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n gl.enableVertexAttribArray(this._shaderProgram.locations.vertexPositionAttribute);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, mesh.uvBuffer);\n gl.vertexAttribPointer(\n this._shaderProgram.locations.textureCoordAttribute,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n gl.enableVertexAttribArray(this._shaderProgram.locations.textureCoordAttribute);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._texture);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, mesh.indexBuffer);\n gl.drawElements(gl.TRIANGLES, mesh.indexCount, mesh.indexType, 0);\n\n gl.disableVertexAttribArray(this._shaderProgram.locations.vertexPositionAttribute);\n gl.disableVertexAttribArray(this._shaderProgram.locations.textureCoordAttribute);\n }\n\n private get key(): string {\n return `${this._coord.z}/${this._coord.x}/${this._coord.y}`;\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport type { XYZTileCoord } from './XYZTypes.js';\n\nexport type XYZBufferedTile = {\n coord: XYZTileCoord;\n loading?: boolean;\n lastUsedAt?: number;\n createdAt?: number;\n touch?: () => void;\n dispose?: () => void;\n};\n\nexport type XYZTileBufferEntry<TTile extends XYZBufferedTile = XYZBufferedTile> = {\n tile: TTile;\n cacheTime0?: number;\n};\n\nexport type XYZTileFactory<TTile extends XYZBufferedTile = XYZBufferedTile> = (\n coord: XYZTileCoord,\n) => TTile;\n\nexport class XYZTileBuffer<TTile extends XYZBufferedTile = XYZBufferedTile> {\n private _tiles: Map<string, XYZTileBufferEntry<TTile>> = new Map();\n private _cachedTiles: Map<string, XYZTileBufferEntry<TTile>> = new Map();\n private _cacheAliveMilliSeconds: number;\n private _cleanerId: number | undefined;\n\n constructor(minutesToLiveInCache = 1) {\n this._cacheAliveMilliSeconds = minutesToLiveInCache * 60 * 1000;\n\n if (typeof window !== 'undefined') {\n this._cleanerId = window.setInterval(() => {\n this.cacheCleaner();\n }, 10_000);\n }\n }\n\n get activeTiles(): Map<string, XYZTileBufferEntry<TTile>> {\n return this._tiles;\n }\n\n get cachedTiles(): Map<string, XYZTileBufferEntry<TTile>> {\n return this._cachedTiles;\n }\n\n get size(): number {\n return this._tiles.size + this._cachedTiles.size;\n }\n\n ensureTiles(\n visibleTiles: XYZTileCoord[],\n tileFactory: XYZTileFactory<TTile>,\n ): string[] {\n const visibleTileKeys: string[] = [];\n\n for (const tileCoord of visibleTiles) {\n const tile = this.getTile(tileCoord, tileFactory);\n this.touchTile(tile);\n visibleTileKeys.push(this.key(tileCoord));\n }\n\n this.syncVisibleTiles(visibleTileKeys);\n return visibleTileKeys;\n }\n\n getTile(\n tileCoord: XYZTileCoord,\n tileFactory: XYZTileFactory<TTile>,\n ): TTile {\n const tileKey = this.key(tileCoord);\n\n if (this._tiles.has(tileKey)) {\n return this._tiles.get(tileKey)!.tile;\n }\n\n if (this._cachedTiles.has(tileKey)) {\n const entry = this._cachedTiles.get(tileKey)!;\n entry.cacheTime0 = undefined;\n this._tiles.set(tileKey, entry);\n this._cachedTiles.delete(tileKey);\n return entry.tile;\n }\n\n const tile = tileFactory(tileCoord);\n this._tiles.set(tileKey, { tile });\n return tile;\n }\n\n getActiveTile(tileKey: string): TTile | null {\n return this._tiles.get(tileKey)?.tile ?? null;\n }\n\n getAnyTile(tileKey: string): TTile | null {\n return this._tiles.get(tileKey)?.tile ?? this._cachedTiles.get(tileKey)?.tile ?? null;\n }\n\n getActiveTiles(): TTile[] {\n return Array.from(this._tiles.values(), (entry) => entry.tile);\n }\n\n syncVisibleTiles(visibleTileKeys: string[]): void {\n const visibleKeySet = new Set(visibleTileKeys);\n\n for (const [tileKey, entry] of this._tiles) {\n if (visibleKeySet.has(tileKey)) {\n this.touchTile(entry.tile);\n continue;\n }\n\n entry.cacheTime0 = Date.now();\n this._cachedTiles.set(tileKey, entry);\n this._tiles.delete(tileKey);\n }\n }\n\n evictCached(maxCachedTiles: number): void {\n if (this.size <= maxCachedTiles) {\n return;\n }\n\n const candidates = Array.from(this._cachedTiles.entries()).sort((a, b) => {\n return this.getTileAgeScore(a[1].tile) - this.getTileAgeScore(b[1].tile);\n });\n\n for (const [tileKey, entry] of candidates) {\n if (this.size <= maxCachedTiles) {\n break;\n }\n if (entry.tile.loading) {\n continue;\n }\n\n entry.tile.dispose?.();\n this._cachedTiles.delete(tileKey);\n }\n }\n\n dispose(): void {\n if (this._cleanerId !== undefined && typeof window !== 'undefined') {\n window.clearInterval(this._cleanerId);\n this._cleanerId = undefined;\n }\n\n for (const entry of this._tiles.values()) {\n entry.tile.dispose?.();\n }\n for (const entry of this._cachedTiles.values()) {\n entry.tile.dispose?.();\n }\n\n this._tiles.clear();\n this._cachedTiles.clear();\n }\n\n key(tileCoord: XYZTileCoord): string {\n return XYZTileBuffer.key(tileCoord);\n }\n\n static key(tileCoord: XYZTileCoord): string {\n return `${tileCoord.z}/${tileCoord.x}/${tileCoord.y}`;\n }\n\n private cacheCleaner(): void {\n const now = Date.now();\n\n for (const [tileKey, entry] of this._cachedTiles) {\n const t0 = entry.cacheTime0;\n if (t0 === undefined || now - t0 <= this._cacheAliveMilliSeconds || entry.tile.loading) {\n continue;\n }\n\n entry.tile.dispose?.();\n this._cachedTiles.delete(tileKey);\n }\n }\n\n private touchTile(tile: TTile): void {\n tile.touch?.();\n }\n\n private getTileAgeScore(tile: TTile): number {\n const lastUsedAt = tile.lastUsedAt ?? 0;\n const createdAt = tile.createdAt ?? lastUsedAt;\n return Math.min(lastUsedAt || createdAt, createdAt);\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport type { XYZRequestSchedulerDebugStats } from './XYZConfig.js'\n\ntype QueueItem = {\n url: string\n resolve: (blob: Blob) => void\n reject: (error: Error) => void\n priority: number\n sequence: number\n}\n\ntype HostBackoffState = {\n cooldownUntil: number\n consecutiveFailures: number\n}\n\nexport class XYZTileRequestError extends Error {\n cooldownMs: number\n retryable: boolean\n\n constructor(message: string, cooldownMs: number, retryable = true) {\n super(message)\n this.name = 'XYZTileRequestError'\n this.cooldownMs = cooldownMs\n this.retryable = retryable\n }\n}\n\nexport class XYZTileRequestScheduler {\n private _maxConcurrent: number\n private _activeCount = 0\n private _queue: QueueItem[] = []\n private _inflight: Map<string, Promise<Blob>> = new Map()\n private _hostBackoff: Map<string, HostBackoffState> = new Map()\n private _sequence = 0\n\n constructor(maxConcurrent = 4) {\n this._maxConcurrent = maxConcurrent\n }\n\n setMaxConcurrent(maxConcurrent: number): void {\n this._maxConcurrent = Math.max(1, Math.floor(maxConcurrent))\n this.pump()\n }\n\n getMaxConcurrent(): number {\n return this._maxConcurrent\n }\n\n getDebugStats(): XYZRequestSchedulerDebugStats {\n const now = Date.now()\n const hostsInBackoff = Array.from(this._hostBackoff.entries())\n .map(([host, state]) => ({\n host,\n cooldownMs: Math.max(0, state.cooldownUntil - now),\n consecutiveFailures: state.consecutiveFailures,\n }))\n .filter((entry) => entry.cooldownMs > 0 || entry.consecutiveFailures > 0)\n .sort((a, b) => b.cooldownMs - a.cooldownMs)\n\n return {\n activeRequests: this._activeCount,\n queuedRequests: this._queue.length,\n inflightRequests: this._inflight.size,\n maxConcurrentRequests: this._maxConcurrent,\n highestQueuedPriority: this._queue[0]?.priority ?? null,\n hostsInBackoff,\n }\n }\n\n load(url: string, priority = 0): Promise<Blob> {\n const inflight = this._inflight.get(url)\n if (inflight) {\n return inflight\n }\n\n const hostCooldown = this.getHostCooldown(url)\n const now = Date.now()\n if (hostCooldown > now) {\n return Promise.reject(\n new XYZTileRequestError(\n `Cooldown active for ${new URL(url).host}`,\n hostCooldown - now,\n ),\n )\n }\n\n const promise = new Promise<Blob>((resolve, reject) => {\n this._queue.push({\n url,\n resolve,\n reject,\n priority,\n sequence: this._sequence++,\n })\n this._queue.sort((a, b) => b.priority - a.priority || a.sequence - b.sequence)\n this.pump()\n }).finally(() => {\n this._inflight.delete(url)\n })\n\n this._inflight.set(url, promise)\n return promise\n }\n\n private pump(): void {\n while (this._activeCount < this._maxConcurrent && this._queue.length > 0) {\n const item = this._queue.shift()\n if (!item) return\n\n const hostCooldown = this.getHostCooldown(item.url)\n const now = Date.now()\n if (hostCooldown > now) {\n item.reject(\n new XYZTileRequestError(\n `Cooldown active for ${new URL(item.url).host}`,\n hostCooldown - now,\n ),\n )\n continue\n }\n\n this._activeCount += 1\n this.fetchBlob(item)\n .then(item.resolve)\n .catch(item.reject)\n .finally(() => {\n this._activeCount -= 1\n this.pump()\n })\n }\n }\n\n private async fetchBlob(item: QueueItem): Promise<Blob> {\n try {\n const response = await fetch(item.url, {\n mode: 'cors',\n cache: 'force-cache',\n })\n\n if (!response.ok) {\n const isTransient = response.status === 429 || response.status >= 500\n const cooldownMs = this.registerFailure(item.url, isTransient)\n throw new XYZTileRequestError(\n `HTTP ${response.status} loading ${item.url}`,\n isTransient ? cooldownMs : 5 * 60 * 1000,\n isTransient,\n )\n }\n\n this.registerSuccess(item.url)\n return await response.blob()\n } catch (error) {\n if (error instanceof XYZTileRequestError) {\n throw error\n }\n\n const cooldownMs = this.registerFailure(item.url, false)\n throw new XYZTileRequestError(\n `Network/CORS failure loading ${item.url}`,\n cooldownMs,\n true,\n )\n }\n }\n\n private getHostCooldown(url: string): number {\n try {\n return this._hostBackoff.get(new URL(url).host)?.cooldownUntil ?? 0\n } catch {\n return 0\n }\n }\n\n private registerSuccess(url: string): void {\n try {\n const host = new URL(url).host\n this._hostBackoff.set(host, {\n cooldownUntil: 0,\n consecutiveFailures: 0,\n })\n } catch {\n // no-op\n }\n }\n\n private registerFailure(url: string, isRateLimited: boolean): number {\n if (!isRateLimited) {\n return 0\n }\n\n try {\n const host = new URL(url).host\n const previous = this._hostBackoff.get(host) ?? {\n cooldownUntil: 0,\n consecutiveFailures: 0,\n }\n const consecutiveFailures = previous.consecutiveFailures + 1\n const baseDelayMs = 4000\n const cooldownMs = Math.min(\n 120000,\n baseDelayMs * (2 ** Math.min(consecutiveFailures - 1, 5)),\n )\n\n this._hostBackoff.set(host, {\n cooldownUntil: Date.now() + cooldownMs,\n consecutiveFailures,\n })\n\n return cooldownMs\n } catch {\n return 30000\n }\n }\n}\n\nexport const xyzTileRequestScheduler = new XYZTileRequestScheduler()\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n\nimport { ReadonlyMat4 } from 'gl-matrix';\n\nimport Camera from '../../Camera.js';\nimport XYZRayPickingUtils from '../../utils/XYZRayPickingUtils.js';\nimport { AbstractSkyEntity } from '../AbstractSkyEntity.js';\nimport type { XYZTileCoord, XYZVisibleTileSelection } from './XYZTypes.js';\n\nexport class XYZVisibleTilesManager {\n private _ancestorsMap: Map<string, XYZTileCoord> = new Map();\n private _visibleTilesMap: Map<string, XYZTileCoord> = new Map();\n private _visibleTiles: XYZTileCoord[] = [];\n private _selection: XYZVisibleTileSelection = {\n key: '0:',\n currentZoom: 0,\n visibleTiles: [],\n visibleTilesMap: new Map(),\n ancestorsMap: new Map(),\n };\n\n get ancestorsMap(): Map<string, XYZTileCoord> {\n return this._ancestorsMap;\n }\n\n get visibleTiles(): XYZTileCoord[] {\n return this._visibleTiles;\n }\n\n get visibleTilesMap(): Map<string, XYZTileCoord> {\n return this._visibleTilesMap;\n }\n\n get selection(): XYZVisibleTileSelection {\n return this._selection;\n }\n\n computeVisibleTiles(\n z: number,\n xyzModel: AbstractSkyEntity,\n webgl: WebGL2RenderingContext,\n camera: Camera,\n pMatrix: ReadonlyMat4,\n sampleCount = 9,\n padding = 2,\n ): XYZVisibleTileSelection {\n this._visibleTiles = XYZRayPickingUtils.getVisibleTilesFromViewport(\n z,\n xyzModel,\n webgl,\n camera,\n pMatrix,\n sampleCount,\n padding,\n );\n\n this._visibleTilesMap = this.buildTileMap(this._visibleTiles);\n this.refreshAncestorsMap(this._visibleTiles);\n\n this._selection = {\n key: this.buildSelectionKey(z, this._visibleTiles),\n currentZoom: z,\n visibleTiles: this._visibleTiles,\n visibleTilesMap: this._visibleTilesMap,\n ancestorsMap: this._ancestorsMap,\n };\n\n return this._selection;\n }\n\n private refreshAncestorsMap(visibleTiles: XYZTileCoord[]): void {\n this._ancestorsMap.clear();\n\n for (const tile of visibleTiles) {\n for (let z = tile.z - 1; z >= 0; z--) {\n const dz = tile.z - z;\n const ancestor = {\n z,\n x: tile.x >> dz,\n y: tile.y >> dz,\n };\n this._ancestorsMap.set(`${ancestor.z}/${ancestor.x}/${ancestor.y}`, ancestor);\n }\n }\n }\n\n private buildTileMap(tiles: XYZTileCoord[]): Map<string, XYZTileCoord> {\n const map = new Map<string, XYZTileCoord>();\n for (const tile of tiles) {\n map.set(this.key(tile), tile);\n }\n return map;\n }\n\n private buildSelectionKey(z: number, tiles: XYZTileCoord[]): string {\n return `${z}:${tiles.map((tile) => `${tile.x}/${tile.y}`).join('|')}`;\n }\n\n private key(tile: XYZTileCoord): string {\n return `${tile.z}/${tile.x}/${tile.y}`;\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n'use strict';\n/**\n * @author Fabrizio Giordano (Fab)\n */\n\nimport GeomUtils, { SelectionObj } from '../../utils/GeomUtils.js';\n\nimport STCSParser, { STCSParseResult } from '../../utils/STCSParser.js';\nimport {Point} from '../Point.js';\nimport { CoordsType } from '../../utils/CoordsType.js';\n\nexport interface FootprintDetail {\n key: string;\n value: string | number;\n valueType?: string;\n unit?: string;\n}\n\n// export interface ParsedSTCS {\n// polygons: Point[][]; // array of polygons (each polygon is array of Point objects)\n// totpoints: number;\n// }\n\nexport class Footprint {\n private _polygons: Point[][] = []; // array of polygons (-> array of points)\n private _convexPolygons: any[][] = []; // convex polygons\n private _stcs?: string; // STC-S string\n private _valid = false;\n private _details: FootprintDetail[];\n private _totPoints = 0;\n private _totConvexPoints = 0;\n private _npix256?: number[];\n private _footprintsPointsOrder?: 1 | -1;\n private _coordsType: CoordsType.ASTRO | CoordsType.GEOGRAPHIC;\n private _selectionObj: SelectionObj | undefined;\n\n private _identifier?: string;\n private _center?: unknown; // could be typed if you have a Point type\n\n /**\n * @param in_stcs STC-S representation of the footprint\n * @param in_details optional metadata\n * @param footprintsPointsOrder 1-> clockwise, -1 counter clockwise\n */\n constructor(\n in_stcs?: string,\n in_details: FootprintDetail[] = [],\n footprintsPointsOrder?: 1 | -1,\n coordsType: CoordsType.ASTRO | CoordsType.GEOGRAPHIC = CoordsType.ASTRO,\n ) {\n this._coordsType = coordsType;\n if (in_stcs) {\n this._stcs = in_stcs.toUpperCase();\n this._details = in_details;\n this._totPoints = 0;\n this._totConvexPoints = 0;\n this._footprintsPointsOrder = footprintsPointsOrder;\n\n this.computePoints();\n this._selectionObj = this.computeSelectionObject();\n\n this._valid = true;\n } else {\n this._details = [];\n }\n }\n\n static fromPolygons(\n polygons: Point[][],\n details: FootprintDetail[] = [],\n coordsType: CoordsType.ASTRO | CoordsType.GEOGRAPHIC = CoordsType.ASTRO,\n ): Footprint {\n const footprint = new Footprint(undefined, [], undefined, coordsType);\n footprint._polygons = polygons;\n footprint._details = details;\n footprint._totPoints = polygons.reduce((total, polygon) => total + polygon.length, 0);\n footprint._totConvexPoints = 0;\n footprint._coordsType = coordsType;\n footprint._selectionObj = footprint.computeSelectionObject();\n footprint._valid = footprint._totPoints > 0;\n return footprint;\n }\n\n private computeSelectionObject(): SelectionObj {\n return GeomUtils.computeSelectionObject(this._polygons);\n }\n\n \n // /**\n // * Return array of HEALPix pixels covering the footprint\n // * NOTE: despite the name, nside is not fixed at 256. It comes from Global.js\n // */\n // private computeNpix256(): number[] {\n // const healpix256 = new Healpix(global.nsideForSelection);\n\n // const points: Pointing[] = [];\n // for (const poly of this._convexPolygons) {\n // for (const currPoint of poly) {\n // const phiTheta = currPoint.computeHealpixPhiTheta();\n // const phiRad = degToRad(phiTheta.phi);\n // const thetaRad = degToRad(phiTheta.theta);\n // points.push(new Pointing(null, false, thetaRad, phiRad));\n // }\n // }\n\n // const rangeSet = healpix256.queryPolygonInclusive(points, 32);\n // return Array.from(rangeSet.r);\n // }\n\n private computePoints(): void {\n const res: STCSParseResult = STCSParser.parseSTCS(this._stcs!, {\n coordsType: this._coordsType,\n });\n this._polygons = res.polygons;\n this._totPoints = res.totpoints;\n }\n\n get valid(): boolean {\n return this._valid;\n }\n\n get totPoints(): number {\n return this._totPoints;\n }\n\n get totConvexPoints(): number {\n return this._totConvexPoints;\n }\n\n get polygons(): Point[][] {\n return this._polygons;\n }\n\n get convexPolygons(): Point[][] {\n return this._convexPolygons;\n }\n\n get identifier(): string | undefined {\n return this._identifier;\n }\n\n get center(): unknown {\n return this._center;\n }\n\n get pixels(): number[] | undefined {\n return this._npix256;\n }\n\n get details(): FootprintDetail[] {\n return this._details;\n }\n\n get selectionObj(): SelectionObj | undefined{\n return this._selectionObj\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { Footprint } from \"./Footprint.js\";\nimport { colorHex2RGB } from \"../../utils/Utils.js\";\n\nimport { FootprintShaderProgram } from \"../../shader/FootprintShaderProgram.js\";\n\nimport MouseHelper from \"../../utils/MouseHelper.js\";\nimport { Point } from \"../Point.js\";\nimport GeomUtils from \"../../utils/GeomUtils.js\";\nimport { CoordsType } from \"../../utils/CoordsType.js\";\nimport { MetadataManager } from \"../MetadataManager.js\";\nimport { MetadataColumn } from \"../MetadataColumn.js\";\nimport { VisibleTilesManager } from \"../hips/VisibleTilesManager.js\";\n\nexport interface HoveredFootprintDetail {\n // metadata: TapMetadataList\n metadata: MetadataManager;\n footprints: Footprint[];\n tableName: string;\n description: string;\n provider: string;\n}\n\nexport type ClickedFootprintState = {\n footprint: Footprint;\n selected: boolean;\n};\n\nexport type FootprintPickResult = {\n footprints: Footprint[];\n pickedIndexes: number[];\n};\n\nexport type FootprintClickResult = {\n footprints: Footprint[];\n selectionState: ClickedFootprintState[];\n};\n\nexport class FootprintSetGL {\n static ELEM_SIZE = 3;\n static BYTES_X_ELEM = new Float32Array().BYTES_PER_ELEMENT;\n static CONVEXPOLY_ELEM_SIZE = 3;\n\n _kind: string = \"FootprintSetGL\";\n _ready: boolean;\n // footprintsetProps: FootprintProps\n _name: string;\n _description: string;\n // tapRepo: TapRepo\n\n extHoveredIndexes!: Uint32Array;\n\n oldMouseCoords: any;\n healpixDensityMap: any;\n\n totConvexPoints!: number;\n\n // footprintsInPix256: Map<number, Footprint[]>\n\n // gl: GL;\n\n // shaderProgram: WebGLProgram\n vertexCataloguePositionBuffer!: WebGLBuffer;\n indexBuffer!: WebGLBuffer;\n\n hoveredVertexPositionBuffer!: WebGLBuffer;\n hoveredIndexBuffer!: WebGLBuffer;\n\n selectedVertexPositionBuffer!: WebGLBuffer;\n selectedIndexBuffer!: WebGLBuffer;\n\n indexes!: Uint32Array;\n footprintPolygons: Footprint[] = [];\n vertexCataloguePosition!: Float32Array;\n totPoints!: number;\n nPrimitiveFlags: number = 0;\n\n hoveredIndexes!: number[];\n hoveredElementIndexes!: Uint32Array;\n private _hoveredFootprints: Footprint[] = [];\n hoveredVertexPosition!: Float32Array;\n totHoveredPoints!: number;\n nHoveredPrimitiveFlags: number = 0;\n\n selectedIndexes!: number[];\n selectedElementIndexes!: Uint32Array;\n private _selectedFootprints: Footprint[] = [];\n selectedVertexPosition!: Float32Array;\n totSelectedPoints!: number;\n nSlectedPrimitiveFlags: number = 0;\n _shapeColor = \"#00fff2ff\";\n protected _coordsType: CoordsType.ASTRO | CoordsType.GEOGRAPHIC = CoordsType.ASTRO;\n\n protected _bufferInitialised = false;\n private _webgl: WebGL2RenderingContext;\n\n _isVisible: boolean = true;\n protected _metadataManager: MetadataManager;\n\n _providerUrl: string;\n private _footprintShaderProgram: FootprintShaderProgram;\n private _visibleTilesManager: VisibleTilesManager;\n\n constructor(\n fsetName: string,\n fsetDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n webgl: WebGL2RenderingContext,\n visibleTilesManager: VisibleTilesManager,\n ) {\n this._webgl = webgl;\n this._ready = false;\n this._visibleTilesManager = visibleTilesManager;\n\n (this as any).TYPE = \"FOOTPRINT_SET\";\n\n this._name = fsetName;\n this._description = fsetDescription;\n this._providerUrl = providerUrl;\n\n this._metadataManager = metadataManager;\n\n this.initFootprintArrays();\n\n this.oldMouseCoords = null;\n\n this._footprintShaderProgram = new FootprintShaderProgram(this._webgl);\n this._footprintShaderProgram.shaderProgram;\n }\n\n private initFootprintArrays(): void {\n this.footprintPolygons = [];\n this.indexes = new Uint32Array();\n this.vertexCataloguePosition = new Float32Array();\n this.totPoints = 0;\n this.totConvexPoints = 0;\n this.extHoveredIndexes = new Uint32Array();\n\n this._hoveredFootprints = [];\n this.hoveredVertexPosition = new Float32Array();\n this.totHoveredPoints = 0;\n this.hoveredIndexes = [];\n this.hoveredElementIndexes = new Uint32Array();\n\n this._selectedFootprints = [];\n this.selectedVertexPosition = new Float32Array();\n this.totSelectedPoints = 0;\n this.selectedIndexes = [];\n this.selectedElementIndexes = new Uint32Array();\n }\n\n private initGLBuffers(): void {\n if (!this._webgl) return;\n this.vertexCataloguePositionBuffer = this._webgl.createBuffer();\n this.indexBuffer = this._webgl.createBuffer();\n\n this.hoveredVertexPositionBuffer = this._webgl.createBuffer();\n this.hoveredIndexBuffer = this._webgl.createBuffer();\n\n this.selectedVertexPositionBuffer = this._webgl.createBuffer();\n this.selectedIndexBuffer = this._webgl.createBuffer();\n }\n\n public setIsVisible(visibility: boolean) {\n this._isVisible = visibility;\n }\n\n get isVisible() {\n return this._isVisible;\n }\n\n get shapeColor() {\n return this._shapeColor;\n }\n\n get providerUrl() {\n return this._providerUrl;\n }\n\n get name() {\n return this._name;\n }\n\n get metadataManager() {\n return this._metadataManager;\n }\n\n addFootprint(in_footprint: Footprint): void {\n this.footprintPolygons.push(in_footprint);\n }\n\n // addFootprints(in_data: any[], columnsmeta: TapMetadata[]): void {\n addFootprints(in_data: any[], columnsmeta: MetadataColumn[]): void {\n this._ready = false;\n\n this._metadataManager = new MetadataManager(columnsmeta);\n\n // const geomDataIndex = this.footprintsetProps.geomColumn?.index\n const geomDataIndex =\n this._metadataManager.selectedOutlineColumn?.index ?? -1;\n\n if (geomDataIndex < 0) {\n throw new Error(\n \"geomColumn or its index is undefined in footprintsetProps\",\n );\n }\n\n for (let j = 0; j < in_data.length; j++) {\n if (in_data[j][geomDataIndex] !== null) {\n const footprint = new Footprint(\n in_data[j][geomDataIndex],\n in_data[j],\n undefined,\n this._coordsType,\n );\n if ((footprint as any)._valid) {\n this.addFootprint(footprint);\n this.totPoints += footprint.totPoints;\n this.totConvexPoints += footprint.totConvexPoints;\n }\n }\n }\n\n // this.initBuffer()\n this._ready = true;\n this._bufferInitialised = false;\n }\n\n clearFootprints(): void {\n this.initFootprintArrays();\n }\n\n private initBuffer(): void {\n // this._webgl = webgl\n if (!this._webgl) return;\n this.initGLBuffers();\n\n const nFootprints = this.footprintPolygons.length;\n let npolygons = nFootprints - 1;\n\n for (let j = 0; j < nFootprints; j++) {\n npolygons += this.footprintPolygons[j].polygons.length - 1;\n }\n\n this.indexes = new Uint32Array(this.totPoints + npolygons + 1);\n const MAX_UNSIGNED_INT = 0xffffffff;\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.vertexCataloguePositionBuffer,\n );\n this.vertexCataloguePosition = new Float32Array(3 * this.totPoints);\n\n let positionIndex = 0;\n let vIdx = 0;\n const R = 1.0;\n this.nPrimitiveFlags = 0;\n\n for (let j = 0; j < nFootprints; j++) {\n const footprint = this.footprintPolygons[j];\n const footprintPoly = footprint.polygons;\n\n if (j > 0) {\n this.indexes[vIdx++] = MAX_UNSIGNED_INT;\n this.nPrimitiveFlags++;\n }\n\n for (const poly of footprintPoly) {\n if (poly !== footprintPoly[0]) {\n this.indexes[vIdx++] = MAX_UNSIGNED_INT;\n this.nPrimitiveFlags++;\n }\n\n for (const point of poly) {\n this.vertexCataloguePosition[positionIndex++] = R * point.x;\n this.vertexCataloguePosition[positionIndex++] = R * point.y;\n this.vertexCataloguePosition[positionIndex++] = R * point.z;\n this.indexes[vIdx++] = Math.floor((positionIndex - 1) / 3);\n }\n }\n }\n\n this.indexes[this.indexes.length - 1] = MAX_UNSIGNED_INT;\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.vertexCataloguePositionBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ARRAY_BUFFER,\n this.vertexCataloguePosition,\n this._webgl.STATIC_DRAW,\n );\n\n this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);\n this._webgl.bufferData(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.indexes,\n this._webgl.STATIC_DRAW,\n );\n\n this._bufferInitialised = true;\n console.log(\"Buffer initialized\");\n }\n\n checkSelection(mouseHelper: MouseHelper) {\n if (!mouseHelper.x || !mouseHelper.y || !mouseHelper.z) return;\n\n let mousePix = mouseHelper.computeNpix();\n if (!mousePix) return;\n\n this._hoveredFootprints = [];\n this.totHoveredPoints = 0;\n\n const mousePoint = new Point(\n { x: mouseHelper.x, y: mouseHelper.y, z: mouseHelper.z },\n CoordsType.CARTESIAN,\n );\n\n for (let i = 0; i < this.footprintPolygons.length; i++) {\n const footprint: Footprint = this.footprintPolygons[i];\n if (!footprint.selectionObj) continue;\n\n if (\n GeomUtils.checkPointInsidePolygon5(footprint.selectionObj, mousePoint)\n ) {\n const details = [...footprint.details];\n // const geomDataIndex = this.footprintsetProps.geomColumn?.index\n const geomDataIndex =\n this._metadataManager.selectedOutlineColumn?.index ?? -1;\n\n if (geomDataIndex >= 0) details.splice(geomDataIndex, 1);\n this._hoveredFootprints.push(footprint);\n this.totHoveredPoints += footprint.totPoints;\n }\n }\n this.initHoveringBuffer();\n }\n\n get hoveredFootprints(): HoveredFootprintDetail {\n return {\n // metadata: this.footprintsetProps.tapMetadataList,\n metadata: this._metadataManager,\n footprints: this._hoveredFootprints,\n tableName: this._name,\n description: this._description,\n // provider: this.tapRepo.tapBaseUrl\n provider: this._providerUrl,\n };\n }\n\n get selectedFootprints(): Footprint[] {\n return this._selectedFootprints;\n }\n\n private checkClicking(in_mouseHelper: MouseHelper): number[] {\n if (\n in_mouseHelper.x == null ||\n in_mouseHelper.y == null ||\n in_mouseHelper.z == null\n ) {\n return [];\n }\n\n const clickedIndexes: number[] = [];\n const mousePoint = new Point(\n { x: in_mouseHelper.x, y: in_mouseHelper.y, z: in_mouseHelper.z },\n CoordsType.CARTESIAN,\n );\n\n for (let i = 0; i < this.footprintPolygons.length; i++) {\n const footprint = this.footprintPolygons[i];\n if (!footprint.selectionObj) continue;\n\n if (\n GeomUtils.checkPointInsidePolygon5(footprint.selectionObj, mousePoint)\n ) {\n clickedIndexes.push(i);\n }\n }\n\n return clickedIndexes;\n }\n\n private setSelectedIndexes(selectedIndex: number[]) {\n selectedIndex.forEach((idx) => {\n if (idx < 0 || idx >= this.footprintPolygons.length) return;\n\n if (this.selectedIndexes.includes(idx)) {\n this.selectedIndexes.splice(this.selectedIndexes.indexOf(idx), 1);\n } else {\n this.selectedIndexes.push(idx);\n }\n });\n\n this.refreshSelectedFootprints();\n }\n\n private refreshSelectedFootprints() {\n this._selectedFootprints = this.selectedIndexes\n .map((idx) => this.footprintPolygons[idx])\n .filter((footprint): footprint is Footprint => Boolean(footprint));\n this.totSelectedPoints = this._selectedFootprints.reduce(\n (total, footprint) => total + footprint.totPoints,\n 0,\n );\n\n if (this._selectedFootprints.length === 0) {\n this.selectedVertexPosition = new Float32Array();\n this.selectedElementIndexes = new Uint32Array();\n this.nSlectedPrimitiveFlags = 0;\n return;\n }\n\n this.initSelectionBuffer();\n }\n\n getFootprintsFromPointer(\n in_mouseHelper: MouseHelper,\n ): FootprintPickResult | null {\n const pickedIndexes = this.checkClicking(in_mouseHelper);\n if (!pickedIndexes.length) {\n return {\n footprints: [],\n pickedIndexes: [],\n };\n }\n\n const footprints: Footprint[] = [];\n pickedIndexes.forEach((idx) => {\n const footprint = this.footprintPolygons[idx];\n if (footprint) footprints.push(footprint);\n });\n\n return footprints.length ? { footprints, pickedIndexes } : null;\n }\n\n selectPrimaryFootprintFromClick(\n in_mouseHelper: MouseHelper,\n ): FootprintClickResult | null {\n const picked = this.getFootprintsFromPointer(in_mouseHelper);\n const clickedIndexes = picked?.pickedIndexes ?? [];\n\n this.setSelectedIndexes(clickedIndexes);\n if (!clickedIndexes.length) {\n return {\n footprints: [],\n selectionState: [],\n };\n }\n\n const selectionState: ClickedFootprintState[] = [];\n const selectedFootprints: Footprint[] = [];\n\n clickedIndexes.forEach((idx) => {\n const footprint = this.footprintPolygons[idx];\n if (!footprint) return;\n\n const selected = this.selectedIndexes.includes(idx);\n selectionState.push({ footprint, selected });\n selectedFootprints.push(footprint);\n });\n\n return selectedFootprints.length\n ? { footprints: selectedFootprints, selectionState }\n : null;\n }\n\n // highlightFootprint(footprint: Footprint, highlighted: boolean) {\n // if (highlighted) {\n // this._hoveredFootprints.push(footprint)\n // this.totHoveredPoints += footprint.totPoints\n // } else {\n // const indexOfFootprint = this._hoveredFootprints.indexOf(footprint)\n // this._hoveredFootprints.splice(indexOfFootprint, 1)\n // this.totHoveredPoints -= footprint.totPoints\n // }\n // this.initHoveringBuffer()\n // }\n\n /**\n *\n * @param {Footprint[]} footprints\n */\n\n // addFootprint2Selected(footprints: Footprint[]) {\n // let refreshBuffer = false\n // for (let f of footprints) {\n // if (!this._selectedFootprints.includes(f)) {\n // this._selectedFootprints.push(f)\n // this.totSelectedPoints += f.totPoints\n // refreshBuffer = true\n // }\n // }\n // if (refreshBuffer) {\n // this.initSelectionBuffer()\n // }\n // }\n\n /**\n *\n * @param {Footprint} footprint\n */\n // removeFootprintFromSelection(footprint: Footprint) {\n // const indexOfObject = this._selectedFootprints.indexOf(footprint)\n // if (indexOfObject >= 0) {\n // this._selectedFootprints.splice(indexOfObject, 1)\n // this.totSelectedPoints -= footprint.totPoints\n // if (this._selectedFootprints.length > 0) {\n // this.initSelectionBuffer()\n // }\n // }\n\n // }\n\n private FootprintPolygonMatches(left: Footprint, right: Footprint): boolean {\n if (left === right) return true;\n \n const leftConvexPoly = left.convexPolygons;\n const rightConvexPoly = right.convexPolygons;\n if (\n leftConvexPoly !== rightConvexPoly ||\n leftConvexPoly !== rightConvexPoly\n ) {\n return false;\n }\n \n if (left.details.length !== right.details.length) {\n return false;\n }\n \n for (let i = 0; i < left.details.length; i++) {\n if (!Object.is(left.details[i], right.details[i])) {\n return false;\n }\n }\n \n return true;\n }\n \n\n private findFootprintPolygonIndex(footprint: Footprint): number {\n const footprintIndex = this.footprintPolygons.indexOf(footprint);\n if (footprintIndex >= 0) {\n return footprintIndex;\n }\n\n return this.footprintPolygons.findIndex((candidate) =>\n this.FootprintPolygonMatches(candidate, footprint),\n );\n }\n\n extHighlightFootprint(footprint: Footprint, highlighted: boolean) {\n const sIdx = this.findFootprintPolygonIndex(footprint);\n if (sIdx < 0) return;\n const base = sIdx * FootprintSetGL.ELEM_SIZE;\n if (highlighted) {\n if (!this.hoveredIndexes.includes(sIdx)) {\n this.hoveredIndexes.push(sIdx);\n }\n } else {\n \n if (base + 4 >= this.vertexCataloguePosition.length) return;\n const i = this.hoveredIndexes.indexOf(sIdx);\n if (i >= 0) {\n this.hoveredIndexes.splice(i, 1);\n }\n }\n }\n\n extAddPolygons2Selected(footprint: Footprint) {\n if (!this._bufferInitialised) {\n this.initBuffer();\n }\n const sIdx = this.findFootprintPolygonIndex(footprint);\n if (sIdx < 0) return;\n const base = sIdx * FootprintSetGL.ELEM_SIZE;\n \n if (!this.selectedIndexes.includes(sIdx)) {\n this.selectedIndexes.push(sIdx);\n } else {\n if (base + 4 >= this.vertexCataloguePosition.length) return;\n const i = this.selectedIndexes.indexOf(sIdx);\n if (i >= 0) {\n this.selectedIndexes.splice(i, 1);\n }\n }\n this.refreshSelectedFootprints();\n }\n\n initHoveringBuffer() {\n /*\n TODO better approach. when creating the indexbuffer of footprints, \n add 1 extra position for the selection (set to 0 == not selected), \n and save the position \"positionIndex\" in an array (selectionIndexes).\n When checking the selection, I get the index of the footprint, which\n matches with the index in the selectionIndexes to retrieve the position \n of the flag to be set to 1 in the vertexposition\n This will ease checking the selection in the vertex/fragment shader and\n set the pointsize and shape color.\n */\n\n if (!this._webgl) return;\n if (this._hoveredFootprints.length == 0) {\n return;\n }\n let nFootprints = this._hoveredFootprints.length;\n\n let npolygons = nFootprints - 1;\n for (let j = 0; j < nFootprints; j++) {\n npolygons += this._hoveredFootprints[j].polygons.length - 1;\n }\n // this._selectedIndex = new Uint16Array(this._totSelectedPoints + npolygons);\n // let MAX_UNSIGNED_SHORT = 65535; // this is used to enable and disable GL_PRIMITIVE_RESTART_FIXED_INDEX\n\n this.hoveredElementIndexes = new Uint32Array(\n this.totHoveredPoints + npolygons,\n );\n const MAX_UNSIGNED_INT = 0xffffffff; // this is used to enable and disable GL_PRIMITIVE_RESTART_FIXED_INDEX\n // let MAX_UNSIGNED_SHORT = Number.MAX_SAFE_INTEGER;\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.hoveredVertexPositionBuffer,\n );\n\n this.hoveredVertexPosition = new Float32Array(3 * this.totHoveredPoints);\n let positionIndex = 0;\n let vIdx = 0;\n\n let R = 1.0;\n this.nHoveredPrimitiveFlags = 0;\n\n for (let j = 0; j < nFootprints; j++) {\n let hoveredFootprintPoly = this._hoveredFootprints[j].polygons;\n\n if (j > 0) {\n this.hoveredElementIndexes[vIdx] = MAX_UNSIGNED_INT;\n this.nHoveredPrimitiveFlags += 1;\n vIdx += 1;\n }\n\n for (let polyIdx = 0; polyIdx < hoveredFootprintPoly.length; polyIdx++) {\n if (polyIdx > 0) {\n this.hoveredElementIndexes[vIdx] = MAX_UNSIGNED_INT;\n this.nHoveredPrimitiveFlags += 1;\n vIdx += 1;\n }\n const poly = hoveredFootprintPoly[polyIdx];\n for (let pointIdx = 0; pointIdx < poly.length; pointIdx++) {\n const p = poly[pointIdx];\n this.hoveredVertexPosition[positionIndex] = R * p.x;\n this.hoveredVertexPosition[positionIndex + 1] = R * p.y;\n this.hoveredVertexPosition[positionIndex + 2] = R * p.z;\n\n this.hoveredElementIndexes[vIdx] = Math.floor(positionIndex / 3);\n\n vIdx += 1;\n positionIndex += 3;\n }\n }\n }\n }\n\n initSelectionBuffer() {\n if (!this._webgl) return;\n if (this._selectedFootprints.length == 0) {\n return;\n }\n\n const nFootprints = this._selectedFootprints.length;\n let npolygons = nFootprints - 1;\n for (let j = 0; j < nFootprints; j++) {\n npolygons += this._selectedFootprints[j].polygons.length - 1;\n }\n\n this.selectedElementIndexes = new Uint32Array(\n this.totSelectedPoints + npolygons,\n );\n const MAX_UNSIGNED_INT = 0xffffffff;\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.selectedVertexPositionBuffer,\n );\n\n this.selectedVertexPosition = new Float32Array(3 * this.totSelectedPoints);\n let positionIndex = 0;\n let vIdx = 0;\n\n const R = 1.0;\n this.nSlectedPrimitiveFlags = 0;\n\n for (let j = 0; j < nFootprints; j++) {\n const footprintPoly = this._selectedFootprints[j].polygons;\n\n if (j > 0) {\n this.selectedElementIndexes[vIdx] = MAX_UNSIGNED_INT;\n this.nSlectedPrimitiveFlags += 1;\n vIdx += 1;\n }\n\n for (let polyIdx = 0; polyIdx < footprintPoly.length; polyIdx++) {\n if (polyIdx > 0) {\n this.selectedElementIndexes[vIdx] = MAX_UNSIGNED_INT;\n this.nSlectedPrimitiveFlags += 1;\n vIdx += 1;\n }\n const poly = footprintPoly[polyIdx];\n for (let pointIdx = 0; pointIdx < poly.length; pointIdx++) {\n const p = poly[pointIdx];\n this.selectedVertexPosition[positionIndex] = R * p.x;\n this.selectedVertexPosition[positionIndex + 1] = R * p.y;\n this.selectedVertexPosition[positionIndex + 2] = R * p.z;\n\n this.selectedElementIndexes[vIdx] = Math.floor(positionIndex / 3);\n\n vIdx += 1;\n positionIndex += 3;\n }\n }\n }\n }\n\n changeColor(color: string): void {\n this._shapeColor = color;\n }\n\n draw(\n in_mMatrix: Float32Array,\n in_mouseHelper: MouseHelper,\n vMatrix: Float32Array,\n pMatrix: Float32Array,\n ): void {\n if (!this.isVisible) return;\n if (!this._ready) return;\n if (!vMatrix) return;\n // if (!global.camera) return\n if (!this._bufferInitialised) this.initBuffer();\n if (!this._webgl) return;\n\n this._footprintShaderProgram.enableShaders(pMatrix, in_mMatrix, vMatrix);\n // this._footprintShaderProgram.enableShaders(\n // computePerspectiveMatrixSingleton.pMatrix as Float32Array,\n // in_mMatrix,\n // vMatrix\n // )\n\n if (in_mouseHelper != null && in_mouseHelper.xyz != this.oldMouseCoords) {\n this.checkSelection(in_mouseHelper);\n }\n\n if (this._hoveredFootprints.length > 0) {\n // TODO POINT_SIZE doesn't have any effect on line thickness!! it only applies to points\n const rgb = colorHex2RGB(\"#00FF00\");\n const alpha = 1.0;\n this._webgl.uniform4f(\n this._footprintShaderProgram.locations.color,\n rgb[0],\n rgb[1],\n rgb[2],\n alpha,\n );\n this._webgl.uniform1f(\n this._footprintShaderProgram.locations.pointSize,\n 14.0,\n ); // <--- POINT_SIZE in LINE_LOOP is not applicable\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.hoveredVertexPositionBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ARRAY_BUFFER,\n this.hoveredVertexPosition,\n this._webgl.STATIC_DRAW,\n );\n\n // setting footprint position\n this._webgl.vertexAttribPointer(\n this._footprintShaderProgram.locations.position,\n FootprintSetGL.ELEM_SIZE,\n this._webgl.FLOAT,\n false,\n FootprintSetGL.BYTES_X_ELEM * FootprintSetGL.ELEM_SIZE,\n 0,\n );\n this._webgl.enableVertexAttribArray(\n this._footprintShaderProgram.locations.position,\n );\n\n this._webgl.bindBuffer(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.hoveredIndexBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.hoveredElementIndexes,\n this._webgl.STATIC_DRAW,\n );\n\n // this._gl.drawElements (this._gl.LINE_LOOP, this._selectedVertexPosition.length / 3 + this._nSlectedPrimitiveFlags,this._gl.UNSIGNED_SHORT, 0);\n this._webgl.drawElements(\n this._webgl.LINE_LOOP,\n this.hoveredVertexPosition.length / 3 + this.nHoveredPrimitiveFlags,\n this._webgl.UNSIGNED_INT,\n 0,\n );\n }\n\n if (this._selectedFootprints.length > 0) {\n const rgb = colorHex2RGB(\"#ECB462\");\n const alpha = 1.0;\n this._webgl.uniform4f(\n this._footprintShaderProgram.locations.color,\n rgb[0],\n rgb[1],\n rgb[2],\n alpha,\n );\n this._webgl.uniform1f(\n this._footprintShaderProgram.locations.pointSize,\n 14.0,\n ); // <--- POINT_SIZE in LINE_LOOP is not applicable\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.selectedVertexPositionBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ARRAY_BUFFER,\n this.selectedVertexPosition,\n this._webgl.STATIC_DRAW,\n );\n\n // setting footprint position\n this._webgl.vertexAttribPointer(\n this._footprintShaderProgram.locations.position,\n FootprintSetGL.ELEM_SIZE,\n this._webgl.FLOAT,\n false,\n FootprintSetGL.BYTES_X_ELEM * FootprintSetGL.ELEM_SIZE,\n 0,\n );\n this._webgl.enableVertexAttribArray(\n this._footprintShaderProgram.locations.position,\n );\n\n this._webgl.bindBuffer(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.selectedIndexBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.selectedElementIndexes,\n this._webgl.STATIC_DRAW,\n );\n\n // this._gl.drawElements (this._gl.LINE_LOOP, this._selectedVertexPosition.length / 3 + this._nSlectedPrimitiveFlags,this._gl.UNSIGNED_SHORT, 0);\n this._webgl.drawElements(\n this._webgl.LINE_LOOP,\n this.selectedVertexPosition.length / 3 + this.nSlectedPrimitiveFlags,\n this._webgl.UNSIGNED_INT,\n 0,\n );\n }\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.vertexCataloguePositionBuffer,\n );\n\n this._webgl.vertexAttribPointer(\n this._footprintShaderProgram.locations.position as number,\n FootprintSetGL.ELEM_SIZE,\n this._webgl.FLOAT,\n false,\n FootprintSetGL.BYTES_X_ELEM * FootprintSetGL.ELEM_SIZE,\n 0,\n );\n this._webgl.enableVertexAttribArray(\n this._footprintShaderProgram.locations.position as number,\n );\n\n this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);\n\n // const shapeColor = [...colorHex2RGB(this.footprintsetProps.shapeColor), 1.0] as [number, number, number, number]\n const shapeColor = [...colorHex2RGB(this._shapeColor), 1.0] as [\n number,\n number,\n number,\n number,\n ];\n this._webgl.uniform4f(\n this._footprintShaderProgram.locations.color as WebGLUniformLocation,\n ...shapeColor,\n );\n\n this._webgl.drawElements(\n this._webgl.LINE_LOOP,\n this.indexes.length,\n this._webgl.UNSIGNED_INT,\n 0,\n );\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, null);\n this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, null);\n this.oldMouseCoords = in_mouseHelper.xyz;\n }\n}\n\n// export default FootprintSetGL\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { vec4, mat4, ReadonlyMat4 } from 'gl-matrix';\n\nimport { fovHelper } from '../hips/FoVHelper.js';\nimport { colorHex2RGB, degToRad } from '../../utils/Utils.js';\nimport GridShaderManager from '../../shader/GridShaderManager.js';\nimport { Point } from '../Point.js';\nimport { CoordsType } from '../../utils/CoordsType.js';\nimport { FoVUtils } from '../../utils/FoVUtils.js';\n\nimport GridTextHelper from './GridTextHelper.js';\nimport type { GridLabelContainers } from './GridTextHelper.js';\nimport { HealpixGrid } from './HealpixGrid.js';\nimport { AbstractSkyEntity, SkyEntityDrawInput } from '../AbstractSkyEntity.js';\n// import healpixGridSingleton from './HealpixGridSingleton.js';\n// import computePerspectiveMatrixSingleton from '../../utils/ComputePerspectiveMatrix.js';\n// import Camera from '../../Camera.js';\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\n/** Equatorial grid rendered as RA/Dec great-circle line loops */\nexport class EquatorialGrid extends AbstractSkyEntity {\n\tstatic ELEM_SIZE = 3;\n\tstatic BYTES_X_ELEM = new Float32Array().BYTES_PER_ELEMENT;\n\n\tprivate showGrid: boolean = false\n\n\t// private _gl: GL;\n\tprivate _shaderProgram!: WebGLProgram;\n\tprivate _vertexShader!: WebGLShader;\n\tprivate _fragmentShader!: WebGLShader;\n\n\tprivate defaultColor = '#41d421'\n\tprivate gridText: GridTextHelper\n\n\tprivate _attribLocations: { position: number; selected: number; pointSize: number; color: number } = {\n\t\tposition: 0,\n\t\tselected: 1,\n\t\tpointSize: 2,\n\t\tcolor: 3,\n\t};\n\n\n\tprivate _phiVertexPositionBuffer!: WebGLBuffer;\n\tprivate _thetaVertexPositionBuffer!: WebGLBuffer;\n\n\tprivate _fov!: number;\n\n\t// Step sizes (degrees + radians) and label caches\n\tprivate _phiStep = 0;\n\tprivate _phiStepRad = 0;\n\tprivate _thetaStep = 0;\n\tprivate _thetaStepRad = 0;\n\n\tprivate _phiArray: Float32Array[] = [];\n\tprivate _thetaArray: Float32Array[] = [];\n\tprivate _bufferKey = '';\n\n\t// For placing text labels near current view center:\n\t// - _dec4Labels: key = RA(deg), value = points along that RA ring (for Dec labels)\n\t// - _ra4Labels : key = Dec(deg), value = points along that Dec ring (for RA labels)\n\tprivate _dec4Labels: Map<number, number[][]> = new Map();\n\tprivate _ra4Labels: Map<number, number[][]> = new Map();\n\tprivate _healpixGrid: HealpixGrid;\n\n\t/**\n\t * @param radius Not used by current implementation (sphere is unit-radius)\n\t * @param fov Field of view in degrees\n\t */\n\tconstructor(webgl: WebGL2RenderingContext, healpixGrid: HealpixGrid, gridLabelContainers?: GridLabelContainers) {\n\t\tsuper(HealpixGrid.RADIUS, HealpixGrid.INITIAL_POSITION, HealpixGrid.INITIAL_PhiRad, HealpixGrid.INITIAL_ThetaRad, 'equatorial-grid', webgl);\n\t\tthis._healpixGrid = healpixGrid\n\t\tthis.gridText = new GridTextHelper('equatorial', gridLabelContainers)\n\t}\n\n\tinit(fov: number) {\n\t\tthis._fov = fov\n\n\t\tthis.initGL(super.webgl as GL);\n\n\t\t// Program & buffers\n\t\tthis._shaderProgram = (super.webgl as GL).createProgram() as WebGLProgram;\n\t\tthis.initShaders();\n\n\t\tthis._phiVertexPositionBuffer = (super.webgl as GL).createBuffer()!;\n\t\tthis._thetaVertexPositionBuffer = (super.webgl as GL).createBuffer()!;\n\n\t\t// Build initial RA/Dec line buffers\n\t\tthis.initBuffers(this._fov);\n\t}\n\n\t/** Compile/link shaders and fetch uniform/attribute locations */\n\tprivate initShaders(): void {\n\t\t// Fragment\n\t\tconst fsSource = GridShaderManager.healpixGridFS();\n\t\tthis._fragmentShader = (super.webgl as GL).createShader((super.webgl as GL).FRAGMENT_SHADER)!;\n\t\t(super.webgl as GL).shaderSource(this._fragmentShader, fsSource);\n\t\t(super.webgl as GL).compileShader(this._fragmentShader);\n\t\tif (!(super.webgl as GL).getShaderParameter(this._fragmentShader, (super.webgl as GL).COMPILE_STATUS)) {\n\t\t\t// Keep identical behavior (alert) but surface errors in console too\n\t\t\tconst log = (super.webgl as GL).getShaderInfoLog(this._fragmentShader) || 'Unknown fragment shader error';\n\t\t\tconsole.error(log);\n\t\t\talert(log);\n\t\t\treturn;\n\t\t}\n\n\t\t// Vertex\n\t\tconst vsSource = GridShaderManager.healpixGridVS();\n\t\tthis._vertexShader = (super.webgl as GL).createShader((super.webgl as GL).VERTEX_SHADER)!;\n\t\t(super.webgl as GL).shaderSource(this._vertexShader, vsSource);\n\t\t(super.webgl as GL).compileShader(this._vertexShader);\n\t\tif (!(super.webgl as GL).getShaderParameter(this._vertexShader, (super.webgl as GL).COMPILE_STATUS)) {\n\t\t\tconst log = (super.webgl as GL).getShaderInfoLog(this._vertexShader) || 'Unknown vertex shader error';\n\t\t\tconsole.error(log);\n\t\t\talert(log);\n\t\t\treturn;\n\t\t}\n\n\t\t// Link\n\t\t(super.webgl as GL).attachShader(this._shaderProgram, this._vertexShader);\n\t\t(super.webgl as GL).attachShader(this._shaderProgram, this._fragmentShader);\n\t\t(super.webgl as GL).linkProgram(this._shaderProgram);\n\n\t\tif (!(super.webgl as GL).getProgramParameter(this._shaderProgram, (super.webgl as GL).LINK_STATUS)) {\n\t\t\talert('Could not initialise shaders');\n\t\t}\n\n\t\t(super.webgl as GL).useProgram(this._shaderProgram);\n\n\t}\n\n\t/** Build RA/Dec line vertex arrays based on FoV step helper */\n\tprivate initBuffers(fovDeg: number, coarse = false): void {\n\t\tconst R = 1.0;\n\n\t\tconst steps = fovHelper.getRADegSteps(fovDeg, coarse);\n\t\tconst phiStep = steps.raStep as number; // RA step (deg)\n\t\tconst thetaStep = steps.decStep as number; // Dec step (deg)\n\n\t\tthis._phiStep = phiStep;\n\t\tthis._phiStepRad = degToRad(phiStep);\n\t\tthis._thetaStep = thetaStep;\n\t\tthis._thetaStepRad = degToRad(thetaStep);\n\n\t\tthis._ra4Labels = new Map();\n\t\tthis._dec4Labels = new Map();\n\t\tthis._phiArray = [];\n\t\tthis._thetaArray = [];\n\n\t\t// Lines of constant Dec (varying RA): for each Dec, a ring with vertices every phiStep°\n\t\tfor (let theta = thetaStep; theta < 180; theta += thetaStep) {\n\t\t\tconst phiVertexPosition = new Float32Array((360 / phiStep) * 3);\n\n\t\t\tconst thetaRad = degToRad(theta);\n\t\t\tfor (let phi = 0; phi < 360; phi += phiStep) {\n\t\t\t\tconst phiRad = degToRad(phi);\n\t\t\t\tconst x = R * Math.sin(thetaRad) * Math.cos(phiRad);\n\t\t\t\tconst y = R * Math.sin(thetaRad) * Math.sin(phiRad);\n\t\t\t\tconst z = R * Math.cos(thetaRad);\n\n\t\t\t\tconst idx = Math.floor(phi / phiStep);\n\t\t\t\tphiVertexPosition[3 * idx + 0] = x;\n\t\t\t\tphiVertexPosition[3 * idx + 1] = y;\n\t\t\t\tphiVertexPosition[3 * idx + 2] = z;\n\n\t\t\t\tif (!this._dec4Labels.has(phi)) this._dec4Labels.set(phi, []);\n\t\t\t\tthis._dec4Labels.get(phi)!.push([x, y, z]);\n\t\t\t}\n\n\t\t\tthis._phiArray.push(phiVertexPosition);\n\t\t}\n\n\t\t// Lines of constant RA (varying Dec): for each RA, a ring with vertices every thetaStep°\n\t\tfor (let phi = 0; phi < 360; phi += phiStep) {\n\t\t\tconst thetaVertexPosition = new Float32Array((360 / thetaStep) * 3);\n\n\t\t\tconst phiRad = degToRad(phi);\n\t\t\tfor (let theta = 0; theta < 360; theta += thetaStep) {\n\t\t\t\tconst thetaRad = degToRad(theta);\n\t\t\t\tconst x = R * Math.sin(thetaRad) * Math.cos(phiRad);\n\t\t\t\tconst y = R * Math.sin(thetaRad) * Math.sin(phiRad);\n\t\t\t\tconst z = R * Math.cos(thetaRad);\n\n\t\t\t\tconst idx = Math.floor(theta / thetaStep);\n\t\t\t\tthetaVertexPosition[3 * idx + 0] = x;\n\t\t\t\tthetaVertexPosition[3 * idx + 1] = y;\n\t\t\t\tthetaVertexPosition[3 * idx + 2] = z;\n\n\t\t\t\tconst decKey = 90 - theta; // original code’s keying for RA labels\n\t\t\t\tif (!this._ra4Labels.has(decKey)) this._ra4Labels.set(decKey, []);\n\t\t\t\tthis._ra4Labels.get(decKey)!.push([x, y, z]);\n\t\t\t}\n\n\t\t\tthis._thetaArray.push(thetaVertexPosition);\n\t\t}\n\t}\n\n\t/** Update buffers when FoV (in degrees) changes */\n\trefresh(fovDeg: number, coarse = false): void {\n\t\t// const fovDeg = healpixGridSingleton.getMinFoV()\n\t\tconst steps = fovHelper.getRADegSteps(fovDeg, coarse);\n\t\tconst bufferKey = `${coarse ? 'coarse' : 'settled'}:${steps.raStep}:${steps.decStep}`;\n\t\tif (this._bufferKey !== bufferKey) {\n\t\t\tthis._fov = fovDeg;\n\t\t\tthis._bufferKey = bufferKey;\n\t\t\tthis.initBuffers(this._fov, coarse);\n\t\t}\n\t}\n\n\tprivate vectorDistance(p1: Point, p2: Point): number {\n\t\tconst dx = p1.x - p2.x;\n\t\tconst dy = p1.y - p2.y;\n\t\tconst dz = p1.z - p2.z;\n\t\treturn Math.sqrt(dx * dx + dy * dy + dz * dz);\n\t}\n\n\tprivate enableShader(mMatrix: ReadonlyMat4, pMatrix: ReadonlyMat4, vMatrix: ReadonlyMat4): void {\n\t\tconst gl = super.webgl as GL;\n\t\tgl.useProgram(this._shaderProgram);\n\n\t\t// uMVMatrix = camera * model\n\t\tconst mvMatrix = mat4.create();\n\t\t// mat4.multiply(mvMatrix, (global.camera as any).getCameraMatrix() as mat4, mMatrix);\n\t\tmat4.multiply(mvMatrix, vMatrix as mat4, mMatrix);\n\n\t\t// TODO move locations retrieval elsewhere\n\n\t\t// Uniform locations\n\t\tconst uMVMatrixLoc = gl.getUniformLocation(this._shaderProgram, 'uMVMatrix');\n\t\tconst uPMatrixLoc = gl.getUniformLocation(this._shaderProgram, 'uPMatrix');\n\t\tconst uColor = gl.getUniformLocation(this._shaderProgram, 'u_fragcolor');\n\n\t\t// Attribute locations\n\t\tthis._attribLocations.position = gl.getAttribLocation(this._shaderProgram, 'aCatPosition');\n\n\t\tif (uMVMatrixLoc) gl.uniformMatrix4fv(uMVMatrixLoc, false, mvMatrix as Float32Array);\n\t\tif (uPMatrixLoc) gl.uniformMatrix4fv(uPMatrixLoc, false, pMatrix as Float32Array);\n\t\tif (uColor) {\n\t\t\tconst rgb = colorHex2RGB(this.defaultColor);\n\t\t\tgl.uniform4f(uColor, rgb[0], rgb[1], rgb[2], 1.0);\n\t\t}\n\n\t}\n\n\tisVisible(): boolean {\n\t\treturn this.showGrid\n\t}\n\n\ttoggleShowGrid() {\n\t\tthis.showGrid = !this.showGrid\n\t}\n\t/**\n\t * @param mMatrix model matrix associated with current HiPS (or scene) transform\n\t * @param fovObj current field-of-view (degrees). If your FoV type differs,\n\t * pass the numeric value here; this signature matches original usage.\n\t */\n\tdraw(input: SkyEntityDrawInput): void {\n\t\tconst fovDeg = input.fovDeg\n\t\tif (!fovDeg) return\n\n\t\tconst gl = super.webgl as GL;\n\t\tconst mMatrix = this.getModelMatrix();\n\n\t\tconst camera = input.camera\n\t\tif (!camera) return\n\t\tconst vMatrix = camera.getCameraMatrix()\n\n\t\tconst pMatrix = input.pMatrix\n\t\tif (!pMatrix) return\n\n\t\tif (!vMatrix) return\n\t\tif (this._thetaArray.length === 0) return;\n\n\t\tthis.refresh(fovDeg, !!input.cameraMoving);\n\n\t\tif (!this.showGrid) {\n\t\t\t// gridTextHelper.resetDivSets();\n\t\t\tthis.gridText.resetDivSets();\n\t\t\treturn;\n\t\t}\n\n\t\t// const pMatrix = computePerspectiveMatrixSingleton.pMatrix as ReadonlyMat4;\n\t\t\n\t\tthis.enableShader(mMatrix, pMatrix, vMatrix);\n\n\t\t// Draw Dec rings\n\t\tfor (let i = 0; i < this._phiArray.length; i++) {\n\t\t\t(super.webgl as GL).bindBuffer((super.webgl as GL).ARRAY_BUFFER, this._phiVertexPositionBuffer);\n\t\t\t(super.webgl as GL).bufferData((super.webgl as GL).ARRAY_BUFFER, this._phiArray[i], (super.webgl as GL).STATIC_DRAW);\n\t\t\t(super.webgl as GL).vertexAttribPointer(this._attribLocations.position, 3, (super.webgl as GL).FLOAT, false, 0, 0);\n\t\t\t(super.webgl as GL).enableVertexAttribArray(this._attribLocations.position);\n\n\t\t\t(super.webgl as GL).drawArrays((super.webgl as GL).LINE_LOOP, 0, 360 / this._phiStep);\n\t\t}\n\n\t\t// Draw RA rings\n\t\tfor (let j = 0; j < this._thetaArray.length; j++) {\n\t\t\t(super.webgl as GL).bindBuffer((super.webgl as GL).ARRAY_BUFFER, this._thetaVertexPositionBuffer);\n\t\t\t(super.webgl as GL).bufferData((super.webgl as GL).ARRAY_BUFFER, this._thetaArray[j], (super.webgl as GL).STATIC_DRAW);\n\t\t\t(super.webgl as GL).vertexAttribPointer(this._attribLocations.position, 3, (super.webgl as GL).FLOAT, false, 0, 0);\n\t\t\t(super.webgl as GL).enableVertexAttribArray(this._attribLocations.position);\n\n\t\t\t(super.webgl as GL).drawArrays((super.webgl as GL).LINE_LOOP, 0, 360 / this._thetaStep);\n\t\t}\n\n\t\t// Label layout (HTML overlay)\n\t\tconst center = FoVUtils.getCenterJ2000(gl.canvas as HTMLCanvasElement, this._healpixGrid, this._webgl, camera, pMatrix);\n\n\t\t// MVP = P * V * M\n\t\tconst mvMatrix = mat4.create();\n\t\t// mat4.multiply(mvMatrix, (global.camera as any).getCameraMatrix() as unknown as mat4, mMatrix);\n\t\tmat4.multiply(mvMatrix, vMatrix, mMatrix);\n\t\tconst mvpMatrix = mat4.create();\n\t\tmat4.multiply(mvpMatrix, pMatrix, mvMatrix);\n\n\t\t// Dec labels (loop over RA keys)\n\t\tfor (const [raDegKey, points] of this._dec4Labels.entries()) {\n\t\t\tif (Math.abs(raDegKey - center.raDeg) <= this._phiStep) {\n\t\t\t\tfor (let p = 0; p < points.length; p++) {\n\t\t\t\t\tconst [x, y, z] = points[p];\n\t\t\t\t\tconst phiPoint: [number, number, number, number] = [x, y, z, 1];\n\t\t\t\t\tconst point = new Point({ x, y, z }, CoordsType.CARTESIAN);\n\t\t\t\t\tconst decDeg = point.decDeg;\n\n\t\t\t\t\tif (Math.abs(decDeg - center.decDeg) < 60) {\n\t\t\t\t\t\tconst clipspace = vec4.create();\n\t\t\t\t\t\tvec4.transformMat4(clipspace, phiPoint, mvpMatrix);\n\n\t\t\t\t\t\t// perspective divide\n\t\t\t\t\t\tclipspace[0] /= clipspace[3];\n\t\t\t\t\t\tclipspace[1] /= clipspace[3];\n\n\t\t\t\t\t\t// clip -> CSS pixels\n\t\t\t\t\t\tconst canvasRect = ((super.webgl as GL).canvas as HTMLCanvasElement).getBoundingClientRect();\n\t\t\t\t\t\tconst pixelX = canvasRect.left + (clipspace[0] * 0.5 + 0.5) * canvasRect.width;\n\t\t\t\t\t\tconst pixelY = canvasRect.top + (clipspace[1] * -0.5 + 0.5) * canvasRect.height;\n\t\t\t\t\t\tthis.gridText.addEqDivSet(decDeg.toFixed(2), pixelX, pixelY, 'dec');\n\t\t\t\t\t\t// gridTextHelper.addEqDivSet(decDeg.toFixed(2), pixelX, pixelY, 'dec');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// RA labels (loop over Dec keys)\n\t\tfor (const [decDegKey, points] of this._ra4Labels.entries()) {\n\t\t\tif (Math.abs(decDegKey - center.decDeg) <= this._thetaStep) {\n\t\t\t\tfor (let p = 0; p < points.length; p++) {\n\t\t\t\t\tconst [x, y, z] = points[p];\n\t\t\t\t\tconst phiPoint: [number, number, number, number] = [x, y, z, 1];\n\t\t\t\t\tconst point = new Point({ x, y, z }, CoordsType.CARTESIAN);\n\t\t\t\t\tconst d = this.vectorDistance(point, center);\n\n\t\t\t\t\tconst raDeg = point.raDeg;\n\t\t\t\t\tif (d < degToRad(50)) {\n\t\t\t\t\t\tconst clipspace = vec4.create();\n\t\t\t\t\t\tvec4.transformMat4(clipspace, phiPoint, mvpMatrix);\n\n\t\t\t\t\t\tclipspace[0] /= clipspace[3];\n\t\t\t\t\t\tclipspace[1] /= clipspace[3];\n\n\t\t\t\t\t\tconst canvasRect = ((super.webgl as GL).canvas as HTMLCanvasElement).getBoundingClientRect();\n\t\t\t\t\t\tconst pixelX = canvasRect.left + (clipspace[0] * 0.5 + 0.5) * canvasRect.width;\n\t\t\t\t\t\tconst pixelY = canvasRect.top + (clipspace[1] * -0.5 + 0.5) * canvasRect.height;\n\n\t\t\t\t\t\t// gridTextHelper.addEqDivSet(raDeg.toFixed(2), pixelX, pixelY, 'ra');\n\t\t\t\t\t\tthis.gridText.addEqDivSet(raDeg.toFixed(2), pixelX, pixelY, 'ra');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.gridText.resetDivSets();\n\t\t// gridTextHelper.resetDivSets();\n\n\t\t// Cleanup\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n\t}\n}\n\n// const equatorialGridSingleton = new EquatorialGrid();\n// export default equatorialGridSingleton;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\ntype GridLabelLayer = 'healpix' | 'equatorial' | 'lonlat';\ntype GridLabelKind = 'hpx' | 'ra' | 'dec' | 'lon' | 'lat';\n\nexport type GridLabelContainers = {\n coords?: HTMLElement | null;\n healpix?: HTMLElement | null;\n resolveCoords?: () => HTMLElement | null | undefined;\n resolveHealpix?: () => HTMLElement | null | undefined;\n};\n\ntype DivSet = {\n div: HTMLDivElement;\n textNode: Text;\n style: CSSStyleDeclaration;\n};\n\ntype LayerState = {\n container: HTMLElement | null;\n divSets: DivSet[];\n divSetNdx: number;\n};\n\nclass GridTextHelper {\n private layer: GridLabelLayer;\n private state: LayerState;\n private containers?: GridLabelContainers;\n\n constructor(layer: GridLabelLayer = 'equatorial', containers?: GridLabelContainers) {\n this.layer = layer;\n this.containers = containers;\n this.state = {\n container: this.resolveContainer(layer),\n divSets: [],\n divSetNdx: 0,\n };\n }\n\n initHtml(): void {\n this.refreshContainer(this.layer, this.state);\n }\n\n resetDivSets(layer: GridLabelLayer = this.layer): void {\n const state = layer === this.layer ? this.state : {\n container: this.resolveContainer(layer),\n divSets: [],\n divSetNdx: 0,\n };\n this.refreshContainer(layer, state);\n for (; state.divSetNdx < state.divSets.length; ++state.divSetNdx) {\n state.divSets[state.divSetNdx].style.display = 'none';\n }\n state.divSetNdx = 0;\n }\n\n addHPXDivSet(msg: string, x: number, y: number): void {\n this.addLabel('healpix', msg, x + 25, y, 'hpx');\n }\n\n addEqDivSet(msg: string, x: number, y: number, type: 'ra' | 'dec'): void {\n this.addLabel('equatorial', msg, type === 'ra' ? x + 25 : x, type === 'ra' ? y : y + 25, type);\n }\n\n addLonLatDivSet(msg: string, x: number, y: number, type: 'lon' | 'lat'): void {\n this.addLabel('lonlat', msg, type === 'lon' ? x + 25 : x, type === 'lon' ? y : y + 25, type);\n }\n\n private addLabel(\n layer: GridLabelLayer,\n msg: string,\n x: number,\n y: number,\n kind: GridLabelKind,\n ): void {\n const state = layer === this.layer ? this.state : {\n container: this.resolveContainer(layer),\n divSets: [],\n divSetNdx: 0,\n };\n this.refreshContainer(layer, state);\n if (!state.container) return;\n\n let divSet = state.divSets[state.divSetNdx++];\n if (!divSet) {\n const div = document.createElement('div');\n const textNode = document.createTextNode('');\n div.appendChild(textNode);\n state.container.appendChild(div);\n\n divSet = { div, textNode, style: div.style };\n state.divSets.push(divSet);\n }\n\n divSet.div.className = this.classNameForKind(kind);\n divSet.style.display = 'block';\n divSet.style.position = 'absolute';\n divSet.style.zIndex = '2';\n divSet.style.pointerEvents = 'none';\n divSet.style.font = '12px/1.2 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace';\n divSet.style.textShadow = '0 1px 2px rgba(0, 0, 0, 0.7)';\n divSet.style.color = this.colorForKind(kind);\n const containerRect = state.container.getBoundingClientRect();\n divSet.style.left = `${Math.floor(x - containerRect.left)}px`;\n divSet.style.top = `${Math.floor(y - containerRect.top)}px`;\n divSet.textNode.nodeValue = msg;\n }\n\n private colorForKind(kind: GridLabelKind): string {\n switch (kind) {\n case 'dec':\n return '#3fd35f';\n case 'lat':\n return '#f6d35b';\n case 'lon':\n return '#40c8ff';\n case 'hpx':\n case 'ra':\n default:\n return '#5b7cff';\n }\n }\n\n private classNameForKind(kind: GridLabelKind): string {\n switch (kind) {\n case 'dec':\n return 'floating-div-dec';\n case 'lat':\n return 'floating-div-lat';\n case 'lon':\n return 'floating-div-lon';\n case 'hpx':\n case 'ra':\n default:\n return 'floating-div-ra';\n }\n }\n\n private resolveContainer(layer: GridLabelLayer): HTMLElement | null {\n if (layer === 'healpix') {\n const resolved = this.containers?.resolveHealpix?.();\n if (resolved) return resolved;\n if (this.containers?.healpix) return this.containers.healpix;\n return document.querySelector<HTMLElement>('#gridhpx');\n }\n const resolved = this.containers?.resolveCoords?.();\n if (resolved) return resolved;\n if (this.containers?.coords) return this.containers.coords;\n return document.querySelector<HTMLElement>('#gridcoords');\n }\n\n private refreshContainer(layer: GridLabelLayer, state: LayerState): void {\n const next = this.resolveContainer(layer);\n if (next === state.container) return;\n\n for (const divSet of state.divSets) {\n divSet.div.remove();\n }\n\n state.container = next;\n state.divSets = [];\n state.divSetNdx = 0;\n }\n}\n\nexport default GridTextHelper;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n'use strict';\n\nimport {AbstractSkyEntity, SkyEntityDrawInput } from '../AbstractSkyEntity.js';\nimport global from '../../Global.js';\n\nimport { mat4, vec4, ReadonlyMat4 } from 'gl-matrix';\n\nimport { Healpix } from 'astrospatial-core/healpix';\n\nimport { fovHelper } from '../hips/FoVHelper.js';\nimport {FoVUtils} from '../../utils/FoVUtils.js';\nimport { SphereFoV } from '../SphereFoV.js';\n\nimport {CoordsType} from '../../utils/CoordsType.js';\nimport {Point} from '../Point.js';\n\nimport GridShaderManager from '../../shader/GridShaderManager.js';\nimport GeomUtils from '../../utils/GeomUtils.js';\nimport GridTextHelper from './GridTextHelper.js';\nimport type { GridLabelContainers } from './GridTextHelper.js';\nimport { colorHex2RGB } from '../../utils/Utils.js';\nimport { VisibleTilesManager } from '../hips/VisibleTilesManager.js';\nimport { bootSetup } from '../../Config.js';\nimport Camera from '../../Camera.js';\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\ninterface BoundVec {\n x: number;\n y: number;\n z: number;\n}\n\n\nexport class HealpixGrid extends AbstractSkyEntity {\n\n static ELEM_SIZE = 3;\n static BYTES_X_ELEM = new Float32Array().BYTES_PER_ELEMENT;\n\n private _visibleorder = 0;\n private showGrid: boolean = false\n private _shaderProgram!: WebGLProgram;\n private fragmentShader!: WebGLShader;\n private vertexShader!: WebGLShader;\n\n private defaultColor = '#ec0acaff'\n private gridText: GridTextHelper\n // private _hipsShaderProgram: HiPSShaderProgram\n\n private _attribLocations: { position: number; selected: number; pointSize: number; color: number } = {\n position: 0,\n selected: 1,\n pointSize: 2,\n color: 3,\n };\n\n private _nPrimitiveFlags = 0;\n\n private _vertexCataloguePositionBuffer!: WebGLBuffer;\n private _indexBuffer!: WebGLBuffer;\n\n private _vertexCataloguePosition: Float32Array = new Float32Array(0);\n private _indexes: Uint32Array = new Uint32Array(0);\n\n private _fovObj!: SphereFoV;\n\n static INITIAL_FOV = 180;\n static RADIUS = 1;\n static INITIAL_POSITION: [number, number, number] = [0.0, 0.0, 0.0];\n static INITIAL_PhiRad = 0;\n static INITIAL_ThetaRad = 0;\n private _visibleTilesManager: VisibleTilesManager;\n \n\n constructor(webgl: WebGL2RenderingContext, gridLabelContainers?: GridLabelContainers) {\n super(HealpixGrid.RADIUS, HealpixGrid.INITIAL_POSITION, HealpixGrid.INITIAL_PhiRad, HealpixGrid.INITIAL_ThetaRad, 'healpix-grid', webgl);\n this.gridText = new GridTextHelper('healpix', gridLabelContainers)\n this.init()\n this._visibleTilesManager = new VisibleTilesManager(this._webgl, super.hipsShaderProgram, this)\n this._visibleTilesManager.init(bootSetup.insideSphere)\n }\n\n init(): void {\n console.log('HealpixGridSingleton.init()');\n this.initGL(super.webgl as GL);\n\n this._shaderProgram = (super.webgl as GL).createProgram() as WebGLProgram;\n this.initShaders();\n\n const order = fovHelper.getHiPSNorder(HealpixGrid.INITIAL_FOV);\n this._visibleorder = order;\n\n this._nPrimitiveFlags = 0;\n\n this._vertexCataloguePositionBuffer = (super.webgl as GL).createBuffer()!;\n this._indexBuffer = (super.webgl as GL).createBuffer()!;\n\n this._vertexCataloguePosition = new Float32Array(0);\n\n this._fovObj = new SphereFoV(super.webgl);\n }\n\n get fovObj(): SphereFoV {\n return this._fovObj\n }\n\n get RADIUS(): number {\n return HealpixGrid.RADIUS\n }\n\n get INITIAL_POSITION(): [number, number, number] {\n return HealpixGrid.INITIAL_POSITION\n }\n\n get INITIAL_PhiRad(): number {\n return HealpixGrid.INITIAL_PhiRad\n }\n\n get INITIAL_ThetaRad(): number {\n return HealpixGrid.INITIAL_ThetaRad\n }\n\n refreshFoV(camera: Camera, pMatrix: ReadonlyMat4) {\n return this._fovObj.getFoV(global.insideSphere, this, camera, pMatrix) ;\n }\n\n getFoV(): SphereFoV {\n return this._fovObj\n }\n\n getMinFoV() {\n return this._fovObj.minFoV;\n }\n\n private initShaders(): void {\n const gl = super.webgl as GL;\n\n const fragmentShaderStr = GridShaderManager.healpixGridFS();\n this.fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)!;\n gl.shaderSource(this.fragmentShader, fragmentShaderStr);\n gl.compileShader(this.fragmentShader);\n if (!gl.getShaderParameter(this.fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this.fragmentShader) || 'Fragment shader compile error');\n return;\n }\n\n const vertexShaderStr = GridShaderManager.healpixGridVS();\n this.vertexShader = gl.createShader(gl.VERTEX_SHADER)!;\n gl.shaderSource(this.vertexShader, vertexShaderStr);\n gl.compileShader(this.vertexShader);\n if (!gl.getShaderParameter(this.vertexShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this.vertexShader) || 'Vertex shader compile error');\n return;\n }\n\n gl.attachShader(this._shaderProgram, this.vertexShader);\n gl.attachShader(this._shaderProgram, this.fragmentShader);\n gl.linkProgram(this._shaderProgram);\n\n if (!gl.getProgramParameter(this._shaderProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders');\n }\n gl.useProgram(this._shaderProgram);\n }\n\n initBuffers(pixels: number[], order: number): void {\n\n this._nPrimitiveFlags = 0;\n\n const healpix: Healpix = global.getHealpix(order);\n const subhpx: Healpix = global.getHealpix(order + 1);\n const subsubhpx: Healpix = global.getHealpix(order + 2);\n\n let positionIndex = 0;\n let vIdx = 0;\n const R = 1.0;\n\n const MAX_UINT = 0xffffffff;\n\n this._indexes = new Uint32Array(17 * pixels.length);\n this._vertexCataloguePosition = new Float32Array(3 * 16 * pixels.length);\n\n for (let p = 0; p < pixels.length; p++) {\n const vecs = healpix.getBoundaries(pixels[p]) as BoundVec[];\n\n const cpix0 = pixels[p] << 2;\n const cpix1 = cpix0 + 1;\n const cpix2 = cpix0 + 2;\n const cpix3 = cpix0 + 3;\n\n const cp0vecs = subhpx.getBoundaries(cpix0) as BoundVec[];\n const cp3vecs = subhpx.getBoundaries(cpix3) as BoundVec[];\n\n // helper to push a vertex\n const pushV = (v: BoundVec) => {\n this._vertexCataloguePosition[positionIndex] = R * v.x;\n this._vertexCataloguePosition[positionIndex + 1] = R * v.y;\n this._vertexCataloguePosition[positionIndex + 2] = R * v.z;\n this._indexes[vIdx] = Math.floor(positionIndex / 3);\n vIdx += 1;\n positionIndex += 3;\n };\n\n // v0(3/0)\n pushV(vecs[0]);\n\n // v1(15/2)\n let subcpix3 = cpix3 << 2;\n let subcpix3_3 = subcpix3 + 3;\n let tmp = subsubhpx.getBoundaries(subcpix3_3) as BoundVec[];\n pushV(tmp[1]);\n\n // v1(3/1)\n pushV(cp3vecs[1]);\n\n // v0(2/2)\n let subcpix2 = cpix2 << 2;\n let subcpix2_2 = subcpix2 + 2;\n tmp = subsubhpx.getBoundaries(subcpix2_2) as BoundVec[];\n pushV(tmp[0]);\n\n // v1(0/0)\n pushV(vecs[1]);\n\n // v2(2/2)\n pushV(tmp[2]);\n\n // v1(0/1)\n pushV(cp0vecs[1]);\n\n // v1(0/2)\n let subcpix0 = cpix0 << 2;\n let subcpix0_2 = subcpix0;\n tmp = subsubhpx.getBoundaries(subcpix0_2) as BoundVec[];\n pushV(tmp[1]);\n\n // v2(0/0)\n pushV(vecs[2]);\n\n // v3(0/2)\n pushV(tmp[3]);\n\n // v3(0/1)\n pushV(cp0vecs[3]);\n\n // v2(5/2)\n let subcpix1 = cpix1 << 2;\n let subcpix1_1 = subcpix1 + 1;\n tmp = subsubhpx.getBoundaries(subcpix1_1) as BoundVec[];\n pushV(tmp[2]);\n\n // v3(0/0)\n pushV(vecs[3]);\n\n // v0(5/2)\n pushV(tmp[0]);\n\n // v3(3/1)\n pushV(cp3vecs[3]);\n\n tmp = subsubhpx.getBoundaries(subcpix3_3) as BoundVec[];\n pushV(tmp[3]);\n\n // primitive restart\n this._indexes[vIdx] = MAX_UINT;\n this._nPrimitiveFlags += 1;\n vIdx += 1;\n }\n\n }\n\n // updateTiles(pixels: number[], order: number) {\n // return (this as any)._tileBuffer.updateTiles(pixels, order);\n // }\n\n\n private refresh(camera: Camera, pMatrix: ReadonlyMat4): void {\n\n this.refreshFoV(camera, pMatrix);\n const fov = this.getMinFoV();\n // expose to global (legacy)\n // (global as any).hipsFoV = fov;\n // global.order = fovHelper.getHiPSNorder(fov);\n // this._visibleorder = global.order;\n this._visibleorder = fovHelper.getHiPSNorder(fov, this._visibleorder);\n }\n\n private enableShader(in_mMatrix: ReadonlyMat4, pMatrix: ReadonlyMat4, vMatrix: ReadonlyMat4): void {\n const gl = super.webgl as GL;\n\n gl.useProgram(this._shaderProgram);\n // TODO move locations retrieval elsewhere\n\n // Uniform locations\n const uMV = gl.getUniformLocation(this._shaderProgram, 'uMVMatrix');\n const uP = gl.getUniformLocation(this._shaderProgram, 'uPMatrix');\n const uColor = (super.webgl as GL).getUniformLocation(this._shaderProgram, 'u_fragcolor');\n\n // Attribute locations\n this._attribLocations.position = gl.getAttribLocation(this._shaderProgram, 'aCatPosition');\n\n let mvMatrix = mat4.create();\n // mvMatrix = mat4.multiply(mvMatrix, (global.camera as any).getCameraMatrix(), in_mMatrix);\n mvMatrix = mat4.multiply(mvMatrix, vMatrix, in_mMatrix);\n\n if (uMV) gl.uniformMatrix4fv(uMV, false, mvMatrix as Float32Array);\n if (uP) gl.uniformMatrix4fv(uP, false, pMatrix as Float32Array);\n if (uColor) {\n const rgb = colorHex2RGB(this.defaultColor);\n gl.uniform4f(uColor, rgb[0], rgb[1], rgb[2], 1.0);\n }\n }\n\n isVisible(): boolean {\n return this.showGrid\n }\n\n toggleShowGrid() {\n this.showGrid = !this.showGrid\n }\n\n get visibleTilesManager(){\n return this._visibleTilesManager\n }\n\n draw(input: SkyEntityDrawInput): void {\n const gl = super.webgl as GL;\n\n const mMatrix = this.getModelMatrix();\n // const vMatrix = input.camera.getCameraMatrix()\n const camera = input.camera\n if (!camera ) return\n const vMatrix = camera.getCameraMatrix()\n\n const pMatrix = input.pMatrix\n if (!pMatrix ) return\n \n // this.refresh(camera, pMatrix);\n\n const rawFov = input.fovDeg ?? this.getMinFoV()\n const fov = Number.isFinite(rawFov) && rawFov > 0 ? rawFov : 1e-6\n this._visibleorder = fovHelper.getHiPSNorder(fov, this._visibleorder);\n\n if (!this.showGrid) {\n\n // gridTextHelper.resetDivSets();\n this.gridText.resetDivSets();\n return;\n }\n\n // const visibleTiles = visibleTilesManager.visibleTilesByOrder\n const visibleTiles = this._visibleTilesManager.visibleTilesByOrder\n const pixels = visibleTiles.pixels;\n const order = visibleTiles.order;\n\n this.initBuffers(pixels, order);\n\n \n // const pMatrix = computePerspectiveMatrixSingleton.pMatrix as ReadonlyMat4;\n this.enableShader(mMatrix, pMatrix, vMatrix);\n\n // Upload positions\n gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexCataloguePositionBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, this._vertexCataloguePosition, gl.STATIC_DRAW);\n\n gl.vertexAttribPointer(\n this._attribLocations.position,\n HealpixGrid.ELEM_SIZE,\n gl.FLOAT,\n false,\n HealpixGrid.BYTES_X_ELEM * HealpixGrid.ELEM_SIZE,\n 0\n );\n gl.enableVertexAttribArray(this._attribLocations.position);\n\n // Index buffer\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this._indexes, gl.STATIC_DRAW);\n\n gl.drawElements(\n gl.LINE_LOOP,\n this._vertexCataloguePosition.length / 3 + this._nPrimitiveFlags,\n gl.UNSIGNED_INT,\n 0\n );\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n\n // Project and label pixel centers that are inside current FoV\n let mvMatrix = mat4.create();\n // mvMatrix = mat4.multiply(mvMatrix, (global.camera as any).getCameraMatrix(), mMatrix);\n mvMatrix = mat4.multiply(mvMatrix, vMatrix, mMatrix);\n\n let mvpMatrix = mat4.create();\n mvpMatrix = mat4.multiply(mvpMatrix, pMatrix, mvMatrix);\n\n // FIX: pass model & pMatrix to match FoVUtils TS signature\n const center = FoVUtils.getCenterJ2000(gl.canvas as HTMLCanvasElement, this, this._webgl, camera, pMatrix);\n\n const fovMin = (this.getMinFoV() * Math.PI) / 180 / 2;\n\n for (let p = 0; p < pixels.length; p++) {\n const pixCenter = (global.getHealpix(this._visibleorder).pix2vec(pixels[p]) as BoundVec);\n // const pixCenter = (global.getHealpix(global.order).pix2vec(pixels[p]) as BoundVec);\n\n const point = new Point(\n { x: pixCenter.x, y: pixCenter.y, z: pixCenter.z },\n CoordsType.CARTESIAN\n );\n\n const distance = GeomUtils.orthodromicDistance(center, point);\n if (distance < fovMin) {\n const vertex: [number, number, number, number] = [pixCenter.x, pixCenter.y, pixCenter.z, 1];\n const clipspace = vec4.create();\n vec4.transformMat4(clipspace, vertex, mvpMatrix);\n\n // NDC divide\n clipspace[0] /= clipspace[3];\n clipspace[1] /= clipspace[3];\n\n // clip -> CSS pixels\n const canvasRect = (gl.canvas as HTMLCanvasElement).getBoundingClientRect();\n const pixelX = canvasRect.left + (clipspace[0] * 0.5 + 0.5) * canvasRect.width;\n const pixelY = canvasRect.top + (clipspace[1] * -0.5 + 0.5) * canvasRect.height;\n\n this.gridText.addHPXDivSet(this._visibleorder + '/' + pixels[p], pixelX, pixelY);\n // gridTextHelper.addHPXDivSet(this._visibleorder + '/' + pixels[p], pixelX, pixelY);\n }\n }\n\n // gridTextHelper.resetDivSets();\n this.gridText.resetDivSets();\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n\n get visibleorder(): number {\n return this._visibleorder;\n }\n}\n\n// const healpixGridSingleton = new HealpixGridSingleton();\n// export default healpixGridSingleton;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { mat4, ReadonlyMat4, vec4 } from 'gl-matrix';\n\nimport { AbstractSkyEntity, SkyEntityDrawInput } from '../AbstractSkyEntity.js';\nimport { xyzFovHelper } from '../earth/XYZFoVHelper.js';\nimport GridShaderManager from '../../shader/GridShaderManager.js';\nimport { colorHex2RGB, degToRad } from '../../utils/Utils.js';\nimport { SphereFoV } from '../SphereFoV.js';\nimport global from '../../Global.js';\nimport GridTextHelper from './GridTextHelper.js';\nimport type { GridLabelContainers } from './GridTextHelper.js';\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\nexport class LatLonGrid extends AbstractSkyEntity {\n static ELEM_SIZE = 3;\n static BYTES_X_ELEM = new Float32Array().BYTES_PER_ELEMENT;\n\n private _shaderProgram!: WebGLProgram;\n private _vertexShader!: WebGLShader;\n private _fragmentShader!: WebGLShader;\n private _attribLocations = {\n position: 0,\n };\n\n private _lonVertexPositionBuffer!: WebGLBuffer;\n private _latVertexPositionBuffer!: WebGLBuffer;\n\n private _lonStep = 10;\n private _latStep = 10;\n private _segmentStep = 1;\n private _fovObj: SphereFoV;\n private _fovDeg = 180;\n private _showGrid = true;\n private _lonArray: Float32Array[] = [];\n private _latArray: Float32Array[] = [];\n private _bufferKey = '';\n private defaultColor = '#41d4d4';\n private gridText: GridTextHelper;\n\n constructor(\n radius: number,\n position: [number, number, number],\n xrad: number,\n yrad: number,\n name: string,\n webgl: WebGL2RenderingContext,\n gridLabelContainers?: GridLabelContainers,\n ) {\n super(radius, position, xrad, yrad, name, webgl);\n\n this.gridText = new GridTextHelper('lonlat', gridLabelContainers);\n this._fovObj = new SphereFoV(webgl);\n this.init();\n }\n\n init(): void {\n this.initGL(super.webgl as GL);\n\n const gl = super.webgl as GL;\n this._shaderProgram = gl.createProgram() as WebGLProgram;\n this.initShaders();\n\n this._lonVertexPositionBuffer = gl.createBuffer()!;\n this._latVertexPositionBuffer = gl.createBuffer()!;\n\n this.initBuffers(this._fovDeg);\n }\n\n private initShaders(): void {\n const gl = super.webgl as GL;\n\n const fsSource = GridShaderManager.healpixGridFS();\n this._fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)!;\n gl.shaderSource(this._fragmentShader, fsSource);\n gl.compileShader(this._fragmentShader);\n if (!gl.getShaderParameter(this._fragmentShader, gl.COMPILE_STATUS)) {\n const log = gl.getShaderInfoLog(this._fragmentShader) || 'Unknown fragment shader error';\n console.error(log);\n alert(log);\n return;\n }\n\n const vsSource = GridShaderManager.healpixGridVS();\n this._vertexShader = gl.createShader(gl.VERTEX_SHADER)!;\n gl.shaderSource(this._vertexShader, vsSource);\n gl.compileShader(this._vertexShader);\n if (!gl.getShaderParameter(this._vertexShader, gl.COMPILE_STATUS)) {\n const log = gl.getShaderInfoLog(this._vertexShader) || 'Unknown vertex shader error';\n console.error(log);\n alert(log);\n return;\n }\n\n gl.attachShader(this._shaderProgram, this._vertexShader);\n gl.attachShader(this._shaderProgram, this._fragmentShader);\n gl.linkProgram(this._shaderProgram);\n\n if (!gl.getProgramParameter(this._shaderProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders');\n }\n\n gl.useProgram(this._shaderProgram);\n }\n\n private initBuffers(\n fovDeg: number,\n centerSphericalDeg?: SkyEntityDrawInput['centerSphericalDeg'],\n coarse = false,\n ): void {\n const steps = xyzFovHelper.getLonLatSteps(fovDeg, coarse);\n this._lonStep = steps.lonStep;\n this._latStep = steps.latStep;\n this._segmentStep = Math.max(Math.min(this._lonStep, this._latStep), 0.25);\n this._lonArray = [];\n this._latArray = [];\n\n const center = centerSphericalDeg\n ? {\n lon: this.normalizeLon(centerSphericalDeg.phi > 180 ? centerSphericalDeg.phi - 360 : centerSphericalDeg.phi),\n lat: 90 - centerSphericalDeg.theta,\n }\n : null;\n const localGrid = !!center && !coarse && fovDeg < 2;\n const lonValues = localGrid\n ? this.buildLonRange(center.lon, Math.max(fovDeg * 4, this._lonStep * 3), this._lonStep)\n : this.buildLonRange(0, 180, this._lonStep);\n const latValues = localGrid\n ? this.buildLatRange(center.lat, Math.max(fovDeg * 4, this._latStep * 3), this._latStep)\n : this.buildLatRange(0, 90, this._latStep);\n const latSegmentRange = localGrid && center\n ? this.buildLatRange(center.lat, Math.max(fovDeg * 4, this._latStep * 3), this._segmentStep)\n : this.buildLatRange(0, 90, this._segmentStep);\n const lonSegmentRange = localGrid && center\n ? this.buildLonRange(center.lon, Math.max(fovDeg * 4, this._lonStep * 3), this._segmentStep)\n : this.buildLonRange(0, 180, this._segmentStep);\n\n for (const lon of lonValues) {\n const vertices: number[] = [];\n for (const lat of latSegmentRange) {\n vertices.push(...this.lonLatToCartesian(lon, Math.min(lat, 90)));\n }\n this._lonArray.push(new Float32Array(vertices));\n }\n\n for (const lat of latValues) {\n const vertices: number[] = [];\n if (lat <= -90 || lat >= 90) continue;\n for (const lon of lonSegmentRange) {\n vertices.push(...this.lonLatToCartesian(Math.min(lon, 180), lat));\n }\n this._latArray.push(new Float32Array(vertices));\n }\n }\n\n private buildLonRange(centerLon: number, halfSpan: number, step: number): number[] {\n const values: number[] = [];\n const start = Math.floor((centerLon - halfSpan) / step) * step;\n const end = Math.ceil((centerLon + halfSpan) / step) * step;\n for (let lon = start; lon <= end; lon += step) {\n values.push(this.normalizeLon(lon));\n }\n return values;\n }\n\n private buildLatRange(centerLat: number, halfSpan: number, step: number): number[] {\n const values: number[] = [];\n const start = Math.max(-90, Math.floor((centerLat - halfSpan) / step) * step);\n const end = Math.min(90, Math.ceil((centerLat + halfSpan) / step) * step);\n for (let lat = start; lat <= end; lat += step) {\n values.push(lat);\n }\n return values;\n }\n\n private lonLatToCartesian(lonDeg: number, latDeg: number): [number, number, number] {\n const lonRad = degToRad(lonDeg);\n const latRad = degToRad(latDeg);\n const cosLat = Math.cos(latRad);\n\n return [\n cosLat * Math.cos(lonRad),\n cosLat * Math.sin(lonRad),\n Math.sin(latRad),\n ];\n }\n\n private refresh(fovDeg: number, input: SkyEntityDrawInput): void {\n const coarse = !!input.cameraMoving;\n const steps = xyzFovHelper.getLonLatSteps(fovDeg, coarse);\n const center = input.centerSphericalDeg;\n const localGrid = !!center && !coarse && fovDeg < 2;\n const centerLon = center ? this.normalizeLon(center.phi > 180 ? center.phi - 360 : center.phi) : 0;\n const centerLat = center ? 90 - center.theta : 0;\n const centerKey = localGrid\n ? `${this.roundToStep(centerLon, Math.max(steps.lonStep, fovDeg))}:${this.roundToStep(centerLat, Math.max(steps.latStep, fovDeg))}`\n : 'global';\n const bufferKey = `${coarse ? 'coarse' : 'settled'}:${steps.lonStep}:${steps.latStep}:${centerKey}`;\n\n if (this._bufferKey !== bufferKey) {\n this._fovDeg = fovDeg;\n this._bufferKey = bufferKey;\n this.initBuffers(this._fovDeg, input.centerSphericalDeg, coarse);\n }\n }\n\n refreshFoV(input: SkyEntityDrawInput): number {\n if (!input.camera || !input.pMatrix) return this._fovDeg;\n\n this._fovObj.getFoV(global.insideSphere, this, input.camera, input.pMatrix);\n this.refresh(this._fovObj.minFoV, input);\n return this._fovObj.minFoV;\n }\n\n getMinFoVDeg(): number {\n return this._fovObj.minFoV;\n }\n\n getFoV(): SphereFoV {\n return this._fovObj;\n }\n\n isVisible(): boolean {\n return this._showGrid;\n }\n\n toggleShowGrid(): boolean {\n this._showGrid = !this._showGrid;\n return this._showGrid;\n }\n\n setShowGrid(showGrid: boolean): void {\n this._showGrid = showGrid;\n }\n\n private enableShader(mMatrix: ReadonlyMat4, pMatrix: ReadonlyMat4, vMatrix: ReadonlyMat4): void {\n const gl = super.webgl as GL;\n gl.useProgram(this._shaderProgram);\n\n const mvMatrix = mat4.create();\n mat4.multiply(mvMatrix, vMatrix as mat4, mMatrix);\n\n const uMVMatrixLoc = gl.getUniformLocation(this._shaderProgram, 'uMVMatrix');\n const uPMatrixLoc = gl.getUniformLocation(this._shaderProgram, 'uPMatrix');\n const uColor = gl.getUniformLocation(this._shaderProgram, 'u_fragcolor');\n\n this._attribLocations.position = gl.getAttribLocation(this._shaderProgram, 'aCatPosition');\n\n if (uMVMatrixLoc) gl.uniformMatrix4fv(uMVMatrixLoc, false, mvMatrix as Float32Array);\n if (uPMatrixLoc) gl.uniformMatrix4fv(uPMatrixLoc, false, pMatrix as Float32Array);\n if (uColor) {\n const rgb = colorHex2RGB(this.defaultColor);\n gl.uniform4f(uColor, rgb[0], rgb[1], rgb[2], 1.0);\n }\n }\n\n draw(input: SkyEntityDrawInput): void {\n if (!this._showGrid) {\n this.gridText.resetDivSets();\n return;\n }\n\n const gl = super.webgl as GL;\n const camera = input.camera;\n if (!camera) return;\n\n const pMatrix = input.pMatrix;\n if (!pMatrix) return;\n\n this.refreshFoV(input);\n\n const vMatrix = camera.getCameraMatrix();\n if (!vMatrix) return;\n\n const mMatrix = this.getModelMatrix();\n this.enableShader(mMatrix, pMatrix, vMatrix);\n\n for (const lonLine of this._lonArray) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this._lonVertexPositionBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, lonLine, gl.STATIC_DRAW);\n gl.vertexAttribPointer(this._attribLocations.position, LatLonGrid.ELEM_SIZE, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(this._attribLocations.position);\n gl.drawArrays(gl.LINE_STRIP, 0, lonLine.length / LatLonGrid.ELEM_SIZE);\n }\n\n for (const latLine of this._latArray) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this._latVertexPositionBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, latLine, gl.STATIC_DRAW);\n gl.vertexAttribPointer(this._attribLocations.position, LatLonGrid.ELEM_SIZE, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(this._attribLocations.position);\n gl.drawArrays(gl.LINE_LOOP, 0, latLine.length / LatLonGrid.ELEM_SIZE);\n }\n\n this.drawLabels(input, mMatrix, pMatrix, vMatrix);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n\n private drawLabels(\n input: SkyEntityDrawInput,\n mMatrix: ReadonlyMat4,\n pMatrix: ReadonlyMat4,\n vMatrix: ReadonlyMat4,\n ): void {\n const center = input.centerSphericalDeg;\n if (!center) {\n this.gridText.resetDivSets();\n return;\n }\n\n const centerLon = this.normalizeLon(center.phi > 180 ? center.phi - 360 : center.phi);\n const centerLat = 90 - center.theta;\n const lonLine = this.normalizeLon(this.roundToStep(centerLon, this._lonStep));\n const latLine = Math.max(-90 + this._latStep, Math.min(90 - this._latStep, this.roundToStep(centerLat, this._latStep)));\n\n const lonLabelPoint = this.lonLatToCartesian(lonLine, Math.max(-80, Math.min(80, centerLat)));\n const latLabelPoint = this.lonLatToCartesian(centerLon, latLine);\n\n const lonScreen = this.projectPointToScreen(lonLabelPoint, mMatrix, pMatrix, vMatrix);\n if (lonScreen) {\n this.gridText.addLonLatDivSet(`${lonLine.toFixed(0)}° lon`, lonScreen.x, lonScreen.y, 'lon');\n }\n\n const latScreen = this.projectPointToScreen(latLabelPoint, mMatrix, pMatrix, vMatrix);\n if (latScreen) {\n this.gridText.addLonLatDivSet(`${latLine.toFixed(0)}° lat`, latScreen.x, latScreen.y, 'lat');\n }\n\n this.gridText.resetDivSets();\n }\n\n private projectPointToScreen(\n point: [number, number, number],\n mMatrix: ReadonlyMat4,\n pMatrix: ReadonlyMat4,\n vMatrix: ReadonlyMat4,\n ): { x: number; y: number } | null {\n const mvMatrix = mat4.create();\n const mvpMatrix = mat4.create();\n mat4.multiply(mvMatrix, vMatrix as mat4, mMatrix);\n mat4.multiply(mvpMatrix, pMatrix as mat4, mvMatrix);\n\n const clipspace = vec4.fromValues(point[0], point[1], point[2], 1);\n vec4.transformMat4(clipspace, clipspace, mvpMatrix);\n if (Math.abs(clipspace[3]) < 1e-6) {\n return null;\n }\n\n clipspace[0] /= clipspace[3];\n clipspace[1] /= clipspace[3];\n if (clipspace[0] < -1 || clipspace[0] > 1 || clipspace[1] < -1 || clipspace[1] > 1) {\n return null;\n }\n\n const canvasRect = (super.webgl.canvas as HTMLCanvasElement).getBoundingClientRect();\n return {\n x: canvasRect.left + (clipspace[0] * 0.5 + 0.5) * canvasRect.width,\n y: canvasRect.top + (clipspace[1] * -0.5 + 0.5) * canvasRect.height,\n };\n }\n\n private roundToStep(value: number, step: number): number {\n if (step <= 0) return value;\n return Math.round(value / step) * step;\n }\n\n private normalizeLon(lonDeg: number): number {\n let lon = lonDeg;\n while (lon < -180) lon += 360;\n while (lon > 180) lon -= 360;\n return lon;\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n'use strict'\n\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js'\nimport global from '../../Global.js'\nimport { TileBuffer } from './TileBuffer.js'\nimport {HiPS} from './HiPS.js'\n\n\nexport default class AllSky {\n private _ready = false\n private _hips: HiPS\n\n private _format: string\n private _baseurl: string\n private _isGalacticHips: boolean\n\n private _order = 3\n public opacity = 1.0\n\n private _hipsShaderIndex = 0\n private _texture: WebGLTexture | null = null\n private _image!: HTMLImageElement\n private _texurl!: string\n\n private _textureLoaded = false\n\n private _maxTiles = 0\n private _numFacesXTile = 0\n private _numFaces = 0\n\n private vertexPosition!: Float32Array\n private vertexPositionBuffer!: WebGLBuffer\n private vertexIndexBuffer!: WebGLBuffer\n private vidx = 0\n private _webgl: WebGL2RenderingContext\n private _tileBuffer: TileBuffer\n private _hipsShaderProgram\n\n constructor(hips: HiPS, webgl: WebGL2RenderingContext, tileBuffer: TileBuffer, hipsShaderProgram: HiPSShaderProgram) {\n this._tileBuffer = tileBuffer\n this._hips = hips\n this._webgl = webgl\n this._format = hips.format\n this._baseurl = hips.baseURL\n this._isGalacticHips = hips.isGalacticHips\n this._hipsShaderProgram = hipsShaderProgram\n\n this.initImage()\n }\n\n private initImage(): void {\n this._image = new Image()\n this._texurl = `${this._baseurl}/Norder3/Allsky.${this._format}`\n\n this._image.onload = () => this.imageLoaded()\n this._image.onerror = () => {\n console.error('File not found? %s', this._texurl)\n }\n\n this._image.setAttribute('crossorigin', 'anonymous')\n this._image.src = this._texurl\n }\n\n private imageLoaded(): void {\n this.textureLoaded()\n this.initModelBuffer()\n\n this._textureLoaded = true\n this._ready = true\n }\n\n private textureLoaded(): void {\n // hipsShaderProgram.enableProgram()\n this._hipsShaderProgram.enableProgram()\n\n const gl = this._webgl as WebGL2RenderingContext\n this._texture = gl.createTexture()\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n\n // gl.uniform1i(hipsShaderProgram.shaderProgram.samplerUniform, this._hipsShaderIndex)\n\n if (!gl.isTexture(this._texture)) {\n console.log('error in texture')\n }\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image)\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n\n const useMipmaps = true\n gl.texParameteri(\n gl.TEXTURE_2D,\n gl.TEXTURE_MIN_FILTER,\n useMipmaps ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR\n );\n // MAG filter: ONLY NEAREST or LINEAR are valid\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR)\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR_MIPMAP_LINEAR)\n // gl.generateMipmap(gl.TEXTURE_2D)\n\n if (useMipmaps) gl.generateMipmap(gl.TEXTURE_2D);\n\n }\n\n private initModelBuffer(): void {\n const gl = this._webgl\n\n const orderjump = 1\n const tgtHpxOrder = this._order + orderjump\n const healpix = global.getHealpix(this._order)\n this._maxTiles = healpix.getNPix()\n const tgtHealpix = global.getHealpix(tgtHpxOrder)\n\n this._numFacesXTile = 4 ** orderjump // used in gl.draw\n this._numFaces = this._numFacesXTile * this._maxTiles\n this.vertexPosition = new Float32Array(20 * this._numFaces)\n\n let sindex = 0\n let tindex = 0\n this.vidx = 0\n\n for (let t = 0; t < this._maxTiles; t++) {\n const xyf = healpix.nest2xyf(t)\n const dxmin = xyf.ix << orderjump\n const dxmax = (xyf.ix << orderjump) + (1 << orderjump)\n const dymin = xyf.iy << orderjump\n const dymax = (xyf.iy << orderjump) + (1 << orderjump)\n\n this.setupPositionAndTexture4Quadrant(\n sindex,\n tindex,\n dxmin,\n dxmin + (dxmax - dxmin) / 2,\n dymin,\n dymin + (dymax - dymin) / 2,\n tgtHealpix,\n xyf,\n 0,\n 0\n )\n this.setupPositionAndTexture4Quadrant(\n sindex,\n tindex,\n dxmin + (dxmax - dxmin) / 2,\n dxmax,\n dymin,\n dymin + (dymax - dymin) / 2,\n tgtHealpix,\n xyf,\n 0,\n 1\n )\n this.setupPositionAndTexture4Quadrant(\n sindex,\n tindex,\n dxmin,\n dxmin + (dxmax - dxmin) / 2,\n dymin + (dymax - dymin) / 2,\n dymax,\n tgtHealpix,\n xyf,\n 1,\n 0\n )\n this.setupPositionAndTexture4Quadrant(\n sindex,\n tindex,\n dxmin + (dxmax - dxmin) / 2,\n dxmax,\n dymin + (dymax - dymin) / 2,\n dymax,\n tgtHealpix,\n xyf,\n 1,\n 1\n )\n\n sindex++\n if (sindex === 27) {\n tindex++\n sindex = 0\n }\n }\n\n const vertexIndices = new Uint16Array(6 * this._numFaces)\n let baseFaceIndex = 0\n for (let i = 0; i < this._numFaces; i++) {\n vertexIndices[6 * i] = baseFaceIndex\n vertexIndices[6 * i + 1] = baseFaceIndex + 1\n vertexIndices[6 * i + 2] = baseFaceIndex + 3\n\n vertexIndices[6 * i + 3] = baseFaceIndex + 1\n vertexIndices[6 * i + 4] = baseFaceIndex + 2\n vertexIndices[6 * i + 5] = baseFaceIndex + 3\n\n baseFaceIndex += 4\n }\n\n this.vertexPositionBuffer = gl.createBuffer() as WebGLBuffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer)\n gl.bufferData(gl.ARRAY_BUFFER, this.vertexPosition, gl.STATIC_DRAW)\n\n this.vertexIndexBuffer = gl.createBuffer() as WebGLBuffer\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, vertexIndices, gl.STATIC_DRAW)\n }\n\n private setupPositionAndTexture4Quadrant(\n sindex: number,\n tindex: number,\n dxmin: number,\n dxmax: number,\n dymin: number,\n dymax: number,\n tgthealpix: any,\n xyf: any,\n qx: number,\n qy: number\n ): void {\n let facesVec3Array: Array<{ x: number; y: number; z: number }> = []\n\n const factor = 2 ** (tgthealpix.order - 3)\n const s_step = 1 / (27 * factor) // 0.037037037...\n const t_step = 1 / (29 * factor) // 0.034482759...\n\n const s_pixel_size = s_step / 64\n const t_pixel_size = t_step / 64\n\n const base_s = factor * s_step * sindex + s_step * qx\n const base_t = factor * t_step * tindex + t_step * qy\n\n for (let dx = dxmin; dx < dxmax; dx++) {\n for (let dy = dymin; dy < dymax; dy++) {\n facesVec3Array = tgthealpix.getPointsForXyfNoStep(dx, dy, xyf.face)\n\n // bottom right\n this.vertexPosition[20 * this.vidx] = facesVec3Array[0].x\n this.vertexPosition[20 * this.vidx + 1] = facesVec3Array[0].y\n this.vertexPosition[20 * this.vidx + 2] = facesVec3Array[0].z\n this.vertexPosition[20 * this.vidx + 3] = s_step + base_s - s_pixel_size\n this.vertexPosition[20 * this.vidx + 4] = 1 - (t_step + base_t) + t_pixel_size\n\n // top right\n this.vertexPosition[20 * this.vidx + 5] = facesVec3Array[1].x\n this.vertexPosition[20 * this.vidx + 6] = facesVec3Array[1].y\n this.vertexPosition[20 * this.vidx + 7] = facesVec3Array[1].z\n this.vertexPosition[20 * this.vidx + 8] = s_step + base_s - s_pixel_size\n this.vertexPosition[20 * this.vidx + 9] = 1 - base_t - t_pixel_size\n\n // top left\n this.vertexPosition[20 * this.vidx + 10] = facesVec3Array[2].x\n this.vertexPosition[20 * this.vidx + 11] = facesVec3Array[2].y\n this.vertexPosition[20 * this.vidx + 12] = facesVec3Array[2].z\n this.vertexPosition[20 * this.vidx + 13] = base_s + s_pixel_size\n this.vertexPosition[20 * this.vidx + 14] = 1 - base_t - t_pixel_size\n\n // bottom left\n this.vertexPosition[20 * this.vidx + 15] = facesVec3Array[3].x\n this.vertexPosition[20 * this.vidx + 16] = facesVec3Array[3].y\n this.vertexPosition[20 * this.vidx + 17] = facesVec3Array[3].z\n this.vertexPosition[20 * this.vidx + 18] = base_s + s_pixel_size\n this.vertexPosition[20 * this.vidx + 19] = 1 - (t_step + base_t) + t_pixel_size\n\n this.vidx++\n }\n }\n }\n\n /**\n * Renders the all-sky layer and, when available, delegates to higher-resolution child tiles.\n * Returns `true` if it attempted to draw (ready), `false` if still not ready.\n */\n public draw(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): boolean {\n if (!this._ready) return false\n\n let allSkyTiles2Skip: number[] = []\n if (visibleOrder >= this._order) {\n const skipped = this.drawChildren(\n visibleOrder,\n visibleTilesMap,\n pMatrix,\n vMatrix,\n mMatrix,\n colorMapIdx\n )\n if (skipped) allSkyTiles2Skip = skipped\n }\n\n const gl = this._webgl as WebGL2RenderingContext\n\n this._hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n gl.enableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n gl.enableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n // hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n // gl.enableVertexAttribArray((hipsShaderProgram as any).locations.vertexPositionAttribute)\n // gl.enableVertexAttribArray((hipsShaderProgram as any).locations.textureCoordAttribute)\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n // gl.uniform1f(hipsShaderProgram.locations.textureAlpha, this.opacity)\n gl.uniform1f(this._hipsShaderProgram.locations.textureAlpha, this.opacity)\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer)\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n\n gl.vertexAttribPointer(\n // hipsShaderProgram.locations.vertexPositionAttribute,\n this._hipsShaderProgram.locations.vertexPositionAttribute,\n 3, gl.FLOAT, false, 5 * 4, 0\n )\n gl.vertexAttribPointer(\n // hipsShaderProgram.locations.textureCoordAttribute,\n this._hipsShaderProgram.locations.textureCoordAttribute,\n 2, gl.FLOAT, false, 5 * 4, 3 * 4\n )\n\n for (let t = 0; t < this._maxTiles; t++) {\n if (!allSkyTiles2Skip.includes(t)) {\n gl.drawElements(\n gl.TRIANGLES,\n 6 * this._numFacesXTile,\n gl.UNSIGNED_SHORT,\n 12 * t * this._numFacesXTile\n )\n }\n }\n\n gl.disableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n gl.disableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n // gl.disableVertexAttribArray(hipsShaderProgram.locations.vertexPositionAttribute)\n // gl.disableVertexAttribArray(hipsShaderProgram.locations.textureCoordAttribute)\n\n return true\n }\n\n private drawChildren(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): number[] | undefined {\n const childrenOrder = this._order\n if (!visibleTilesMap.has(childrenOrder)) return\n\n const visibleTiles = visibleTilesMap.get(childrenOrder) as number[]\n const allSkyTiles2Skip: number[] = []\n\n for (let i = 0; i < visibleTiles.length; i++) {\n const tileno = visibleTiles[i]\n const childTile = this._isGalacticHips\n ? this._tileBuffer.getGalTile(tileno, childrenOrder, this._hips)\n : this._tileBuffer.getTile(tileno, childrenOrder, this._hips)\n // const childTile = this._isGalacticHips\n // ? newTileBuffer.getGalTile(tileno, childrenOrder, this._hips)\n // : newTileBuffer.getTile(tileno, childrenOrder, this._hips)\n\n // childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx, this._hipsShaderProgram)\n if (childTile.getReadyState()) {\n allSkyTiles2Skip.push(tileno)\n }\n }\n return allSkyTiles2Skip\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n'use strict'\n\nimport global from '../../Global.js'\n// import { hipsShaderProgram } from '../../shader/HiPSShaderProgram.js'\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js'\n// import { newTileBuffer } from './TileBuffer.js'\nimport { TileBuffer } from './TileBuffer.js'\nimport { fovHelper } from './FoVHelper.js'\nimport {HiPS} from './HiPS.js'\n\ninterface Vec3 { x: number; y: number; z: number }\ninterface Xyf { ix: number; iy: number; face: number }\ninterface HealpixLike {\n order: number\n nest2xyf(nest: number): Xyf\n xyf2nest(x: number, y: number, face: number): number\n getBoundaries(nest: number): Vec3[]\n getPointsForXyfNoStep(x: number, y: number, face: number): Vec3[]\n}\n\nclass AncestorTile {\n private _hips: HiPS\n private _tileno: number\n private _baseurl: string\n private _order: number\n\n private _ready = false\n private _format: string\n \n private _isGalacticHips: boolean\n\n public opacity = 1.0\n private _hipsShaderIndex = 0\n private _pixels: number[] = []\n\n private _texture: WebGLTexture | null = null\n private _image!: HTMLImageElement\n private _texurl = ''\n\n\n private vertexPosition!: Float32Array[]\n private vertexPositionBuffer!: WebGLBuffer[]\n private vertexIndices!: Uint16Array\n private vertexIndexBuffer!: WebGLBuffer\n private _tileBuffer: TileBuffer\n private _hipsShaderProgram: HiPSShaderProgram\n private _webgl: WebGL2RenderingContext\n\n constructor(tileno: number, order: number, hips: HiPS, tileBuffer: TileBuffer, hipsShaderProgram: HiPSShaderProgram, webgl: WebGL2RenderingContext) {\n\n this._hipsShaderProgram = hipsShaderProgram\n this._tileBuffer = tileBuffer\n this._hips = hips\n this._tileno = tileno\n this._webgl = webgl\n\n this._format = hips.format\n this._baseurl = hips.baseURL\n\n this._isGalacticHips = hips.isGalacticHips\n\n this._order = order\n this.initImage()\n }\n\n // Kept for API parity; there is no interval created in this class.\n destroyIntervals(): void {\n // no-op\n }\n\n private initImage(): void {\n const dirnumber = Math.floor(this._tileno / 10000) * 10000\n this._texurl = `${this._baseurl}/Norder${this._order}/Dir${dirnumber}/Npix${this._tileno}.${this._format}`\n\n this._image = new Image()\n this._image.onload = () => this.imageLoaded()\n this._image.onerror = () => {\n console.error('File not found? %s', this._texurl)\n }\n this._image.crossOrigin = 'anonymous'\n // If you ever need FITS handling, call this.loadImage() instead.\n this._image.src = this._texurl\n }\n\n private imageLoaded(): void {\n this.textureLoaded()\n this.initModelBuffer()\n\n const gl = this._webgl\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image)\n\n this._ready = true\n }\n\n private textureLoaded(): void {\n // hipsShaderProgram.enableProgram()\n this._hipsShaderProgram.enableProgram()\n\n const gl = this._webgl\n this._texture = gl.createTexture()\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n\n if (!gl.isTexture(this._texture)) {\n console.log('error in texture')\n }\n }\n\n private initModelBuffer(): void {\n const gl = this._webgl\n this.vertexPosition = []\n this.vertexPositionBuffer = []\n this.vertexIndices = new Uint16Array()\n // this.vertexIndexBuffer created later\n\n const reforder = fovHelper.getRefOrder(this._order)\n const orighealpix = global.getHealpix(this._order) as HealpixLike\n const origxyf = orighealpix.nest2xyf(this._tileno)\n\n const orderjump = reforder - this._order\n\n const dxmin = origxyf.ix << orderjump\n const dxmax = (origxyf.ix << orderjump) + (1 << orderjump)\n const dymin = origxyf.iy << orderjump\n const dymax = (origxyf.iy << orderjump) + (1 << orderjump)\n\n const healpix = global.getHealpix(reforder) as HealpixLike\n\n this._pixels = []\n\n // Using getBoundaries (like the JS source)\n this.setupPositionAndTexture4Quadrant(dxmin, dxmax / 2, dymin, dymax / 2, 0, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant(dxmax / 2, dxmax, dymin, dymax / 2, 1, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant(dxmin, dxmax / 2, dymax / 2, dymax, 2, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant(dxmax / 2, dxmax, dymax / 2, dymax, 3, healpix, orderjump, origxyf)\n\n const pixelsXQuadrant = this.vertexPosition[0].length / 20\n this.vertexIndices = this.computeVertexIndices(pixelsXQuadrant)\n\n this.vertexIndexBuffer = gl.createBuffer() as WebGLBuffer\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndices, gl.STATIC_DRAW)\n }\n\n private computeVertexIndices(pixelsXQuadrant: number): Uint16Array {\n const vertexIndices = new Uint16Array(6 * pixelsXQuadrant)\n let baseFaceIndex = 0\n for (let j = 0; j < pixelsXQuadrant; j++) {\n vertexIndices[6 * j] = baseFaceIndex\n vertexIndices[6 * j + 1] = baseFaceIndex + 1\n vertexIndices[6 * j + 2] = baseFaceIndex + 2\n\n vertexIndices[6 * j + 3] = baseFaceIndex + 2\n vertexIndices[6 * j + 4] = baseFaceIndex + 3\n vertexIndices[6 * j + 5] = baseFaceIndex\n\n baseFaceIndex += 4\n }\n return vertexIndices\n }\n\n // Version that uses getPointsForXyfNoStep (kept for reference; not used in this class)\n private setupPositionAndTexture4Quadrant2(\n dxmin: number,\n dxmax: number,\n dymin: number,\n dymax: number,\n qidx: number,\n healpix: HealpixLike,\n orderjump: number,\n origxyf: Xyf\n ): void {\n this.vertexPosition[qidx] = new Float32Array(20 * (dxmax - dxmin) * (dymax - dymin))\n\n const step = 1 / (1 << orderjump)\n let p = 0\n\n for (let dx = dxmin; dx < dxmax; dx++) {\n for (let dy = dymin; dy < dymax; dy++) {\n const facesVec3Array = healpix.getPointsForXyfNoStep(dx, dy, origxyf.face)\n const uindex = dy - (origxyf.iy << orderjump)\n const vindex = dx - (origxyf.ix << orderjump)\n\n this.vertexPosition[qidx][20 * p] = facesVec3Array[0].x\n this.vertexPosition[qidx][20 * p + 1] = facesVec3Array[0].y\n this.vertexPosition[qidx][20 * p + 2] = facesVec3Array[0].z\n this.vertexPosition[qidx][20 * p + 3] = step + step * uindex\n this.vertexPosition[qidx][20 * p + 4] = 1 - (step + step * vindex)\n\n this.vertexPosition[qidx][20 * p + 5] = facesVec3Array[1].x\n this.vertexPosition[qidx][20 * p + 6] = facesVec3Array[1].y\n this.vertexPosition[qidx][20 * p + 7] = facesVec3Array[1].z\n this.vertexPosition[qidx][20 * p + 8] = step + step * uindex\n this.vertexPosition[qidx][20 * p + 9] = 1 - step * vindex\n\n this.vertexPosition[qidx][20 * p + 10] = facesVec3Array[2].x\n this.vertexPosition[qidx][20 * p + 11] = facesVec3Array[2].y\n this.vertexPosition[qidx][20 * p + 12] = facesVec3Array[2].z\n this.vertexPosition[qidx][20 * p + 13] = step * uindex\n this.vertexPosition[qidx][20 * p + 14] = 1 - step * vindex\n\n this.vertexPosition[qidx][20 * p + 15] = facesVec3Array[3].x\n this.vertexPosition[qidx][20 * p + 16] = facesVec3Array[3].y\n this.vertexPosition[qidx][20 * p + 17] = facesVec3Array[3].z\n this.vertexPosition[qidx][20 * p + 18] = step * uindex\n this.vertexPosition[qidx][20 * p + 19] = 1 - (step + step * vindex)\n p++\n }\n }\n\n this.vertexPositionBuffer[qidx] = this._webgl.createBuffer()\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n this._webgl.bufferData(\n this._webgl.ARRAY_BUFFER,\n this.vertexPosition[qidx],\n this._webgl.STATIC_DRAW\n )\n }\n\n // Version used by the original JS, collecting _pixels via xyf2nest + getBoundaries\n private setupPositionAndTexture4Quadrant(\n dxmin: number,\n dxmax: number,\n dymin: number,\n dymax: number,\n qidx: number,\n healpix: HealpixLike,\n orderjump: number,\n origxyf: Xyf\n ): void {\n const gl = this._webgl\n this.vertexPosition[qidx] = new Float32Array(20 * (dxmax - dxmin) * (dymax - dymin))\n\n const step = 1 / (1 << orderjump)\n let p = 0\n\n for (let dx = dxmin; dx < dxmax; dx++) {\n for (let dy = dymin; dy < dymax; dy++) {\n const ipix3 = healpix.xyf2nest(dx, dy, origxyf.face)\n this._pixels.push(ipix3)\n\n const facesVec3Array = healpix.getBoundaries(ipix3)\n const uindex = dy - (origxyf.iy << orderjump)\n const vindex = dx - (origxyf.ix << orderjump)\n\n this.vertexPosition[qidx][20 * p] = facesVec3Array[0].x\n this.vertexPosition[qidx][20 * p + 1] = facesVec3Array[0].y\n this.vertexPosition[qidx][20 * p + 2] = facesVec3Array[0].z\n this.vertexPosition[qidx][20 * p + 3] = step + step * uindex\n this.vertexPosition[qidx][20 * p + 4] = 1 - (step + step * vindex)\n\n this.vertexPosition[qidx][20 * p + 5] = facesVec3Array[1].x\n this.vertexPosition[qidx][20 * p + 6] = facesVec3Array[1].y\n this.vertexPosition[qidx][20 * p + 7] = facesVec3Array[1].z\n this.vertexPosition[qidx][20 * p + 8] = step + step * uindex\n this.vertexPosition[qidx][20 * p + 9] = 1 - step * vindex\n\n this.vertexPosition[qidx][20 * p + 10] = facesVec3Array[2].x\n this.vertexPosition[qidx][20 * p + 11] = facesVec3Array[2].y\n this.vertexPosition[qidx][20 * p + 12] = facesVec3Array[2].z\n this.vertexPosition[qidx][20 * p + 13] = step * uindex\n this.vertexPosition[qidx][20 * p + 14] = 1 - step * vindex\n\n this.vertexPosition[qidx][20 * p + 15] = facesVec3Array[3].x\n this.vertexPosition[qidx][20 * p + 16] = facesVec3Array[3].y\n this.vertexPosition[qidx][20 * p + 17] = facesVec3Array[3].z\n this.vertexPosition[qidx][20 * p + 18] = step * uindex\n this.vertexPosition[qidx][20 * p + 19] = 1 - (step + step * vindex)\n p++\n }\n }\n\n this.vertexPositionBuffer[qidx] = gl.createBuffer() as WebGLBuffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n gl.bufferData(gl.ARRAY_BUFFER, this.vertexPosition[qidx], gl.STATIC_DRAW)\n }\n\n public draw(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): boolean {\n if (!this._ready) return false\n\n\n // this._image.onload = () => this.imageLoaded()\n\n \n let quadrantsToDraw: Set<number> = new Set([0, 1, 2, 3])\n if (visibleOrder > this._order) {\n const q = this.drawChildren(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n if (q) quadrantsToDraw = q\n }\n\n this._hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n\n const gl = this._webgl\n gl.enableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n gl.enableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n gl.uniform1f(this._hipsShaderProgram.locations.textureAlpha, this.opacity)\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n const elemno = this.vertexIndices.length\n\n quadrantsToDraw.forEach((qidx) => {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n\n gl.vertexAttribPointer(\n this._hipsShaderProgram.locations.vertexPositionAttribute,\n 3,\n gl.FLOAT,\n false,\n 5 * 4,\n 0\n )\n gl.vertexAttribPointer(\n this._hipsShaderProgram.locations.textureCoordAttribute,\n 2,\n gl.FLOAT,\n false,\n 5 * 4,\n 3 * 4\n )\n\n gl.drawElements(gl.TRIANGLES, elemno, gl.UNSIGNED_SHORT, 0)\n })\n\n gl.disableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n gl.disableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n \n return true\n }\n\n private drawChildren(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): Set<number> | undefined {\n const quadrantsToDraw = new Set<number>([0, 1, 2, 3])\n const childrenOrder = this._order + 1\n if (!visibleTilesMap.has(childrenOrder)) return\n\n for (let c = 0; c < 4; c++) {\n const childTileNo = (this._tileno << 2) + c\n const visibleChildren = visibleTilesMap.get(childrenOrder)!\n if (visibleChildren.includes(childTileNo)) {\n const childTile = this._isGalacticHips\n ? this._tileBuffer.getGalTile(childTileNo, childrenOrder, this._hips)\n : this._tileBuffer.getTile(childTileNo, childrenOrder, this._hips)\n \n // childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx, this._hipsShaderProgram)\n if ((childTile as any)._ready) {\n quadrantsToDraw.delete((childTile as any)._tileno - (this._tileno << 2))\n }\n }\n }\n return quadrantsToDraw\n }\n}\n\nexport default AncestorTile\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// FoVHelper.ts\n'use strict'\n\nclass FoVHelper {\n private static readonly LEVEL_HYSTERESIS = 0.12\n\n private static readonly HIPS_ORDER_MIN_FOV: Record<number, number> = {\n 0: 179,\n 1: 90,\n 2: 30,\n 3: 20,\n 4: 6,\n 5: 3.2,\n 6: 1.6,\n 7: 0.85,\n 8: 0.42,\n 9: 0.21,\n 10: 0.12,\n 11: 0.06,\n 12: 0.015,\n 13: 0,\n }\n\n getHiPSNorder(fov: number, currentOrder?: number): number {\n const rawOrder = this.getRawHiPSNorder(fov)\n if (currentOrder === undefined || currentOrder === rawOrder) return rawOrder\n\n if (rawOrder > currentOrder) {\n const boundary = FoVHelper.HIPS_ORDER_MIN_FOV[currentOrder]\n if (boundary > 0 && fov > boundary * (1 - FoVHelper.LEVEL_HYSTERESIS)) return currentOrder\n } else {\n const boundary = FoVHelper.HIPS_ORDER_MIN_FOV[rawOrder]\n if (boundary > 0 && fov < boundary * (1 + FoVHelper.LEVEL_HYSTERESIS)) return currentOrder\n }\n\n return rawOrder\n }\n\n private getRawHiPSNorder(fov: number): number {\n if (fov >= 179) return 0\n if (fov >= 90) return 1\n if (fov >= 30) return 2\n if (fov >= 20) return 3\n if (fov >= 6) return 4\n if (fov >= 3.2) return 5\n if (fov >= 1.6) return 6\n if (fov >= 0.85) return 7\n if (fov >= 0.42) return 8\n if (fov >= 0.21) return 9\n if (fov >= 0.12) return 10\n if (fov >= 0.06) return 11\n if (fov >= 0.015) return 12\n return 13\n }\n\n getRADegSteps(fov: number, coarse = false): { raStep: number; decStep: number } {\n let raStep: number\n let decStep: number\n\n if (coarse && fov < 0.21) { raStep = 10; decStep = 10 }\n else if (fov >= 179) { raStep = 10; decStep = 10 }\n else if (fov >= 25) { raStep = 9; decStep = 9 }\n else if (fov >= 12.5){ raStep = 8; decStep = 8 }\n else if (fov >= 6) { raStep = 6; decStep = 6 }\n else if (fov >= 3.2) { raStep = 5; decStep = 5 }\n else if (fov >= 1.6) { raStep = 4; decStep = 4 }\n else if (fov >= 0.85){ raStep = 3; decStep = 3 }\n else if (fov >= 0.42){ raStep = 2; decStep = 2 }\n else if (fov >= 0.21){ raStep = 1; decStep = 1 }\n else if (fov >= 0.12){ raStep = 0.5; decStep = 0.5 }\n else if (fov >= 0.06){ raStep = 0.25; decStep = 0.25 }\n else { raStep = 10; decStep = 10 }\n\n return { raStep, decStep }\n }\n\n getRefOrder(order: number): number {\n switch (order) {\n case 0:\n case 1:\n case 2:\n case 3:\n return order + 6\n case 4:\n case 5:\n case 6:\n case 7:\n return order + 5\n case 8:\n return order + 4\n default:\n return order + 3\n }\n }\n}\n\nexport const fovHelper = new FoVHelper()\nexport default FoVHelper\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n'use strict'\n/**\n * @author Fabrizio Giordano (Fab77)\n */\n\nimport {AbstractSkyEntity, SkyEntityDrawInput} from '../AbstractSkyEntity.js'\nimport { fovHelper } from './FoVHelper.js'\nimport ColorMaps, { ColorMap } from '../ColorMaps.js'\nimport AncestorTile from './AncestorTile.js'\nimport AllSky from './AllSky.js'\nimport {HiPSDescriptor} from './HiPSDescriptor.js'\nimport type { HiPSDebugStats } from './HiPSConfig.js'\nimport { HealpixGrid } from '../grid/HealpixGrid.js'\n\n\nexport class HiPS extends AbstractSkyEntity {\n \n private _ancestorTiles: AncestorTile[]\n private _allSkyTile: AllSky | null\n private _descriptor: HiPSDescriptor\n\n private _format: string\n private _baseurl: string\n private _maxorder: number\n private _minorder: number\n\n private _visibleorder = 3\n private _allSky = true\n\n public samplerIdx = 0\n public colorMapIdx = 0\n public colorMap = ColorMaps['native']\n private _healpixGrid: HealpixGrid\n\n // exposed read-only helpers\n get maxOrder(): number { return this._maxorder }\n get minOrder(): number { return this._minorder }\n get baseURL(): string { return this._baseurl }\n get format(): string { return this._format }\n get propertiesRawText(): string { return this._descriptor.propertiesRawText }\n get properties(): ReadonlyMap<string, string> { return this._descriptor.properties }\n\n constructor(\n radius: number,\n position: [number, number, number],\n xrad: number,\n yrad: number,\n descriptor: HiPSDescriptor,\n webgl: WebGL2RenderingContext,\n healpixGrid: HealpixGrid\n ) {\n super(radius, position, xrad, yrad, descriptor.surveyName, webgl, descriptor.isGalactic)\n this._descriptor = descriptor\n this.initGL(webgl as WebGL2RenderingContext)\n this._healpixGrid = healpixGrid\n \n this._healpixGrid.visibleTilesManager.tileBuffer.addHiPS(this)\n\n // DEBUG logs kept from JS (optional)\n // eslint-disable-next-line no-console\n console.log('HiPS frame ' + descriptor.hipsFrame)\n // eslint-disable-next-line no-console\n console.log('HiPS minOrder ' + descriptor.minOrder)\n\n this._format = descriptor.imgFormats[0]\n this._baseurl = descriptor.url\n this._maxorder = descriptor.maxOrder\n this._minorder = descriptor.minOrder\n\n this.initShaders()\n\n // pick initial order from a starting FoV\n const fov = 180\n let order = fovHelper.getHiPSNorder(fov)\n this._visibleorder = Math.min(order, this._maxorder)\n\n this._ancestorTiles = []\n this._allSkyTile = null\n\n // auto-detect all-sky: original code forces true\n this._allSky = true\n if (this._allSky) {\n this._allSkyTile = new AllSky(this, this._webgl, this._healpixGrid.visibleTilesManager.tileBuffer, super.hipsShaderProgram)\n } else {\n for (let t = 0; t < 12; t++) {\n this._ancestorTiles.push(new AncestorTile(t, 0, this, this._healpixGrid.visibleTilesManager.tileBuffer, super.hipsShaderProgram, this._webgl))\n }\n }\n }\n\n getProperty(key: string): string | undefined {\n return this._descriptor.getProperty(key)\n }\n\n changeFormat(format: string): void {\n this._format = format\n // original code referenced _tileBuffer; if you have one, wire it back.\n // Keeping calls no-op to avoid breaking at runtime if _tileBuffer is undefined.\n // (newVisibleTilesManager + TileBuffer drive the actual tile lifecycle)\n // @ts-ignore\n if (this._tileBuffer?.clearAll) this._tileBuffer.clearAll()\n // @ts-ignore\n if (this._tileBuffer) this._tileBuffer._format = this._format\n const pixelByOrder =\n this.isGalacticHips\n ? this._healpixGrid.visibleTilesManager.galVisibleTilesByOrder\n : this._healpixGrid.visibleTilesManager.visibleTilesByOrder\n // const pixelByOrder =\n // this.isGalacticHips\n // ? visibleTilesManager.galVisibleTilesByOrder\n // : visibleTilesManager.visibleTilesByOrder\n // @ts-ignore\n if (this._tileBuffer?.updateTiles) this._tileBuffer.updateTiles(pixelByOrder.pixels, pixelByOrder.order)\n }\n\n /**\n * Shader colormap switcher\n * 0 -> native\n * 1 -> grayscale\n * 2 -> planck\n * 3 -> cmb\n * 4 -> rainbow\n * 5 -> eosb\n * 6 -> cubehelix\n */\n changeColorMap(colorMap: ColorMap): void {\n console.log('HiPS.changeColorMap -> shaderProgram', super.hipsShaderProgram.shaderProgram);\n\n this.colorMap = colorMap\n switch (colorMap.name) {\n case 'grayscale':\n this.colorMapIdx = 1\n // hipsShaderProgram.setGrayscaleShader()\n this.colorMap = ColorMaps['grayscale']\n super.hipsShaderProgram.setGrayscaleShader()\n break\n case 'planck':\n this.colorMapIdx = 2\n this.colorMap = ColorMaps['planck']\n // hipsShaderProgram.setColorMapShader()\n super.hipsShaderProgram.setColorMapShader()\n break\n case 'cmb':\n this.colorMapIdx = 3\n this.colorMap = ColorMaps['cmb']\n // hipsShaderProgram.setColorMapShader()\n super.hipsShaderProgram.setColorMapShader()\n break\n case 'rainbow':\n this.colorMapIdx = 4\n this.colorMap = ColorMaps['rainbow']\n // hipsShaderProgram.setColorMapShader()\n super.hipsShaderProgram.setColorMapShader()\n break\n case 'eosb':\n this.colorMapIdx = 5\n this.colorMap = ColorMaps['eosb']\n super.hipsShaderProgram.setColorMapShader()\n // hipsShaderProgram.setColorMapShader()\n break\n case 'cubehelix':\n this.colorMapIdx = 6\n this.colorMap = ColorMaps['cubehelix']\n super.hipsShaderProgram.setColorMapShader()\n // hipsShaderProgram.setColorMapShader()\n break\n case 'hot':\n this.colorMapIdx = 7\n this.colorMap = ColorMaps['hot']\n super.hipsShaderProgram.setColorMapShader()\n // hipsShaderProgram.setColorMapShader()\n break\n case 'gray':\n this.colorMapIdx = 8\n this.colorMap = ColorMaps['gray']\n super.hipsShaderProgram.setColorMapShader()\n // hipsShaderProgram.setColorMapShader()\n break\n case 'native':\n this.colorMapIdx = 0\n this.colorMap = ColorMaps['native']\n super.hipsShaderProgram.setNativeShader()\n break\n default:\n this.colorMapIdx = 9\n this.colorMap = colorMap\n super.hipsShaderProgram.setColorMapShader()\n }\n }\n\n private initShaders(): void {\n super.hipsShaderProgram.enableProgram()\n // hipsShaderProgram.enableProgram()\n // this.shaderProgram = super.hipsShaderProgram.shaderProgram\n // this.shaderProgram = hipsShaderProgram.shaderProgram\n }\n\n getCurrentHealpixOrder(): number {\n return this._visibleorder\n }\n\n getDebugStats(): HiPSDebugStats {\n const tileBuffer = this._healpixGrid.visibleTilesManager.tileBuffer\n const visibleTiles = this.isGalacticHips\n ? this._healpixGrid.visibleTilesManager.galVisibleTilesByOrder\n : this._healpixGrid.visibleTilesManager.visibleTilesByOrder\n\n return {\n activeBaseLayer: 'hips',\n hipsName: this._descriptor.surveyName,\n hipsUrl: this._baseurl,\n isGalactic: this.isGalacticHips,\n currentOrder: visibleTiles.order,\n visibleTileCount: visibleTiles.pixels.length,\n activeTileCount: tileBuffer.activeTileCount,\n cachedTileCount: tileBuffer.cachedTileCount,\n cacheSize: tileBuffer.size,\n readyTileCount: tileBuffer.readyTileCount,\n loadingTileCount: tileBuffer.loadingTileCount,\n }\n }\n\n private refresh(input: SkyEntityDrawInput): void {\n // const fov = this._healpixGrid.getMinFoV()\n // this._visibleorder = Math.min(fovHelper.getHiPSNorder(fov), this._maxorder)\n const rawFov = input.fovDeg ?? this._healpixGrid.getMinFoV()\n const fov = Number.isFinite(rawFov) && rawFov > 0 ? rawFov : 1e-6\n this._visibleorder = Math.min(fovHelper.getHiPSNorder(fov, this._visibleorder), this._maxorder)\n }\n\n draw(input: SkyEntityDrawInput): void {\n \n const vMatrix = input.camera.getCameraMatrix() as Float32Array\n if (!vMatrix) return\n\n const pMatrix = input.pMatrix\n if (!pMatrix) return\n\n this.refresh(input)\n \n const mMatrix = this.getModelMatrix() as Float32Array\n super.hipsShaderProgram.setRuntimeColorMap(this.colorMap)\n\n if (this._allSky && this._allSkyTile) {\n if (this.isGalacticHips) {\n this._allSkyTile.draw(\n this._healpixGrid.visibleTilesManager.galVisibleTilesByOrder.order,\n this._healpixGrid.visibleTilesManager.galAncestorsMap,\n // visibleTilesManager.galVisibleTilesByOrder.order,\n // visibleTilesManager.galAncestorsMap,\n pMatrix as Float32Array,\n vMatrix,\n mMatrix,\n this.colorMapIdx\n )\n } else {\n this._allSkyTile.draw(\n this._healpixGrid.visibleTilesManager.visibleTilesByOrder.order,\n this._healpixGrid.visibleTilesManager.ancestorsMap,\n // visibleTilesManager.visibleTilesByOrder.order,\n // visibleTilesManager.ancestorsMap,\n pMatrix as Float32Array,\n vMatrix,\n mMatrix,\n this.colorMapIdx\n )\n }\n return\n }\n\n // Non all-sky path\n const order = this.isGalacticHips\n ? this._healpixGrid.visibleTilesManager.galVisibleTilesByOrder.order\n : this._healpixGrid.visibleTilesManager.visibleTilesByOrder.order\n \n const map = this.isGalacticHips\n ? this._healpixGrid.visibleTilesManager.galAncestorsMap\n : this._healpixGrid.visibleTilesManager.ancestorsMap\n \n this._ancestorTiles.forEach((ancestor) => {\n ancestor.draw(order, map, pMatrix as Float32Array, vMatrix, mMatrix, this.colorMapIdx)\n })\n }\n}\n\n// export default HiPS\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// HiPSDescriptor.ts\n'use strict'\n\nexport interface HiPSDataRange {\n min: number | undefined\n max: number | undefined\n}\n\nexport type HiPSFrame = 'equatorial' | 'galactic' | string\n\nexport class HiPSDescriptor {\n private _minOrder: number = 3\n private _imgformats: string[] = []\n private _datarange: HiPSDataRange = { min: undefined, max: undefined }\n private _maxOrder: number | undefined\n private _tilewidth: number | undefined\n private _hipsFrame: HiPSFrame | undefined\n private _hipsName: string = 'NONAME'\n private _hipsurl: string\n private _emMin: number | undefined\n private _emMax: number | undefined\n private _isGalctic: boolean = false\n private _propertiesRawText: string\n private _propertiesMap: Map<string, string> = new Map()\n\n constructor(hipsproperties: string, hipsurl: string) {\n this._hipsurl = hipsurl\n\n this._propertiesRawText = hipsproperties\n const lines = hipsproperties.split(/\\r\\n|\\n/)\n for (const raw of lines) {\n const line = raw.trim()\n if (!line || line.startsWith('#')) continue\n\n const maybeKey = line.slice(0, line.indexOf('=')).trim()\n const maybeValue = this.getValue(line)\n if (maybeKey && maybeValue !== undefined) {\n this._propertiesMap.set(maybeKey, maybeValue)\n }\n\n if (line.startsWith('hips_tile_format') || line.startsWith('format')) {\n // normalize jpeg→jpg\n const list = this.getValue(line)?.replace(/jpeg/gi, 'jpg') ?? ''\n this._imgformats = list.split(/\\s+/).filter(Boolean)\n } else if (line.startsWith('hips_data_range')) {\n const v = this.getValue(line)\n if (v) {\n const [minStr, maxStr] = v.split(/\\s+/)\n this._datarange.min = parseFloat(minStr)\n this._datarange.max = parseFloat(maxStr)\n }\n } else if (line.startsWith('hips_tile_width')) {\n const n = Number(this.getValue(line))\n this._tilewidth = Number.isFinite(n) ? n : undefined\n } else if (line.startsWith('hips_order_min')) {\n const n = Number(this.getValue(line))\n this._minOrder = Number.isFinite(n) ? n : this._minOrder\n } else if (line.startsWith('hips_order') || line.startsWith('maxOrder')) {\n const n = Number(this.getValue(line))\n this._maxOrder = Number.isFinite(n) ? n : this._maxOrder\n } else if (line.startsWith('hips_frame') || line.startsWith('frame')) {\n this._hipsFrame = this.getValue(line) as HiPSFrame\n } else if (line.startsWith('obs_collection') || line.startsWith('label')) {\n this._hipsName = this.getValue(line) ?? this._hipsName\n } else if (line.startsWith('em_min')) {\n const n = Number(this.getValue(line))\n this._emMin = Number.isFinite(n) ? n : undefined\n } else if (line.startsWith('em_max')) {\n const n = Number(this.getValue(line))\n this._emMax = Number.isFinite(n) ? n : undefined\n }\n \n }\n\n if (!this._hipsName) {\n console.warn(`[HiPSDescriptor] hipsName not defined in properties of ${this._hipsurl}. Defaulting to 'NONAME'.`)\n }\n if (!this._hipsFrame) {\n console.warn(\n `[HiPSDescriptor] hips_frame not defined in properties of ${this._hipsurl}. Defaulting to 'equatorial'.`\n )\n this._hipsFrame = 'equatorial'\n }\n this._isGalctic = this._hipsFrame.toLowerCase().includes('gal')\n\n if (this._maxOrder === undefined || this._imgformats.length === 0) {\n throw new Error(\n `[HiPSDescriptor] Invalid properties for ${this._hipsurl}. maxOrder=${this._maxOrder}, imgFormats.length=${this._imgformats.length}`\n )\n }\n }\n\n private getValue(line: string): string | undefined {\n const idx = line.indexOf('=')\n if (idx < 0) return undefined\n return line.slice(idx + 1).trim()\n }\n\n // --- Getters ---\n get propertiesRawText(){\n return this._propertiesRawText\n }\n\n get properties(): ReadonlyMap<string, string> {\n return new Map(this._propertiesMap)\n }\n\n getProperty(key: string): string | undefined {\n return this._propertiesMap.get(key)\n }\n\n get surveyName(): string {\n return this._hipsName\n }\n\n get url(): string {\n return this._hipsurl\n }\n\n get maxOrder(): number {\n return this._maxOrder as number\n }\n\n get minOrder(): number {\n return this._minOrder\n }\n\n get imgFormats(): string[] {\n return this._imgformats\n }\n\n get hipsFrame(): HiPSFrame {\n return this._hipsFrame as HiPSFrame\n }\n\n get isGalactic(): boolean {\n return this._isGalctic\n }\n\n get emMin(): number | undefined {\n return this._emMin\n }\n\n get emMax(): number | undefined {\n return this._emMax\n }\n\n get tileWidth(): number | undefined {\n return this._tilewidth\n }\n\n get dataRange(): HiPSDataRange {\n return this._datarange\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// Tile.ts\nimport global from '../../Global.js'\nimport { TileBuffer } from './TileBuffer.js'\nimport { fovHelper } from './FoVHelper.js'\nimport {HiPS} from './HiPS.js'\nimport { VisibleTilesManager } from './VisibleTilesManager.js'\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js'\n\n// ---- Local helper types (adapt or import real ones if you have them) ----\n\ninterface ShaderLocations {\n pMatrix: WebGLUniformLocation | null;\n mMatrix: WebGLUniformLocation | null;\n vMatrix: WebGLUniformLocation | null;\n sampler: WebGLUniformLocation | null;\n textureAlpha: WebGLUniformLocation | null;\n clorMapIdx: WebGLUniformLocation | null;\n vertexPositionAttribute: number;\n textureCoordAttribute: number;\n}\n\ntype Mat4 = Float32Array;\n\n// ------------------------------------------------------------------------\n\nexport default class Tile {\n private _hips: HiPS\n private _tileno: number\n private _baseurl: string\n private _order: number\n\n private _format: string\n private _maxorder: number\n private _isGalacticHips: boolean\n\n private _ready = false\n private _abort = false\n private _image!: HTMLImageElement\n private _textureLoaded = false\n private _texture?: WebGLTexture\n private _texurl = ''\n\n private _hipsShaderIndex = 0\n\n private _cacheTime0?: number\n private _inView = true\n private _amIStillInFoV_requsetID: number\n\n // geometry buffers\n private vertexPosition: Float32Array[] = []\n private vertexPositionBuffer: WebGLBuffer[] = []\n private vertexIndices: Uint16Array | Uint32Array = new Uint16Array()\n private vertexIndexBuffer?: WebGLBuffer\n\n private _tileBuffer: TileBuffer\n\n public opacity = 1.0\n private _webgl: WebGL2RenderingContext\n private _visibleTileManager: VisibleTilesManager\n // private _hipsShaderProgram\n\n constructor(tileno: number, order: number,\n hips: HiPS, tileBuffer: TileBuffer,\n webgl: WebGL2RenderingContext,\n visibleTileManager: VisibleTilesManager,\n // hipsShaderProgram: HiPSShaderProgram\n) {\n\n // this._hipsShaderProgram = hipsShaderProgram\n this._visibleTileManager = visibleTileManager\n this._webgl = webgl\n this._tileBuffer = tileBuffer\n this._hips = hips\n this._tileno = tileno\n\n this._format = hips.format\n this._baseurl = hips.baseURL\n this._maxorder = hips.maxOrder\n this._isGalacticHips = hips.isGalacticHips\n\n this._order = order\n\n this._amIStillInFoV_requsetID = window.setInterval(() => {\n this.amIStillInFoV()\n }, 5000)\n\n this.initImage()\n }\n\n destroyIntervals(): void {\n window.clearInterval(this._amIStillInFoV_requsetID)\n }\n\n getReadyState(): boolean {\n return this._ready\n }\n\n isLoading(): boolean {\n return !this._ready && !this._abort\n }\n\n get cacheTime0(): number | undefined {\n return this._cacheTime0\n }\n\n resetCacheTime0(): void {\n this._cacheTime0 = undefined\n }\n\n setCacheTime0(): void {\n this._cacheTime0 = new Date().getTime()\n }\n\n private initImage(): void {\n if (this._order > this._maxorder) {\n this._ready = false\n this._abort = true\n this.destroyIntervals()\n console.warn(\n `[Tile] Skipping tile request above max order: requested order ${this._order}, max order ${this._maxorder}, url ${this._baseurl}`\n )\n return\n }\n\n this._image = new Image()\n\n const dirnumber = Math.floor(this._tileno / 10000) * 10000\n this._texurl = `${this._baseurl}/Norder${this._order}/Dir${dirnumber}/Npix${this._tileno}.${this._format}`\n\n this._image.onload = () => this.imageLoaded()\n this._image.onerror = () => {\n // console.error('File not found?', this._texurl)\n this._ready = false\n this._abort = true\n this.destroyIntervals()\n }\n\n this._image.crossOrigin = 'anonymous'\n this._image.src = this._texurl\n }\n\n private imageLoaded(): void {\n\n // this.textureLoaded()\n // this.initModelBuffer()\n // this._textureLoaded = true\n this._ready = true\n }\n\n // private textureLoaded(): void {\n private textureLoaded(hipsShaderProgram: HiPSShaderProgram): void {\n \n \n // this._hipsShaderProgram.enableProgram()\n hipsShaderProgram.enableProgram()\n const gl = this._webgl as WebGL2RenderingContext\n this._texture = gl.createTexture()!\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n\n if (!gl.isTexture(this._texture)) {\n console.log('error in texture')\n }\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture!)\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image)\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n\n // FIX: use the sampler location we fetched in enableShaders()\n // gl.uniform1i((this._hipsShaderProgram.locations as ShaderLocations).sampler, this._hipsShaderIndex)\n // gl.uniform1i((hipsShaderProgram.locations as ShaderLocations).sampler, this._hipsShaderIndex)\n\n if (!gl.isTexture(this._texture)) {\n console.warn('Texture creation failed')\n }\n this.initModelBuffer()\n this._textureLoaded = true\n }\n\n private initModelBuffer(): void {\n const gl = this._webgl as WebGL2RenderingContext\n\n this.vertexPosition = []\n this.vertexPositionBuffer = []\n this.vertexIndices = new Uint16Array()\n\n const reforder = fovHelper.getRefOrder(this._order)\n\n const orighealpix = global.getHealpix(this._order)\n const origxyf = orighealpix.nest2xyf(this._tileno)\n const orderjump = reforder - this._order\n\n const dxmin = origxyf.ix << orderjump\n const dxmax = (origxyf.ix << orderjump) + (1 << orderjump)\n const dymin = origxyf.iy << orderjump\n const dymax = (origxyf.iy << orderjump) + (1 << orderjump)\n\n const healpix = global.getHealpix(reforder)\n\n this.setupPositionAndTexture4Quadrant2(dxmin, dxmin + (dxmax - dxmin) / 2, dymin, dymin + (dymax - dymin) / 2, 0, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant2(dxmin + (dxmax - dxmin) / 2, dxmax, dymin, dymin + (dymax - dymin) / 2, 1, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant2(dxmin, dxmin + (dxmax - dxmin) / 2, dymin + (dymax - dymin) / 2, dymax, 2, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant2(dxmin + (dxmax - dxmin) / 2, dxmax, dymin + (dymax - dymin) / 2, dymax, 3, healpix, orderjump, origxyf)\n\n const pixelsXQuadrant = this.vertexPosition[0].length / 20\n const idx = this.computeVertexIndices(pixelsXQuadrant)\n\n // If large, upgrade to Uint32 indices\n if (idx.length > 65535) {\n // Optional: require OES_element_index_uint if you’re still on WebGL1\n this.vertexIndices = new Uint32Array(idx)\n } else {\n this.vertexIndices = new Uint16Array(idx)\n }\n\n this.vertexIndexBuffer = gl.createBuffer()!\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndices, gl.STATIC_DRAW)\n }\n\n private computeVertexIndices(pixelsXQuadrant: number): Uint32Array {\n const vertexIndices = new Uint32Array(6 * pixelsXQuadrant)\n let baseFaceIndex = 0\n for (let j = 0; j < pixelsXQuadrant; j++) {\n const b = baseFaceIndex\n vertexIndices[6 * j] = b\n vertexIndices[6 * j + 1] = b + 1\n vertexIndices[6 * j + 2] = b + 2\n vertexIndices[6 * j + 3] = b + 2\n vertexIndices[6 * j + 4] = b + 3\n vertexIndices[6 * j + 5] = b\n baseFaceIndex += 4\n }\n return vertexIndices\n }\n\n private setupPositionAndTexture4Quadrant2(\n dxmin: number,\n dxmax: number,\n dymin: number,\n dymax: number,\n qidx: number,\n healpix: any,\n orderjump: number,\n origxyf: any\n ): void {\n const gl = this._webgl as WebGL2RenderingContext\n this.vertexPosition[qidx] = new Float32Array(20 * (dxmax - dxmin) * (dymax - dymin))\n\n const step = 1 / (1 << orderjump)\n let p = 0\n\n const s_pixel_size = 0\n const t_pixel_size = 0\n\n for (let dx = dxmin; dx < dxmax; dx++) {\n for (let dy = dymin; dy < dymax; dy++) {\n const facesVec3Array = healpix.getPointsForXyfNoStep(dx, dy, origxyf.face)\n const uindex = dy - (origxyf.iy << orderjump)\n const vindex = dx - (origxyf.ix << orderjump)\n\n // v0\n this.vertexPosition[qidx][20 * p] = facesVec3Array[0].x\n this.vertexPosition[qidx][20 * p + 1] = facesVec3Array[0].y\n this.vertexPosition[qidx][20 * p + 2] = facesVec3Array[0].z\n this.vertexPosition[qidx][20 * p + 3] = step + step * uindex + s_pixel_size\n this.vertexPosition[qidx][20 * p + 4] = 1 - (step + step * vindex) - t_pixel_size\n // v1\n this.vertexPosition[qidx][20 * p + 5] = facesVec3Array[1].x\n this.vertexPosition[qidx][20 * p + 6] = facesVec3Array[1].y\n this.vertexPosition[qidx][20 * p + 7] = facesVec3Array[1].z\n this.vertexPosition[qidx][20 * p + 8] = step + step * uindex + s_pixel_size\n this.vertexPosition[qidx][20 * p + 9] = 1 - step * vindex + t_pixel_size\n // v2\n this.vertexPosition[qidx][20 * p + 10] = facesVec3Array[2].x\n this.vertexPosition[qidx][20 * p + 11] = facesVec3Array[2].y\n this.vertexPosition[qidx][20 * p + 12] = facesVec3Array[2].z\n this.vertexPosition[qidx][20 * p + 13] = step * uindex - s_pixel_size\n this.vertexPosition[qidx][20 * p + 14] = 1 - step * vindex + t_pixel_size\n // v3\n this.vertexPosition[qidx][20 * p + 15] = facesVec3Array[3].x\n this.vertexPosition[qidx][20 * p + 16] = facesVec3Array[3].y\n this.vertexPosition[qidx][20 * p + 17] = facesVec3Array[3].z\n this.vertexPosition[qidx][20 * p + 18] = step * uindex - s_pixel_size\n this.vertexPosition[qidx][20 * p + 19] = 1 - (step + step * vindex) - t_pixel_size\n p++\n }\n }\n\n this.vertexPositionBuffer[qidx] = gl.createBuffer()!\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n gl.bufferData(gl.ARRAY_BUFFER, this.vertexPosition[qidx], gl.STATIC_DRAW)\n }\n\n get inView(): boolean {\n return this._inView\n }\n\n private moveToCache(): void {\n // newTileBuffer.moveTileToCache(this._tileno, this._order, this._hips)\n this._tileBuffer.moveTileToCache(this._tileno, this._order, this._hips)\n this._inView = false\n this.destroyIntervals()\n }\n\n amIStillInFoV(): void {\n if (this._textureLoaded) this._ready = true\n\n if (this._isGalacticHips) {\n if (this._visibleTileManager.galAncestorsMap.has(this._order)) {\n if (!this._visibleTileManager.galAncestorsMap.get(this._order)!.includes(this._tileno)) {\n this.moveToCache()\n } else {\n this._inView = true\n }\n }\n // if (visibleTilesManager.galAncestorsMap.has(this._order)) {\n // if (!visibleTilesManager.galAncestorsMap.get(this._order)!.includes(this._tileno)) {\n // this.moveToCache()\n // } else {\n // this._inView = true\n // }\n // }\n\n if (this._order == this._visibleTileManager.visibleOrder) {\n if (!this._visibleTileManager.galVisibleTilesByOrder.pixels.includes(this._tileno)) {\n this.moveToCache()\n } else {\n this._inView = true\n }\n }\n // if (this._order == visibleTilesManager.visibleOrder) {\n // if (!visibleTilesManager.galVisibleTilesByOrder.pixels.includes(this._tileno)) {\n // this.moveToCache()\n // } else {\n // this._inView = true\n // }\n // }\n } else {\n if (this._visibleTileManager.ancestorsMap.has(this._order)) {\n if (!this._visibleTileManager.ancestorsMap.get(this._order)!.includes(this._tileno)) {\n this.moveToCache()\n } else {\n this._inView = true\n }\n }\n // if (visibleTilesManager.ancestorsMap.has(this._order)) {\n // if (!visibleTilesManager.ancestorsMap.get(this._order)!.includes(this._tileno)) {\n // this.moveToCache()\n // } else {\n // this._inView = true\n // }\n // }\n\n if (this._order == this._visibleTileManager.visibleOrder) {\n if (!this._visibleTileManager.visibleTilesByOrder.pixels.includes(this._tileno)) {\n this.moveToCache()\n } else {\n this._inView = true\n }\n }\n // if (this._order == visibleTilesManager.visibleOrder) {\n // if (!visibleTilesManager.visibleTilesByOrder.pixels.includes(this._tileno)) {\n // this.moveToCache()\n // } else {\n // this._inView = true\n // }\n // }\n }\n }\n\n draw(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Mat4,\n vMatrix: Mat4,\n mMatrix: Mat4,\n colorMapIdx: number,\n hipsShaderProgram: HiPSShaderProgram\n ): void {\n if (!this._ready || this._abort) return\n \n if (!this._textureLoaded) {\n this.textureLoaded(hipsShaderProgram)\n }\n\n let quadrantsToDraw = new Set<number>([0, 1, 2, 3])\n if (visibleOrder > this._order && this._order < this._maxorder) {\n // const kids = this.drawChildren(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n const kids = this.drawChildren(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx, hipsShaderProgram)\n if (kids) quadrantsToDraw = kids\n }\n const gl = this._webgl as WebGL2RenderingContext\n hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n // this._hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n \n // Enable attributes (these locations are retrieved in enableShaders)\n // gl.enableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n // gl.enableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n gl.enableVertexAttribArray((hipsShaderProgram.locations as ShaderLocations).vertexPositionAttribute)\n gl.enableVertexAttribArray((hipsShaderProgram.locations as ShaderLocations).textureCoordAttribute)\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture!)\n // gl.uniform1f(this._hipsShaderProgram.locations.textureAlpha, this.opacity)\n gl.uniform1f((hipsShaderProgram.locations as ShaderLocations).textureAlpha, this.opacity)\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer!)\n const elemno = this.vertexIndices.length\n const indexType = this.vertexIndices instanceof Uint32Array ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT\n\n quadrantsToDraw.forEach((qidx) => {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n\n gl.vertexAttribPointer(\n // this._hipsShaderProgram.locations.vertexPositionAttribute,\n (hipsShaderProgram.locations as ShaderLocations).vertexPositionAttribute,\n 3, gl.FLOAT, false, 5 * 4, 0\n )\n gl.vertexAttribPointer(\n // this._hipsShaderProgram.locations.textureCoordAttribute,\n (hipsShaderProgram.locations as ShaderLocations).textureCoordAttribute,\n 2, gl.FLOAT, false, 5 * 4, 3 * 4\n )\n\n gl.drawElements(gl.TRIANGLES, elemno, indexType, 0)\n })\n\n // gl.disableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n // gl.disableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n gl.disableVertexAttribArray((hipsShaderProgram.locations as ShaderLocations).vertexPositionAttribute)\n gl.disableVertexAttribArray((hipsShaderProgram.locations as ShaderLocations).textureCoordAttribute)\n }\n\n private drawChildren(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Mat4,\n vMatrix: Mat4,\n mMatrix: Mat4,\n colorMapIdx: number,\n hipsShaderProgram: HiPSShaderProgram\n ): Set<number> | undefined {\n const quadrantsToDraw = new Set<number>([0, 1, 2, 3])\n const childrenOrder = this._order + 1\n if (!visibleTilesMap.has(childrenOrder)) return\n\n for (let c = 0; c < 4; c++) {\n const childTileNo = (this._tileno << 2) + c\n const list = visibleTilesMap.get(childrenOrder)!\n if (list.includes(childTileNo)) {\n const childTile = this._isGalacticHips\n ? this._tileBuffer.getGalTile(childTileNo, childrenOrder, this._hips)\n : this._tileBuffer.getTile(childTileNo, childrenOrder, this._hips)\n // const childTile = this._isGalacticHips\n // ? newTileBuffer.getGalTile(childTileNo, childrenOrder, this._hips)\n // : newTileBuffer.getTile(childTileNo, childrenOrder, this._hips)\n\n // childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx, hipsShaderProgram)\n if (childTile._ready) {\n quadrantsToDraw.delete(childTileNo - (this._tileno << 2))\n }\n }\n }\n return quadrantsToDraw\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// TileBuffer.ts\nimport Tile from './Tile.js' // adjust if your file is named differently\nimport {HiPS} from './HiPS.js'\nimport { VisibleTilesManager } from './VisibleTilesManager.js'\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js'\n\n// export default class TileBuffer {\nexport class TileBuffer {\n // Equatorial\n private _tiles: Map<string, Tile>\n private _cachedTiles: Map<string, Tile>\n private _activeHiPS: Map<HiPS, Map<string, Tile>>\n\n // Galactic\n private _galTiles: Map<string, Tile>\n private _galCachedTiles: Map<string, Tile>\n private _galActiveHiPS: Map<HiPS, Map<string, Tile>>\n\n private _cacheAliveMilliSeconds: number\n private _cleanerId: number\n\n private _webgl: WebGL2RenderingContext\n private _visibleTileManager: VisibleTilesManager\n private _hipsShaderProgram\n\n constructor(minutesToLiveInCache = 1, webgl: WebGL2RenderingContext,\n hipsShaderProgram: HiPSShaderProgram,\n visibleTileManager: VisibleTilesManager) {\n\n this._hipsShaderProgram = hipsShaderProgram\n this._visibleTileManager = visibleTileManager\n this._webgl = webgl\n this._tiles = new Map()\n this._cachedTiles = new Map()\n this._activeHiPS = new Map()\n\n this._galTiles = new Map()\n this._galCachedTiles = new Map()\n this._galActiveHiPS = new Map()\n\n this._cacheAliveMilliSeconds = minutesToLiveInCache * 60 * 1000\n\n this._cleanerId = window.setInterval(() => {\n this.cacheCleaner()\n }, 10_000)\n }\n\n /** Register an equatorial HiPS into the buffer. */\n addHiPS(hips: HiPS): void {\n if (this._activeHiPS.has(hips)) {\n console.error('HiPS already present in TileBuffer')\n return\n }\n this._activeHiPS.set(hips, new Map())\n }\n\n /** Register a galactic HiPS into the buffer. */\n addGalHiPS(hips: HiPS): void {\n if (this._galActiveHiPS.has(hips)) {\n console.error('HiPS already present in TileBuffer')\n return\n }\n this._galActiveHiPS.set(hips, new Map())\n }\n\n /** Preload/add tile for every registered equatorial HiPS. */\n addTile(order: number, tileno: number): void {\n for (const hips of this._activeHiPS.keys()) {\n if (order > hips.maxOrder) {\n continue\n }\n this.getTile(tileno, order, hips)\n }\n }\n\n /** Preload/add tile for every registered galactic HiPS. */\n addGalTile(order: number, tileno: number): void {\n for (const hips of this._galActiveHiPS.keys()) {\n if (order > hips.maxOrder) {\n continue\n }\n this.getGalTile(tileno, order, hips)\n }\n }\n\n /** Fetch (or create) an equatorial tile, reviving from cache if present. */\n getTile(tileno: number, order: number, hips: HiPS): Tile {\n const tileKey = this.key(order, tileno, hips.baseURL)\n\n if (!this._tiles.has(tileKey)) {\n if (this._cachedTiles.has(tileKey)) {\n const tile = this._cachedTiles.get(tileKey)!\n this._tiles.set(tileKey, tile)\n this._cachedTiles.delete(tileKey)\n tile.resetCacheTime0()\n } else {\n // const tile = new Tile(tileno, order, hips as any, this, this._webgl, this._visibleTileManager, this._hipsShaderProgram)\n const tile = new Tile(tileno, order, hips as any, this, this._webgl, this._visibleTileManager)\n this._tiles.set(tileKey, tile)\n }\n }\n return this._tiles.get(tileKey)!\n }\n\n /** Fetch (or create) a galactic tile, reviving from cache if present. */\n getGalTile(tileno: number, order: number, hips: HiPS): Tile {\n const tileKey = this.key(order, tileno, hips.baseURL)\n\n if (!this._galTiles.has(tileKey)) {\n if (this._galCachedTiles.has(tileKey)) {\n const tile = this._galCachedTiles.get(tileKey)!\n this._galTiles.set(tileKey, tile)\n this._galCachedTiles.delete(tileKey)\n tile.resetCacheTime0()\n } else {\n // const tile = new Tile(tileno, order, hips as any, this, this._webgl, this._visibleTileManager, this._hipsShaderProgram)\n const tile = new Tile(tileno, order, hips as any, this, this._webgl, this._visibleTileManager)\n this._galTiles.set(tileKey, tile)\n }\n }\n return this._galTiles.get(tileKey)!\n }\n\n /** Move a tile (equatorial or galactic) into cache. */\n moveTileToCache(tileno: number, order: number, hips: HiPS): void {\n const tileKey = this.key(order, tileno, hips.baseURL)\n\n if (this._tiles.has(tileKey)) {\n const tile = this._tiles.get(tileKey)!\n tile.setCacheTime0()\n this._cachedTiles.set(tileKey, tile)\n this._tiles.delete(tileKey)\n }\n if (this._galTiles.has(tileKey)) {\n const tile = this._galTiles.get(tileKey)!\n tile.setCacheTime0()\n this._galCachedTiles.set(tileKey, tile)\n this._galTiles.delete(tileKey)\n }\n }\n\n /** Periodically purge stale cached tiles. */\n private cacheCleaner(): void {\n const now = Date.now()\n\n for (const [tileKey, tile] of this._cachedTiles) {\n const t0 = tile.cacheTime0\n if (!tile.inView && t0 !== undefined && now - t0 > this._cacheAliveMilliSeconds) {\n tile.destroyIntervals()\n this._cachedTiles.delete(tileKey)\n }\n }\n\n for (const [tileKey, tile] of this._galCachedTiles) {\n const t0 = tile.cacheTime0\n if (!tile.inView && t0 !== undefined && now - t0 > this._cacheAliveMilliSeconds) {\n tile.destroyIntervals()\n this._galCachedTiles.delete(tileKey)\n }\n }\n }\n\n /** Compose a stable key for maps. */\n private key(order: number, tileno: number, baseURL: string): string {\n return `${order}#${tileno}#${baseURL}`\n }\n\n /** Optional: call to stop internal timers if you dispose this buffer. */\n dispose(): void {\n window.clearInterval(this._cleanerId)\n }\n\n get size(): number {\n return this._tiles.size + this._cachedTiles.size + this._galTiles.size + this._galCachedTiles.size\n }\n\n get activeTileCount(): number {\n return this._tiles.size + this._galTiles.size\n }\n\n get cachedTileCount(): number {\n return this._cachedTiles.size + this._galCachedTiles.size\n }\n\n get readyTileCount(): number {\n let count = 0\n for (const tile of this._tiles.values()) {\n if (tile.getReadyState()) count++\n }\n for (const tile of this._galTiles.values()) {\n if (tile.getReadyState()) count++\n }\n for (const tile of this._cachedTiles.values()) {\n if (tile.getReadyState()) count++\n }\n for (const tile of this._galCachedTiles.values()) {\n if (tile.getReadyState()) count++\n }\n return count\n }\n\n get loadingTileCount(): number {\n let count = 0\n for (const tile of this._tiles.values()) {\n if (tile.isLoading()) count++\n }\n for (const tile of this._galTiles.values()) {\n if (tile.isLoading()) count++\n }\n for (const tile of this._cachedTiles.values()) {\n if (tile.isLoading()) count++\n }\n for (const tile of this._galCachedTiles.values()) {\n if (tile.isLoading()) count++\n }\n return count\n }\n}\n\n// Singleton (kept for compatibility with your original export)\n// export const newTileBuffer = new TileBuffer()\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport global from '../../Global.js';\nimport { Pointing, Vec3, Healpix } from 'astrospatial-core/healpix';\nimport RayPickingUtils from '../../utils/RayPickingUtils.js';\n// import { newTileBuffer } from './TileBuffer.js';\nimport { TileBuffer } from './TileBuffer.js';\nimport { vec4, mat4, ReadonlyMat4 } from 'gl-matrix';\n// import healpixGridSingleton from '../grid/HealpixGridSingleton.js';\n// import {HealpixGridSingleton} from '../grid/HealpixGridSingleton.js';\nimport { bootSetup } from '../../Config.js';\nimport { HealpixGrid } from '../grid/HealpixGrid.js';\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js';\nimport Camera from '../../Camera.js';\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\ninterface VisibleTiles {\n pixels: number[];\n order: number;\n}\n\n\nexport class VisibleTilesManager {\n private _visibleTilesByOrder: VisibleTiles;\n private _ancestorsMap: Map<number, number[]>;\n\n private initialised: boolean;\n\n private _galVisibleTilesByOrder: VisibleTiles;\n private _galAncestorsMap: Map<number, number[]>;\n private _galacticMatrixInverted: mat4;\n private _galacticMatrix: mat4;\n private insideSphere: boolean = bootSetup.insideSphere\n private _tileBuffer: TileBuffer\n private _healpixGrid: HealpixGrid;\n private _webgl: WebGL2RenderingContext;\n\n constructor(webgl: WebGL2RenderingContext, hipsShaderProgram: HiPSShaderProgram, healpixGrid: HealpixGrid) {\n \n this._webgl = webgl\n this._healpixGrid = healpixGrid\n this._visibleTilesByOrder = { pixels: [], order: 0 };\n this._ancestorsMap = new Map();\n this.initialised = false;\n\n this._galVisibleTilesByOrder = { pixels: [], order: 0 };\n this._galAncestorsMap = new Map();\n\n // Matrices for galactic <-> equatorial\n this._galacticMatrixInverted = mat4.create();\n this._galacticMatrix = mat4.create();\n\n // From https://observablehq.com/@fil/galactic-rotations (single-precision friendly)\n // This matrix is (galactic -> equatorial); we store its inverse too.\n mat4.set(\n this._galacticMatrixInverted,\n -0.054876, -0.873437, -0.483835, 0, \n 0.494109, -0.44483, 0.746982, -0, \n -0.867666, -0.198076, 0.455984, 0, \n 0, 0, 0, 1\n )\n mat4.invert(this._galacticMatrix, this._galacticMatrixInverted);\n this._tileBuffer = new TileBuffer(1, webgl, hipsShaderProgram, this)\n }\n\n get healpixGrid() {\n return this._healpixGrid\n }\n\n get tileBuffer() { \n return this._tileBuffer\n }\n\n init(insideSphere: boolean): void {\n this.initialised = true;\n this.insideSphere = insideSphere\n // this.computeVisiblePixels();\n // setInterval(() => this.computeVisiblePixels(), 500);\n }\n\n getVisibleOrder(): number {\n // return healpixGridSingleton.visibleorder;\n return this._healpixGrid.visibleorder;\n }\n\n\n // computeVisiblePixels(): void {\n computeVisiblePixels(order: number, webgl: WebGL2RenderingContext, camera: Camera, pMatrix: ReadonlyMat4): void {\n if (!this.initialised) return;\n\n // let order = healpixGridSingleton.visibleorder;\n if (global.insideSphere && order < 3) {\n order = 3;\n }\n\n this._ancestorsMap.set(order, []);\n this._galAncestorsMap.set(order, []);\n\n let pixels: number[] = [];\n let galTiles: number[] = [];\n\n if (order === 0) {\n const geomhealpix: Healpix = global.getHealpix(0);\n const npix = geomhealpix.getNPix();\n for (let i = 0; i < npix; i++) {\n pixels.push(i);\n this._ancestorsMap.get(order)!.push(i);\n galTiles.push(i);\n this._galAncestorsMap.get(order)!.push(i);\n }\n } else {\n const geomhealpix: Healpix = global.getHealpix(order);\n // const maxX = (global.gl as GL).canvas.width;\n // const maxY = (global.gl as GL).canvas.height;\n const maxX = (webgl as GL).canvas.width;\n const maxY = (webgl as GL).canvas.height;\n\n // Sample a grid of screen points, project to the sphere, then to galactic\n for (let i = 0; i <= maxX; i += maxX / 30) {\n for (let j = 0; j <= maxY; j += maxY / 30) {\n const hit = RayPickingUtils.getIntersectionPointWithSingleModel(\n i,\n j, this._healpixGrid, this._webgl, camera, pMatrix\n );\n\n if (hit.length > 0) {\n // Equatorial -> Galactic (use _galacticMatrix)\n const galVec = vec4.create();\n vec4.transformMat4(galVec, [hit[0], hit[1], hit[2], 1], this._galacticMatrix);\n\n // Index in galactic HEALPix\n const galPoint = new Pointing(new Vec3(galVec[0], galVec[1], galVec[2]));\n const galTileNo = geomhealpix.ang2pix(galPoint);\n\n // Index in equatorial HEALPix\n const curPoint = new Pointing(new Vec3(hit[0], hit[1], hit[2]));\n const currPixNo = geomhealpix.ang2pix(curPoint);\n\n if (!pixels.includes(currPixNo)) {\n pixels.push(currPixNo);\n this._ancestorsMap.get(order)!.push(currPixNo);\n // newTileBuffer.addTile(order, currPixNo);\n this._tileBuffer.addTile(order, currPixNo);\n }\n\n if (!galTiles.includes(galTileNo)) {\n galTiles.push(galTileNo);\n this._galAncestorsMap.get(order)!.push(galTileNo);\n // newTileBuffer.addGalTile(order, galTileNo);\n this._tileBuffer.addGalTile(order, galTileNo);\n }\n }\n }\n }\n }\n\n this._visibleTilesByOrder = { pixels: pixels, order: order };\n this._galVisibleTilesByOrder = { pixels: galTiles, order: order };\n\n // Build ancestor pyramids down to order 0\n for (let o = 1; o < order; o++) {\n const tgtOrder = order - o;\n const list = this._ancestorsMap.get(tgtOrder) ?? [];\n this._ancestorsMap.set(tgtOrder, list);\n\n for (let p = 0; p < pixels.length; p++) {\n const parent = pixels[p] >> (2 * o);\n if (!list.includes(parent)) {\n list.push(parent);\n // newTileBuffer.addTile(tgtOrder, parent);\n this._tileBuffer.addTile(tgtOrder, parent);\n }\n }\n }\n\n for (let o = 1; o < order; o++) {\n const tgtOrder = order - o;\n const list = this._galAncestorsMap.get(tgtOrder) ?? [];\n this._galAncestorsMap.set(tgtOrder, list);\n\n for (let p = 0; p < galTiles.length; p++) {\n const parent = galTiles[p] >> (2 * o);\n if (!list.includes(parent)) {\n list.push(parent);\n // newTileBuffer.addGalTile(tgtOrder, parent);\n this._tileBuffer.addGalTile(tgtOrder, parent);\n }\n }\n }\n }\n\n get visibleTilesByOrder(): VisibleTiles {\n return this._visibleTilesByOrder;\n }\n\n get ancestorsMap(): Map<number, number[]> {\n return this._ancestorsMap;\n }\n\n get galVisibleTilesByOrder(): VisibleTiles {\n return this._galVisibleTilesByOrder;\n }\n\n get galAncestorsMap(): Map<number, number[]> {\n return this._galAncestorsMap;\n }\n\n get visibleOrder(): number {\n return this._visibleTilesByOrder.order;\n }\n}\n\n// export const visibleTilesManager = new VisibleTilesManager();","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: LicenseRef-AstroViewer-Dual-License\n */\n\nimport { AbstractSkyEntity, SkyEntityDrawInput } from '../AbstractSkyEntity.js'\nimport { HealpixGrid } from '../grid/HealpixGrid.js'\nimport { fovHelper } from '../hips/FoVHelper.js'\nimport { MeshHiPSShaderProgram } from '../../shader/MeshHiPSShaderProgram.js'\nimport { MeshHiPSDescriptor } from './MeshHiPSDescriptor.js'\nimport { MeshHiPSTile } from './MeshHiPSTile.js'\nimport type { MeshHiPSDebugStats, MeshHiPSTileCoord } from './MeshHiPSTypes.js'\n\nexport class MeshHiPS extends AbstractSkyEntity {\n private _shaderProgram: MeshHiPSShaderProgram\n private _tiles = new Map<string, MeshHiPSTile>()\n private _currentOrder: number\n private _visibleTiles: MeshHiPSTileCoord[] = []\n private _coverageTiles: MeshHiPSTileCoord[] = []\n\n constructor(\n radius: number,\n position: [number, number, number],\n xrad: number,\n yrad: number,\n private _descriptor: MeshHiPSDescriptor,\n webgl: WebGL2RenderingContext,\n private _healpixGrid: HealpixGrid,\n ) {\n super(radius, position, xrad, yrad, _descriptor.name, webgl, false)\n this.initGL(webgl)\n this._shaderProgram = new MeshHiPSShaderProgram(webgl)\n this._shaderProgram.enableProgram()\n this._currentOrder = _descriptor.selectedOrder\n }\n\n get currentOrder(): number {\n return this._currentOrder\n }\n\n get maxOrder(): number {\n return this._descriptor.maxOrder\n }\n\n get minOrder(): number {\n return this._descriptor.minOrder\n }\n\n get baseURL(): string {\n return this._descriptor.baseUrl\n }\n\n get propertiesRawText(): string {\n return this._descriptor.propertiesRawText\n }\n\n get properties(): ReadonlyMap<string, string> {\n return this._descriptor.properties\n }\n\n getProperty(key: string): string | undefined {\n return this._descriptor.getProperty(key)\n }\n\n refreshOrder(fovDeg: number | undefined): number {\n if (this._descriptor.fixedOrder) {\n this._currentOrder = this._descriptor.selectedOrder\n return this._currentOrder\n }\n\n const fov = Number.isFinite(fovDeg) && (fovDeg as number) > 0\n ? fovDeg as number\n : this._healpixGrid.getMinFoV()\n const safeFov = Number.isFinite(fov) && fov > 0 ? fov : 1e-6\n const order = fovHelper.getHiPSNorder(safeFov, this._currentOrder)\n this._currentOrder = Math.max(this._descriptor.minOrder, Math.min(this._descriptor.maxOrder, order))\n return this._currentOrder\n }\n\n draw(input: SkyEntityDrawInput): void {\n const vMatrix = input.camera.getCameraMatrix() as Float32Array\n if (!vMatrix || !input.pMatrix) return\n\n this.refreshOrder(input.fovDeg)\n this._visibleTiles = this.resolveVisibleTiles()\n this._coverageTiles = this.resolveCoverageTiles(this._visibleTiles)\n this.ensureTiles(this._coverageTiles)\n this.evictCached()\n\n const gl = this._webgl\n const pMatrix = input.pMatrix as Float32Array\n const mMatrix = this.getModelMatrix() as Float32Array\n const wasCullFace = gl.isEnabled(gl.CULL_FACE)\n const wasDepthTest = gl.isEnabled(gl.DEPTH_TEST)\n const wasDepthMask = gl.getParameter(gl.DEPTH_WRITEMASK) as boolean\n const previousDepthFunc = gl.getParameter(gl.DEPTH_FUNC) as number\n gl.enable(gl.DEPTH_TEST)\n gl.depthMask(true)\n gl.depthFunc(gl.LEQUAL)\n gl.disable(gl.CULL_FACE)\n\n const byOrder = this.groupTilesByOrder(this._coverageTiles)\n const orders = Array.from(byOrder.keys()).sort((a, b) => a - b)\n for (const order of orders) {\n for (const coord of byOrder.get(order) ?? []) {\n this._tiles.get(this.tileKey(coord))?.draw(\n pMatrix,\n vMatrix,\n mMatrix,\n this._descriptor.color,\n this._descriptor.wireframe,\n )\n }\n }\n\n if (wasCullFace) gl.enable(gl.CULL_FACE)\n if (!wasDepthTest) gl.disable(gl.DEPTH_TEST)\n gl.depthFunc(previousDepthFunc)\n gl.depthMask(wasDepthMask)\n }\n\n getDebugStats(): MeshHiPSDebugStats {\n const tiles = Array.from(this._tiles.values())\n return {\n activeBaseLayer: 'meships',\n meshHiPSName: this._descriptor.name,\n meshHiPSUrl: this._descriptor.baseUrl,\n currentOrder: this._currentOrder,\n visibleTileCount: this._visibleTiles.length,\n coverageTileCount: this._coverageTiles.length,\n cacheSize: this._tiles.size,\n readyTileCount: tiles.filter((tile) => tile.ready).length,\n loadingTileCount: tiles.filter((tile) => tile.loading).length,\n failedTileCount: tiles.filter((tile) => tile.failed).length,\n }\n }\n\n private resolveVisibleTiles(): MeshHiPSTileCoord[] {\n const manager = this._healpixGrid.visibleTilesManager as any\n const byOrder = manager?.visibleTilesByOrder\n const pixels = byOrder?.order === this._currentOrder && Array.isArray(byOrder.pixels)\n ? byOrder.pixels\n : []\n\n if (pixels.length > 0) {\n return pixels.map((ipix: number) => ({ order: this._currentOrder, ipix }))\n }\n\n const tileCount = 12 * 4 ** this._currentOrder\n return Array.from({ length: tileCount }, (_, ipix) => ({ order: this._currentOrder, ipix }))\n }\n\n private resolveCoverageTiles(visibleTiles: MeshHiPSTileCoord[]): MeshHiPSTileCoord[] {\n const tiles = new Map<string, MeshHiPSTileCoord>()\n const add = (coord: MeshHiPSTileCoord) => {\n if (coord.order < this._descriptor.minOrder || coord.order > this._descriptor.maxOrder) return\n tiles.set(this.tileKey(coord), coord)\n }\n\n for (const coord of visibleTiles) {\n add(coord)\n for (let order = coord.order - 1; order >= this._descriptor.minOrder; order--) {\n const shift = 2 * (coord.order - order)\n add({ order, ipix: coord.ipix >> shift })\n }\n }\n\n const manager = this._healpixGrid.visibleTilesManager as any\n const ancestorsMap = manager?.ancestorsMap as Map<number, number[]> | undefined\n if (ancestorsMap) {\n for (const [order, ipixes] of ancestorsMap) {\n if (order < this._descriptor.minOrder || order > this._descriptor.maxOrder) continue\n for (const ipix of ipixes) add({ order, ipix })\n }\n }\n\n return Array.from(tiles.values())\n }\n\n private groupTilesByOrder(coords: MeshHiPSTileCoord[]): Map<number, MeshHiPSTileCoord[]> {\n const byOrder = new Map<number, MeshHiPSTileCoord[]>()\n for (const coord of coords) {\n const list = byOrder.get(coord.order) ?? []\n list.push(coord)\n byOrder.set(coord.order, list)\n }\n return byOrder\n }\n\n private ensureTiles(coords: MeshHiPSTileCoord[]): void {\n for (const coord of coords) {\n const key = this.tileKey(coord)\n if (this._tiles.has(key)) continue\n this._tiles.set(\n key,\n new MeshHiPSTile(\n coord,\n this._descriptor.getTileUrl(coord.order, coord.ipix),\n this._webgl,\n this._shaderProgram,\n ),\n )\n }\n }\n\n private evictCached(): void {\n const maxCached = this._descriptor.maxCachedTiles\n if (this._tiles.size <= maxCached) return\n\n const visibleKeys = new Set(this._coverageTiles.map((coord) => this.tileKey(coord)))\n const evictable = Array.from(this._tiles.entries())\n .filter(([key]) => !visibleKeys.has(key))\n .sort((a, b) => a[1].lastUsedAt - b[1].lastUsedAt)\n\n while (this._tiles.size > maxCached && evictable.length > 0) {\n const [key, tile] = evictable.shift() as [string, MeshHiPSTile]\n tile.dispose()\n this._tiles.delete(key)\n }\n }\n\n private tileKey(coord: MeshHiPSTileCoord): string {\n return `${coord.order}/${coord.ipix}`\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: LicenseRef-AstroViewer-Dual-License\n */\n\nimport type { MeshHiPSConfig } from './MeshHiPSTypes.js'\n\nexport class MeshHiPSDescriptor {\n private _name = 'MeshHiPS'\n private _baseUrl: string\n private _minOrder = 0\n private _maxOrder = 0\n private _selectedOrder: number\n private _fixedOrder = false\n private _maxCachedTiles = 384\n // default neutral color (contrasts with page background)\n private _color: [number, number, number, number] = [0.32, 0.34, 0.36, 1.0]\n private _wireframe = false\n private _propertiesRawText = ''\n private _propertiesMap: Map<string, string> = new Map()\n private _meshRadius: number | null = null\n\n constructor(config: MeshHiPSConfig, propertiesText = '') {\n this._baseUrl = this.normalizeBaseUrl(config.baseUrl)\n this._propertiesRawText = propertiesText\n this.parseProperties(propertiesText)\n\n this._name = config.name ?? this._propertiesMap.get('obs_collection') ?? this._propertiesMap.get('label') ?? this._name\n this._minOrder = config.minOrder ?? this.readNumber('hips_order_min', this._minOrder)\n this._maxOrder = config.maxOrder ?? this.readNumber('hips_order', this.readNumber('hips_order_max', this._maxOrder))\n this._fixedOrder = config.order !== undefined\n this._selectedOrder = config.order ?? this._minOrder\n this._maxCachedTiles = config.maxCachedTiles ?? this._maxCachedTiles\n // color: prefer explicit config, then properties.mesh_color, then default\n if (config.color) {\n this._color = config.color\n } else if (this._propertiesMap.has('mesh_color')) {\n const raw = this._propertiesMap.get('mesh_color') || ''\n const parts = raw.split(/[,\\s]+/).map((v) => Number(v)).filter(Number.isFinite)\n if (parts.length >= 3) {\n let [r, g, b, a] = parts\n if (r > 1 || g > 1 || b > 1) {\n // assume 0-255 range\n r = r / 255\n g = g / 255\n b = b / 255\n }\n if (!Number.isFinite(a)) a = 1\n this._color = [r, g, b, a]\n }\n } else {\n this._color = this._color\n }\n this._wireframe = config.wireframe ?? this._wireframe\n\n this._selectedOrder = this.clampOrder(this._selectedOrder)\n // mesh radius: prefer explicit value from config, otherwise read mandatory property\n if (Number.isFinite((config as any).meshRadius)) {\n this._meshRadius = (config as any).meshRadius\n } else {\n const radiusFromProps = this.readNumber('mesh_radius', NaN)\n if (!Number.isFinite(radiusFromProps)) {\n throw new Error('Missing mandatory property \"mesh_radius\" in MeshHiPS properties')\n }\n this._meshRadius = radiusFromProps\n }\n }\n\n get name(): string {\n return this._name\n }\n\n get baseUrl(): string {\n return this._baseUrl\n }\n\n get minOrder(): number {\n return this._minOrder\n }\n\n get maxOrder(): number {\n return this._maxOrder\n }\n\n get selectedOrder(): number {\n return this._selectedOrder\n }\n\n get fixedOrder(): boolean {\n return this._fixedOrder\n }\n\n get maxCachedTiles(): number {\n return this._maxCachedTiles\n }\n\n get color(): [number, number, number, number] {\n return this._color\n }\n\n get wireframe(): boolean {\n return this._wireframe\n }\n\n get propertiesRawText(): string {\n return this._propertiesRawText\n }\n\n get properties(): ReadonlyMap<string, string> {\n return new Map(this._propertiesMap)\n }\n\n get meshRadius(): number {\n return this._meshRadius as number\n }\n\n getProperty(key: string): string | undefined {\n return this._propertiesMap.get(key)\n }\n\n getTileUrl(order: number, ipix: number): string {\n const dir = Math.floor(ipix / 10_000) * 10_000\n return `${this._baseUrl}Norder${order}/Dir${dir}/Npix${ipix}.obj`\n }\n\n private parseProperties(propertiesText: string): void {\n const lines = propertiesText.split(/\\r\\n|\\n/)\n for (const raw of lines) {\n const line = raw.trim()\n if (!line || line.startsWith('#')) continue\n const idx = line.indexOf('=')\n if (idx < 0) continue\n this._propertiesMap.set(line.slice(0, idx).trim(), line.slice(idx + 1).trim())\n }\n }\n\n private readNumber(key: string, fallback: number): number {\n const parsed = Number(this._propertiesMap.get(key))\n return Number.isFinite(parsed) ? parsed : fallback\n }\n\n private clampOrder(order: number): number {\n return Math.max(this._minOrder, Math.min(this._maxOrder, order))\n }\n\n private normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: LicenseRef-AstroViewer-Dual-License\n */\n\nimport { MeshHiPSShaderProgram } from '../../shader/MeshHiPSShaderProgram.js'\nimport { OBJMeshParser } from './OBJMeshParser.js'\nimport type { MeshHiPSGpuMesh, MeshHiPSMesh, MeshHiPSTileCoord } from './MeshHiPSTypes.js'\n\ntype Mat4 = Float32Array\n\nexport class MeshHiPSTile {\n private _gpuMesh: MeshHiPSGpuMesh | null = null\n private _ready = false\n private _loading = false\n private _failed = false\n private _lastUsedAt = 0\n private _createdAt = Date.now()\n\n constructor(\n readonly coord: MeshHiPSTileCoord,\n private _url: string,\n private _webgl: WebGL2RenderingContext,\n private _shaderProgram: MeshHiPSShaderProgram,\n ) {\n void this.load()\n }\n\n get ready(): boolean {\n return this._ready\n }\n\n get loading(): boolean {\n return this._loading\n }\n\n get failed(): boolean {\n return this._failed\n }\n\n get lastUsedAt(): number {\n return this._lastUsedAt\n }\n\n get createdAt(): number {\n return this._createdAt\n }\n\n touch(): void {\n this._lastUsedAt = Date.now()\n }\n\n draw(\n pMatrix: Mat4,\n vMatrix: Mat4,\n mMatrix: Mat4,\n color: [number, number, number, number],\n wireframe: boolean,\n ): boolean {\n this.touch()\n if (!this._ready || !this._gpuMesh) return false\n\n const gl = this._webgl\n this._shaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, color)\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._gpuMesh.positionBuffer)\n gl.vertexAttribPointer(\n this._shaderProgram.locations.vertexPositionAttribute,\n 3,\n gl.FLOAT,\n false,\n 0,\n 0,\n )\n gl.enableVertexAttribArray(this._shaderProgram.locations.vertexPositionAttribute)\n\n if (this._shaderProgram.locations.vertexNormalAttribute >= 0) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this._gpuMesh.normalBuffer)\n gl.vertexAttribPointer(\n this._shaderProgram.locations.vertexNormalAttribute,\n 3,\n gl.FLOAT,\n false,\n 0,\n 0,\n )\n gl.enableVertexAttribArray(this._shaderProgram.locations.vertexNormalAttribute)\n }\n\n gl.bindBuffer(\n gl.ELEMENT_ARRAY_BUFFER,\n wireframe ? this._gpuMesh.lineIndexBuffer : this._gpuMesh.indexBuffer,\n )\n gl.drawElements(\n wireframe ? gl.LINES : gl.TRIANGLES,\n wireframe ? this._gpuMesh.lineIndexCount : this._gpuMesh.indexCount,\n this._gpuMesh.indexType,\n 0,\n )\n\n gl.disableVertexAttribArray(this._shaderProgram.locations.vertexPositionAttribute)\n if (this._shaderProgram.locations.vertexNormalAttribute >= 0) {\n gl.disableVertexAttribArray(this._shaderProgram.locations.vertexNormalAttribute)\n }\n return true\n }\n\n dispose(): void {\n const gl = this._webgl\n if (this._gpuMesh?.positionBuffer) gl.deleteBuffer(this._gpuMesh.positionBuffer)\n if (this._gpuMesh?.normalBuffer) gl.deleteBuffer(this._gpuMesh.normalBuffer)\n if (this._gpuMesh?.indexBuffer) gl.deleteBuffer(this._gpuMesh.indexBuffer)\n if (this._gpuMesh?.lineIndexBuffer) gl.deleteBuffer(this._gpuMesh.lineIndexBuffer)\n this._gpuMesh = null\n this._ready = false\n this._loading = false\n }\n\n private async load(): Promise<void> {\n if (this._loading || this._ready) return\n\n this._loading = true\n try {\n const resp = await fetch(this._url)\n if (!resp.ok) throw new Error(`HTTP ${resp.status} fetching ${this._url}`)\n const mesh = OBJMeshParser.parse(await resp.text())\n this._gpuMesh = this.uploadMesh(mesh)\n this._ready = true\n this._failed = false\n } catch (error) {\n console.warn('[MeshHiPSTile] load failed', this._url, error)\n this._failed = true\n this._ready = false\n } finally {\n this._loading = false\n }\n }\n\n private uploadMesh(mesh: MeshHiPSMesh): MeshHiPSGpuMesh {\n const gl = this._webgl\n const positionBuffer = gl.createBuffer()\n const normalBuffer = gl.createBuffer()\n const indexBuffer = gl.createBuffer()\n const lineIndexBuffer = gl.createBuffer()\n\n if (!positionBuffer || !normalBuffer || !indexBuffer || !lineIndexBuffer) {\n throw new Error(`Could not create MeshHiPS buffers for ${this.key}`)\n }\n const lineIndices = this.buildLineIndices(mesh.indices)\n\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer)\n gl.bufferData(gl.ARRAY_BUFFER, mesh.positions, gl.STATIC_DRAW)\n\n gl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer)\n gl.bufferData(gl.ARRAY_BUFFER, mesh.normals, gl.STATIC_DRAW)\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, mesh.indices, gl.STATIC_DRAW)\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, lineIndexBuffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, lineIndices, gl.STATIC_DRAW)\n\n return {\n positionBuffer,\n normalBuffer,\n indexBuffer,\n lineIndexBuffer,\n indexCount: mesh.indices.length,\n lineIndexCount: lineIndices.length,\n indexType: gl.UNSIGNED_INT,\n }\n }\n\n private buildLineIndices(indices: Uint32Array): Uint32Array {\n const lines = new Uint32Array(indices.length * 2)\n let out = 0\n for (let i = 0; i < indices.length; i += 3) {\n const a = indices[i]\n const b = indices[i + 1]\n const c = indices[i + 2]\n lines[out++] = a\n lines[out++] = b\n lines[out++] = b\n lines[out++] = c\n lines[out++] = c\n lines[out++] = a\n }\n return lines\n }\n\n private get key(): string {\n return `${this.coord.order}/${this.coord.ipix}`\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: LicenseRef-AstroViewer-Dual-License\n */\n\nimport type { MeshHiPSMesh } from './MeshHiPSTypes.js'\n\nexport type OBJGeneratedNormalsMode = 'smooth' | 'flat'\n\nexport interface OBJMeshParserOptions {\n readonly preferFileNormals?: boolean\n readonly generatedNormals?: OBJGeneratedNormalsMode\n}\n\ntype OBJFaceVertex = {\n readonly positionIndex: number\n readonly normalIndex?: number\n}\n\nexport class OBJMeshParser {\n static parse(text: string, options: OBJMeshParserOptions = {}): MeshHiPSMesh {\n const preferFileNormals = options.preferFileNormals ?? true\n const generatedNormals = options.generatedNormals ?? 'smooth'\n const sourcePositions: number[] = []\n const sourceNormals: number[] = []\n const faces: OBJFaceVertex[][] = []\n const lines = text.split(/\\r\\n|\\n/)\n\n for (const raw of lines) {\n const line = raw.trim()\n if (!line || line.startsWith('#')) continue\n\n if (line.startsWith('v ')) {\n const parts = line.split(/\\s+/)\n if (parts.length < 4) continue\n const x = Number(parts[1])\n const y = Number(parts[2])\n const z = Number(parts[3])\n if (![x, y, z].every(Number.isFinite)) continue\n sourcePositions.push(x, y, z)\n continue\n }\n\n if (line.startsWith('vn ')) {\n const parts = line.split(/\\s+/)\n if (parts.length < 4) continue\n const x = Number(parts[1])\n const y = Number(parts[2])\n const z = Number(parts[3])\n if (![x, y, z].every(Number.isFinite)) continue\n const len = Math.hypot(x, y, z) || 1\n sourceNormals.push(x / len, y / len, z / len)\n continue\n }\n\n if (line.startsWith('f ')) {\n const face = line\n .slice(2)\n .trim()\n .split(/\\s+/)\n .map((part) => OBJMeshParser.parseFaceToken(\n part,\n sourcePositions.length / 3,\n sourceNormals.length / 3,\n ))\n .filter((vertex): vertex is OBJFaceVertex => vertex !== null)\n\n if (face.length >= 3) faces.push(face)\n }\n }\n\n const triangles = OBJMeshParser.triangulateFaces(faces)\n const canUseFileNormals = preferFileNormals\n && triangles.length > 0\n && triangles.every((vertex) => vertex.normalIndex !== undefined)\n\n if (canUseFileNormals) {\n return OBJMeshParser.buildMeshWithFileNormals(sourcePositions, sourceNormals, triangles)\n }\n\n if (generatedNormals === 'flat') {\n return OBJMeshParser.buildMeshWithFlatNormals(sourcePositions, triangles)\n }\n\n return OBJMeshParser.buildMeshWithSmoothNormals(sourcePositions, triangles)\n }\n\n private static parseFaceToken(\n token: string,\n positionCount: number,\n normalCount: number,\n ): OBJFaceVertex | null {\n const parts = token.split('/')\n const positionIndex = OBJMeshParser.parseIndex(parts[0], positionCount)\n if (positionIndex === null) return null\n\n const normalPart = parts.length >= 3 ? parts[2] : undefined\n const normalIndex = normalPart\n ? OBJMeshParser.parseIndex(normalPart, normalCount)\n : null\n\n return {\n positionIndex,\n normalIndex: normalIndex ?? undefined,\n }\n }\n\n private static parseIndex(raw: string | undefined, count: number): number | null {\n if (!raw) return null\n const index = Number(raw)\n if (!Number.isInteger(index) || index === 0) return null\n const resolved = index > 0 ? index - 1 : count + index\n return resolved >= 0 && resolved < count ? resolved : null\n }\n\n private static triangulateFaces(faces: readonly OBJFaceVertex[][]): OBJFaceVertex[] {\n const triangles: OBJFaceVertex[] = []\n for (const face of faces) {\n const first = face[0]\n for (let i = 1; i < face.length - 1; i++) {\n triangles.push(first, face[i], face[i + 1])\n }\n }\n return triangles\n }\n\n private static buildMeshWithFileNormals(\n sourcePositions: readonly number[],\n sourceNormals: readonly number[],\n triangles: readonly OBJFaceVertex[],\n ): MeshHiPSMesh {\n const positions: number[] = []\n const normals: number[] = []\n const indices: number[] = []\n const vertexMap = new Map<string, number>()\n\n for (const vertex of triangles) {\n const normalIndex = vertex.normalIndex as number\n const key = `${vertex.positionIndex}/${normalIndex}`\n let outputIndex = vertexMap.get(key)\n\n if (outputIndex === undefined) {\n outputIndex = positions.length / 3\n vertexMap.set(key, outputIndex)\n positions.push(\n sourcePositions[vertex.positionIndex * 3],\n sourcePositions[vertex.positionIndex * 3 + 1],\n sourcePositions[vertex.positionIndex * 3 + 2],\n )\n normals.push(\n sourceNormals[normalIndex * 3],\n sourceNormals[normalIndex * 3 + 1],\n sourceNormals[normalIndex * 3 + 2],\n )\n }\n\n indices.push(outputIndex)\n }\n\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n }\n }\n\n private static buildMeshWithSmoothNormals(\n sourcePositions: readonly number[],\n triangles: readonly OBJFaceVertex[],\n ): MeshHiPSMesh {\n const positions = [...sourcePositions]\n const normals = new Array(positions.length).fill(0) as number[]\n const indices = triangles.map((vertex) => vertex.positionIndex)\n\n OBJMeshParser.computeVertexNormals(positions, indices, normals)\n\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n }\n }\n\n private static buildMeshWithFlatNormals(\n sourcePositions: readonly number[],\n triangles: readonly OBJFaceVertex[],\n ): MeshHiPSMesh {\n const positions: number[] = []\n const normals: number[] = []\n const indices: number[] = []\n\n for (let i = 0; i < triangles.length; i += 3) {\n const a = triangles[i]\n const b = triangles[i + 1]\n const c = triangles[i + 2]\n if (!a || !b || !c) continue\n\n const normal = OBJMeshParser.computeFaceNormal(\n sourcePositions,\n a.positionIndex,\n b.positionIndex,\n c.positionIndex,\n )\n\n for (const vertex of [a, b, c]) {\n positions.push(\n sourcePositions[vertex.positionIndex * 3],\n sourcePositions[vertex.positionIndex * 3 + 1],\n sourcePositions[vertex.positionIndex * 3 + 2],\n )\n normals.push(normal[0], normal[1], normal[2])\n indices.push(indices.length)\n }\n }\n\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n }\n }\n\n private static computeVertexNormals(\n vertices: readonly number[],\n indices: readonly number[],\n normals: number[],\n ): void {\n for (let i = 0; i < indices.length; i += 3) {\n const ia = indices[i]\n const ib = indices[i + 1]\n const ic = indices[i + 2]\n const normal = OBJMeshParser.computeRawFaceNormal(vertices, ia, ib, ic)\n\n normals[ia * 3] += normal[0]\n normals[ia * 3 + 1] += normal[1]\n normals[ia * 3 + 2] += normal[2]\n normals[ib * 3] += normal[0]\n normals[ib * 3 + 1] += normal[1]\n normals[ib * 3 + 2] += normal[2]\n normals[ic * 3] += normal[0]\n normals[ic * 3 + 1] += normal[1]\n normals[ic * 3 + 2] += normal[2]\n }\n\n for (let i = 0; i < normals.length; i += 3) {\n const nx = normals[i]\n const ny = normals[i + 1]\n const nz = normals[i + 2]\n const len = Math.hypot(nx, ny, nz) || 1\n normals[i] = nx / len\n normals[i + 1] = ny / len\n normals[i + 2] = nz / len\n }\n }\n\n private static computeFaceNormal(\n vertices: readonly number[],\n ia: number,\n ib: number,\n ic: number,\n ): [number, number, number] {\n const [nx, ny, nz] = OBJMeshParser.computeRawFaceNormal(vertices, ia, ib, ic)\n const len = Math.hypot(nx, ny, nz) || 1\n return [nx / len, ny / len, nz / len]\n }\n\n private static computeRawFaceNormal(\n vertices: readonly number[],\n ia: number,\n ib: number,\n ic: number,\n ): [number, number, number] {\n const ax = vertices[ia * 3]\n const ay = vertices[ia * 3 + 1]\n const az = vertices[ia * 3 + 2]\n const bx = vertices[ib * 3]\n const by = vertices[ib * 3 + 1]\n const bz = vertices[ib * 3 + 2]\n const cx = vertices[ic * 3]\n const cy = vertices[ic * 3 + 1]\n const cz = vertices[ic * 3 + 2]\n\n const abx = bx - ax\n const aby = by - ay\n const abz = bz - az\n const acx = cx - ax\n const acy = cy - ay\n const acz = cz - az\n\n const nx = aby * acz - abz * acy\n const ny = abz * acx - abx * acz\n const nz = abx * acy - aby * acx\n return [nx, ny, nz]\n }\n}\n","import type {\n FootprintGeometryLike,\n FootprintMultiPolygonLike,\n FootprintPolygonLike,\n GroundTrackPointLike,\n ObservationSampleLike,\n ObservationTimelineSample,\n ObservationTrackFrame,\n ObservationTrackTimelineController,\n ObservationTrackTimelineOptions,\n ObservationTrackTimelineState,\n} from './ObservationTrackTypes.js'\n\nexport function createObservationTrackTimeline(\n options: ObservationTrackTimelineOptions,\n): ObservationTrackTimelineController {\n return new ObservationTrackTimeline(options)\n}\n\nexport class ObservationTrackTimeline implements ObservationTrackTimelineController {\n private readonly samples: ObservationTimelineSample[]\n private readonly startMs: number\n private readonly endMs: number\n private currentMs: number\n private playing = false\n private rafId: number | null = null\n private lastFrameNowMs: number | null = null\n private readonly playbackRate: number\n private readonly onFrame?: (frame: ObservationTrackFrame) => void\n private readonly onStop?: (state: ObservationTrackTimelineState) => void\n\n constructor(options: ObservationTrackTimelineOptions) {\n this.samples = options.samples\n .map((sample, index) => ({\n ...sample,\n index,\n timeMs: Date.parse(String(sample.timestamp)),\n }))\n .filter((sample) => Number.isFinite(sample.timeMs))\n .sort((left, right) => left.timeMs - right.timeMs)\n\n if (this.samples.length === 0) {\n throw new Error('ObservationTrackTimeline requires at least one timestamped sample.')\n }\n\n this.startMs = this.samples[0].timeMs\n this.endMs = this.samples[this.samples.length - 1].timeMs\n this.currentMs = this.startMs\n this.playbackRate = options.playbackRate ?? 1\n this.onFrame = options.onFrame\n this.onStop = options.onStop\n this.emitFrame()\n }\n\n play(): void {\n if (this.playing) return\n this.playing = true\n this.lastFrameNowMs = null\n this.rafId = requestAnimationFrame((nowMs) => this.tick(nowMs))\n }\n\n pause(): void {\n if (!this.playing) return\n this.playing = false\n this.cancelPendingFrame()\n this.onStop?.(this.getState())\n }\n\n seek(progress01: number): void {\n const clampedProgress = clamp01(progress01)\n this.currentMs = this.startMs + (this.endMs - this.startMs) * clampedProgress\n this.emitFrame()\n }\n\n destroy(): void {\n this.playing = false\n this.cancelPendingFrame()\n this.onStop?.(this.getState())\n }\n\n getState(): ObservationTrackTimelineState {\n return {\n startMs: this.startMs,\n endMs: this.endMs,\n currentMs: this.currentMs,\n progress01: this.getProgress(),\n playing: this.playing,\n }\n }\n\n private tick(nowMs: number): void {\n if (!this.playing) return\n\n if (this.lastFrameNowMs === null) {\n this.lastFrameNowMs = nowMs\n }\n\n const elapsedMs = nowMs - this.lastFrameNowMs\n this.lastFrameNowMs = nowMs\n this.currentMs += elapsedMs * this.playbackRate\n\n if (this.currentMs >= this.endMs) {\n this.currentMs = this.endMs\n this.emitFrame()\n this.pause()\n return\n }\n\n this.emitFrame()\n this.rafId = requestAnimationFrame((nextNowMs) => this.tick(nextNowMs))\n }\n\n private emitFrame(): void {\n const frame = computeFrame(this.samples, this.currentMs)\n this.onFrame?.({\n currentMs: this.currentMs,\n progress01: this.getProgress(),\n ...frame,\n })\n }\n\n private getProgress(): number {\n if (this.endMs === this.startMs) return 0\n return clamp01((this.currentMs - this.startMs) / (this.endMs - this.startMs))\n }\n\n private cancelPendingFrame(): void {\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n }\n}\n\nfunction computeFrame(samples: readonly ObservationTimelineSample[], currentMs: number): Omit<ObservationTrackFrame, 'currentMs' | 'progress01'> {\n const first = samples[0]\n const last = samples[samples.length - 1]\n\n if (currentMs <= first.timeMs) {\n return frameFromSamples(first, first, 0)\n }\n\n if (currentMs >= last.timeMs) {\n return frameFromSamples(last, last, 0)\n }\n\n for (let index = 0; index < samples.length - 1; index++) {\n const previousSample = samples[index]\n const nextSample = samples[index + 1]\n if (currentMs >= previousSample.timeMs && currentMs <= nextSample.timeMs) {\n const t = (currentMs - previousSample.timeMs) / (nextSample.timeMs - previousSample.timeMs)\n return frameFromSamples(previousSample, nextSample, t)\n }\n }\n\n return frameFromSamples(last, last, 0)\n}\n\nfunction frameFromSamples(\n previousSample: ObservationTimelineSample,\n nextSample: ObservationTimelineSample,\n t: number,\n): Omit<ObservationTrackFrame, 'currentMs' | 'progress01'> {\n const currentGroundPoint = interpolateGroundTrackPoint(previousSample, nextSample, t)\n const nearestSample = t < 0.5 ? previousSample : nextSample\n const currentFootprint = interpolateFootprint(\n previousSample.footprint,\n nextSample.footprint,\n t,\n footprintToRing(nearestSample.footprint),\n )\n\n return {\n markerPoint: currentGroundPoint,\n currentGroundPoint,\n currentFootprint,\n interpolationT: t,\n previousSample,\n nextSample,\n nearestSample,\n nearestSampleIndex: nearestSample.index,\n }\n}\n\nfunction interpolateGroundTrackPoint(\n previousSample: ObservationTimelineSample,\n nextSample: ObservationTimelineSample,\n t: number,\n): GroundTrackPointLike {\n const previous = previousSample.groundTrackPoint\n const next = nextSample.groundTrackPoint\n const timeMs = lerp(previousSample.timeMs, nextSample.timeMs, t)\n\n return {\n timestamp: new Date(timeMs).toISOString(),\n longitudeDeg: interpolateLongitude(previous.longitudeDeg, next.longitudeDeg, t),\n latitudeDeg: lerp(previous.latitudeDeg, next.latitudeDeg, t),\n altitudeKm: lerp(previous.altitudeKm, next.altitudeKm, t),\n }\n}\n\nfunction interpolateFootprint(\n previousFootprint: FootprintGeometryLike,\n nextFootprint: FootprintGeometryLike,\n t: number,\n fallbackFootprint: readonly (readonly [number, number])[],\n): readonly (readonly [number, number])[] {\n const previousRing = normalizeOpenRing(footprintToRing(previousFootprint))\n const nextRing = normalizeOpenRing(footprintToRing(nextFootprint))\n\n if (\n previousRing.length < 3\n || previousRing.length !== nextRing.length\n ) {\n return fallbackFootprint\n }\n\n const ring = previousRing.map(([previousLon, previousLat], index) => {\n const [nextLon, nextLat] = nextRing[index]\n return [\n interpolateLongitude(previousLon, nextLon, t),\n lerp(previousLat, nextLat, t),\n ] as const\n })\n\n return closeRing(ring)\n}\n\nexport function footprintToRing(\n footprint: FootprintGeometryLike,\n): readonly (readonly [longitudeDeg: number, latitudeDeg: number])[] {\n if (isFootprintPolygon(footprint)) {\n return footprint.coordinates.map((coordinate) => [\n coordinate.longitudeDeg,\n coordinate.latitudeDeg,\n ] as const)\n }\n if (isFootprintMultiPolygon(footprint)) {\n const firstPolygon = footprint.polygons[0]\n return firstPolygon ? footprintToRing(firstPolygon) : []\n }\n if (Array.isArray(footprint)) return footprint\n return []\n}\n\nfunction isFootprintPolygon(footprint: FootprintGeometryLike): footprint is FootprintPolygonLike {\n return !Array.isArray(footprint) && 'coordinates' in footprint\n}\n\nfunction isFootprintMultiPolygon(footprint: FootprintGeometryLike): footprint is FootprintMultiPolygonLike {\n return !Array.isArray(footprint) && 'polygons' in footprint\n}\n\nfunction normalizeOpenRing(\n footprint: readonly (readonly [number, number])[],\n): readonly (readonly [number, number])[] {\n if (!Array.isArray(footprint)) return []\n\n const ring: (readonly [number, number])[] = []\n for (const coordinate of footprint) {\n if (!Array.isArray(coordinate) || coordinate.length < 2) return []\n const lon = Number(coordinate[0])\n const lat = Number(coordinate[1])\n if (!Number.isFinite(lon) || !Number.isFinite(lat) || lat < -90 || lat > 90) {\n return []\n }\n ring.push([normalizeLongitudeDeg(lon), lat])\n }\n\n while (ring.length > 1 && sameLonLat(ring[0], ring[ring.length - 1])) {\n ring.pop()\n }\n\n return ring\n}\n\nfunction closeRing(\n ring: readonly (readonly [number, number])[],\n): readonly (readonly [number, number])[] {\n if (ring.length === 0) return ring\n const first = ring[0]\n const last = ring[ring.length - 1]\n return sameLonLat(first, last) ? ring : [...ring, [...first] as const]\n}\n\nfunction sameLonLat(left: readonly [number, number], right: readonly [number, number]): boolean {\n return Math.abs(left[0] - right[0]) < 1e-9\n && Math.abs(left[1] - right[1]) < 1e-9\n}\n\nfunction interpolateLongitude(leftLongitudeDeg: number, rightLongitudeDeg: number, t: number): number {\n const delta = normalizeLongitudeDeg(rightLongitudeDeg - leftLongitudeDeg)\n return normalizeLongitudeDeg(leftLongitudeDeg + delta * t)\n}\n\nfunction normalizeLongitudeDeg(longitudeDeg: number): number {\n const normalized = ((((longitudeDeg + 180) % 360) + 360) % 360) - 180\n return Object.is(normalized, -0) ? 0 : normalized\n}\n\nfunction lerp(left: number, right: number, t: number): number {\n return left + (right - left) * t\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, Number.isFinite(value) ? value : 0))\n}\n","import { AstroViewer } from '../../AstroViewer.js'\nimport GeoJSONParser from '../../utils/GeoJSONParser.js'\nimport { ColumnType, MetadataColumn } from '../MetadataColumn.js'\nimport { MetadataManager } from '../MetadataManager.js'\nimport type { SensorConeGL } from '../terra/SensorConeGL.js'\nimport type { SatelliteObjectGL } from '../terra/SatelliteObjectGL.js'\nimport type { TerraFootprintSetGL } from '../terra/TerraFootprintSetGL.js'\nimport type { TerraPointSetGL } from '../terra/TerraPointSetGL.js'\nimport type { TerraPolylineSetGL } from '../terra/TerraPolylineSetGL.js'\nimport {\n createObservationTrackTimeline,\n footprintToRing,\n} from './ObservationTrackTimeline.js'\nimport type {\n FootprintGeometryLike,\n GroundTrackPointLike,\n ObservationSampleLike,\n ObservationTimelineSample,\n ObservationTrackFrame,\n ObservationTrackLike,\n ObservationTrackTimelineController,\n ObservationTrackViewerAdapterOptions,\n ObservationTrackViewerColors,\n ObservationTrackViewerHandle,\n ObservationVisualisationLike,\n} from './ObservationTrackTypes.js'\n\ntype ViewerObjects = {\n target: TerraFootprintSetGL | null\n groundTrack: TerraPolylineSetGL | null\n footprints: TerraFootprintSetGL | null\n currentFootprint: TerraFootprintSetGL | null\n marker: TerraPointSetGL | null\n satelliteObject: SatelliteObjectGL | null\n sensorCone: SensorConeGL | null\n}\n\nconst DEFAULT_VISUALISATION: Required<ObservationVisualisationLike> = {\n showSatelliteModel: true,\n showGroundTrack: true,\n showFootprint: true,\n showSensorCone: true,\n showCurrentFootprintOnly: false,\n showAllFootprints: true,\n}\n\nconst DEFAULT_COLORS: Required<ObservationTrackViewerColors> = {\n groundTrack: '#ffe066',\n footprints: '#00fff2',\n currentFootprint: '#ff4d4d',\n marker: '#ff4d4d',\n satelliteObject: [1.0, 0.84, 0.22, 1.0],\n sensorCone: [0.0, 1.0, 0.95, 0.68],\n target: '#ffb347',\n}\n\nexport class ObservationTrackViewerAdapter {\n private activeHandle: InternalObservationTrackViewerHandle | null = null\n private readonly viewer: AstroViewer\n private readonly metadataManagerFactory: () => MetadataManager\n private readonly colors: Required<ObservationTrackViewerColors>\n private readonly onFrame?: (frame: ObservationTrackFrame) => void\n\n constructor(options: ObservationTrackViewerAdapterOptions) {\n this.viewer = options.viewer\n this.metadataManagerFactory = options.metadataManagerFactory ?? (() => new MetadataManager([]))\n this.colors = {\n ...DEFAULT_COLORS,\n ...options.colors,\n }\n this.onFrame = options.onFrame\n }\n\n load(track: ObservationTrackLike): ObservationTrackViewerHandle {\n this.clear()\n const handle = new InternalObservationTrackViewerHandle(\n this.viewer,\n track,\n this.metadataManagerFactory,\n this.colors,\n this.onFrame,\n )\n this.activeHandle = handle\n return handle\n }\n\n clear(): void {\n this.activeHandle?.dispose()\n this.activeHandle = null\n }\n}\n\nclass InternalObservationTrackViewerHandle implements ObservationTrackViewerHandle {\n readonly timeline: ObservationTrackTimelineController\n private readonly objects: ViewerObjects = {\n target: null,\n groundTrack: null,\n footprints: null,\n currentFootprint: null,\n marker: null,\n satelliteObject: null,\n sensorCone: null,\n }\n private visualisation: Required<ObservationVisualisationLike>\n private currentFootprintIndex = -1\n private disposed = false\n\n constructor(\n private readonly viewer: AstroViewer,\n readonly track: ObservationTrackLike,\n private readonly metadataManagerFactory: () => MetadataManager,\n private readonly colors: Required<ObservationTrackViewerColors>,\n private readonly onFrame?: (frame: ObservationTrackFrame) => void,\n ) {\n validateTrack(track)\n this.visualisation = {\n ...DEFAULT_VISUALISATION,\n ...track.visualisation,\n }\n this.createStaticObjects()\n this.timeline = createObservationTrackTimeline({\n samples: track.samples,\n playbackRate: 1,\n onFrame: (frame) => this.updateFrame(frame),\n })\n this.applyVisualisation()\n }\n\n play(): void {\n this.timeline.play()\n }\n\n pause(): void {\n this.timeline.pause()\n }\n\n seek(progress01: number): void {\n this.timeline.seek(progress01)\n }\n\n setVisualisation(config: Partial<ObservationVisualisationLike>): void {\n this.visualisation = {\n ...this.visualisation,\n ...config,\n }\n this.applyVisualisation()\n }\n\n dispose(): void {\n if (this.disposed) return\n this.disposed = true\n this.timeline.destroy()\n this.deleteObjects()\n }\n\n private createStaticObjects(): void {\n this.objects.target = this.createTargetOverlay()\n this.objects.footprints = this.createAllFootprintsOverlay()\n this.objects.groundTrack = this.createGroundTrackOverlay()\n this.objects.marker = this.createMarkerOverlay()\n this.objects.satelliteObject = this.createSatelliteObject()\n this.objects.sensorCone = this.createSensorCone()\n }\n\n private createTargetOverlay(): TerraFootprintSetGL | null {\n const geojson = this.track.target?.geojson\n if (!geojson) return null\n\n const set = this.viewer.createTerraFootprintSet(\n this.track.target?.name ?? 'Observation target',\n 'ObservationTrack target GeoJSON',\n this.track.target?.geojsonUrl ?? 'ObservationTrack',\n this.metadataManagerFactory(),\n )\n set.addGeoJSONFeatures(GeoJSONParser.parseGeoJSON(geojson))\n this.viewer.changeFootprintSetColor(set, this.colors.target)\n this.viewer.showTerraFootprintSet(set)\n return set\n }\n\n private createAllFootprintsOverlay(): TerraFootprintSetGL | null {\n const featureCollection = {\n type: 'FeatureCollection',\n features: this.track.samples.map((sample, index) => footprintFeature(sample, index)),\n }\n const set = this.viewer.createTerraFootprintSet(\n `${this.track.satellite?.name ?? 'Satellite'} footprints`,\n 'ObservationTrack sampled sensor footprints',\n this.track.id ?? 'ObservationTrack',\n this.metadataManagerFactory(),\n )\n set.addGeoJSONFeatures(GeoJSONParser.parseGeoJSON(featureCollection))\n this.viewer.changeFootprintSetColor(set, this.colors.footprints)\n this.viewer.showTerraFootprintSet(set)\n return set\n }\n\n private createGroundTrackOverlay(): TerraPolylineSetGL | null {\n const set = this.viewer.createTerraPolylineSet(\n `${this.track.satellite?.name ?? 'Satellite'} ground track`,\n 'ObservationTrack GroundTrackPoint[]',\n this.track.id ?? 'ObservationTrack',\n this.metadataManagerFactory(),\n )\n set.addGroundTrack(\n this.track.samples.map((sample) => ({\n ...sample.groundTrackPoint,\n timestamp: sample.timestamp,\n })),\n { name: `${this.track.satellite?.name ?? 'Satellite'} ground track` },\n )\n this.viewer.changeTerraPolylineSetColor(set, this.colors.groundTrack)\n this.viewer.showTerraPolylineSet(set)\n return set\n }\n\n private createMarkerOverlay(): TerraPointSetGL | null {\n const set = this.viewer.createTerraPointSet(\n `${this.track.satellite?.name ?? 'Satellite'} marker`,\n 'ObservationTrack interpolated satellite marker',\n this.track.id ?? 'ObservationTrack',\n new MetadataManager(createMarkerColumns()),\n )\n this.viewer.changeCatalogueColor(set, this.colors.marker)\n this.viewer.showTerraPointSet(set)\n return set\n }\n\n private createSatelliteObject(): SatelliteObjectGL | null {\n const objUrl = this.track.satellite?.model?.objUrl\n if (!objUrl) return null\n\n const object = this.viewer.createSatelliteObject({\n name: `${this.track.satellite?.name ?? 'Satellite'} object`,\n objUrl,\n color: this.colors.satelliteObject,\n scale: this.track.satellite?.model?.visualScale,\n })\n this.viewer.showSatelliteObject(object)\n return object\n }\n\n private createSensorCone(): SensorConeGL | null {\n const cone = this.viewer.createSensorCone({\n name: `${this.track.sensor?.name ?? 'Sensor'} cone`,\n color: this.colors.sensorCone,\n wireframe: true,\n filled: false,\n })\n this.viewer.showSensorCone(cone)\n return cone\n }\n\n private updateFrame(frame: ObservationTrackFrame): void {\n if (this.disposed) return\n this.updateMarker(frame.currentGroundPoint)\n this.updateSatelliteObject(frame)\n this.updateSensorCone(frame)\n this.updateCurrentFootprint(frame)\n this.onFrame?.(frame)\n }\n\n private updateMarker(point: GroundTrackPointLike): void {\n const marker = this.objects.marker\n if (!marker) return\n marker.clearSources()\n marker.addSources([[\n point.longitudeDeg,\n point.latitudeDeg,\n String(point.timestamp ?? ''),\n point.altitudeKm,\n ]], createMarkerColumns())\n }\n\n private updateSatelliteObject(frame: ObservationTrackFrame): void {\n const satelliteObject = this.objects.satelliteObject\n if (!satelliteObject) return\n satelliteObject.setPosition(\n frame.currentGroundPoint,\n frame.previousSample?.groundTrackPoint ?? null,\n frame.nextSample?.groundTrackPoint ?? null,\n )\n }\n\n private updateSensorCone(frame: ObservationTrackFrame): void {\n const sensorCone = this.objects.sensorCone\n if (!sensorCone) return\n sensorCone.setGeometry(frame.currentGroundPoint, frame.currentFootprint)\n }\n\n private updateCurrentFootprint(frame: ObservationTrackFrame): void {\n if (frame.nearestSampleIndex === this.currentFootprintIndex) return\n if (this.objects.currentFootprint) {\n this.viewer.deleteTerraFootprintSet(this.objects.currentFootprint)\n }\n this.objects.currentFootprint = this.createCurrentFootprintOverlay(frame.nearestSample)\n this.currentFootprintIndex = frame.nearestSampleIndex\n this.applyVisualisation()\n }\n\n private createCurrentFootprintOverlay(sample: ObservationTimelineSample): TerraFootprintSetGL | null {\n const featureCollection = {\n type: 'FeatureCollection',\n features: [footprintFeature(sample, sample.index, 'Current footprint')],\n }\n const set = this.viewer.createTerraFootprintSet(\n `${this.track.satellite?.name ?? 'Satellite'} current footprint`,\n 'ObservationTrack nearest sampled footprint',\n this.track.id ?? 'ObservationTrack',\n this.metadataManagerFactory(),\n )\n set.addGeoJSONFeatures(GeoJSONParser.parseGeoJSON(featureCollection))\n this.viewer.changeFootprintSetColor(set, this.colors.currentFootprint)\n this.viewer.showTerraFootprintSet(set)\n return set\n }\n\n private applyVisualisation(): void {\n const showFootprint = Boolean(this.visualisation.showFootprint)\n const showAllFootprints = showFootprint\n && Boolean(this.visualisation.showAllFootprints)\n && !this.visualisation.showCurrentFootprintOnly\n const showCurrentFootprint = showFootprint\n && (Boolean(this.visualisation.showCurrentFootprintOnly) || !showAllFootprints)\n\n if (this.objects.target) this.viewer.hideTerraFootprintSet(this.objects.target, true)\n if (this.objects.groundTrack) {\n this.viewer.hideTerraPolylineSet(this.objects.groundTrack, Boolean(this.visualisation.showGroundTrack))\n }\n if (this.objects.footprints) {\n this.viewer.hideTerraFootprintSet(this.objects.footprints, showAllFootprints)\n }\n if (this.objects.currentFootprint) {\n this.viewer.hideTerraFootprintSet(this.objects.currentFootprint, showCurrentFootprint)\n }\n if (this.objects.marker) this.viewer.hideTerraPointSet(this.objects.marker, true)\n if (this.objects.satelliteObject) {\n this.viewer.hideSatelliteObject(this.objects.satelliteObject, Boolean(this.visualisation.showSatelliteModel))\n }\n if (this.objects.sensorCone) {\n this.viewer.hideSensorCone(this.objects.sensorCone, Boolean(this.visualisation.showSensorCone))\n }\n }\n\n private deleteObjects(): void {\n if (this.objects.target) this.viewer.deleteTerraFootprintSet(this.objects.target)\n if (this.objects.groundTrack) this.viewer.deleteTerraPolylineSet(this.objects.groundTrack)\n if (this.objects.footprints) this.viewer.deleteTerraFootprintSet(this.objects.footprints)\n if (this.objects.currentFootprint) this.viewer.deleteTerraFootprintSet(this.objects.currentFootprint)\n if (this.objects.marker) this.viewer.deleteTerraPointSet(this.objects.marker)\n if (this.objects.satelliteObject) this.viewer.deleteSatelliteObject(this.objects.satelliteObject)\n if (this.objects.sensorCone) this.viewer.deleteSensorCone(this.objects.sensorCone)\n this.objects.target = null\n this.objects.groundTrack = null\n this.objects.footprints = null\n this.objects.currentFootprint = null\n this.objects.marker = null\n this.objects.satelliteObject = null\n this.objects.sensorCone = null\n }\n}\n\nfunction validateTrack(track: ObservationTrackLike): void {\n if (!track.samples || track.samples.length === 0) {\n throw new Error('ObservationTrackViewerAdapter requires at least one sample.')\n }\n}\n\nfunction footprintFeature(sample: ObservationSampleLike, index: number, name = `Footprint ${index + 1}`): Record<string, unknown> {\n return {\n type: 'Feature',\n properties: {\n name,\n timestamp: String(sample.timestamp),\n intersectsTarget: String(Boolean(sample.intersectsTarget ?? sample.intersects)),\n },\n geometry: footprintToGeoJSONGeometry(sample.footprint),\n }\n}\n\nfunction footprintToGeoJSONGeometry(footprint: FootprintGeometryLike): Record<string, unknown> {\n if (!Array.isArray(footprint) && 'polygons' in footprint) {\n return {\n type: 'MultiPolygon',\n coordinates: footprint.polygons.map((polygon) => [ringToGeoJSON(footprintToRing(polygon))]),\n }\n }\n\n return {\n type: 'Polygon',\n coordinates: [ringToGeoJSON(footprintToRing(footprint))],\n }\n}\n\nfunction ringToGeoJSON(\n ring: readonly (readonly [number, number])[],\n): readonly (readonly [number, number])[] {\n if (ring.length === 0) return ring\n const first = ring[0]\n const last = ring[ring.length - 1]\n if (Math.abs(first[0] - last[0]) < 1e-9 && Math.abs(first[1] - last[1]) < 1e-9) {\n return ring\n }\n return [...ring, [first[0], first[1]] as const]\n}\n\nfunction createMarkerColumns(): MetadataColumn[] {\n return [\n new MetadataColumn({ index: 0, name: 'longitudeDeg', columnType: ColumnType.GEOM_RA, unit: 'deg' }),\n new MetadataColumn({ index: 1, name: 'latitudeDeg', columnType: ColumnType.GEOM_DEC, unit: 'deg' }),\n new MetadataColumn({ index: 2, name: 'timestamp', columnType: ColumnType.MAIN_NAME, unit: '' }),\n new MetadataColumn({ index: 3, name: 'altitudeKm', columnType: ColumnType.NUMBER, unit: 'km' }),\n ]\n}\n","export {\n createObservationTrackTimeline,\n footprintToRing,\n ObservationTrackTimeline,\n} from './ObservationTrackTimeline.js'\nexport { ObservationTrackViewerAdapter } from './ObservationTrackViewerAdapter.js'\nexport type {\n FootprintGeometryLike,\n FootprintGeoPositionLike,\n FootprintMultiPolygonLike,\n FootprintPolygonLike,\n GroundTrackPointLike,\n ObservationSampleLike,\n ObservationTargetLike,\n ObservationTimelineSample,\n ObservationTrackFrame,\n ObservationTrackLike,\n ObservationTrackTimelineController,\n ObservationTrackTimelineOptions,\n ObservationTrackTimelineState,\n ObservationTrackViewerAdapterOptions,\n ObservationTrackViewerColors,\n ObservationTrackViewerHandle,\n ObservationVisualisationLike,\n SatelliteConfigLike,\n SatelliteModelConfigLike,\n SensorConfigLike,\n} from './ObservationTrackTypes.js'\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: LicenseRef-AstroViewer-Dual-License\n */\n\nimport { mat4, vec3 } from 'gl-matrix'\nimport { MeshHiPSShaderProgram } from '../../shader/MeshHiPSShaderProgram.js'\nimport { OBJMeshParser } from '../meships/OBJMeshParser.js'\nimport type { MeshHiPSGpuMesh, MeshHiPSMesh } from '../meships/MeshHiPSTypes.js'\nimport { Point } from '../Point.js'\nimport { CoordsType } from '../../utils/CoordsType.js'\n\nexport interface SatelliteObjectOptions {\n readonly name: string\n readonly objUrl: string\n readonly color?: [number, number, number, number]\n readonly scale?: number\n}\n\nexport interface SatelliteObjectPosition {\n readonly longitudeDeg: number\n readonly latitudeDeg: number\n readonly altitudeKm?: number\n}\n\nexport class SatelliteObjectGL {\n static readonly EARTH_RADIUS_KM = 6371\n\n _kind: string = 'SatelliteObjectGL'\n private _gpuMesh: MeshHiPSGpuMesh | null = null\n private _shaderProgram: MeshHiPSShaderProgram\n private _modelMatrix = mat4.create()\n private _isVisible = true\n private _ready = false\n private _loading = false\n private _failed = false\n private _color: [number, number, number, number]\n private _scale: number\n\n constructor(\n private _options: SatelliteObjectOptions,\n private _webgl: WebGL2RenderingContext,\n ) {\n this._shaderProgram = new MeshHiPSShaderProgram(this._webgl, {\n twoSidedLighting: true,\n markerLighting: true,\n })\n this._color = _options.color ?? [1.0, 0.85, 0.25, 1.0]\n this._scale = _options.scale ?? 0.025\n void this.load()\n }\n\n get ready(): boolean {\n return this._ready\n }\n\n get loading(): boolean {\n return this._loading\n }\n\n get failed(): boolean {\n return this._failed\n }\n\n async load(): Promise<void> {\n if (this._loading || this._ready) return\n\n this._loading = true\n try {\n const response = await fetch(this._options.objUrl)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} fetching ${this._options.objUrl}`)\n }\n\n const mesh = OBJMeshParser.parse(await response.text(), {\n preferFileNormals: true,\n generatedNormals: 'flat',\n })\n this._gpuMesh = this.uploadMesh(mesh)\n this._ready = true\n this._failed = false\n } catch (error) {\n console.warn('[SatelliteObjectGL] load failed', this._options.objUrl, error)\n this._ready = false\n this._failed = true\n } finally {\n this._loading = false\n }\n }\n\n setIsVisible(isVisible: boolean): void {\n this._isVisible = isVisible\n }\n\n setColor(color: [number, number, number, number]): void {\n this._color = color\n }\n\n setScale(scale: number): void {\n if (Number.isFinite(scale) && scale > 0) {\n this._scale = scale\n }\n }\n\n setPosition(\n position: SatelliteObjectPosition,\n previous?: SatelliteObjectPosition | null,\n next?: SatelliteObjectPosition | null,\n ): void {\n if (!isValidPosition(position)) return\n\n const worldPosition = lonLatAltToWorld(position)\n const up = vec3.normalize(vec3.create(), worldPosition)\n const forward = this.computeForward(position, worldPosition, up, previous, next)\n const right = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), forward, up))\n\n if (vec3.length(right) < 1e-6) {\n this.setFallbackMatrix(worldPosition, up)\n return\n }\n\n const correctedForward = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), up, right))\n this.setMatrixFromBasis(worldPosition, right, correctedForward, up)\n }\n\n draw(pMatrix: Float32Array, vMatrix: Float32Array, baseModelMatrix: Float32Array): void {\n if (!this._isVisible || !this._ready || !this._gpuMesh) return\n\n const gl = this._webgl\n const modelMatrix = mat4.multiply(mat4.create(), baseModelMatrix, this._modelMatrix)\n\n this._shaderProgram.enableShaders(pMatrix, vMatrix, modelMatrix as Float32Array, this._color)\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._gpuMesh.positionBuffer)\n gl.vertexAttribPointer(\n this._shaderProgram.locations.vertexPositionAttribute,\n 3,\n gl.FLOAT,\n false,\n 0,\n 0,\n )\n gl.enableVertexAttribArray(this._shaderProgram.locations.vertexPositionAttribute)\n\n if (this._shaderProgram.locations.vertexNormalAttribute >= 0) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this._gpuMesh.normalBuffer)\n gl.vertexAttribPointer(\n this._shaderProgram.locations.vertexNormalAttribute,\n 3,\n gl.FLOAT,\n false,\n 0,\n 0,\n )\n gl.enableVertexAttribArray(this._shaderProgram.locations.vertexNormalAttribute)\n }\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._gpuMesh.indexBuffer)\n gl.drawElements(gl.TRIANGLES, this._gpuMesh.indexCount, this._gpuMesh.indexType, 0)\n\n gl.disableVertexAttribArray(this._shaderProgram.locations.vertexPositionAttribute)\n if (this._shaderProgram.locations.vertexNormalAttribute >= 0) {\n gl.disableVertexAttribArray(this._shaderProgram.locations.vertexNormalAttribute)\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, null)\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null)\n }\n\n dispose(): void {\n const gl = this._webgl\n if (this._gpuMesh?.positionBuffer) gl.deleteBuffer(this._gpuMesh.positionBuffer)\n if (this._gpuMesh?.normalBuffer) gl.deleteBuffer(this._gpuMesh.normalBuffer)\n if (this._gpuMesh?.indexBuffer) gl.deleteBuffer(this._gpuMesh.indexBuffer)\n if (this._gpuMesh?.lineIndexBuffer) gl.deleteBuffer(this._gpuMesh.lineIndexBuffer)\n this._gpuMesh = null\n this._ready = false\n this._loading = false\n }\n\n private computeForward(\n position: SatelliteObjectPosition,\n worldPosition: vec3,\n up: vec3,\n previous?: SatelliteObjectPosition | null,\n next?: SatelliteObjectPosition | null,\n ): vec3 {\n const before = previous && isValidPosition(previous) ? lonLatAltToWorld(previous) : null\n const after = next && isValidPosition(next) ? lonLatAltToWorld(next) : null\n let forward = vec3.create()\n\n if (before && after) {\n vec3.subtract(forward, after, before)\n } else if (after) {\n vec3.subtract(forward, after, worldPosition)\n } else if (before) {\n vec3.subtract(forward, worldPosition, before)\n } else {\n return this.localEastFallback(position, up)\n }\n\n const radialComponent = vec3.scale(vec3.create(), up, vec3.dot(forward, up))\n vec3.subtract(forward, forward, radialComponent)\n if (vec3.length(forward) < 1e-6) {\n return this.localEastFallback(position, up)\n }\n return vec3.normalize(forward, forward)\n }\n\n private localEastFallback(position: SatelliteObjectPosition, up: vec3): vec3 {\n const nearby = lonLatAltToWorld({\n ...position,\n longitudeDeg: position.longitudeDeg + 0.01,\n })\n const tangent = vec3.subtract(vec3.create(), nearby, lonLatAltToWorld(position))\n const radialComponent = vec3.scale(vec3.create(), up, vec3.dot(tangent, up))\n vec3.subtract(tangent, tangent, radialComponent)\n return vec3.normalize(tangent, tangent)\n }\n\n private setFallbackMatrix(worldPosition: vec3, up: vec3): void {\n const reference = Math.abs(up[2]) > 0.9\n ? vec3.fromValues(1, 0, 0)\n : vec3.fromValues(0, 0, 1)\n const right = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), reference, up))\n const forward = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), up, right))\n this.setMatrixFromBasis(worldPosition, right, forward, up)\n }\n\n private setMatrixFromBasis(worldPosition: vec3, right: vec3, forward: vec3, up: vec3): void {\n const scale = this._scale\n this._modelMatrix = mat4.fromValues(\n right[0] * scale,\n right[1] * scale,\n right[2] * scale,\n 0,\n forward[0] * scale,\n forward[1] * scale,\n forward[2] * scale,\n 0,\n up[0] * scale,\n up[1] * scale,\n up[2] * scale,\n 0,\n worldPosition[0],\n worldPosition[1],\n worldPosition[2],\n 1,\n )\n }\n\n private uploadMesh(mesh: MeshHiPSMesh): MeshHiPSGpuMesh {\n const gl = this._webgl\n const positionBuffer = gl.createBuffer()\n const normalBuffer = gl.createBuffer()\n const indexBuffer = gl.createBuffer()\n\n if (!positionBuffer || !normalBuffer || !indexBuffer) {\n throw new Error(`Could not create SatelliteObjectGL buffers for ${this._options.name}`)\n }\n\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer)\n gl.bufferData(gl.ARRAY_BUFFER, mesh.positions, gl.STATIC_DRAW)\n\n gl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer)\n gl.bufferData(gl.ARRAY_BUFFER, mesh.normals, gl.STATIC_DRAW)\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, mesh.indices, gl.STATIC_DRAW)\n\n return {\n positionBuffer,\n normalBuffer,\n indexBuffer,\n lineIndexBuffer: null,\n indexCount: mesh.indices.length,\n lineIndexCount: 0,\n indexType: gl.UNSIGNED_INT,\n }\n }\n}\n\nfunction lonLatAltToWorld(position: SatelliteObjectPosition): vec3 {\n const point = new Point(\n {\n lonDeg: normalizeLongitudeDeg(position.longitudeDeg),\n latDeg: position.latitudeDeg,\n },\n CoordsType.GEOGRAPHIC,\n )\n const radialScale = 1 + Math.max(0, position.altitudeKm ?? 0) / SatelliteObjectGL.EARTH_RADIUS_KM\n return vec3.fromValues(\n point.x * radialScale,\n point.y * radialScale,\n point.z * radialScale,\n )\n}\n\nfunction isValidPosition(position: SatelliteObjectPosition): boolean {\n return Number.isFinite(position.longitudeDeg)\n && Number.isFinite(position.latitudeDeg)\n && position.latitudeDeg >= -90\n && position.latitudeDeg <= 90\n}\n\nfunction normalizeLongitudeDeg(longitudeDeg: number): number {\n const normalized = ((((longitudeDeg + 180) % 360) + 360) % 360) - 180\n return Object.is(normalized, -0) ? 0 : normalized\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: LicenseRef-AstroViewer-Dual-License\n */\n\nimport { FootprintShaderProgram } from '../../shader/FootprintShaderProgram.js'\nimport { CoordsType } from '../../utils/CoordsType.js'\nimport { Point } from '../Point.js'\n\nexport interface SensorConePoint {\n readonly longitudeDeg: number\n readonly latitudeDeg: number\n readonly altitudeKm?: number\n}\n\nexport interface SensorConeOptions {\n readonly name: string\n readonly color?: [number, number, number, number]\n readonly wireframe?: boolean\n readonly filled?: boolean\n}\n\nexport type SensorConeFootprintPosition = readonly [longitudeDeg: number, latitudeDeg: number]\ntype Vec3Tuple = readonly [x: number, y: number, z: number]\n\nexport class SensorConeGL {\n static readonly EARTH_RADIUS_KM = 6371\n static readonly ELEM_SIZE = 3\n\n _kind: string = 'SensorConeGL'\n\n private _lineBuffer: WebGLBuffer | null = null\n private _lineVertexCount = 0\n private _isVisible = true\n private _shaderProgram: FootprintShaderProgram\n private _color: [number, number, number, number]\n\n constructor(\n private _options: SensorConeOptions,\n private _webgl: WebGL2RenderingContext,\n ) {\n this._shaderProgram = new FootprintShaderProgram(this._webgl)\n this._color = _options.color ?? [0.0, 1.0, 0.95, 0.68]\n }\n\n setGeometry(apex: SensorConePoint, footprint: readonly SensorConeFootprintPosition[]): void {\n if (!isValidPoint(apex)) {\n this.clear()\n return\n }\n\n const ring = normalizeFootprintRing(footprint)\n if (ring.length < 3 || crossesAntimeridian(ring)) {\n this.clear()\n return\n }\n\n const apexVertex = lonLatAltToWorld(apex)\n const footprintVertices = ring.map(([longitudeDeg, latitudeDeg]) => (\n lonLatAltToWorld({ longitudeDeg, latitudeDeg, altitudeKm: 0 })\n ))\n const vertices = this.buildLineVertices(apexVertex, footprintVertices)\n this.uploadLineVertices(vertices)\n }\n\n setIsVisible(isVisible: boolean): void {\n this._isVisible = isVisible\n }\n\n setColor(color: [number, number, number, number]): void {\n this._color = color\n }\n\n clear(): void {\n this._lineVertexCount = 0\n if (this._lineBuffer) {\n this._webgl.deleteBuffer(this._lineBuffer)\n this._lineBuffer = null\n }\n }\n\n draw(pMatrix: Float32Array, vMatrix: Float32Array, baseModelMatrix: Float32Array): void {\n if (!this._isVisible) return\n if (!this._lineBuffer || this._lineVertexCount === 0) return\n\n const gl = this._webgl\n const previousBlend = gl.isEnabled(gl.BLEND)\n const previousDepthTest = gl.isEnabled(gl.DEPTH_TEST)\n const previousCullFace = gl.isEnabled(gl.CULL_FACE)\n const previousDepthMask = gl.getParameter(gl.DEPTH_WRITEMASK) as boolean\n const previousDepthFunc = gl.getParameter(gl.DEPTH_FUNC) as number\n const previousBlendSrcRgb = gl.getParameter(gl.BLEND_SRC_RGB) as number\n const previousBlendDstRgb = gl.getParameter(gl.BLEND_DST_RGB) as number\n const previousBlendSrcAlpha = gl.getParameter(gl.BLEND_SRC_ALPHA) as number\n const previousBlendDstAlpha = gl.getParameter(gl.BLEND_DST_ALPHA) as number\n\n gl.enable(gl.BLEND)\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)\n gl.enable(gl.DEPTH_TEST)\n gl.depthMask(false)\n gl.disable(gl.CULL_FACE)\n\n this._shaderProgram.enableShaders(pMatrix, baseModelMatrix, vMatrix)\n gl.uniform4f(\n this._shaderProgram.locations.color as WebGLUniformLocation,\n this._color[0],\n this._color[1],\n this._color[2],\n this._color[3],\n )\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._lineBuffer)\n gl.vertexAttribPointer(\n this._shaderProgram.locations.position as number,\n SensorConeGL.ELEM_SIZE,\n gl.FLOAT,\n false,\n 0,\n 0,\n )\n gl.enableVertexAttribArray(this._shaderProgram.locations.position as number)\n gl.drawArrays(gl.LINES, 0, this._lineVertexCount)\n gl.disableVertexAttribArray(this._shaderProgram.locations.position as number)\n gl.bindBuffer(gl.ARRAY_BUFFER, null)\n\n gl.depthMask(previousDepthMask)\n gl.depthFunc(previousDepthFunc)\n gl.blendFuncSeparate(\n previousBlendSrcRgb,\n previousBlendDstRgb,\n previousBlendSrcAlpha,\n previousBlendDstAlpha,\n )\n if (previousCullFace) gl.enable(gl.CULL_FACE)\n else gl.disable(gl.CULL_FACE)\n if (previousDepthTest) gl.enable(gl.DEPTH_TEST)\n else gl.disable(gl.DEPTH_TEST)\n if (previousBlend) gl.enable(gl.BLEND)\n else gl.disable(gl.BLEND)\n }\n\n dispose(): void {\n this.clear()\n }\n\n private buildLineVertices(apex: Vec3Tuple, footprintVertices: readonly Vec3Tuple[]): Float32Array {\n const vertexCount = footprintVertices.length * 4\n const vertices = new Float32Array(vertexCount * SensorConeGL.ELEM_SIZE)\n let offset = 0\n\n for (const vertex of footprintVertices) {\n offset = writeVertex(vertices, offset, apex)\n offset = writeVertex(vertices, offset, vertex)\n }\n\n for (let index = 0; index < footprintVertices.length; index++) {\n const current = footprintVertices[index]\n const next = footprintVertices[(index + 1) % footprintVertices.length]\n offset = writeVertex(vertices, offset, current)\n offset = writeVertex(vertices, offset, next)\n }\n\n return vertices\n }\n\n private uploadLineVertices(vertices: Float32Array): void {\n if (!this._lineBuffer) {\n this._lineBuffer = this._webgl.createBuffer()\n }\n\n if (!this._lineBuffer) {\n throw new Error(`Could not create SensorConeGL line buffer for ${this._options.name}`)\n }\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this._lineBuffer)\n this._webgl.bufferData(this._webgl.ARRAY_BUFFER, vertices, this._webgl.DYNAMIC_DRAW)\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, null)\n this._lineVertexCount = vertices.length / SensorConeGL.ELEM_SIZE\n }\n}\n\nfunction normalizeFootprintRing(\n footprint: readonly SensorConeFootprintPosition[],\n): SensorConeFootprintPosition[] {\n const ring: SensorConeFootprintPosition[] = []\n\n for (const coordinate of footprint) {\n if (!Array.isArray(coordinate) || coordinate.length < 2) return []\n const longitudeDeg = Number(coordinate[0])\n const latitudeDeg = Number(coordinate[1])\n if (!isValidLonLat(longitudeDeg, latitudeDeg)) return []\n ring.push([normalizeLongitudeDeg(longitudeDeg), latitudeDeg])\n }\n\n while (ring.length > 1 && sameLonLat(ring[0], ring[ring.length - 1])) {\n ring.pop()\n }\n\n const unique = new Set(ring.map(([longitudeDeg, latitudeDeg]) => (\n `${longitudeDeg.toFixed(9)},${latitudeDeg.toFixed(9)}`\n )))\n\n return unique.size >= 3 ? ring : []\n}\n\nfunction lonLatAltToWorld(point: SensorConePoint): Vec3Tuple {\n const geoPoint = new Point(\n {\n lonDeg: normalizeLongitudeDeg(point.longitudeDeg),\n latDeg: point.latitudeDeg,\n },\n CoordsType.GEOGRAPHIC,\n )\n const radialScale = 1 + Math.max(0, point.altitudeKm ?? 0) / SensorConeGL.EARTH_RADIUS_KM\n return [\n geoPoint.x * radialScale,\n geoPoint.y * radialScale,\n geoPoint.z * radialScale,\n ]\n}\n\nfunction writeVertex(vertices: Float32Array, offset: number, vertex: Vec3Tuple): number {\n vertices[offset] = vertex[0]\n vertices[offset + 1] = vertex[1]\n vertices[offset + 2] = vertex[2]\n return offset + SensorConeGL.ELEM_SIZE\n}\n\nfunction isValidPoint(point: SensorConePoint): boolean {\n return isValidLonLat(point.longitudeDeg, point.latitudeDeg)\n && (point.altitudeKm === undefined || Number.isFinite(point.altitudeKm))\n}\n\nfunction isValidLonLat(longitudeDeg: number, latitudeDeg: number): boolean {\n return Number.isFinite(longitudeDeg)\n && Number.isFinite(latitudeDeg)\n && latitudeDeg >= -90\n && latitudeDeg <= 90\n}\n\nfunction sameLonLat(\n left: SensorConeFootprintPosition,\n right: SensorConeFootprintPosition,\n): boolean {\n return Math.abs(left[0] - right[0]) < 1e-9\n && Math.abs(left[1] - right[1]) < 1e-9\n}\n\nfunction crossesAntimeridian(ring: readonly SensorConeFootprintPosition[]): boolean {\n for (let index = 0; index < ring.length; index++) {\n const current = ring[index]\n const next = ring[(index + 1) % ring.length]\n if (Math.abs(normalizeLongitudeDeg(next[0]) - normalizeLongitudeDeg(current[0])) > 180) {\n return true\n }\n }\n return false\n}\n\nfunction normalizeLongitudeDeg(longitudeDeg: number): number {\n const normalized = ((((longitudeDeg + 180) % 360) + 360) % 360) - 180\n return Object.is(normalized, -0) ? 0 : normalized\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { FootprintSetGL } from '../footprints/FootprintSetGL.js'\nimport { CoordsType } from '../../utils/CoordsType.js'\nimport { Footprint, FootprintDetail } from '../footprints/Footprint.js'\nimport { ParsedGeoJSONFeature } from '../../utils/GeoJSONParser.js'\nimport { MetadataColumn } from '../MetadataColumn.js'\nimport { MetadataManager } from '../MetadataManager.js'\nimport { ColumnType } from '../MetadataColumn.js'\n\nexport class TerraFootprintSetGL extends FootprintSetGL {\n _kind: string = 'TerraFootprintSetGL'\n protected _coordsType: CoordsType.GEOGRAPHIC = CoordsType.GEOGRAPHIC\n\n addGeoJSONFeatures(features: ParsedGeoJSONFeature[]): void {\n this._ready = false\n this.clearFootprints()\n this._metadataManager = new MetadataManager(this.createGeoJSONMetadataColumns(features))\n\n for (const feature of features) {\n const footprint = Footprint.fromPolygons(\n feature.polygons,\n this.createGeoJSONDetails(feature),\n CoordsType.GEOGRAPHIC,\n )\n\n if (footprint.valid) {\n this.addFootprint(footprint)\n this.totPoints += footprint.totPoints\n this.totConvexPoints += footprint.totConvexPoints\n }\n }\n\n this._ready = true\n this._bufferInitialised = false\n }\n\n private createGeoJSONMetadataColumns(features: ParsedGeoJSONFeature[]): MetadataColumn[] {\n const names = new Set<string>()\n features.forEach(feature => Object.keys(feature.properties).forEach(name => names.add(name)))\n\n return Array.from(names).map((name, index) => {\n const values = features.map(feature => feature.properties[name]).filter(value => value !== null && value !== undefined && value !== '')\n const isNumber = values.length > 0 && values.every(value => typeof value === 'number' || !Number.isNaN(Number(value)))\n const isName = /^name$|nome|denominazione|label|title/i.test(name)\n\n return new MetadataColumn({\n index,\n name,\n columnType: isName ? ColumnType.MAIN_NAME : (isNumber ? ColumnType.NUMBER : ColumnType.STRING),\n unit: '',\n })\n })\n }\n\n private createGeoJSONDetails(feature: ParsedGeoJSONFeature): FootprintDetail[] {\n return Object.entries(feature.properties).map(([key, value]) => ({\n key,\n value: typeof value === 'number' ? value : String(value ?? ''),\n }))\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { CatalogueGL } from '../catalogues/CatalogueGL.js'\n\nexport class TerraPointSetGL extends CatalogueGL {\n _kind: string = 'TerraPointSetGL'\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { FootprintShaderProgram } from '../../shader/FootprintShaderProgram.js'\nimport { CoordsType } from '../../utils/CoordsType.js'\nimport MouseHelper from '../../utils/MouseHelper.js'\nimport { colorHex2RGB } from '../../utils/Utils.js'\nimport { MetadataManager } from '../MetadataManager.js'\nimport { Point } from '../Point.js'\nimport { VisibleTilesManager } from '../hips/VisibleTilesManager.js'\n\nexport interface TerraPolylinePoint {\n readonly longitudeDeg: number\n readonly latitudeDeg: number\n readonly altitudeKm?: number\n readonly timestamp?: Date | string\n}\n\nexport interface TerraPolylineMetadata {\n readonly name?: string\n readonly [key: string]: unknown\n}\n\ninterface TerraPolylinePath {\n readonly points: readonly TerraPolylinePoint[]\n readonly metadata?: TerraPolylineMetadata\n}\n\ntype RenderSegment = {\n vertices: Float32Array\n buffer: WebGLBuffer | null\n}\n\nexport class TerraPolylineSetGL {\n static ELEM_SIZE = 3\n static BYTES_X_ELEM = new Float32Array().BYTES_PER_ELEMENT\n\n _kind: string = 'TerraPolylineSetGL'\n _isVisible: boolean = true\n _ready: boolean = true\n\n private _shapeColor = '#ffe066'\n private _bufferInitialised = false\n private paths: TerraPolylinePath[] = []\n private renderSegments: RenderSegment[] = []\n private _polylineShaderProgram: FootprintShaderProgram\n\n constructor(\n private _name: string,\n private _description: string,\n private _providerUrl: string,\n private _metadataManager: MetadataManager,\n private _webgl: WebGL2RenderingContext,\n private _visibleTilesManager: VisibleTilesManager,\n ) {\n this._polylineShaderProgram = new FootprintShaderProgram(this._webgl)\n }\n\n addPath(points: readonly TerraPolylinePoint[], metadata?: TerraPolylineMetadata): void {\n this.paths.push({ points: [...points], metadata })\n this._ready = true\n this._bufferInitialised = false\n }\n\n addGroundTrack(points: readonly TerraPolylinePoint[], metadata?: TerraPolylineMetadata): void {\n this.addPath(points, metadata)\n }\n\n clearPaths(): void {\n this.paths = []\n this.disposeBuffers()\n this.renderSegments = []\n this._bufferInitialised = false\n }\n\n setIsVisible(isVisible: boolean): void {\n this._isVisible = isVisible\n }\n\n get isVisible(): boolean {\n return this._isVisible\n }\n\n changeColor(color: string): void {\n this._shapeColor = color\n }\n\n dispose(): void {\n this.disposeBuffers()\n this.renderSegments = []\n this.paths = []\n this._bufferInitialised = false\n }\n\n draw(\n in_mMatrix: Float32Array,\n _in_mouseHelper: MouseHelper,\n vMatrix: Float32Array,\n pMatrix: Float32Array,\n ): void {\n if (!this._isVisible) return\n if (!this._ready) return\n if (!vMatrix) return\n if (!this._webgl) return\n if (!this._bufferInitialised) this.initBuffers()\n if (this.renderSegments.length === 0) return\n\n this._polylineShaderProgram.enableShaders(pMatrix, in_mMatrix, vMatrix)\n\n const rgb = colorHex2RGB(this._shapeColor)\n this._webgl.uniform4f(\n this._polylineShaderProgram.locations.color as WebGLUniformLocation,\n rgb[0],\n rgb[1],\n rgb[2],\n 1.0,\n )\n\n for (const segment of this.renderSegments) {\n if (!segment.buffer || segment.vertices.length < TerraPolylineSetGL.ELEM_SIZE * 2) continue\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, segment.buffer)\n this._webgl.vertexAttribPointer(\n this._polylineShaderProgram.locations.position as number,\n TerraPolylineSetGL.ELEM_SIZE,\n this._webgl.FLOAT,\n false,\n TerraPolylineSetGL.BYTES_X_ELEM * TerraPolylineSetGL.ELEM_SIZE,\n 0,\n )\n this._webgl.enableVertexAttribArray(this._polylineShaderProgram.locations.position as number)\n this._webgl.drawArrays(\n this._webgl.LINE_STRIP,\n 0,\n segment.vertices.length / TerraPolylineSetGL.ELEM_SIZE,\n )\n }\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, null)\n this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, null)\n }\n\n private initBuffers(): void {\n this.disposeBuffers()\n this.renderSegments = this.buildRenderSegments()\n\n for (const segment of this.renderSegments) {\n const buffer = this._webgl.createBuffer()\n segment.buffer = buffer\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, buffer)\n this._webgl.bufferData(this._webgl.ARRAY_BUFFER, segment.vertices, this._webgl.STATIC_DRAW)\n }\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, null)\n this._bufferInitialised = true\n }\n\n private buildRenderSegments(): RenderSegment[] {\n const segments: RenderSegment[] = []\n\n for (const path of this.paths) {\n for (const segment of this.splitPath(path.points)) {\n if (segment.length < 2) continue\n\n const vertices = new Float32Array(segment.length * TerraPolylineSetGL.ELEM_SIZE)\n let offset = 0\n\n for (const point of segment) {\n const geoPoint = new Point(\n {\n lonDeg: normalizeLongitudeDeg(point.longitudeDeg),\n latDeg: point.latitudeDeg,\n },\n CoordsType.GEOGRAPHIC,\n )\n\n vertices[offset] = geoPoint.x\n vertices[offset + 1] = geoPoint.y\n vertices[offset + 2] = geoPoint.z\n offset += TerraPolylineSetGL.ELEM_SIZE\n }\n\n segments.push({ vertices, buffer: null })\n }\n }\n\n return segments\n }\n\n private splitPath(points: readonly TerraPolylinePoint[]): TerraPolylinePoint[][] {\n const segments: TerraPolylinePoint[][] = []\n let current: TerraPolylinePoint[] = []\n let previous: TerraPolylinePoint | null = null\n\n for (const point of points) {\n if (!isValidPoint(point)) {\n if (current.length > 1) segments.push(current)\n current = []\n previous = null\n continue\n }\n\n if (previous && crossesAntimeridian(previous.longitudeDeg, point.longitudeDeg)) {\n if (current.length > 1) segments.push(current)\n current = []\n }\n\n current.push(point)\n previous = point\n }\n\n if (current.length > 1) segments.push(current)\n return segments\n }\n\n private disposeBuffers(): void {\n for (const segment of this.renderSegments) {\n if (segment.buffer) {\n this._webgl.deleteBuffer(segment.buffer)\n segment.buffer = null\n }\n }\n }\n}\n\nfunction isValidPoint(point: TerraPolylinePoint): boolean {\n return Number.isFinite(point.longitudeDeg)\n && Number.isFinite(point.latitudeDeg)\n && point.latitudeDeg >= -90\n && point.latitudeDeg <= 90\n}\n\nfunction crossesAntimeridian(leftLongitudeDeg: number, rightLongitudeDeg: number): boolean {\n return Math.abs(normalizeLongitudeDeg(rightLongitudeDeg) - normalizeLongitudeDeg(leftLongitudeDeg)) > 180\n}\n\nfunction normalizeLongitudeDeg(longitudeDeg: number): number {\n const normalized = ((((longitudeDeg + 180) % 360) + 360) % 360) - 180\n return Object.is(normalized, -0) ? 0 : normalized\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// HiPSShaderProgram.ts\nimport { mat4 } from 'gl-matrix';\nimport ShaderManager from './ShaderManager.js'\n\ntype GL = WebGL2RenderingContext;\n\ntype UniformNames = {\n vertex_color: string,\n m_perspective: string,\n m_model_view: string,\n}\n\ntype AttributeNames = {\n vertex_pos: string\n vertex_selected: string\n point_size: string\n point_hue: string\n}\n\ntype Locations = {\n pMatrix: WebGLUniformLocation | null\n mvMatrix: WebGLUniformLocation | null\n color: WebGLUniformLocation | null\n position: number\n hovered: number\n pointSize: number\n brightness: number\n}\n\n// export default class CatalogueShaderProgram {\nexport class CatalogueShaderProgram {\n private _shaderProgram: WebGLProgram | undefined\n private _vertexShader!: WebGLShader\n private _fragmentShader!: WebGLShader\n\n readonly gl_uniforms: UniformNames\n readonly gl_attributes: AttributeNames\n readonly locations: Locations\n private _webgl: WebGL2RenderingContext;\n\n \n constructor(webgl: WebGL2RenderingContext) {\n this._webgl = webgl\n this.gl_uniforms = {\n vertex_color: 'u_fragcolor',\n m_perspective: 'uPMatrix',\n m_model_view: 'uMVMatrix'\n }\n\n this.gl_attributes = {\n vertex_pos: 'aCatPosition',\n vertex_selected: 'a_selected',\n point_size: 'a_pointsize',\n point_hue: 'a_brightness'\n }\n\n this.locations = {\n pMatrix: null,\n mvMatrix: null,\n color: null,\n position: -1,\n hovered: -1,\n pointSize: -1,\n brightness: -1\n }\n }\n\n get shaderProgram(): WebGLProgram {\n if (!this._shaderProgram) {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n this._shaderProgram = gl.createProgram() as WebGLProgram\n this.initShaders()\n }\n return this._shaderProgram\n }\n\n private initShaders(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n\n const fragmentShaderStr = ShaderManager.catalogueFS()\n this._fragmentShader = gl.createShader(gl.FRAGMENT_SHADER) as WebGLShader\n gl.shaderSource(this._fragmentShader, fragmentShaderStr)\n gl.compileShader(this._fragmentShader)\n console.log('FS log:', gl.getShaderInfoLog(this._fragmentShader) || 'ok');\n if (!gl.getShaderParameter(this._fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._fragmentShader) || 'Fragment shader compile error')\n return\n }\n\n const vertexShaderStr = ShaderManager.catalogueVS()\n this._vertexShader = gl.createShader(gl.VERTEX_SHADER) as WebGLShader\n gl.shaderSource(this._vertexShader, vertexShaderStr)\n gl.compileShader(this._vertexShader)\n console.log('VS log:', gl.getShaderInfoLog(this._vertexShader) || 'ok');\n if (!gl.getShaderParameter(this._vertexShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._vertexShader) || 'Vertex shader compile error')\n return\n }\n\n gl.attachShader(this.shaderProgram as WebGLProgram, this._vertexShader)\n gl.attachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n gl.linkProgram(this.shaderProgram as WebGLProgram)\n\n if (!gl.getProgramParameter(this.shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders')\n }\n\n // shaderUtility.useProgram(this.shaderProgram)\n gl.useProgram(this.shaderProgram);\n\n this.locations.position = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.vertex_pos\n )\n this.locations.hovered = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.vertex_selected\n )\n this.locations.pointSize = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.point_size\n )\n this.locations.brightness = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.point_hue\n )\n this.locations.color = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.vertex_color\n )\n\n\n }\n\n enableShaders(\n pMatrix: Float32Array,\n modelMatrix: Float32Array,\n viewMatrix: Float32Array\n ): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n \n // shaderUtility.useProgram(this.shaderProgram)\n gl.useProgram(this.shaderProgram);\n\n\n this.locations.pMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_perspective\n )\n\n this.locations.mvMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_model_view\n )\n\n let mvMatrix = mat4.create()\n mvMatrix = mat4.multiply(mvMatrix, viewMatrix, modelMatrix)\n gl.uniformMatrix4fv(this.locations.pMatrix, false, pMatrix)\n gl.uniformMatrix4fv(this.locations.mvMatrix, false, mvMatrix as Float32Array)\n }\n}\n\n// export const catalogueShaderProgram = new CatalogueShaderProgram()","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// HiPSShaderProgram.ts\nimport { mat4 } from 'gl-matrix';\nimport ShaderManager from './ShaderManager.js'\n\ntype GL = WebGL2RenderingContext;\n\ntype UniformNames = {\n vertex_color: string,\n m_perspective: string,\n m_model_view: string,\n point_size: string\n}\n\ntype AttributeNames = {\n vertex_pos: string\n\n}\n\ntype Locations = {\n pMatrix: WebGLUniformLocation | null\n mvMatrix: WebGLUniformLocation | null\n color: WebGLUniformLocation | null\n position: number\n pointSize: WebGLUniformLocation | null\n}\n\nexport class FootprintShaderProgram {\n// export default class FootprintShaderProgram {\n private _shaderProgram: WebGLProgram | undefined\n private _vertexShader!: WebGLShader\n private _fragmentShader!: WebGLShader\n\n readonly gl_uniforms: UniformNames\n readonly gl_attributes: AttributeNames\n readonly locations: Locations\n private _webgl: WebGL2RenderingContext;\n\n constructor(webgl: WebGL2RenderingContext) {\n this._webgl = webgl\n this.gl_uniforms = {\n vertex_color: 'u_fragcolor',\n m_perspective: 'uPMatrix',\n m_model_view: 'uMVMatrix',\n point_size: 'u_pointsize'\n }\n\n this.gl_attributes = {\n vertex_pos: 'aCatPosition'\n }\n\n this.locations = {\n pMatrix: null,\n mvMatrix: null,\n color: null,\n position: -1,\n pointSize: -1\n }\n }\n\n get shaderProgram(): WebGLProgram {\n if (!this._shaderProgram) {\n const gl = this._webgl as GL\n // const gl = global.gl as GL\n this._shaderProgram = gl.createProgram() as WebGLProgram\n this.initShaders()\n }\n return this._shaderProgram\n }\n\n private initShaders(): void {\n const gl = this._webgl as GL\n // const gl = global.gl as GL\n\n const fragmentShaderStr = ShaderManager.footprintFS()\n this._fragmentShader = gl.createShader(gl.FRAGMENT_SHADER) as WebGLShader\n gl.shaderSource(this._fragmentShader, fragmentShaderStr)\n gl.compileShader(this._fragmentShader)\n console.log('FS log:', gl.getShaderInfoLog(this._fragmentShader) || 'ok');\n if (!gl.getShaderParameter(this._fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._fragmentShader) || 'Fragment shader compile error')\n return\n }\n\n const vertexShaderStr = ShaderManager.footprintVS()\n this._vertexShader = gl.createShader(gl.VERTEX_SHADER) as WebGLShader\n gl.shaderSource(this._vertexShader, vertexShaderStr)\n gl.compileShader(this._vertexShader)\n console.log('VS log:', gl.getShaderInfoLog(this._vertexShader) || 'ok');\n if (!gl.getShaderParameter(this._vertexShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._vertexShader) || 'Vertex shader compile error')\n return\n }\n\n gl.attachShader(this.shaderProgram as WebGLProgram, this._vertexShader)\n gl.attachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n gl.linkProgram(this.shaderProgram as WebGLProgram)\n\n if (!gl.getProgramParameter(this.shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders')\n }\n\n gl.useProgram(this.shaderProgram);\n\n this.locations.position = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.vertex_pos\n )\n\n this.locations.pointSize = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.point_size\n )\n\n this.locations.color = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.vertex_color\n )\n }\n\n enableShaders(\n pMatrix: Float32Array,\n modelMatrix: Float32Array,\n viewMatrix: Float32Array\n ): void {\n const gl = this._webgl as GL\n // const gl = global.gl as GL\n\n gl.useProgram(this.shaderProgram);\n\n this.locations.pMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_perspective\n )\n\n this.locations.mvMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_model_view\n )\n\n let mvMatrix = mat4.create()\n mvMatrix = mat4.multiply(mvMatrix, viewMatrix, modelMatrix)\n gl.uniformMatrix4fv(this.locations.pMatrix, false, pMatrix)\n gl.uniformMatrix4fv(this.locations.mvMatrix, false, mvMatrix as Float32Array)\n }\n}\n\n// export const footprintShaderProgram = new FootprintShaderProgram()","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// GridShaderManager.ts\n'use strict'\n\nclass GridShaderManager {\n static healpixGridVS(): string {\n return `#version 300 es\n in vec4 aCatPosition;\n uniform mat4 uMVMatrix;\n uniform mat4 uPMatrix;\n\n void main() {\n gl_Position = uPMatrix * uMVMatrix * aCatPosition;\n gl_PointSize = 7.0;\n }`\n }\n\n static healpixGridFS(): string {\n return `#version 300 es\n precision mediump float;\n\n uniform vec4 u_fragcolor;\n out vec4 fragColor;\n\n void main() {\n // fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n fragColor = u_fragcolor;\n }`\n }\n}\n\nexport default GridShaderManager","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// HiPSShaderProgram.ts\nimport ShaderManager from './ShaderManager.js'\nimport { ColorMaps } from '../model/ColorMaps.js'\n\ntype GL = WebGL2RenderingContext;\n\ntype UniformNames = {\n sampler: string\n factor: string\n m_perspective: string\n m_model: string\n m_view: string\n colormapIdx: string\n colormap_red: string\n colormap_green: string\n colormap_blue: string\n}\n\ntype AttributeNames = {\n vertex_pos: string\n text_coords: string\n}\n\ntype Locations = {\n pMatrix: WebGLUniformLocation | null\n mMatrix: WebGLUniformLocation | null\n vMatrix: WebGLUniformLocation | null\n sampler: WebGLUniformLocation | null\n textureAlpha: WebGLUniformLocation | null\n clorMapIdx: WebGLUniformLocation | null\n vertexPositionAttribute: number\n textureCoordAttribute: number\n}\n\n// export default class HiPSShaderProgram {\nexport class HiPSShaderProgram {\n private _colorMapBlockIndex: number | null = null;\n private _runtimeColorMap:\n | { r: Float32Array; g: Float32Array; b: Float32Array }\n | undefined;\n\n private _shaderProgram: WebGLProgram | undefined\n private _vertexShader!: WebGLShader\n private _fragmentShader!: WebGLShader\n\n private _UBO_colorMapBuffer: WebGLBuffer | null = null\n private _UBO_colorMapVariableInfo: Record<\n 'r_palette' | 'g_palette' | 'b_palette',\n { index: number; offset: number }\n > = {\n r_palette: { index: 0, offset: 0 },\n g_palette: { index: 0, offset: 0 },\n b_palette: { index: 0, offset: 0 }\n }\n\n readonly gl_uniforms: UniformNames\n readonly gl_attributes: AttributeNames\n readonly locations: Locations\n private _webgl: WebGL2RenderingContext\n\n constructor(webgl: WebGL2RenderingContext) {\n this._webgl = webgl\n this.gl_uniforms = {\n sampler: 'uSampler0',\n factor: 'uFactor0',\n m_perspective: 'uPMatrix',\n m_model: 'uMMatrix',\n m_view: 'uVMatrix',\n colormapIdx: 'cmapIdx',\n colormap_red: 'r',\n colormap_green: 'g',\n colormap_blue: 'b'\n }\n\n this.gl_attributes = {\n vertex_pos: 'aVertexPosition',\n text_coords: 'aTextureCoord'\n }\n\n this.locations = {\n pMatrix: null,\n mMatrix: null,\n vMatrix: null,\n sampler: null,\n textureAlpha: null,\n clorMapIdx: null,\n vertexPositionAttribute: -1,\n textureCoordAttribute: -1\n }\n }\n\n get shaderProgram(): WebGLProgram {\n const gl = this._webgl as GL\n if (!this._shaderProgram) {\n // const gl = global.gl as GL\n this._shaderProgram = gl.createProgram() as WebGLProgram\n this.initShaders()\n }\n ; gl.useProgram(this._shaderProgram)\n return this._shaderProgram\n }\n\n setRuntimeColorMap(\n colorMap:\n | { r: Float32Array; g: Float32Array; b: Float32Array }\n | undefined,\n ): void {\n this._runtimeColorMap = colorMap\n }\n\n private initShaders(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n\n const fragmentShaderStr = ShaderManager.hipsNativeFS()\n this._fragmentShader = gl.createShader(gl.FRAGMENT_SHADER) as WebGLShader\n gl.shaderSource(this._fragmentShader, fragmentShaderStr)\n gl.compileShader(this._fragmentShader)\n if (!gl.getShaderParameter(this._fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._fragmentShader) || 'Fragment shader compile error')\n return\n }\n\n const vertexShaderStr = ShaderManager.hipsVS()\n this._vertexShader = gl.createShader(gl.VERTEX_SHADER) as WebGLShader\n gl.shaderSource(this._vertexShader, vertexShaderStr)\n gl.compileShader(this._vertexShader)\n if (!gl.getShaderParameter(this._vertexShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._vertexShader) || 'Vertex shader compile error')\n return\n }\n\n gl.attachShader(this._shaderProgram as WebGLProgram, this._vertexShader)\n gl.attachShader(this._shaderProgram as WebGLProgram, this._fragmentShader)\n gl.linkProgram(this._shaderProgram as WebGLProgram)\n\n if (!gl.getProgramParameter(this._shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders')\n }\n }\n\n enableProgram(): void {\n // (global.gl as GL).useProgram(this._shaderProgram as WebGLProgram)\n (this._webgl as GL).useProgram(this.shaderProgram as WebGLProgram)\n\n }\n\n setGrayscaleShader(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n gl.detachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n const fragmentShaderStr = ShaderManager.hipsGrayscaleFS()\n this.changeFSShader(fragmentShaderStr)\n }\n\n setNativeShader(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n gl.detachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n const fragmentShaderStr = ShaderManager.hipsNativeFS()\n this.changeFSShader(fragmentShaderStr)\n }\n\n setColorMapShader(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n\n // Swap fragment shader\n gl.detachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n const fragmentShaderStr = ShaderManager.hipsColorMapFS()\n this.changeFSShader(fragmentShaderStr)\n\n // UBO discovery for the \"colormap\" block\n const blockIndex = gl.getUniformBlockIndex(\n this.shaderProgram as WebGLProgram,\n 'colormap'\n )\n\n // INVALID_INDEX == 0xFFFFFFFF in WebGL2\n if (blockIndex === gl.INVALID_INDEX) {\n console.warn(\n 'HiPSShaderProgram: uniform block \"colormap\" not found in hipsColorMapFS()'\n );\n this._colorMapBlockIndex = null;\n this._UBO_colorMapBuffer = null;\n return; // do NOT proceed with UBO setup\n }\n this._colorMapBlockIndex = blockIndex;\n\n\n // const blockSize = gl.getActiveUniformBlockParameter(\n // this.shaderProgram as WebGLProgram,\n // blockIndex,\n // gl.UNIFORM_BLOCK_DATA_SIZE\n // ) as number\n\n const uboVariableNames = ['r_palette', 'g_palette', 'b_palette'] as const\n\n const uboVariableIndices = gl.getUniformIndices(\n this.shaderProgram as WebGLProgram,\n uboVariableNames as unknown as string[]\n ) as number[]\n\n const uboVariableOffsets = gl.getActiveUniforms(\n this.shaderProgram as WebGLProgram,\n uboVariableIndices,\n gl.UNIFORM_OFFSET\n ) as number[]\n\n // Create buffer only once\n if (!this._UBO_colorMapBuffer) {\n this._UBO_colorMapBuffer = gl.createBuffer()\n gl.bindBuffer(gl.UNIFORM_BUFFER, this._UBO_colorMapBuffer)\n\n // std140 layout: 256 floats each padded to 16 bytes => 4096 bytes per palette, total 12288\n const BYTES = 12288; // 3 * 4096\n gl.bufferData(gl.UNIFORM_BUFFER, BYTES, gl.STATIC_DRAW)\n gl.bindBuffer(gl.UNIFORM_BUFFER, null)\n\n gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, this._UBO_colorMapBuffer)\n }\n\n // Store offsets\n uboVariableNames.forEach((name, index) => {\n this._UBO_colorMapVariableInfo[name] = {\n index: uboVariableIndices[index],\n offset: uboVariableOffsets[index]\n }\n })\n }\n\n private changeFSShader(fragmentShaderStr: string): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n this._fragmentShader = gl.createShader(gl.FRAGMENT_SHADER) as WebGLShader\n gl.shaderSource(this._fragmentShader, fragmentShaderStr)\n gl.compileShader(this._fragmentShader)\n if (!gl.getShaderParameter(this._fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._fragmentShader) || 'Fragment shader compile error')\n return\n }\n gl.attachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n gl.linkProgram(this.shaderProgram as WebGLProgram)\n if (!gl.getProgramParameter(this.shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders')\n }\n gl.useProgram(this.shaderProgram as WebGLProgram)\n }\n\n enableShaders(\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n gl.useProgram(this.shaderProgram as WebGLProgram)\n\n this.locations.pMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_perspective\n )\n this.locations.mMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_model\n )\n this.locations.vMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_view\n )\n this.locations.sampler = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.sampler\n )\n this.locations.textureAlpha = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.factor\n )\n this.locations.clorMapIdx = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.colormapIdx\n )\n\n\n // NEW\n // if (this.locations.clorMapIdx) {\n gl.uniform1i(this.locations.clorMapIdx, colorMapIdx);\n // }\n\n // Make sampler explicit: we always use TEXTURE0 in your draw code\n if (this.locations.sampler) {\n gl.uniform1i(this.locations.sampler, 0);\n }\n // END NEW\n\n this.locations.vertexPositionAttribute = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.vertex_pos\n )\n this.locations.textureCoordAttribute = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.text_coords\n )\n\n if (colorMapIdx >= 2 && this._UBO_colorMapBuffer && this._colorMapBlockIndex !== null) {\n gl.uniformBlockBinding(\n this.shaderProgram as WebGLProgram,\n this._colorMapBlockIndex,\n 0\n );\n gl.bindBuffer(gl.UNIFORM_BUFFER, this._UBO_colorMapBuffer);\n\n let currentColorMap:\n | { r: Float32Array; g: Float32Array; b: Float32Array }\n | undefined;\n\n\n if (colorMapIdx === 2) {\n currentColorMap = {\n r: ColorMaps.planck.r,\n g: ColorMaps.planck.g,\n b: ColorMaps.planck.b,\n };\n } else if (colorMapIdx === 3) {\n currentColorMap = {\n r: ColorMaps.cmb.r,\n g: ColorMaps.cmb.g,\n b: ColorMaps.cmb.b,\n };\n } else if (colorMapIdx === 4) {\n currentColorMap = {\n r: ColorMaps.rainbow.r,\n g: ColorMaps.rainbow.g,\n b: ColorMaps.rainbow.b,\n };\n } else if (colorMapIdx === 5) {\n currentColorMap = {\n r: ColorMaps.eosb.r,\n g: ColorMaps.eosb.g,\n b: ColorMaps.eosb.b,\n };\n } else if (colorMapIdx === 6) {\n currentColorMap = {\n r: ColorMaps.cubehelix.r,\n g: ColorMaps.cubehelix.g,\n b: ColorMaps.cubehelix.b,\n };\n } else if (colorMapIdx === 7) {\n currentColorMap = {\n r: ColorMaps.hot.r,\n g: ColorMaps.hot.g,\n b: ColorMaps.hot.b,\n };\n } else if (colorMapIdx === 8) {\n currentColorMap = {\n r: ColorMaps.gray.r,\n g: ColorMaps.gray.g,\n b: ColorMaps.gray.b,\n };\n }\n\n if (!currentColorMap) {\n currentColorMap = this._runtimeColorMap\n }\n\n if (currentColorMap) {\n const info = this._UBO_colorMapVariableInfo;\n\n gl.bufferSubData(gl.UNIFORM_BUFFER, info.r_palette.offset, currentColorMap.r, 0);\n gl.bufferSubData(gl.UNIFORM_BUFFER, info.g_palette.offset, currentColorMap.g, 0);\n gl.bufferSubData(gl.UNIFORM_BUFFER, info.b_palette.offset, currentColorMap.b, 0);\n }\n\n gl.bindBuffer(gl.UNIFORM_BUFFER, null);\n }\n\n gl.uniformMatrix4fv(this.locations.mMatrix, false, mMatrix)\n gl.uniformMatrix4fv(this.locations.pMatrix, false, pMatrix)\n gl.uniformMatrix4fv(this.locations.vMatrix, false, vMatrix)\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: LicenseRef-AstroViewer-Dual-License\n */\n\ntype MeshHiPSLocations = {\n pMatrix: WebGLUniformLocation | null\n mMatrix: WebGLUniformLocation | null\n vMatrix: WebGLUniformLocation | null\n color: WebGLUniformLocation | null\n vertexPositionAttribute: number\n vertexNormalAttribute: number\n}\n\nexport interface MeshHiPSShaderProgramOptions {\n readonly twoSidedLighting?: boolean\n readonly markerLighting?: boolean\n}\n\nexport class MeshHiPSShaderProgram {\n readonly locations: MeshHiPSLocations\n private _shaderProgram?: WebGLProgram\n\n constructor(\n private _webgl: WebGL2RenderingContext,\n private _options: MeshHiPSShaderProgramOptions = {},\n ) {\n this.locations = {\n pMatrix: null,\n mMatrix: null,\n vMatrix: null,\n color: null,\n vertexPositionAttribute: -1,\n vertexNormalAttribute: -1,\n }\n }\n\n get shaderProgram(): WebGLProgram {\n const gl = this._webgl\n if (!this._shaderProgram) {\n const program = gl.createProgram()\n if (!program) throw new Error('Could not create MeshHiPS shader program')\n this._shaderProgram = program\n this.initShaders()\n }\n gl.useProgram(this._shaderProgram)\n return this._shaderProgram\n }\n\n enableProgram(): void {\n this._webgl.useProgram(this.shaderProgram)\n }\n\n enableShaders(\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n color: [number, number, number, number],\n ): void {\n const gl = this._webgl\n const program = this.shaderProgram\n gl.useProgram(program)\n\n this.locations.pMatrix = gl.getUniformLocation(program, 'uPMatrix')\n this.locations.vMatrix = gl.getUniformLocation(program, 'uVMatrix')\n this.locations.mMatrix = gl.getUniformLocation(program, 'uMMatrix')\n this.locations.color = gl.getUniformLocation(program, 'uColor')\n this.locations.vertexPositionAttribute = gl.getAttribLocation(program, 'aVertexPosition')\n this.locations.vertexNormalAttribute = gl.getAttribLocation(program, 'aVertexNormal')\n\n gl.uniformMatrix4fv(this.locations.pMatrix, false, pMatrix)\n gl.uniformMatrix4fv(this.locations.vMatrix, false, vMatrix)\n gl.uniformMatrix4fv(this.locations.mMatrix, false, mMatrix)\n gl.uniform4fv(this.locations.color, color)\n }\n\n private initShaders(): void {\n const gl = this._webgl\n const vertexShader = this.compileShader(\n gl.VERTEX_SHADER,\n `#version 300 es\n precision mediump float;\n in vec3 aVertexPosition;\n in vec3 aVertexNormal;\n uniform mat4 uPMatrix;\n uniform mat4 uVMatrix;\n uniform mat4 uMMatrix;\n out vec3 vNormal;\n void main(void) {\n vec3 worldPos = (uMMatrix * vec4(aVertexPosition, 1.0)).xyz;\n vNormal = normalize((uMMatrix * vec4(aVertexNormal, 0.0)).xyz);\n gl_Position = uPMatrix * uVMatrix * vec4(worldPos, 1.0);\n }`,\n )\n\n const fragmentShader = this.compileShader(\n gl.FRAGMENT_SHADER,\n `#version 300 es\n precision mediump float;\n in vec3 vNormal;\n uniform vec4 uColor;\n out vec4 outColor;\n void main(void) {\n vec3 normal = normalize(vNormal);\n vec3 lightDir = normalize(vec3(0.45, 0.8, 0.35));\n float diffuse = ${this._options.twoSidedLighting\n ? 'abs(dot(normal, lightDir))'\n : 'max(dot(normal, lightDir), 0.0)'};\n float rim = pow(1.0 - max(dot(normal, vec3(0.0, 0.0, 1.0)), 0.0), 2.0);\n vec3 color = ${this._options.markerLighting\n ? 'uColor.rgb * (0.78 + diffuse * 0.18) + vec3(0.06, 0.08, 0.07) * rim'\n : 'uColor.rgb * (0.24 + diffuse * 0.78) + vec3(0.16, 0.24, 0.20) * rim'};\n outColor = vec4(color, uColor.a);\n }`,\n )\n\n gl.attachShader(this._shaderProgram as WebGLProgram, vertexShader)\n gl.attachShader(this._shaderProgram as WebGLProgram, fragmentShader)\n gl.linkProgram(this._shaderProgram as WebGLProgram)\n\n if (!gl.getProgramParameter(this._shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n throw new Error(gl.getProgramInfoLog(this._shaderProgram as WebGLProgram) || 'Could not initialise MeshHiPS shaders')\n }\n }\n\n private compileShader(type: number, source: string): WebGLShader {\n const gl = this._webgl\n const shader = gl.createShader(type)\n if (!shader) throw new Error('Could not create MeshHiPS shader')\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n throw new Error(gl.getShaderInfoLog(shader) || 'MeshHiPS shader compile error')\n }\n return shader\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n// ShaderManager.ts\n\nexport type GLSLSource = string;\n\nexport default class ShaderManager {\n static catalogueVS(): GLSLSource {\n return `#version 300 es\n in vec4 aCatPosition;\n in float a_selected;\n in float a_pointsize;\n in float a_brightness;\n\n out float v_selected;\n out float v_brightness;\n out lowp vec4 vColor; // not used\n\n uniform mat4 uPMatrix;\n uniform mat4 uMVMatrix;\n\n void main() {\n\n gl_Position = (uPMatrix * uMVMatrix * aCatPosition);\n gl_PointSize = a_pointsize;\n v_selected = a_selected;\n v_brightness = a_brightness;\n }`;\n }\n\n static catalogueFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n \n #ifdef GL_OES_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n #endif\n\n // https://www.desultoryquest.com/blog/drawing-anti-aliased-circular-points-using-opengl-slash-webgl/\n\n // precision mediump float;\n\n in float v_selected;\n in float v_brightness;\n\n uniform vec4 u_fragcolor;\n\n out vec4 fragColor;\n\n // varying float v_selected;\n // varying float v_brightness;\n\n const float EPSILON = 1e-10;\n \n vec3 RGBtoHCV(in vec3 rgb) {\n // RGB [0..1] to Hue-Chroma-Value [0..1]\n // Based on work by Sam Hocevar and Emil Persson\n vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1., 2. / 3.) : vec4(rgb.gb, 0., -1. / 3.);\n vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx);\n float c = q.x - min(q.w, q.y);\n float h = abs((q.w - q.y) / (6. * c + EPSILON) + q.z);\n return vec3(h, c, q.x);\n }\n\n vec3 RGBtoHSL(in vec3 rgb) {\n // RGB [0..1] to Hue-Saturation-Lightness [0..1]\n vec3 hcv = RGBtoHCV(rgb);\n //vec3 hcv = vec3(1., 1., 1.);\n float z = hcv.z - hcv.y * 0.5;\n float s = hcv.y / (1. - abs(z * 2. - 1.) + EPSILON);\n return vec3(hcv.x, s, z);\n }\n\n vec3 HUEtoRGB(in float hue){\n // Hue [0..1] to RGB [0..1]\n // See http://www.chilliant.com/rgb2hsv.html\n vec3 rgb = abs(hue * 6. - vec3(3, 2, 4)) * vec3(1, -1, -1) + vec3(-1, 2, 2);\n return clamp(rgb, 0., 1.);\n }\n\n vec3 HSLtoRGB(in vec3 hsl) {\n // Hue-Saturation-Lightness [0..1] to RGB [0..1]\n vec3 rgb = HUEtoRGB(hsl.x);\n float c = (1. - abs(2. * hsl.z - 1.)) * hsl.y;\n return (rgb - 0.5) * c + hsl.z;\n }\n \n void main() {\n\n float r = 0.0, delta = 0.0, alpha = 1.0;\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n r = dot(cxy, cxy);\n if (r > 1.0) {\n discard;\n }\n\n #ifdef GL_OES_standard_derivatives\n delta = fwidth(r);\n alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n #endif\n\n if (v_selected == 1.0){\n // gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0) * (alpha);\n fragColor = vec4(1.0, 0.0, 0.0, 1.0) * (alpha);\n } else if (v_selected == 2.0){\n // gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0) * (alpha);\n fragColor = vec4(1.0, 1.0, 0.0, 1.0) * (alpha);\n }else{\n if (r < 0.4) {\n discard;\n }\n if ( v_brightness >= -1.0 && v_brightness <= 1.0) {\n // Round-trip RGB->HSL->RGB with time-dependent lightness\n vec3 hsl = RGBtoHSL(vec3(u_fragcolor));\n //hsl.z = pow(hsl.z, sin(iTime) + 1.5);\n // hsl.z = pow(hsl.z, v_brightness + 1.5);\n hsl.z = pow(hsl.z, v_brightness + 1.5);\n vec3 hslcolor = HSLtoRGB(hsl);\n // gl_FragColor = vec4(hslcolor, u_fragcolor[3]) * (alpha);\n fragColor = vec4(hslcolor, u_fragcolor[3]) * (alpha);\n } else {\n // gl_FragColor = u_fragcolor * (alpha);\n fragColor = u_fragcolor * (alpha);\n }\n }\n }`;\n }\n\n static footprintVS(): GLSLSource {\n return `#version 300 es\n precision highp float;\n\n layout(location = 0) in vec4 aCatPosition;\n\n uniform float u_pointsize;\n uniform mat4 uMVMatrix;\n uniform mat4 uPMatrix;\n\n void main() {\n gl_Position = uPMatrix * uMVMatrix * aCatPosition;\n gl_PointSize = u_pointsize; // Works in WebGL2\n }`;\n \n }\n\n static footprintFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n\n uniform vec4 u_fragcolor;\n out vec4 fragColor;\n\n void main() {\n fragColor = u_fragcolor;\n }`;\n \n }\n\n static hipsVS(): GLSLSource {\n return `#version 300 es\n in vec3 aVertexPosition;\n in vec2 aTextureCoord;\n\n uniform mat4 uMMatrix;\n uniform mat4 uVMatrix;\n uniform mat4 uPMatrix;\n\n out vec2 vTextureCoord;\n\n void main() {\n gl_Position = uPMatrix * uVMatrix * uMMatrix * vec4(aVertexPosition, 1.0);\n vTextureCoord = aTextureCoord;\n }`;\n }\n\n static hipsNativeFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n\n in vec2 vTextureCoord;\n\n uniform sampler2D uSampler0;\n uniform sampler2D uSampler1;\n uniform sampler2D uSampler2;\n uniform sampler2D uSampler3;\n uniform sampler2D uSampler4;\n uniform sampler2D uSampler5;\n uniform sampler2D uSampler6;\n uniform sampler2D uSampler7;\n\n uniform float uFactor0;\n uniform float uFactor1;\n uniform float uFactor2;\n uniform float uFactor3;\n uniform float uFactor4;\n uniform float uFactor5;\n uniform float uFactor6;\n uniform float uFactor7;\n\n out vec4 fragColor;\n\n void main() {\n vec3 finalColor = vec3(0.0);\n\n if (uFactor0 >= 0.0){\n vec4 mycolor;\n #if __VERSION__ > 120\n vec4 color0 = texture(uSampler0, vTextureCoord);\n #else\n vec4 color0 = texture2D(uSampler0, vTextureCoord);\n #endif\n mycolor = color0;\n finalColor += mycolor.rgb * uFactor0;\n } else if (uFactor7 >= 0.0){\n finalColor = vec3(1.0, 0.0, 0.0);\n }\n fragColor = vec4(finalColor, 1.0);\n }`;\n }\n\n static hipsGrayscaleFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n\n in vec2 vTextureCoord;\n\n uniform sampler2D uSampler0;\n uniform sampler2D uSampler1;\n uniform sampler2D uSampler2;\n uniform sampler2D uSampler3;\n uniform sampler2D uSampler4;\n uniform sampler2D uSampler5;\n uniform sampler2D uSampler6;\n uniform sampler2D uSampler7;\n\n uniform float uFactor0;\n uniform float uFactor1;\n uniform float uFactor2;\n uniform float uFactor3;\n uniform float uFactor4;\n uniform float uFactor5;\n uniform float uFactor6;\n uniform float uFactor7;\n\n out vec4 fragColor;\n\n void main() {\n vec3 finalColor = vec3(0.0);\n\n if (uFactor0 >= 0.0){\n #if __VERSION__ > 120\n vec4 color0 = texture(uSampler0, vTextureCoord);\n #else\n vec4 color0 = texture2D(uSampler0, vTextureCoord);\n #endif\n float gray = 0.21 * color0.r + 0.71 * color0.g + 0.07 * color0.b;\n finalColor = color0.rgb * (1.0 - uFactor0) + vec3(gray) * uFactor0;\n }\n if (uFactor1 >= 0.0){\n #if __VERSION__ > 120\n vec4 color1 = texture(uSampler1, vTextureCoord);\n #else\n vec4 color1 = texture2D(uSampler1, vTextureCoord);\n #endif\n finalColor += color1.rgb * uFactor1;\n }\n if (uFactor2 >= 0.0){\n #if __VERSION__ > 120\n vec4 color2 = texture(uSampler2, vTextureCoord);\n #else\n vec4 color2 = texture2D(uSampler2, vTextureCoord);\n #endif\n finalColor += color2.rgb * uFactor2;\n }\n if (uFactor3 >= 0.0){\n #if __VERSION__ > 120\n vec4 color3 = texture(uSampler3, vTextureCoord);\n #else\n vec4 color3 = texture2D(uSampler3, vTextureCoord);\n #endif\n finalColor += color3.rgb * uFactor3;\n }\n if (uFactor4 >= 0.0){\n #if __VERSION__ > 120\n vec4 color4 = texture(uSampler4, vTextureCoord);\n #else\n vec4 color4 = texture2D(uSampler4, vTextureCoord);\n #endif\n finalColor += color4.rgb * uFactor4;\n }\n if (uFactor5 >= 0.0){\n #if __VERSION__ > 120\n vec4 color5 = texture(uSampler5, vTextureCoord);\n #else\n vec4 color5 = texture2D(uSampler5, vTextureCoord);\n #endif\n finalColor += color5.rgb * uFactor5;\n }\n if (uFactor6 >= 0.0){\n #if __VERSION__ > 120\n vec4 color6 = texture(uSampler6, vTextureCoord);\n #else\n vec4 color6 = texture2D(uSampler6, vTextureCoord);\n #endif\n finalColor += color6.rgb * uFactor6;\n }\n if (uFactor7 >= 0.0){\n #if __VERSION__ > 120\n vec4 color7 = texture(uSampler7, vTextureCoord);\n #else\n vec4 color7 = texture2D(uSampler7, vTextureCoord);\n #endif\n finalColor += color7.rgb * uFactor7;\n }\n fragColor = vec4(finalColor, 1.0);\n }`;\n }\n\n static hipsColorMapFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n\n in vec2 vTextureCoord;\n\n // UBO\n layout (std140) uniform colormap {\n float r_palette[256];\n float g_palette[256];\n float b_palette[256];\n };\n\n uniform sampler2D uSampler0;\n uniform float uFactor0;\n\n out vec4 fragColor;\n\n void main() {\n #if __VERSION__ > 120\n vec4 color0 = texture(uSampler0, vTextureCoord);\n #else\n vec4 color0 = texture2D(uSampler0, vTextureCoord);\n #endif\n\n int x = int(color0.r * 255.0);\n float px = r_palette[x] / 256.0;\n\n int y = int(color0.g * 255.0);\n float py = g_palette[y] / 256.0;\n\n int z = int(color0.b * 255.0);\n float pz = b_palette[z] / 256.0;\n\n // uFactor0 reserved for future blending if needed\n fragColor = vec4(px, py, pz, 1.0);\n }`;\n }\n}","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { ColorMaps } from '../model/ColorMaps.js'\n\ntype GL = WebGL2RenderingContext\n\ntype XYZLocations = {\n pMatrix: WebGLUniformLocation | null\n mMatrix: WebGLUniformLocation | null\n vMatrix: WebGLUniformLocation | null\n sampler: WebGLUniformLocation | null\n colorMapIdx: WebGLUniformLocation | null\n vertexPositionAttribute: number\n textureCoordAttribute: number\n}\n\nexport class XYZShaderProgram {\n readonly locations: XYZLocations\n private _webgl: WebGL2RenderingContext\n private _shaderProgram?: WebGLProgram\n private _colorMapBlockIndex: number | null = null\n private _colorMapBuffer: WebGLBuffer | null = null\n private _runtimeColorMap:\n | { r: Float32Array; g: Float32Array; b: Float32Array }\n | undefined\n private _colorMapVariableInfo: Record<\n 'r_palette' | 'g_palette' | 'b_palette',\n { index: number; offset: number }\n > = {\n r_palette: { index: 0, offset: 0 },\n g_palette: { index: 0, offset: 0 },\n b_palette: { index: 0, offset: 0 },\n }\n\n constructor(webgl: WebGL2RenderingContext) {\n this._webgl = webgl\n this.locations = {\n pMatrix: null,\n mMatrix: null,\n vMatrix: null,\n sampler: null,\n colorMapIdx: null,\n vertexPositionAttribute: -1,\n textureCoordAttribute: -1,\n }\n }\n\n get shaderProgram(): WebGLProgram {\n const gl = this._webgl as GL\n if (!this._shaderProgram) {\n const program = gl.createProgram()\n if (!program) {\n throw new Error('Could not create XYZ shader program')\n }\n this._shaderProgram = program\n this.initShaders()\n }\n gl.useProgram(this._shaderProgram)\n return this._shaderProgram\n }\n\n enableProgram(): void {\n this._webgl.useProgram(this.shaderProgram)\n }\n\n setRuntimeColorMap(\n colorMap:\n | { r: Float32Array; g: Float32Array; b: Float32Array }\n | undefined,\n ): void {\n this._runtimeColorMap = colorMap\n }\n\n enableShaders(\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx = 0,\n ): void {\n const gl = this._webgl as GL\n const program = this.shaderProgram\n gl.useProgram(program)\n\n this.locations.pMatrix = gl.getUniformLocation(program, 'uPMatrix')\n this.locations.mMatrix = gl.getUniformLocation(program, 'uMMatrix')\n this.locations.vMatrix = gl.getUniformLocation(program, 'uVMatrix')\n this.locations.sampler = gl.getUniformLocation(program, 'uSampler')\n this.locations.colorMapIdx = gl.getUniformLocation(program, 'cmapIdx')\n this.locations.vertexPositionAttribute = gl.getAttribLocation(program, 'aVertexPosition')\n this.locations.textureCoordAttribute = gl.getAttribLocation(program, 'aTextureCoord')\n\n gl.uniformMatrix4fv(this.locations.pMatrix, false, pMatrix)\n gl.uniformMatrix4fv(this.locations.vMatrix, false, vMatrix)\n gl.uniformMatrix4fv(this.locations.mMatrix, false, mMatrix)\n gl.uniform1i(this.locations.sampler, 0)\n gl.uniform1i(this.locations.colorMapIdx, colorMapIdx)\n\n if (colorMapIdx >= 2) {\n this.uploadColorMap(colorMapIdx)\n }\n }\n\n private initShaders(): void {\n const gl = this._webgl as GL\n const vertexShader = this.compileShader(\n gl.VERTEX_SHADER,\n `#version 300 es\n in vec3 aVertexPosition;\n in vec2 aTextureCoord;\n uniform mat4 uPMatrix;\n uniform mat4 uVMatrix;\n uniform mat4 uMMatrix;\n out vec2 vTextureCoord;\n void main(void) {\n vTextureCoord = aTextureCoord;\n gl_Position = uPMatrix * uVMatrix * uMMatrix * vec4(aVertexPosition, 1.0);\n }`,\n )\n\n const fragmentShader = this.compileShader(\n gl.FRAGMENT_SHADER,\n `#version 300 es\n precision mediump float;\n in vec2 vTextureCoord;\n uniform sampler2D uSampler;\n uniform int cmapIdx;\n\n layout (std140) uniform colormap {\n float r_palette[256];\n float g_palette[256];\n float b_palette[256];\n };\n\n out vec4 outColor;\n\n void main(void) {\n vec4 color = texture(uSampler, vTextureCoord);\n\n if (cmapIdx == 1) {\n float gray = 0.21 * color.r + 0.71 * color.g + 0.07 * color.b;\n outColor = vec4(vec3(gray), color.a);\n return;\n }\n\n if (cmapIdx >= 2) {\n int rIndex = int(clamp(color.r * 255.0, 0.0, 255.0));\n int gIndex = int(clamp(color.g * 255.0, 0.0, 255.0));\n int bIndex = int(clamp(color.b * 255.0, 0.0, 255.0));\n\n outColor = vec4(\n r_palette[rIndex] / 256.0,\n g_palette[gIndex] / 256.0,\n b_palette[bIndex] / 256.0,\n color.a\n );\n return;\n }\n\n outColor = color;\n }`,\n )\n\n gl.attachShader(this._shaderProgram as WebGLProgram, vertexShader)\n gl.attachShader(this._shaderProgram as WebGLProgram, fragmentShader)\n gl.linkProgram(this._shaderProgram as WebGLProgram)\n\n if (!gl.getProgramParameter(this._shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n throw new Error(gl.getProgramInfoLog(this._shaderProgram as WebGLProgram) || 'Could not initialise XYZ shaders')\n }\n\n this.initColorMapBuffer()\n }\n\n private compileShader(type: number, source: string): WebGLShader {\n const gl = this._webgl as GL\n const shader = gl.createShader(type)\n if (!shader) {\n throw new Error('Could not create XYZ shader')\n }\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n throw new Error(gl.getShaderInfoLog(shader) || 'XYZ shader compile error')\n }\n return shader\n }\n\n private initColorMapBuffer(): void {\n const gl = this._webgl as GL\n const program = this._shaderProgram as WebGLProgram\n\n const blockIndex = gl.getUniformBlockIndex(program, 'colormap')\n if (blockIndex === gl.INVALID_INDEX) {\n this._colorMapBlockIndex = null\n return\n }\n\n this._colorMapBlockIndex = blockIndex\n\n const variableNames = ['r_palette', 'g_palette', 'b_palette'] as const\n const variableIndices = gl.getUniformIndices(\n program,\n variableNames as unknown as string[],\n ) as number[]\n const variableOffsets = gl.getActiveUniforms(\n program,\n variableIndices,\n gl.UNIFORM_OFFSET,\n ) as number[]\n\n variableNames.forEach((name, index) => {\n this._colorMapVariableInfo[name] = {\n index: variableIndices[index],\n offset: variableOffsets[index],\n }\n })\n\n this._colorMapBuffer = gl.createBuffer()\n gl.bindBuffer(gl.UNIFORM_BUFFER, this._colorMapBuffer)\n gl.bufferData(gl.UNIFORM_BUFFER, 3 * 4096, gl.STATIC_DRAW)\n gl.bindBuffer(gl.UNIFORM_BUFFER, null)\n gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, this._colorMapBuffer)\n gl.uniformBlockBinding(program, blockIndex, 0)\n }\n\n private uploadColorMap(colorMapIdx: number): void {\n if (!this._colorMapBuffer || this._colorMapBlockIndex === null) {\n return\n }\n\n const colorMap = this.getColorMap(colorMapIdx)\n if (!colorMap) {\n return\n }\n\n const gl = this._webgl as GL\n const program = this.shaderProgram\n gl.uniformBlockBinding(program, this._colorMapBlockIndex, 0)\n gl.bindBuffer(gl.UNIFORM_BUFFER, this._colorMapBuffer)\n\n const info = this._colorMapVariableInfo\n gl.bufferSubData(gl.UNIFORM_BUFFER, info.r_palette.offset, colorMap.r, 0)\n gl.bufferSubData(gl.UNIFORM_BUFFER, info.g_palette.offset, colorMap.g, 0)\n gl.bufferSubData(gl.UNIFORM_BUFFER, info.b_palette.offset, colorMap.b, 0)\n\n gl.bindBuffer(gl.UNIFORM_BUFFER, null)\n }\n\n private getColorMap(\n colorMapIdx: number,\n ): { r: Float32Array; g: Float32Array; b: Float32Array } | undefined {\n switch (colorMapIdx) {\n case 2:\n return ColorMaps.planck\n case 3:\n return ColorMaps.cmb\n case 4:\n return ColorMaps.rainbow\n case 5:\n return ColorMaps.eosb\n case 6:\n return ColorMaps.cubehelix\n case 7:\n return ColorMaps.hot\n case 8:\n return ColorMaps.gray\n default:\n return this._runtimeColorMap\n }\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/**\n * Enum for coordinate types.\n * @author Fabrizio Giordano (Fab77)\n */\nexport enum CoordsType {\n CARTESIAN = \"cartesian\",\n SPHERICAL = \"spherical\",\n ASTRO = \"astro\",\n GEOGRAPHIC = \"geographic\",\n}\n\n// export default CoordsType;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n'use strict';\n/**\n * @author Fabrizio Giordano (Fab)\n */\n\nimport { Point } from '../model/Point.js';\nimport RayPickingUtils from './RayPickingUtils.js';\nimport { CoordsType } from './CoordsType.js';\nimport { mat4, ReadonlyMat4 } from 'gl-matrix';\n// import computePerspectiveMatrixSingleton from './ComputePerspectiveMatrix.js';\nimport Camera from '../Camera.js';\nimport { AbstractSkyEntity } from '../model/AbstractSkyEntity.js';\nimport { HealpixGrid } from '../model/grid/HealpixGrid.js';\n\nexport class FoVUtils {\n /**\n * Return the minimum FoV value between `_fovY_deg` and `_fovX_deg`.\n * (Kept here for parity; this class doesn’t maintain those fields.)\n */\n getMinFoV(this: { _fovY_deg: number; _fovX_deg: number }): number {\n return this._fovY_deg <= this._fovX_deg ? this._fovY_deg : this._fovX_deg;\n }\n\n /**\n * Compute the FoV polygon as a list of Points (clockwise).\n * Uses ray picking + frustum planes against a unit sphere.\n */\n static getFoVPolygon(\n // _pMatrix: ReadonlyMat4 | null,\n camera: Camera,\n canvas: HTMLCanvasElement,\n model: AbstractSkyEntity,\n healpixGrid: HealpixGrid,\n webgl: WebGL2RenderingContext,\n pMatrix: ReadonlyMat4\n ): Point[] {\n // const pMatrix = (computePerspectiveMatrixSingleton.pMatrix ??\n // _pMatrix) as ReadonlyMat4;\n // const pMatrix = computePerspectiveMatrixSingleton.pMatrix as ReadonlyMat4 \n const vMatrix = camera.getCameraMatrix();\n const mMatrix = model.getModelMatrix();\n const canvasWidth = canvas.clientWidth;\n const canvasHeight = canvas.clientHeight;\n\n let points: Point[] = [];\n\n // First check: does the sphere cover the whole screen?\n const intersectionWithModel = RayPickingUtils.getIntersectionPointWithSingleModel(0, 0, healpixGrid, webgl, camera, pMatrix);\n\n if (intersectionWithModel.length > 0) {\n // Fully covered → grab corners + midpoints (CASE C)\n const cornersPoints = FoVUtils.getScreenCornersIntersection(\n pMatrix,\n camera,\n canvas, healpixGrid, webgl\n );\n points = cornersPoints;\n } else {\n // Partial coverage: build frustum planes\n let M = mat4.create();\n M = mat4.multiply(M, vMatrix, mMatrix);\n M = mat4.multiply(M, pMatrix, M);\n\n const topPlane = [M[3] - M[1], M[7] - M[5], M[11] - M[9], M[15] - M[13]]; // m41-m21, ...\n const bottomPlane = [M[3] + M[1], M[7] + M[5], M[11] + M[9], M[15] + M[13]];\n const rightPlane = [M[3] - M[0], M[7] - M[4], M[11] - M[8], M[15] - M[12]];\n const leftPlane = [M[3] + M[0], M[7] + M[4], M[11] + M[8], M[15] + M[12]];\n\n const intersectionTopMiddle = RayPickingUtils.getIntersectionPointWithSingleModel(canvasWidth / 2, 0, healpixGrid, webgl, camera, pMatrix);\n const intersectionRightMiddle = RayPickingUtils.getIntersectionPointWithSingleModel(canvasWidth, canvasHeight / 2, healpixGrid, webgl, camera, pMatrix);\n\n // CASE A: zoomed out, hemisphere fully visible\n if (\n intersectionTopMiddle.length === 0 &&\n intersectionRightMiddle.length === 0\n ) {\n const topPoints = FoVUtils.getNearestSpherePoint(topPlane);\n const bottomPoints = FoVUtils.getNearestSpherePoint(bottomPlane);\n const leftPoints = FoVUtils.getNearestSpherePoint(leftPlane);\n const rightPoints = FoVUtils.getNearestSpherePoint(rightPlane);\n\n const middleLeftTop = FoVUtils.computeMiddlePoint(leftPoints[0], topPoints[0])[0];\n const middleTopRight = FoVUtils.computeMiddlePoint(topPoints[0], rightPoints[0])[0];\n const middleRightBottom = FoVUtils.computeMiddlePoint(rightPoints[0], bottomPoints[0])[0];\n const middleBottomLeft = FoVUtils.computeMiddlePoint(bottomPoints[0], leftPoints[0])[0];\n\n points.push(\n topPoints[0],\n middleTopRight,\n rightPoints[0],\n middleRightBottom,\n bottomPoints[0],\n middleBottomLeft,\n leftPoints[0],\n middleLeftTop\n );\n }\n // CASE E: no intersection on top/bottom planes\n else if (intersectionTopMiddle.length === 0) {\n const topPoints = FoVUtils.getNearestSpherePoint(topPlane);\n const bottomPoints = FoVUtils.getNearestSpherePoint(bottomPlane);\n const leftPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n leftPlane,\n bottomPlane,\n topPlane\n );\n const rightPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n rightPlane,\n topPlane,\n bottomPlane\n );\n\n const middleLeftTop = FoVUtils.computeMiddlePoint(leftPoints[1], topPoints[0])[0];\n const middleTopRight = FoVUtils.computeMiddlePoint(topPoints[0], rightPoints[0])[0];\n const middleRightBottom = FoVUtils.computeMiddlePoint(rightPoints[1], bottomPoints[0])[0];\n const middleBottomLeft = FoVUtils.computeMiddlePoint(bottomPoints[0], leftPoints[0])[0];\n\n points.push(\n topPoints[0],\n middleTopRight,\n rightPoints[0],\n rightPoints[1],\n middleRightBottom,\n bottomPoints[0],\n middleBottomLeft,\n leftPoints[0],\n leftPoints[1],\n middleLeftTop\n );\n }\n // CASE D: no intersection on right/left planes\n else if (intersectionRightMiddle.length === 0) {\n const topPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n topPlane,\n leftPlane,\n rightPlane\n );\n const bottomPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n bottomPlane,\n rightPlane,\n leftPlane\n );\n const leftPoints = FoVUtils.getNearestSpherePoint(leftPlane);\n const rightPoints = FoVUtils.getNearestSpherePoint(rightPlane);\n\n const middleLeftTop = FoVUtils.computeMiddlePoint(leftPoints[0], topPoints[0])[0];\n const middleTopRight = FoVUtils.computeMiddlePoint(topPoints[1], rightPoints[0])[0];\n const middleRightBottom = FoVUtils.computeMiddlePoint(rightPoints[0], bottomPoints[0])[0];\n const middleBottomLeft = FoVUtils.computeMiddlePoint(bottomPoints[1], leftPoints[0])[0];\n\n points.push(\n topPoints[0],\n topPoints[1],\n middleTopRight,\n rightPoints[0],\n middleRightBottom,\n bottomPoints[0],\n bottomPoints[1],\n middleBottomLeft,\n leftPoints[0],\n middleLeftTop\n );\n }\n // CASE B: all frustum planes intersect\n else {\n const topPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n topPlane,\n leftPlane,\n rightPlane\n );\n const bottomPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n bottomPlane,\n rightPlane,\n leftPlane\n );\n const leftPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n leftPlane,\n bottomPlane,\n topPlane\n );\n const rightPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n rightPlane,\n topPlane,\n bottomPlane\n );\n\n points.push(\n topPoints[0],\n topPoints[1],\n rightPoints[0],\n rightPoints[1],\n bottomPoints[0],\n bottomPoints[1],\n leftPoints[0],\n leftPoints[1]\n );\n }\n }\n\n return points;\n }\n\n /**\n * Ray pick against 8 key screen positions (corners + midpoints).\n * Returns Points in clockwise order starting from top-left.\n */\n static getScreenCornersIntersection(\n pMatrix: ReadonlyMat4, camera: Camera, canvas: HTMLCanvasElement, healpixGrid: HealpixGrid, webgl: WebGL2RenderingContext): Point[] {\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n\n const topLeft = RayPickingUtils.getIntersectionPointWithSingleModel(0, 0, healpixGrid, webgl, camera, pMatrix);\n const middleTop = RayPickingUtils.getIntersectionPointWithSingleModel(w / 2, 0, healpixGrid, webgl, camera, pMatrix);\n const topRight = RayPickingUtils.getIntersectionPointWithSingleModel(w, 0, healpixGrid, webgl, camera, pMatrix);\n\n const middleRight = RayPickingUtils.getIntersectionPointWithSingleModel(w, h / 2, healpixGrid, webgl, camera, pMatrix);\n\n const bottomRight = RayPickingUtils.getIntersectionPointWithSingleModel(w, h, healpixGrid, webgl, camera, pMatrix);\n const middleBottom = RayPickingUtils.getIntersectionPointWithSingleModel(w / 2, h, healpixGrid, webgl, camera, pMatrix);\n const bottomLeft = RayPickingUtils.getIntersectionPointWithSingleModel(0, h, healpixGrid, webgl, camera, pMatrix);\n\n const middleLeft = RayPickingUtils.getIntersectionPointWithSingleModel(0, h / 2, healpixGrid, webgl, camera, pMatrix);\n\n const out: Point[] = [];\n const pushIf = (ip: number[]) => {\n if (ip.length > 0) {\n out.push(new Point({ x: ip[0], y: ip[1], z: ip[2] }, CoordsType.CARTESIAN));\n }\n };\n\n pushIf(topLeft);\n pushIf(middleTop);\n pushIf(topRight);\n pushIf(middleRight);\n pushIf(bottomRight);\n pushIf(middleBottom);\n pushIf(bottomLeft);\n pushIf(middleLeft);\n\n return out;\n }\n\n /** Returns the center point (in J2000) of the current view as a `Point`. */\n static getCenterJ2000(canvas: HTMLCanvasElement,\n healpixGrid: HealpixGrid,\n webgl: WebGL2RenderingContext,\n camera: Camera, pMatrix: ReadonlyMat4): Point {\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n\n const center = RayPickingUtils.getIntersectionPointWithSingleModel(w / 2, h / 2, healpixGrid, webgl, camera, pMatrix);\n if (center.length <= 0) throw Error(`Central point is null`)\n return new Point(\n { x: center[0], y: center[1], z: center[2] },\n CoordsType.CARTESIAN\n );\n }\n\n /** Middle point on the unit sphere along the arc between two 3D points. */\n static computeMiddlePoint(p1: Point, p2: Point): Point[] {\n // midpoint of segment\n const xm = (p1.x + p2.x) / 2;\n const ym = (p1.y + p2.y) / 2;\n const zm = (p1.z + p2.z) / 2;\n\n // project the midpoint back to unit sphere\n const len = Math.hypot(xm, ym, zm) || 1;\n const x = xm / len;\n const y = ym / len;\n const z = zm / len;\n\n return [new Point({ x, y, z }, CoordsType.CARTESIAN)];\n }\n\n /**\n * Nearest intersection point between a frustum plane and the unit sphere,\n * using the plane normal.\n */\n static getNearestSpherePoint(plane: number[]): Point[] {\n const [A, B, C, D] = plane;\n\n const R = 1;\n const invLen = 1 / Math.sqrt(A * A + B * B + C * C);\n const t1 = R * invLen;\n const t2 = -R * invLen;\n\n const P1: [number, number, number] = [A * t1, B * t1, C * t1];\n const P2: [number, number, number] = [A * t2, B * t2, C * t2];\n\n const den = Math.sqrt(A * A + B * B + C * C) || 1;\n const dist1 = Math.abs(A * P1[0] + B * P1[1] + C * P1[2] + D) / den;\n const dist2 = Math.abs(A * P2[0] + B * P2[1] + C * P2[2] + D) / den;\n\n const P = dist1 <= dist2 ? P1 : P2;\n return [new Point({ x: P[0], y: P[1], z: P[2] }, CoordsType.CARTESIAN)];\n }\n\n /**\n * Intersections between a frustum plane and the unit sphere,\n * computed via two perpendicular planes.\n * Returns two points (first from `plane4Circle_1`, second from `plane4Circle_2`).\n */\n static getFrustumIntersectionWithSphere(\n _M: ReadonlyMat4,\n plane4Sphere: number[],\n plane4Circle_1: number[],\n plane4Circle_2: number[]\n ): Point[] {\n const [A0, B0, C0, D0] = plane4Sphere;\n\n // center of the circle (projection of sphere center onto plane)\n const denom0 = (A0 * A0 + B0 * B0 + C0 * C0) || 1;\n const x_c = -(A0 * D0) / denom0;\n const y_c = -(B0 * D0) / denom0;\n const z_c = -(C0 * D0) / denom0;\n\n const d = Math.abs(D0) / Math.sqrt(denom0); // distance from sphere center (0,0,0)\n const R = 1;\n\n const out: Point[] = [];\n\n if (R > d) {\n const r = Math.sqrt(R * R - d * d);\n\n const pick = (plane: number[]): [number, number, number] => {\n const [A, B, C, D] = plane;\n const invLen = 1 / Math.sqrt(A * A + B * B + C * C);\n const t1 = r * invLen;\n const t2 = -r * invLen;\n\n const P1: [number, number, number] = [x_c + A * t1, y_c + B * t1, z_c + C * t1];\n const P2: [number, number, number] = [x_c + A * t2, y_c + B * t2, z_c + C * t2];\n\n const den = Math.sqrt(A * A + B * B + C * C) || 1;\n const dist1 = Math.abs(A * P1[0] + B * P1[1] + C * P1[2] + D) / den;\n const dist2 = Math.abs(A * P2[0] + B * P2[1] + C * P2[2] + D) / den;\n\n return dist1 <= dist2 ? P1 : P2;\n };\n\n const P_intersection_1 = pick(plane4Circle_1);\n const P_intersection_2 = pick(plane4Circle_2);\n\n out.push(\n new Point({ x: P_intersection_1[0], y: P_intersection_1[1], z: P_intersection_1[2] }, CoordsType.CARTESIAN),\n new Point({ x: P_intersection_2[0], y: P_intersection_2[1], z: P_intersection_2[2] }, CoordsType.CARTESIAN)\n );\n } else if (R === d) {\n // Tangent: both intersections collapse to the circle center on the plane\n out.push(\n new Point({ x: x_c, y: y_c, z: z_c }, CoordsType.CARTESIAN),\n new Point({ x: x_c, y: y_c, z: z_c }, CoordsType.CARTESIAN)\n );\n } else {\n // No intersection; return empty to avoid pushing undefined values\n // console.log('Frustum plane not intersecting the sphere');\n }\n\n return out;\n }\n\n /** Build ADQL string from an array of Points (ra,dec pairs). */\n static getAstroFoVPolygon(points: Point[]): string {\n return points.map(p => p.toADQL()).join(',');\n }\n}","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { CoordsType } from './CoordsType.js';\nimport { Point } from '../model/Point.js';\n\nexport type GeoJSONProperties = Record<string, unknown>;\n\nexport interface ParsedGeoJSONFeature {\n id?: string | number;\n geometryType: 'Polygon' | 'MultiPolygon';\n properties: GeoJSONProperties;\n polygons: Point[][];\n}\n\ntype GeoJSONPosition = [number, number, ...number[]];\n\ninterface GeoJSONGeometry {\n type: string;\n coordinates?: unknown;\n geometries?: GeoJSONGeometry[];\n}\n\ninterface GeoJSONFeature {\n type: 'Feature';\n id?: string | number;\n properties?: GeoJSONProperties | null;\n geometry?: GeoJSONGeometry | null;\n}\n\nclass GeoJSONParser {\n static isGeoJSON(value: unknown): boolean {\n if (!value || typeof value !== 'object') return false;\n const type = (value as { type?: unknown }).type;\n return type === 'FeatureCollection'\n || type === 'Feature'\n || type === 'Polygon'\n || type === 'MultiPolygon'\n || type === 'GeometryCollection';\n }\n\n static parseGeoJSON(value: unknown): ParsedGeoJSONFeature[] {\n if (!value || typeof value !== 'object') {\n throw new Error('GeoJSON root must be an object');\n }\n\n const obj = value as { type?: string; features?: unknown[] };\n if (obj.type === 'FeatureCollection') {\n if (!Array.isArray(obj.features)) throw new Error('GeoJSON FeatureCollection has no features array');\n return obj.features.flatMap((feature) => GeoJSONParser.parseFeature(feature));\n }\n\n if (obj.type === 'Feature') return GeoJSONParser.parseFeature(obj);\n\n if (obj.type === 'Polygon' || obj.type === 'MultiPolygon' || obj.type === 'GeometryCollection') {\n return GeoJSONParser.parseGeometry(obj as GeoJSONGeometry, {});\n }\n\n throw new Error(`Unsupported GeoJSON type: ${obj.type ?? 'unknown'}`);\n }\n\n private static parseFeature(value: unknown): ParsedGeoJSONFeature[] {\n if (!value || typeof value !== 'object') throw new Error('GeoJSON feature must be an object');\n const feature = value as GeoJSONFeature;\n if (feature.type !== 'Feature') throw new Error('GeoJSON feature has invalid type');\n if (!feature.geometry) return [];\n\n return GeoJSONParser.parseGeometry(\n feature.geometry,\n feature.properties ?? {},\n feature.id,\n );\n }\n\n private static parseGeometry(\n geometry: GeoJSONGeometry,\n properties: GeoJSONProperties,\n id?: string | number,\n ): ParsedGeoJSONFeature[] {\n if (geometry.type === 'Polygon') {\n return [{\n id,\n geometryType: 'Polygon',\n properties,\n polygons: GeoJSONParser.parsePolygonCoordinates(geometry.coordinates),\n }];\n }\n\n if (geometry.type === 'MultiPolygon') {\n return [{\n id,\n geometryType: 'MultiPolygon',\n properties,\n polygons: GeoJSONParser.parseMultiPolygonCoordinates(geometry.coordinates),\n }];\n }\n\n if (geometry.type === 'GeometryCollection') {\n if (!Array.isArray(geometry.geometries)) return [];\n return geometry.geometries.flatMap((child) => GeoJSONParser.parseGeometry(child, properties, id));\n }\n\n return [];\n }\n\n private static parseMultiPolygonCoordinates(coordinates: unknown): Point[][] {\n if (!Array.isArray(coordinates)) throw new Error('GeoJSON MultiPolygon coordinates must be an array');\n return coordinates.flatMap((polygonCoordinates) => GeoJSONParser.parsePolygonCoordinates(polygonCoordinates));\n }\n\n private static parsePolygonCoordinates(coordinates: unknown): Point[][] {\n if (!Array.isArray(coordinates)) throw new Error('GeoJSON Polygon coordinates must be an array');\n return coordinates\n .map((ring) => GeoJSONParser.parseLinearRing(ring))\n .filter((ring) => ring.length >= 3);\n }\n\n private static parseLinearRing(ring: unknown): Point[] {\n if (!Array.isArray(ring)) throw new Error('GeoJSON linear ring must be an array');\n\n const points = ring.map((position) => GeoJSONParser.parsePosition(position));\n if (points.length > 1) {\n const first = points[0];\n const last = points[points.length - 1];\n if (first.lonDeg === last.lonDeg && first.latDeg === last.latDeg) points.pop();\n }\n\n return points;\n }\n\n private static parsePosition(position: unknown): Point {\n if (!Array.isArray(position) || position.length < 2) {\n throw new Error('GeoJSON position must be [longitude, latitude]');\n }\n\n const [lonDeg, latDeg] = position as GeoJSONPosition;\n if (!Number.isFinite(lonDeg) || !Number.isFinite(latDeg)) {\n throw new Error('GeoJSON position contains non-finite longitude/latitude');\n }\n\n return new Point({ lonDeg, latDeg }, CoordsType.GEOGRAPHIC);\n }\n}\n\nexport default GeoJSONParser;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport {Point} from \"../model/Point.js\";\nimport Point2D from \"../model/Point2D.js\";\nimport {CoordsType} from \"./CoordsType.js\";\n\ntype ProjectionFlag = 0 | 1 | 2;\n\nexport interface SelectionObj {\n poly4selection: Point2D[][];\n flag: ProjectionFlag;\n maxx: number;\n maxy: number;\n minx: number;\n miny: number;\n}\n\nclass GeomUtils {\n // Orthodromic (great-circle) distance in radians\n static orthodromicDistance(p1: Point, p2: Point): number {\n return Math.acos(\n Math.sin(p1.decDeg * Math.PI / 180) * Math.sin(p2.decDeg * Math.PI / 180) +\n Math.cos(p1.decDeg * Math.PI / 180) * Math.cos(p2.decDeg * Math.PI / 180) *\n Math.cos((p2.raDeg - p1.raDeg) * Math.PI / 180)\n );\n }\n\n /**\n * Decide the 2D projection strategy and pre-project polygons for point-in-polygon tests.\n * Returns the projected polygons + bbox + a flag describing the projection used:\n * 0 → all points in same hemisphere with |Dec| > 10 → stereographic-like projection using x,y from 3D\n * 1 → all points in equatorial belt (|Dec| < 10) → use RA/Dec directly\n * 2 → equatorial belt and polygon crosses RA=0 → shift RA>180 by -360\n */\n static computeSelectionObject(polygons: Point[][]): SelectionObj {\n let poly4selection: Point2D[][] = [];\n let flag: ProjectionFlag = 0;\n\n let maxx: number | undefined;\n let maxy: number | undefined;\n let minx: number | undefined;\n let miny: number | undefined;\n\n const DEC_THRESHOLD = 10;\n // 1 → northern hemisphere (Dec > +10), -1 → southern (Dec < -10), 0 → equatorial belt\n let hemisphere = 0;\n\n if (polygons[0][0].decDeg >= DEC_THRESHOLD) {\n hemisphere = 1;\n } else if (polygons[0][0].decDeg <= -DEC_THRESHOLD) {\n hemisphere = -1;\n } else {\n flag = 1;\n }\n\n // Case flag = 0 → stereographic-like projection using x,y,z from 3D point\n if (flag === 0) {\n const first = GeomUtils.projectIn2D(polygons[0][0]);\n maxx = minx = first.x;\n maxy = miny = first.y;\n\n for (const currpoly of polygons) {\n const selpoly: Point2D[] = [];\n for (const point of currpoly) {\n // If a point violates the hemisphere constraint, fall back to belt logic\n if (\n (point.decDeg > hemisphere * DEC_THRESHOLD && hemisphere === -1) ||\n (point.decDeg < hemisphere * DEC_THRESHOLD && hemisphere === 1)\n ) {\n flag = 1;\n poly4selection = [];\n break;\n }\n const p = GeomUtils.projectIn2D(point);\n selpoly.push(p);\n\n if (p.x > (maxx as number)) maxx = p.x;\n if (p.y > (maxy as number)) maxy = p.y;\n if (p.x < (minx as number)) minx = p.x;\n if (p.y < (miny as number)) miny = p.y;\n }\n poly4selection.push(selpoly);\n }\n }\n\n if (flag === 0) {\n return {\n poly4selection,\n flag,\n maxx: maxx as number,\n maxy: maxy as number,\n minx: minx as number,\n miny: miny as number,\n };\n }\n\n // Case flag = 1 or 2 → work directly in (RA,Dec)\n const RA_THRESHOLD = 180;\n let belowThreshold = polygons[0][0].raDeg < RA_THRESHOLD;\n\n maxx = minx = polygons[0][0].raDeg;\n maxy = miny = polygons[0][0].decDeg;\n\n for (const currpoly of polygons) {\n const selpoly: Point2D[] = [];\n for (const point of currpoly) {\n const p = new Point2D(point.raDeg, point.decDeg);\n selpoly.push(p);\n\n if (point.raDeg > maxx) maxx = point.raDeg;\n if (point.decDeg > maxy) maxy = point.decDeg;\n if (point.raDeg < minx) minx = point.raDeg;\n if (point.decDeg < miny) miny = point.decDeg;\n\n // Detect crossing of RA=0 meridian\n if (\n (point.raDeg >= RA_THRESHOLD && belowThreshold) ||\n (point.raDeg <= RA_THRESHOLD && !belowThreshold)\n ) {\n flag = 2;\n poly4selection = [];\n break;\n }\n }\n poly4selection.push(selpoly);\n }\n\n if (flag === 1) {\n return {\n poly4selection,\n flag,\n maxx,\n maxy,\n minx,\n miny,\n };\n }\n\n // Case flag = 2 → shift RA>180 by -360 to unwrap around RA=0\n let startRA = polygons[0][0].raDeg;\n maxx = startRA >= RA_THRESHOLD ? startRA - 360 : startRA;\n maxy = polygons[0][0].decDeg;\n minx = maxx;\n miny = maxy;\n\n for (const currpoly of polygons) {\n const selpoly: Point2D[] = [];\n for (const point of currpoly) {\n const curra = point.raDeg >= RA_THRESHOLD ? point.raDeg - 360 : point.raDeg;\n\n if (curra > maxx) maxx = curra;\n if (point.decDeg > maxy) maxy = point.decDeg;\n if (curra < minx) minx = curra;\n if (point.decDeg < miny) miny = point.decDeg;\n\n selpoly.push(new Point2D(curra, point.decDeg));\n }\n poly4selection.push(selpoly);\n }\n\n return {\n poly4selection,\n flag,\n maxx,\n maxy,\n minx,\n miny,\n };\n }\n\n /** Stereographic projection from 3D point on unit sphere onto plane */\n static stereographic(point: Point): { x: number; y: number } {\n const x = Number(point.xyz[0]);\n const y = Number(point.xyz[1]);\n const z = Number(point.xyz[2]);\n return {\n x: (2 * x) / (1 - z),\n y: (2 * y) / (1 - z),\n };\n }\n\n static projectIn2D(point: Point): Point2D {\n const p = GeomUtils.stereographic(point);\n return new Point2D(p.x, p.y);\n }\n\n /**\n * Robust point-in-polygon (ray casting) using the precomputed selection object.\n * Works with any of the three flags (0,1,2).\n */\n static checkPointInsidePolygon5(selectionObj: SelectionObj, point: Point): boolean {\n let p0: Point2D;\n\n if (selectionObj.flag === 0) {\n p0 = GeomUtils.projectIn2D(point);\n } else if (selectionObj.flag === 1) {\n p0 = new Point2D(point.raDeg, point.decDeg);\n } else {\n const RA_THRESHOLD = 180;\n const raShifted = point.raDeg >= RA_THRESHOLD ? point.raDeg - 360 : point.raDeg;\n p0 = new Point2D(raShifted, point.decDeg);\n }\n\n const p1 = new Point2D(p0.x, p0.y + 2 * Math.abs(selectionObj.maxy - selectionObj.miny));\n\n // quick reject by bbox\n if (\n p0.x > selectionObj.maxx ||\n p0.x < selectionObj.minx ||\n p0.y > selectionObj.maxy ||\n p0.y < selectionObj.miny\n ) {\n return false;\n }\n\n // Ray casting against each sub-polygon\n for (const currpoly of selectionObj.poly4selection) {\n let intersections = 0;\n\n for (let i = 0; i < currpoly.length - 1; i++) {\n const p2 = currpoly[i];\n const p3 = currpoly[i + 1];\n\n const denominator = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y);\n const numerator01 = (p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x);\n const numerator23 = (p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x);\n\n if (denominator !== 0) {\n const lamda01 = numerator01 / denominator;\n const lambda23 = numerator23 / denominator;\n if (lamda01 >= 0 && lamda01 <= 1 && lambda23 >= 0 && lambda23 <= 1) {\n intersections++;\n }\n }\n }\n\n // close the polygon: last with first\n {\n const p2 = currpoly[currpoly.length - 1];\n const p3 = currpoly[0];\n\n const denominator = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y);\n const numerator01 = (p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x);\n const numerator23 = (p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x);\n\n if (denominator !== 0) {\n const lamda01 = numerator01 / denominator;\n const lambda23 = numerator23 / denominator;\n if (lamda01 >= 0 && lamda01 <= 1 && lambda23 >= 0 && lambda23 <= 1) {\n intersections++;\n }\n }\n }\n\n if (intersections % 2 === 1) {\n return true; // inside this subpolygon\n }\n }\n\n return false;\n }\n\n // Legacy version kept for reference; now typed and using getters\n static checkPointInsidePolygon4(polygons: Point[][], point: Point): boolean {\n const p0 = GeomUtils.projectIn2D(point);\n\n let maxdist = point.raDeg + 15;\n if (maxdist > 360) maxdist = point.raDeg - 15;\n\n const p1point = new Point({ raDeg: maxdist, decDeg: point.decDeg }, CoordsType.ASTRO);\n const p1 = GeomUtils.projectIn2D(p1point);\n\n for (const currpoly of polygons) {\n let intersections = 0;\n\n for (let i = 0; i < currpoly.length - 1; i++) {\n const p2 = GeomUtils.projectIn2D(currpoly[i]);\n const p3 = GeomUtils.projectIn2D(currpoly[i + 1]);\n\n const denominator = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y);\n const numerator01 = (p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x);\n const numerator23 = (p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x);\n\n if (denominator !== 0) {\n const lamda01 = numerator01 / denominator;\n const lambda23 = numerator23 / denominator;\n if (lamda01 >= 0 && lamda01 <= 1 && lambda23 >= 0 && lambda23 <= 1) {\n intersections++;\n }\n }\n }\n\n {\n const p2 = GeomUtils.projectIn2D(currpoly[currpoly.length - 1]);\n const p3 = GeomUtils.projectIn2D(currpoly[0]);\n\n const denominator = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y);\n const numerator01 = (p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x);\n const numerator23 = (p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x);\n\n if (denominator !== 0) {\n const lamda01 = numerator01 / denominator;\n const lambda23 = numerator23 / denominator;\n if (lamda01 >= 0 && lamda01 <= 1 && lambda23 >= 0 && lambda23 <= 1) {\n intersections++;\n }\n }\n }\n\n if (intersections % 2 === 1) return true;\n }\n\n return false;\n }\n}\n\nexport default GeomUtils;","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/**\n * @author Fabrizio Giordano (Fab)\n */\nimport { vec3, ReadonlyVec3 } from \"gl-matrix\";\nimport { Vec3, Pointing, Healpix } from \"astrospatial-core/healpix\";\nimport global from \"../Global.js\";\nimport {\n cartesianToSpherical,\n sphericalToAstroDeg,\n raDegToHMS,\n decDegToDMS,\n type SphericalCoords,\n type AstroCoords,\n type HMS,\n type DMS,\n} from \"./Utils.js\";\n\ntype XYZ = [number, number, number];\n\nfunction toVec3(p: ReadonlyVec3 | XYZ): ReadonlyVec3 {\n return Array.isArray(p) ? (vec3.fromValues(p[0], p[1], p[2]) as ReadonlyVec3) : p;\n}\n\nclass MouseHelper {\n private _xyz: XYZ | null = null;\n private _raDecDeg: AstroCoords | null = null;\n private _phiThetaDeg: SphericalCoords | null = null;\n\n raHMS?: HMS;\n decDMS?: DMS;\n\n /**\n * @param in_xyz [x, y, z]\n * @param in_raDecDeg { ra, dec } in degrees (ICRS/J2000)\n * @param in_phiThetaDeg { phi, theta } in degrees (spherical)\n */\n constructor(\n in_xyz?: XYZ | null,\n in_raDecDeg?: AstroCoords | null,\n in_phiThetaDeg?: SphericalCoords | null\n ) {\n if (in_xyz != null) this._xyz = in_xyz;\n if (in_raDecDeg != null) this._raDecDeg = in_raDecDeg;\n if (in_phiThetaDeg != null) this._phiThetaDeg = in_phiThetaDeg;\n\n if (this._raDecDeg) {\n this.raHMS = raDegToHMS(this._raDecDeg.ra);\n this.decDMS = decDegToDMS(this._raDecDeg.dec);\n }\n }\n\n /** (Formerly `computeNpix256`) Uses global.nsideForSelection. */\n computeNpix(): number | null {\n if (!this._xyz) return null;\n const hp: Healpix = global.getHealpix(global.nsideForSelection);\n const v = new Vec3(this._xyz[0], this._xyz[1], this._xyz[2]);\n const ptg = new Pointing(v, false);\n return hp.ang2pix(ptg, false);\n }\n\n /** Update helper state from a world-space 3D point on the unit sphere. */\n update(mousePoint: ReadonlyVec3 | XYZ): void {\n const mp = toVec3(mousePoint);\n const sph = cartesianToSpherical(mp);\n const radec = sphericalToAstroDeg(sph.phi, sph.theta);\n\n this._xyz = [mp[0], mp[1], mp[2]];\n this._phiThetaDeg = sph;\n this._raDecDeg = radec;\n this.raHMS = raDegToHMS(radec.ra);\n this.decDMS = decDegToDMS(radec.dec);\n }\n\n clear(): void {\n this._xyz = null;\n this._raDecDeg = null;\n this._phiThetaDeg = null;\n this.raHMS = undefined;\n this.decDMS = undefined;\n }\n\n // --- getters ---\n get xyz(): XYZ | null {\n return this._xyz;\n }\n get x(): number | null {\n return this._xyz ? this._xyz[0] : null;\n }\n get y(): number | null {\n return this._xyz ? this._xyz[1] : null;\n }\n get z(): number | null {\n return this._xyz ? this._xyz[2] : null;\n }\n\n get ra(): number | null {\n return this._raDecDeg ? this._raDecDeg.ra : null;\n }\n get dec(): number | null {\n return this._raDecDeg ? this._raDecDeg.dec : null;\n }\n\n get phi(): number | null {\n return this._phiThetaDeg ? this._phiThetaDeg.phi : null;\n }\n get theta(): number | null {\n return this._phiThetaDeg ? this._phiThetaDeg.theta : null;\n }\n\n get raDecDeg(): AstroCoords | null {\n return this._raDecDeg;\n }\n get phiThetaDeg(): SphericalCoords | null {\n return this._phiThetaDeg;\n }\n}\n\nexport default MouseHelper;","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\nimport { mat4, ReadonlyMat4 } from \"gl-matrix\";\nimport Camera from \"../Camera.js\";\nimport { bootSetup } from \"../Config.js\";\n\nexport class PerspectiveMatrixManager {\n private _pMatrix: ReadonlyMat4\n private _aspectRatio = 1;\n\n constructor (canvas: HTMLCanvasElement,\n camera: Camera,\n fovDeg: number,\n nearPlane: number = 0.1,\n insideSphere: boolean){\n this._pMatrix = this.computePerspectiveMatrix(canvas, camera, fovDeg, nearPlane, insideSphere)\n }\n\n get pMatrix(): ReadonlyMat4 {\n return this._pMatrix;\n }\n set pMatrix(pMatrix:Float32Array) {\n this._pMatrix = pMatrix;\n }\n\n computePerspectiveMatrix(\n canvas: HTMLCanvasElement,\n camera: Camera,\n fovDeg: number,\n nearPlane: number = 0.1,\n insideSphere: boolean\n ): mat4 {\n this._aspectRatio = canvas.width / canvas.height;\n\n const p = mat4.create();\n let farPlane: number;\n\n if (insideSphere) {\n // Inside the sphere: cap slightly beyond radius\n farPlane = 1.1;\n } else {\n const camMat = camera.getCameraMatrix() as any;\n const distCamera = -Number(camMat[14]); // camera z translation\n const r = 1; // HiPS sphere radius (inject real value if available)\n\n // Guard against negative due to rounding/logic\n const c2 = Math.sqrt(Math.max(distCamera ** 2 - r ** 2, 0));\n const beta = Math.atan2(c2, r);\n const cf = c2 * Math.sin(beta);\n farPlane = cf > 0 ? cf : r;\n }\n\n const effectiveFovDeg = insideSphere ? bootSetup.inside_camera_fov_deg : fovDeg;\n const effectiveNearPlane = insideSphere ? Math.max(nearPlane, 0.001) : nearPlane;\n\n mat4.perspective(\n p,\n (effectiveFovDeg * Math.PI) / 180,\n this._aspectRatio,\n effectiveNearPlane,\n farPlane,\n );\n this._pMatrix = p;\n return p;\n }\n}\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/**\n * @author Fabrizio Giordano (Fab)\n */\n\"use strict\";\n\nimport { vec3, mat4, ReadonlyVec3, ReadonlyMat4 } from \"gl-matrix\";\nimport { HealpixGrid } from \"../model/grid/HealpixGrid.js\";\nimport Camera from \"../Camera.js\";\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\n\nclass RayPickingUtils {\n private static lastNearestVisibleObjectIdx = -1;\n\n /** Get index of the last object found under the mouse (if any). */\n static getNearestVisibleObjectIdx(): number {\n return this.lastNearestVisibleObjectIdx;\n }\n\n /**\n * Builds a world-space ray from mouse coords.\n * @param mouseX ClientX (page pixels)\n * @param mouseY ClientY (page pixels)\n * @param pMatrix Projection matrix\n * @returns World-space direction (normalized) as a vec3\n */\n static getRayFromMouse(\n mouseX: number,\n mouseY: number,\n pMatrix: ReadonlyMat4,\n webgl: WebGL2RenderingContext,\n vMatrix: ReadonlyMat4\n ): vec3 {\n const gl = webgl as GL;\n const canvas = gl.canvas as HTMLCanvasElement;\n const rect = canvas.getBoundingClientRect();\n\n // mouseX / mouseY are already local to the canvas (CSS pixels)\n const canvasMX = mouseX;\n const canvasMY = mouseY;\n\n // Use rect.width / rect.height (CSS) for NDC\n const x = (2.0 * canvasMX) / rect.width - 1.0;\n const y = 1.0 - (2.0 * canvasMY) / rect.height;\n const z = -1.0;\n\n const rayClip: [number, number, number, number] = [x, y, z, 1.0];\n\n const pInv = mat4.create();\n mat4.invert(pInv, pMatrix);\n const rayEye4: [number, number, number, number] = [0, 0, 0, 0];\n RayPickingUtils.mat4MultiplyVec4(pInv, rayClip, rayEye4);\n\n // direction in eye space\n const rayEye: [number, number, number, number] = [rayEye4[0], rayEye4[1], -1.0, 0.0];\n\n const vInv = mat4.create();\n mat4.invert(vInv, vMatrix);\n const rayWorld4: [number, number, number, number] = [0, 0, 0, 0];\n RayPickingUtils.mat4MultiplyVec4(vInv, rayEye, rayWorld4);\n\n const rayWorld = vec3.fromValues(rayWorld4[0], rayWorld4[1], rayWorld4[2]);\n vec3.normalize(rayWorld, rayWorld);\n return rayWorld;\n }\n\n /** a*b (4x4 * vec4) → vec4 (in `out`) */\n private static mat4MultiplyVec4(\n a: ReadonlyMat4,\n b: Readonly<[number, number, number, number]>,\n out: [number, number, number, number]\n ): [number, number, number, number] {\n const d = b[0], e = b[1], g = b[2], w = b[3];\n out[0] = a[0] * d + a[4] * e + a[8] * g + a[12] * w;\n out[1] = a[1] * d + a[5] * e + a[9] * g + a[13] * w;\n out[2] = a[2] * d + a[6] * e + a[10] * g + a[14] * w;\n out[3] = a[3] * d + a[7] * e + a[11] * g + a[15] * w;\n return out;\n }\n\n /**\n * Ray–sphere intersection (world space).\n * @returns distance `t` along the ray to the first hit, or `-1` if no hit.\n */\n static raySphere(\n rayOrigWorld: ReadonlyVec3,\n rayDirectionWorld: ReadonlyVec3,\n healpixGridSingleton: HealpixGrid): number {\n\n let intersectionDistance = -1;\n const L = vec3.create();\n vec3.subtract(L, rayOrigWorld, healpixGridSingleton.center);\n\n const b = vec3.dot(rayDirectionWorld, L);\n const c = vec3.dot(L, L) - healpixGridSingleton.radius * healpixGridSingleton.radius;\n\n const disc = b * b - c;\n\n if (disc > 0.0) {\n const s = Math.sqrt(disc);\n const ta = -b + s;\n const tb = -b - s;\n\n if (ta < 0.0 && tb < 0.0) {\n // behind camera\n } else if (tb < 0.0) {\n intersectionDistance = ta;\n } else {\n intersectionDistance = Math.min(ta, tb);\n }\n } else if (disc === 0.0) {\n const t = -b; // tangent\n if (t >= 0.0) {\n intersectionDistance = t;\n }\n }\n\n return intersectionDistance;\n }\n\n /**\n * Compute intersection with a single model (defaults to the Healpix grid).\n * @returns model-space intersection point (vec3) if hit, otherwise empty array; and the picked model.\n */\n static getIntersectionPointWithSingleModel(\n mouseX: number, mouseY: number,\n healpixGrid: HealpixGrid,\n webgl: WebGL2RenderingContext,\n camera: Camera,\n pMatrix: ReadonlyMat4): number[] {\n\n const vMatrix = camera.getCameraMatrix();\n const rayWorld = RayPickingUtils.getRayFromMouse(mouseX, mouseY, pMatrix, webgl, vMatrix);\n\n const t = RayPickingUtils.raySphere(\n camera.getCameraPosition() as ReadonlyVec3,\n rayWorld, healpixGrid\n );\n\n let intersectionModelPoint: number[] = [];\n if (t >= 0) {\n // world intersection\n const worldHit = vec3.create();\n vec3.scale(worldHit, rayWorld, t);\n vec3.add(worldHit, camera.getCameraPosition() as ReadonlyVec3, worldHit);\n\n // world → model\n const worldHit4: [number, number, number, number] = [worldHit[0], worldHit[1], worldHit[2], 1.0];\n const modelHit4: [number, number, number, number] = [0, 0, 0, 0];\n // RayPickingUtils.mat4MultiplyVec4(healpixGridSingleton.getModelMatrixInverse(), worldHit4, modelHit4);\n RayPickingUtils.mat4MultiplyVec4(healpixGrid.getModelMatrixInverse(), worldHit4, modelHit4);\n\n intersectionModelPoint = [modelHit4[0], modelHit4[1], modelHit4[2]];\n }\n\n return intersectionModelPoint\n }\n}\n\nexport default RayPickingUtils;","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/**\n * @author Fabrizio Giordano (Fab77)\n */\nimport {Point} from \"../model/Point.js\";\nimport {CoordsType} from \"./CoordsType.js\";\nimport global from \"../Global.js\";\n\nexport interface STCSParseResult {\n totpoints: number;\n polygons: Point[][];\n}\n\nexport interface STCSParseOptions {\n coordsType?: CoordsType.ASTRO | CoordsType.GEOGRAPHIC;\n}\n\nclass STCSParser {\n static parseSTCS(stcs: string, options: STCSParseOptions = {}): STCSParseResult {\n const stcsParsed = STCSParser.cleanStcs(stcs);\n let totPoints = 0;\n const polygons: Point[][] = [];\n\n if (stcsParsed.includes(\"POLYGON\")) {\n return STCSParser.parsePolygon(stcsParsed, options);\n } else if (stcsParsed.includes(\"CIRCLE\")) {\n return STCSParser.parseCircle(stcsParsed, options);\n } else {\n console.warn(\"STCS not recognised\");\n }\n\n return { totpoints: totPoints, polygons };\n }\n\n static cleanStcs(stcs: string): string {\n // Uppercase once\n let s = stcs.toUpperCase();\n\n // Remove tokens\n s = s\n .replace(/'ICRS'/g, '')\n .replace(/\\bICRS\\b/g, '')\n .replace(/\\bJ2000\\b/g, '')\n .replace(/\\bUNION\\b/g, '')\n .replace(/\\bTOPOCENTER\\b/g, '');\n\n // Remove parentheses\n s = s.replace(/[()]/g, '');\n\n // Collapse extra spaces and trim\n s = s.replace(/ {2,}/g, ' ').trim();\n\n return s;\n }\n\n static parsePolygon(stcs: string, options: STCSParseOptions = {}): STCSParseResult {\n let totPoints = 0;\n const polygons: Point[][] = [];\n\n const MAX_DECIMALS: number = global.MAX_DECIMALS ?? 12;\n const coordsType = options.coordsType ?? CoordsType.ASTRO;\n\n const polys = stcs.split(\"POLYGON \");\n\n for (let i = 1; i < polys.length; i++) {\n const currPoly: Point[] = [];\n const points = polys[i].trim().split(\" \");\n\n // If first point is repeated as last, remove the duplicate\n const p0 = Number(parseFloat(points[0]).toFixed(MAX_DECIMALS));\n const p1 = Number(parseFloat(points[1]).toFixed(MAX_DECIMALS));\n const plast0 = Number(parseFloat(points[points.length - 2]).toFixed(MAX_DECIMALS));\n const plast1 = Number(parseFloat(points[points.length - 1]).toFixed(MAX_DECIMALS));\n\n if (p0 === plast0 && p1 === plast1) {\n points.splice(points.length - 2, 2);\n }\n\n if (points.length > 2) {\n for (let p = 0; p < points.length - 1; p += 2) {\n const xDeg = Number(parseFloat(points[p]).toFixed(MAX_DECIMALS));\n const yDeg = Number(parseFloat(points[p + 1]).toFixed(MAX_DECIMALS));\n\n const point = coordsType === CoordsType.GEOGRAPHIC\n ? new Point({ lonDeg: xDeg, latDeg: yDeg }, CoordsType.GEOGRAPHIC)\n : new Point({ raDeg: xDeg, decDeg: yDeg }, CoordsType.ASTRO);\n currPoly.push(point);\n totPoints += 1;\n }\n polygons.push(currPoly);\n }\n }\n\n return { totpoints: totPoints, polygons };\n }\n\n // Example format: \"CIRCLE ICRS 8.739685 4.38147 0.027833\"\n static parseCircle(stcs: string, options: STCSParseOptions = {}): STCSParseResult {\n let totPoints = 0;\n const polygons: Point[][] = [];\n const coordsType = options.coordsType ?? CoordsType.ASTRO;\n\n const polys = stcs.split(\"CIRCLE \");\n\n for (let i = 1; i < polys.length; i++) {\n const currPoly: Point[] = [];\n const tokens = polys[i].trim().split(\" \");\n\n const ra = Number(tokens[0]);\n const dec = Number(tokens[1]);\n const radius = Number(tokens[2]);\n\n const POINTS_PER_QUADRANT = 6;\n const npoints = POINTS_PER_QUADRANT * 4;\n\n const alpha = (2 * Math.PI) / npoints;\n\n // Generate points around the circle\n for (let p = npoints; p > 0; p--) {\n const curra = radius * Math.cos(p * alpha) + ra;\n const curdec = radius * Math.sin(p * alpha) + dec;\n\n const point = coordsType === CoordsType.GEOGRAPHIC\n ? new Point({ lonDeg: curra, latDeg: curdec }, CoordsType.GEOGRAPHIC)\n : new Point({ raDeg: curra, decDeg: curdec }, CoordsType.ASTRO);\n currPoly.push(point);\n totPoints += 1;\n }\n\n polygons.push(currPoly);\n }\n\n return { totpoints: totPoints, polygons };\n }\n}\n\nexport default STCSParser;\n","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/**\n * @author Fabrizio Giordano (Fab)\n */\nimport { vec3 } from \"gl-matrix\";\n\nexport interface SphericalCoords {\n phi: number; // longitude-like angle in degrees\n theta: number; // colatitude angle in degrees\n}\n\nexport interface AstroCoords {\n ra: number; // right ascension in degrees\n dec: number; // declination in degrees\n}\n\nexport interface HMS {\n h: number;\n m: number;\n s: number;\n}\n\nexport interface DMS {\n d: number;\n m: number;\n s: number;\n}\n\n// results in degrees\nexport function cartesianToSpherical(xyz: vec3): SphericalCoords {\n const dotXYZ = vec3.dot(xyz, xyz);\n const r = Math.sqrt(dotXYZ);\n let theta = Math.acos(xyz[2] / r);\n theta = radToDeg(theta);\n\n // NB: in atan(y/x) is written with params switched atan2(x, y)\n let phi = Math.atan2(xyz[1], xyz[0]);\n phi = radToDeg(phi);\n\n if (phi < 0) {\n phi += 360;\n }\n\n return { phi, theta };\n}\n\nexport function colorHex2RGB(hexColor: string): [number, number, number] {\n const hex1 = hexColor.substring(1, 3);\n const hex2 = hexColor.substring(3, 5);\n const hex3 = hexColor.substring(5, 7);\n\n const dec1 = parseInt(hex1, 16);\n const dec2 = parseInt(hex2, 16);\n const dec3 = parseInt(hex3, 16);\n\n const rgb1 = (dec1 / 255).toFixed(2);\n const rgb2 = (dec2 / 255).toFixed(2);\n const rgb3 = (dec3 / 255).toFixed(2);\n\n return [parseFloat(rgb1), parseFloat(rgb2), parseFloat(rgb3)];\n}\n\nexport function degToRad(degrees: number): number {\n return (degrees / 180) * Math.PI;\n}\n\nexport function radToDeg(radians: number): number {\n return (radians * 180) / Math.PI;\n}\n\nexport function sphericalToAstroDeg(phiDeg: number, thetaDeg: number): AstroCoords {\n let raDeg = phiDeg;\n if (raDeg < 0) {\n raDeg += 360;\n }\n const decDeg = 90 - thetaDeg;\n return { ra: raDeg, dec: decDeg };\n}\n\nexport function sphericalToCartesian(\n phiDeg: number,\n thetaDeg: number,\n r: number = 1\n): [number, number, number] {\n const x = r * Math.sin(degToRad(thetaDeg)) * Math.cos(degToRad(phiDeg));\n const y = r * Math.sin(degToRad(thetaDeg)) * Math.sin(degToRad(phiDeg));\n const z = r * Math.cos(degToRad(thetaDeg));\n return [x, y, z];\n}\n\nexport function astroDegToSpherical(raDeg: number, decDeg: number): SphericalCoords {\n let phiDeg = raDeg;\n if (phiDeg < 0) {\n phiDeg += 360;\n }\n const thetaDeg = 90 - decDeg;\n return { phi: phiDeg, theta: thetaDeg };\n}\n\nexport function raDegToHMS(raDeg: number): HMS {\n const h = Math.floor(raDeg / 15);\n const m = Math.floor((raDeg / 15 - h) * 60);\n const s = (raDeg / 15 - h - m / 60) * 3600;\n return { h, m, s };\n}\n\nexport function decDegToDMS(decDeg: number): DMS {\n let sign = 1;\n if (decDeg < 0) {\n sign = -1;\n }\n\n const decDegAbs = Math.abs(decDeg);\n let d = Math.trunc(decDegAbs);\n const m = Math.trunc((decDegAbs - d) * 60);\n const s = (decDegAbs - d - m / 60) * 3600;\n d = d * sign;\n\n return { d, m, s };\n}","/*\n * AstroViewer\n * Copyright (C) Fabrizio Giordano\n * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-AstroViewer-Commercial\n *\n * AstroViewer is dual-licensed under the GNU Affero General Public License\n * version 3 and a separate commercial license.\n *\n * See LICENSE.md, LICENSE-AGPL.md, and LICENSE-COMMERCIAL.md for details.\n */\n\n/**\n * Ray picking helpers for XYZ/WebMercator maps.\n *\n * Unlike RayPickingUtils, this module has no HEALPix dependency. It intersects\n * screen rays with an XYZ sphere, converts the hit to lon/lat, then maps that\n * position to XYZ z/x/y tile coordinates.\n */\n'use strict';\n\nimport { mat4, ReadonlyMat4, ReadonlyVec3, vec3 } from 'gl-matrix';\n\nimport Camera from '../Camera.js';\nimport { AbstractSkyEntity } from '../model/AbstractSkyEntity.js';\nimport type { XYZTileCoord } from '../model/earth/XYZTypes.js';\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\nexport type XYZLonLat = {\n lonDeg: number;\n latDeg: number;\n};\n\nconst MAX_MERCATOR_LAT = 85.0511287798066;\n\nclass XYZRayPickingUtils {\n static getRayFromMouse(\n mouseX: number,\n mouseY: number,\n pMatrix: ReadonlyMat4,\n webgl: WebGL2RenderingContext,\n vMatrix: ReadonlyMat4,\n ): vec3 {\n const gl = webgl as GL;\n const canvas = gl.canvas as HTMLCanvasElement;\n const rect = canvas.getBoundingClientRect();\n\n const x = (2.0 * mouseX) / rect.width - 1.0;\n const y = 1.0 - (2.0 * mouseY) / rect.height;\n const rayClip: [number, number, number, number] = [x, y, -1.0, 1.0];\n\n const pInv = mat4.create();\n mat4.invert(pInv, pMatrix);\n const rayEye4: [number, number, number, number] = [0, 0, 0, 0];\n XYZRayPickingUtils.mat4MultiplyVec4(pInv, rayClip, rayEye4);\n\n const rayEye: [number, number, number, number] = [rayEye4[0], rayEye4[1], -1.0, 0.0];\n const vInv = mat4.create();\n mat4.invert(vInv, vMatrix);\n const rayWorld4: [number, number, number, number] = [0, 0, 0, 0];\n XYZRayPickingUtils.mat4MultiplyVec4(vInv, rayEye, rayWorld4);\n\n const rayWorld = vec3.fromValues(rayWorld4[0], rayWorld4[1], rayWorld4[2]);\n vec3.normalize(rayWorld, rayWorld);\n return rayWorld;\n }\n\n static raySphere(\n rayOrigWorld: ReadonlyVec3,\n rayDirectionWorld: ReadonlyVec3,\n sphere: Pick<AbstractSkyEntity, 'center' | 'radius'>,\n ): number {\n let intersectionDistance = -1;\n const L = vec3.create();\n vec3.subtract(L, rayOrigWorld, sphere.center);\n\n const b = vec3.dot(rayDirectionWorld, L);\n const c = vec3.dot(L, L) - sphere.radius * sphere.radius;\n const disc = b * b - c;\n\n if (disc > 0.0) {\n const s = Math.sqrt(disc);\n const ta = -b + s;\n const tb = -b - s;\n\n if (ta >= 0.0 || tb >= 0.0) {\n intersectionDistance = tb < 0.0 ? ta : Math.min(ta, tb);\n }\n } else if (disc === 0.0) {\n const t = -b;\n if (t >= 0.0) {\n intersectionDistance = t;\n }\n }\n\n return intersectionDistance;\n }\n\n static getIntersectionPointWithModel(\n mouseX: number,\n mouseY: number,\n xyzModel: AbstractSkyEntity,\n webgl: WebGL2RenderingContext,\n camera: Camera,\n pMatrix: ReadonlyMat4,\n ): [number, number, number] | null {\n const vMatrix = camera.getCameraMatrix();\n const rayWorld = XYZRayPickingUtils.getRayFromMouse(mouseX, mouseY, pMatrix, webgl, vMatrix);\n const t = XYZRayPickingUtils.raySphere(\n camera.getCameraPosition() as ReadonlyVec3,\n rayWorld,\n xyzModel,\n );\n\n if (t < 0) {\n return null;\n }\n\n const worldHit = vec3.create();\n vec3.scale(worldHit, rayWorld, t);\n vec3.add(worldHit, camera.getCameraPosition() as ReadonlyVec3, worldHit);\n\n const worldHit4: [number, number, number, number] = [worldHit[0], worldHit[1], worldHit[2], 1.0];\n const modelHit4: [number, number, number, number] = [0, 0, 0, 0];\n XYZRayPickingUtils.mat4MultiplyVec4(xyzModel.getModelMatrixInverse(), worldHit4, modelHit4);\n\n return [modelHit4[0], modelHit4[1], modelHit4[2]];\n }\n\n static getLonLatFromMouse(\n mouseX: number,\n mouseY: number,\n xyzModel: AbstractSkyEntity,\n webgl: WebGL2RenderingContext,\n camera: Camera,\n pMatrix: ReadonlyMat4,\n ): XYZLonLat | null {\n const hit = XYZRayPickingUtils.getIntersectionPointWithModel(\n mouseX,\n mouseY,\n xyzModel,\n webgl,\n camera,\n pMatrix,\n );\n\n return hit ? XYZRayPickingUtils.modelPointToLonLat(hit) : null;\n }\n\n static getTileFromMouse(\n mouseX: number,\n mouseY: number,\n z: number,\n xyzModel: AbstractSkyEntity,\n webgl: WebGL2RenderingContext,\n camera: Camera,\n pMatrix: ReadonlyMat4,\n ): XYZTileCoord | null {\n const lonLat = XYZRayPickingUtils.getLonLatFromMouse(\n mouseX,\n mouseY,\n xyzModel,\n webgl,\n camera,\n pMatrix,\n );\n\n if (!lonLat || !XYZRayPickingUtils.isMercatorLatitude(lonLat.latDeg)) {\n return null;\n }\n\n return XYZRayPickingUtils.lonLatToTile(lonLat.lonDeg, lonLat.latDeg, z);\n }\n\n static getVisibleTilesFromViewport(\n z: number,\n xyzModel: AbstractSkyEntity,\n webgl: WebGL2RenderingContext,\n camera: Camera,\n pMatrix: ReadonlyMat4,\n sampleCount = 9,\n padding = 2,\n ): XYZTileCoord[] {\n const gl = webgl as GL;\n const canvas = gl.canvas as HTMLCanvasElement;\n const rect = canvas.getBoundingClientRect();\n const samples = Math.max(2, Math.floor(sampleCount));\n const edgeSamples = Math.max(samples * 2 + 1, 21);\n const safePadding = Math.max(0, Math.floor(padding));\n const tiles: XYZTileCoord[] = [];\n\n const addSample = (x: number, y: number): void => {\n const tile = XYZRayPickingUtils.getTileFromMouse(x, y, z, xyzModel, webgl, camera, pMatrix);\n if (!tile) return;\n\n tiles.push(tile);\n tiles.push(...XYZRayPickingUtils.getNeighborTiles(tile, safePadding));\n };\n\n for (let iy = 0; iy < samples; iy++) {\n const y = samples === 1 ? rect.height / 2 : (iy / (samples - 1)) * rect.height;\n for (let ix = 0; ix < samples; ix++) {\n const x = samples === 1 ? rect.width / 2 : (ix / (samples - 1)) * rect.width;\n addSample(x, y);\n }\n }\n\n for (let i = 0; i < edgeSamples; i++) {\n const t = edgeSamples === 1 ? 0.5 : i / (edgeSamples - 1);\n const x = t * rect.width;\n const y = t * rect.height;\n\n addSample(x, 0);\n addSample(x, rect.height);\n addSample(0, y);\n addSample(rect.width, y);\n }\n\n return XYZRayPickingUtils.fillSmallTileGaps(XYZRayPickingUtils.deduplicateTiles(tiles));\n }\n\n static modelPointToLonLat(point: Readonly<[number, number, number]>): XYZLonLat {\n const [x, y, z] = point;\n const len = Math.hypot(x, y, z);\n if (!Number.isFinite(len) || len === 0) {\n return { lonDeg: 0, latDeg: 0 };\n }\n\n const lonDeg = (Math.atan2(y, x) * 180) / Math.PI;\n const latDeg = (Math.asin(Math.max(-1, Math.min(1, z / len))) * 180) / Math.PI;\n\n return { lonDeg, latDeg };\n }\n\n static lonLatToTile(lonDeg: number, latDeg: number, z: number): XYZTileCoord {\n const zoom = Math.max(0, Math.floor(z));\n const dim = 2 ** zoom;\n const x = Math.floor(((lonDeg + 180) / 360) * dim);\n const y = Math.floor(XYZRayPickingUtils.latToTileY(latDeg, zoom));\n\n return {\n z: zoom,\n x: XYZRayPickingUtils.wrapTileX(x, dim),\n y: XYZRayPickingUtils.clampTileY(y, dim),\n };\n }\n\n static getNeighborTiles(tile: XYZTileCoord, ring = 1): XYZTileCoord[] {\n const dim = 2 ** tile.z;\n const tiles: XYZTileCoord[] = [];\n const safeRing = Math.max(0, Math.floor(ring));\n\n for (let dx = -safeRing; dx <= safeRing; dx++) {\n for (let dy = -safeRing; dy <= safeRing; dy++) {\n tiles.push({\n z: tile.z,\n x: XYZRayPickingUtils.wrapTileX(tile.x + dx, dim),\n y: XYZRayPickingUtils.clampTileY(tile.y + dy, dim),\n });\n }\n }\n\n return XYZRayPickingUtils.deduplicateTiles(tiles);\n }\n\n static deduplicateTiles(tiles: XYZTileCoord[]): XYZTileCoord[] {\n const map = new Map<string, XYZTileCoord>();\n for (const tile of tiles) {\n map.set(`${tile.z}/${tile.x}/${tile.y}`, tile);\n }\n return Array.from(map.values());\n }\n\n private static fillSmallTileGaps(tiles: XYZTileCoord[]): XYZTileCoord[] {\n if (tiles.length === 0) {\n return tiles;\n }\n\n const zoom = tiles[0].z;\n const dim = 2 ** zoom;\n const map = new Map<string, XYZTileCoord>();\n const key = (tile: XYZTileCoord): string => `${tile.z}/${tile.x}/${tile.y}`;\n const add = (tile: XYZTileCoord): void => {\n map.set(key(tile), tile);\n };\n const has = (x: number, y: number): boolean => (\n y >= 0 && y < dim && map.has(`${zoom}/${XYZRayPickingUtils.wrapTileX(x, dim)}/${y}`)\n );\n\n for (const tile of tiles) {\n add(tile);\n }\n\n for (const tile of tiles) {\n const x = tile.x;\n const y = tile.y;\n\n if (has(x - 2, y) && !has(x - 1, y)) {\n add({ z: zoom, x: XYZRayPickingUtils.wrapTileX(x - 1, dim), y });\n }\n if (has(x + 2, y) && !has(x + 1, y)) {\n add({ z: zoom, x: XYZRayPickingUtils.wrapTileX(x + 1, dim), y });\n }\n if (has(x, y - 2) && !has(x, y - 1)) {\n add({ z: zoom, x, y: y - 1 });\n }\n if (has(x, y + 2) && !has(x, y + 1)) {\n add({ z: zoom, x, y: y + 1 });\n }\n }\n\n return Array.from(map.values());\n }\n\n private static latToTileY(latDeg: number, z: number): number {\n const lat = Math.max(-MAX_MERCATOR_LAT, Math.min(MAX_MERCATOR_LAT, latDeg));\n const latRad = (lat * Math.PI) / 180;\n const dim = 2 ** z;\n return ((1 - Math.asinh(Math.tan(latRad)) / Math.PI) / 2) * dim;\n }\n\n private static isMercatorLatitude(latDeg: number): boolean {\n return Math.abs(latDeg) <= MAX_MERCATOR_LAT;\n }\n\n private static wrapTileX(x: number, dim: number): number {\n return ((x % dim) + dim) % dim;\n }\n\n private static clampTileY(y: number, dim: number): number {\n return Math.max(0, Math.min(dim - 1, y));\n }\n\n private static mat4MultiplyVec4(\n a: ReadonlyMat4,\n b: Readonly<[number, number, number, number]>,\n out: [number, number, number, number],\n ): [number, number, number, number] {\n const d = b[0], e = b[1], g = b[2], w = b[3];\n out[0] = a[0] * d + a[4] * e + a[8] * g + a[12] * w;\n out[1] = a[1] * d + a[5] * e + a[9] * g + a[13] * w;\n out[2] = a[2] * d + a[6] * e + a[10] * g + a[14] * w;\n out[3] = a[3] * d + a[7] * e + a[11] * g + a[15] * w;\n return out;\n }\n}\n\nexport default XYZRayPickingUtils;\n","export class Vec3 {\n x;\n y;\n z;\n constructor(x, y, z) {\n if (![x, y, z].every(Number.isFinite)) {\n throw new RangeError(\"Vec3 coordinates must be finite numbers.\");\n }\n this.x = x;\n this.y = y;\n this.z = z;\n }\n getX() {\n return this.x;\n }\n getY() {\n return this.y;\n }\n getZ() {\n return this.z;\n }\n lengthSquared() {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n length() {\n return Math.sqrt(this.lengthSquared());\n }\n normalize() {\n const length = this.length();\n if (length === 0)\n throw new RangeError(\"Cannot normalize a zero-length vector.\");\n return new Vec3(this.x / length, this.y / length, this.z / length);\n }\n dot(other) {\n return this.x * other.x + this.y * other.y + this.z * other.z;\n }\n}\n","import { Vec3 } from \"./vec3.js\";\nexport class Pointing {\n theta;\n phi;\n constructor(vec3, mirror = false, theta, phi) {\n if (vec3) {\n const unit = new Vec3(vec3.x, vec3.y, vec3.z).normalize();\n this.theta = Math.atan2(Math.sqrt(unit.x * unit.x + unit.y * unit.y), unit.z);\n this.phi = normalizePhi(mirror ? -Math.atan2(unit.y, unit.x) : Math.atan2(unit.y, unit.x));\n return;\n }\n if (!Number.isFinite(theta) || !Number.isFinite(phi)) {\n throw new RangeError(\"Pointing requires either a Vec3-like object or finite theta/phi radians.\");\n }\n this.theta = theta;\n this.phi = normalizePhi(phi);\n }\n toVec3() {\n const sinTheta = Math.sin(this.theta);\n return new Vec3(sinTheta * Math.cos(this.phi), sinTheta * Math.sin(this.phi), Math.cos(this.theta));\n }\n}\nfunction normalizePhi(phi) {\n const twoPi = 2 * Math.PI;\n return ((phi % twoPi) + twoPi) % twoPi;\n}\n","export class RangeSet {\n r = [];\n append(value) {\n this.appendRange(value, value + 1);\n }\n appendRange(startInclusive, endExclusive) {\n if (!Number.isInteger(startInclusive) || !Number.isInteger(endExclusive)) {\n throw new RangeError(\"RangeSet bounds must be integers.\");\n }\n if (startInclusive >= endExclusive)\n return;\n for (let value = startInclusive; value < endExclusive; value += 1) {\n this.r.push(value);\n }\n }\n toArray() {\n return [...this.r];\n }\n}\n","import { Pointing } from \"./pointing.js\";\nimport { RangeSet } from \"./rangeset.js\";\nimport { Vec3 } from \"./vec3.js\";\nconst TWO_THIRDS = 2 / 3;\nconst HALF_PI = Math.PI / 2;\nconst TWO_PI = 2 * Math.PI;\nconst MAX_SUPPORTED_ORDER = 26;\nconst DISC_EPSILON = 2e-7;\nconst JRLL = [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4];\nconst JPLL = [1, 3, 5, 7, 0, 2, 4, 6, 1, 3, 5, 7];\nconst X_OFFSET = [-1, -1, 0, 1, 1, 1, 0, -1];\nconst Y_OFFSET = [0, 1, 1, 1, 0, -1, -1, -1];\nconst FACE_ARRAY = [\n [8, 9, 10, 11, -1, -1, -1, -1, 10, 11, 8, 9],\n [5, 6, 7, 4, 8, 9, 10, 11, 9, 10, 11, 8],\n [-1, -1, -1, -1, 5, 6, 7, 4, -1, -1, -1, -1],\n [4, 5, 6, 7, 11, 8, 9, 10, 11, 8, 9, 10],\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],\n [1, 2, 3, 0, 0, 1, 2, 3, 5, 6, 7, 4],\n [-1, -1, -1, -1, 7, 4, 5, 6, -1, -1, -1, -1],\n [3, 0, 1, 2, 3, 0, 1, 2, 4, 5, 6, 7],\n [2, 3, 0, 1, -1, -1, -1, -1, 0, 1, 2, 3]\n];\nconst SWAP_ARRAY = [\n [0, 0, 3],\n [0, 0, 6],\n [0, 0, 0],\n [0, 0, 5],\n [0, 0, 0],\n [5, 0, 0],\n [0, 0, 0],\n [6, 0, 0],\n [3, 0, 0]\n];\nexport class Healpix {\n nside;\n order;\n npix;\n constructor(nside) {\n if (!Number.isInteger(nside) || nside <= 0) {\n throw new RangeError(\"nside must be a positive integer.\");\n }\n const order = Math.log2(nside);\n if (!Number.isInteger(order)) {\n throw new RangeError(\"nside must be a power of two.\");\n }\n if (order > MAX_SUPPORTED_ORDER) {\n throw new RangeError(`nside order must be <= ${MAX_SUPPORTED_ORDER} for safe JavaScript integer arithmetic.`);\n }\n this.nside = nside;\n this.order = order;\n this.npix = 12 * nside * nside;\n }\n getNPix() {\n return this.npix;\n }\n nside2order(nside) {\n if (!Number.isInteger(nside) || nside <= 0)\n return -1;\n const order = Math.log2(nside);\n return Number.isInteger(order) ? order : -1;\n }\n nest2xyf(pixel) {\n this.assertPixel(pixel);\n const facePixelCount = this.nside * this.nside;\n const face = Math.floor(pixel / facePixelCount);\n const localPixel = pixel % facePixelCount;\n return {\n ix: compactBits(localPixel),\n iy: compactBits(localPixel >> 1),\n face\n };\n }\n xyf2nest(ix, iy, face) {\n if (!Number.isInteger(face) || face < 0 || face >= 12) {\n throw new RangeError(\"face must be an integer in [0, 11].\");\n }\n if (!Number.isInteger(ix) || ix < 0 || ix >= this.nside) {\n throw new RangeError(\"ix must be an integer in [0, nside).\");\n }\n if (!Number.isInteger(iy) || iy < 0 || iy >= this.nside) {\n throw new RangeError(\"iy must be an integer in [0, nside).\");\n }\n return face * this.nside * this.nside + spreadBits(ix) + 2 * spreadBits(iy);\n }\n /**\n * Converts spherical coordinates to a HEALPix NESTED pixel index.\n *\n * Coordinates follow the HEALPix convention used by common implementations:\n * theta is colatitude in radians, with 0 at the north pole and pi at the\n * south pole; phi is longitude in radians and is normalized into [0, 2pi).\n *\n * Formula sources:\n * - K. M. Gorski et al., \"HEALPix: A Framework for High-Resolution\n * Discretization and Fast Analysis of Data Distributed on the Sphere\",\n * Astrophysical Journal 622, 2005.\n * - HEALPix Primer / documentation: equal-area iso-latitude sphere\n * subdivision, NESTED ordering, polar caps and equatorial belt.\n * - Public HEALPix algorithm descriptions for NESTED indexing using\n * z = cos(theta), tt = phi / (pi/2), and the |z| = 2/3 belt boundary.\n *\n * Reference URLs:\n * - https://healpix.sourceforge.io/\n * - https://healpix.jpl.nasa.gov/\n * - https://healpix-geo.readthedocs.io/en/stable/healpix/index.html\n *\n * Points exactly on HEALPix cell boundaries can be assigned differently by\n * different implementations due to floating-point and boundary conventions.\n * This implementation normalizes phi before indexing.\n */\n ang2pix(pointing, _mirror = false) {\n if (!Number.isFinite(pointing.theta) || !Number.isFinite(pointing.phi)) {\n throw new RangeError(\"pointing theta and phi must be finite radians.\");\n }\n if (pointing.theta < 0 || pointing.theta > Math.PI) {\n throw new RangeError(\"pointing theta must be in [0, pi].\");\n }\n const z = Math.cos(pointing.theta);\n const za = Math.abs(z);\n const tt = normalizePhi(pointing.phi) / HALF_PI;\n if (za <= TWO_THIRDS) {\n const temp1 = this.nside * (0.5 + tt);\n const temp2 = this.nside * z * 0.75;\n const jp = Math.floor(temp1 - temp2);\n const jm = Math.floor(temp1 + temp2);\n const ifp = Math.floor(jp / this.nside);\n const ifm = Math.floor(jm / this.nside);\n const face = ifp === ifm ? (ifp | 4) : ifp < ifm ? ifp : ifm + 8;\n const ix = modulo(jm, this.nside);\n const iy = this.nside - modulo(jp, this.nside) - 1;\n return this.xyf2nest(ix, iy, face);\n }\n const ntt = Math.min(3, Math.floor(tt));\n const tp = tt - ntt;\n const sinTheta = Math.sin(pointing.theta);\n const edgeDistance = za < 0.99\n ? this.nside * Math.sqrt(3 * (1 - za))\n : (this.nside * sinTheta) / Math.sqrt((1 + za) / 3);\n const jp = Math.min(this.nside - 1, Math.floor(tp * edgeDistance));\n const jm = Math.min(this.nside - 1, Math.floor((1 - tp) * edgeDistance));\n return z >= 0\n ? this.xyf2nest(this.nside - jm - 1, this.nside - jp - 1, ntt)\n : this.xyf2nest(jp, jm, ntt + 8);\n }\n /**\n * Returns the unit vector pointing to the center of a NESTED pixel.\n *\n * Formula sources are the same public HEALPix references used by ang2pix.\n * The inverse mapping starts from the NESTED face-local coordinates\n * `(ix, iy, face)`, reconstructs the iso-latitude ring via `jr`, and then\n * derives `z = cos(theta)` and `phi` for the pixel center.\n */\n pix2vec(pixel) {\n return this.pix2ang(pixel).toVec3();\n }\n /**\n * Converts a NESTED pixel index to spherical coordinates at the pixel center.\n *\n * Returned coordinates follow the HEALPix convention: theta is colatitude in\n * radians and phi is longitude in radians normalized into [0, 2pi).\n */\n pix2ang(pixel, mirror = false) {\n const { z, phi } = this.pix2zphi(pixel);\n const theta = Math.acos(clamp(z, -1, 1));\n return new Pointing(null, mirror, theta, phi);\n }\n /**\n * Returns the four corner unit vectors for a NESTED pixel.\n *\n * The corners are evaluated in HEALPix face-local coordinates and returned\n * in the same order used by common HEALPix implementations: north, west,\n * south, east around the diamond-shaped projected pixel.\n *\n * Formula sources:\n * - HEALPix public projection model: each base-resolution face is mapped\n * from local `(x, y, face)` coordinates to `(z, phi)` on the sphere.\n * - HEALPix Primer / documentation for the north polar cap, equatorial\n * belt and south polar cap equations.\n *\n * Reference URLs:\n * - https://healpix.sourceforge.io/\n * - https://healpix.jpl.nasa.gov/\n * - https://healpix-geo.readthedocs.io/en/stable/healpix/index.html\n */\n getBoundaries(pixel) {\n const { ix, iy, face } = this.nest2xyf(pixel);\n const delta = 0.5 / this.nside;\n const centerX = (ix + 0.5) / this.nside;\n const centerY = (iy + 0.5) / this.nside;\n return [\n this.faceLocalToVec3(centerX + delta, centerY + delta, face),\n this.faceLocalToVec3(centerX - delta, centerY + delta, face),\n this.faceLocalToVec3(centerX - delta, centerY - delta, face),\n this.faceLocalToVec3(centerX + delta, centerY - delta, face)\n ];\n }\n /**\n * Returns `4 * step` unit vectors sampled along a NESTED pixel boundary.\n *\n * `step = 1` is equivalent to `getBoundaries(pixel)`. Higher values sample\n * each projected edge before moving to the next one, preserving the same\n * north, west, south, east traversal order.\n */\n getBoundariesWithStep(pixel, step) {\n if (!Number.isInteger(step) || step <= 0) {\n throw new RangeError(\"step must be a positive integer.\");\n }\n const { ix, iy, face } = this.nest2xyf(pixel);\n const delta = 0.5 / this.nside;\n const centerX = (ix + 0.5) / this.nside;\n const centerY = (iy + 0.5) / this.nside;\n const increment = 1 / (this.nside * step);\n const points = new Array(4 * step);\n for (let index = 0; index < step; index += 1) {\n points[index] = this.faceLocalToVec3(centerX + delta - index * increment, centerY + delta, face);\n points[index + step] = this.faceLocalToVec3(centerX - delta, centerY + delta - index * increment, face);\n points[index + 2 * step] = this.faceLocalToVec3(centerX - delta + index * increment, centerY - delta, face);\n points[index + 3 * step] = this.faceLocalToVec3(centerX + delta, centerY - delta + index * increment, face);\n }\n return points;\n }\n /**\n * Returns the four corner unit vectors for explicit face-local coordinates.\n *\n * This is the same geometry as `getBoundaries`, but it avoids first packing\n * `(x, y, face)` into a NESTED pixel. It is kept as a compatibility method\n * for tile renderers that already operate in face-local coordinates.\n */\n getPointsForXyfNoStep(x, y, face) {\n this.assertXyf(x, y, face);\n const delta = 0.5 / this.nside;\n const centerX = (x + 0.5) / this.nside;\n const centerY = (y + 0.5) / this.nside;\n return [\n this.faceLocalToVec3(centerX + delta, centerY + delta, face),\n this.faceLocalToVec3(centerX - delta, centerY + delta, face),\n this.faceLocalToVec3(centerX - delta, centerY - delta, face),\n this.faceLocalToVec3(centerX + delta, centerY - delta, face)\n ];\n }\n /**\n * Returns the eight neighboring NESTED pixels using the legacy HEALPix order.\n *\n * Missing cardinal neighbors at the poles are returned as `-1`. The face\n * transition tables encode the public HEALPix base-face topology; interior\n * pixels avoid table lookup and stay on the current face.\n */\n neighbours(pixel) {\n const { ix, iy, face } = this.nest2xyf(pixel);\n const result = new Int32Array(8);\n const maxIndex = this.nside - 1;\n if (ix > 0 && ix < maxIndex && iy > 0 && iy < maxIndex) {\n result[0] = this.xyf2nest(ix - 1, iy, face);\n result[1] = this.xyf2nest(ix - 1, iy + 1, face);\n result[2] = this.xyf2nest(ix, iy + 1, face);\n result[3] = this.xyf2nest(ix + 1, iy + 1, face);\n result[4] = this.xyf2nest(ix + 1, iy, face);\n result[5] = this.xyf2nest(ix + 1, iy - 1, face);\n result[6] = this.xyf2nest(ix, iy - 1, face);\n result[7] = this.xyf2nest(ix - 1, iy - 1, face);\n return result;\n }\n for (let index = 0; index < result.length; index += 1) {\n let x = ix + X_OFFSET[index];\n let y = iy + Y_OFFSET[index];\n let neighborCase = 4;\n if (x < 0) {\n x += this.nside;\n neighborCase -= 1;\n }\n else if (x >= this.nside) {\n x -= this.nside;\n neighborCase += 1;\n }\n if (y < 0) {\n y += this.nside;\n neighborCase -= 3;\n }\n else if (y >= this.nside) {\n y -= this.nside;\n neighborCase += 3;\n }\n const neighborFace = FACE_ARRAY[neighborCase][face];\n if (neighborFace < 0) {\n result[index] = -1;\n continue;\n }\n const swapBits = SWAP_ARRAY[neighborCase][Math.floor(face / 4)];\n if ((swapBits & 1) > 0) {\n x = this.nside - x - 1;\n }\n if ((swapBits & 2) > 0) {\n y = this.nside - y - 1;\n }\n if ((swapBits & 4) > 0) {\n const previousX = x;\n x = y;\n y = previousX;\n }\n result[index] = this.xyf2nest(x, y, neighborFace);\n }\n return result;\n }\n /**\n * Returns pixels that overlap a spherical disk.\n *\n * The inclusive mode follows the public HEALPix strategy of testing at\n * `fact * nside` resolution and mapping matching subpixels back to this\n * instance's order. For NESTED ordering, `fact` must be zero or a power of\n * two. `fact = 0` disables inclusive oversampling.\n */\n queryDiscInclusive(pointing, radiusRad, fact) {\n if (!Number.isFinite(pointing.theta) || !Number.isFinite(pointing.phi)) {\n throw new RangeError(\"pointing theta and phi must be finite radians.\");\n }\n if (!Number.isFinite(radiusRad) || radiusRad < 0) {\n throw new RangeError(\"radiusRad must be a non-negative finite number.\");\n }\n if (!Number.isInteger(fact) || fact < 0 || (fact > 0 && !isPowerOfTwo(fact))) {\n throw new RangeError(\"fact must be zero or a positive power of two.\");\n }\n const result = new RangeSet();\n if (radiusRad >= Math.PI) {\n result.appendRange(0, this.npix);\n return result;\n }\n const inclusive = fact !== 0;\n const oversamplingOrder = inclusive ? Math.log2(fact) : 0;\n const maxOrder = Math.min(MAX_SUPPORTED_ORDER, this.order + oversamplingOrder);\n const center = pointing.toVec3();\n const cosRadius = Math.cos(radiusRad);\n const sinRadius = Math.sin(radiusRad);\n const cosRadiusPlusPixelRadius = [];\n const cosRadiusMinusPixelRadius = [];\n const healpixByOrder = new Map();\n const pixels = new Set();\n const stack = [];\n for (let order = 0; order <= maxOrder; order += 1) {\n const pixelRadius = maxPixelRadius(2 ** order);\n const cosPixelRadius = Math.cos(pixelRadius);\n const sinPixelRadius = Math.sin(pixelRadius);\n cosRadiusPlusPixelRadius[order] =\n radiusRad + pixelRadius > Math.PI ? -1 : cosRadius * cosPixelRadius - sinRadius * sinPixelRadius;\n cosRadiusMinusPixelRadius[order] =\n radiusRad - pixelRadius < 0 ? 1 : cosRadius * cosPixelRadius + sinRadius * sinPixelRadius;\n }\n for (let face = 11; face >= 0; face -= 1) {\n stack.push({ pixel: face, order: 0 });\n }\n while (stack.length > 0) {\n const current = stack.pop();\n if (!current)\n break;\n let orderHealpix = healpixByOrder.get(current.order);\n if (!orderHealpix) {\n orderHealpix = current.order === this.order ? this : new Healpix(2 ** current.order);\n healpixByOrder.set(current.order, orderHealpix);\n }\n const pixelCenter = orderHealpix.pix2vec(current.pixel);\n const centerDistanceCosine = center.dot(pixelCenter);\n if (centerDistanceCosine + DISC_EPSILON <= cosRadiusPlusPixelRadius[current.order]) {\n continue;\n }\n const zone = centerDistanceCosine < cosRadius\n ? 1\n : centerDistanceCosine <= cosRadiusMinusPixelRadius[current.order]\n ? 2\n : 3;\n this.collectDiscPixel(current.order, maxOrder, zone, current.pixel, inclusive, stack, pixels);\n }\n for (const pixel of [...pixels].sort((a, b) => a - b)) {\n result.append(pixel);\n }\n return result;\n }\n /**\n * Returns pixels that overlap a convex spherical polygon.\n *\n * The vertices are interpreted as ordered polygon corners on the unit\n * sphere. The implementation converts polygon edges to half-space normals\n * and delegates to the same hierarchical multi-disc test used by public\n * HEALPix polygon queries.\n */\n queryPolygonInclusive(vertices, fact) {\n if (vertices.length < 3) {\n throw new RangeError(\"vertices must contain at least three points.\");\n }\n const vertexVectors = vertices.map((vertex) => {\n if (!Number.isFinite(vertex.theta) || !Number.isFinite(vertex.phi)) {\n throw new RangeError(\"polygon vertex theta and phi must be finite radians.\");\n }\n return vertex.toVec3();\n });\n const normals = [];\n let flip = 0;\n let index = 0;\n while (index < vertexVectors.length) {\n const first = vertexVectors[index];\n const medium = vertexVectors[(index + 1) % vertexVectors.length];\n const last = vertexVectors[(index + 2) % vertexVectors.length];\n const normal = normalizeVec(crossVec(first, medium));\n const handedness = normal.dot(last);\n if (index === 0) {\n flip = handedness < 0 ? -1 : 1;\n }\n else if (flip * handedness < 0) {\n vertexVectors.splice((index + 1) % vertexVectors.length, 1);\n normals.splice(index, 1);\n index = Math.max(0, index - 1);\n continue;\n }\n normals[index] = scaleVec(normal, flip);\n index += 1;\n }\n const radii = new Array(normals.length).fill(HALF_PI);\n if (fact !== 0) {\n const containingCircle = findContainingCircle(vertexVectors);\n normals.push(containingCircle.center);\n radii.push(Math.acos(clamp(containingCircle.cosRadius, -1, 1)));\n }\n return this.queryMultiDisc(normals, radii, fact);\n }\n /**\n * Returns pixels that overlap the intersection of spherical discs.\n *\n * Each `normal[i]` is the center vector of a disc and `radiusRad[i]` its\n * angular radius. This is primarily the engine behind polygon queries, but\n * is exposed for compatibility with HEALPix-style APIs.\n */\n queryMultiDisc(normals, radiusRad, fact) {\n if (normals.length !== radiusRad.length) {\n throw new RangeError(\"normals and radiusRad must have the same length.\");\n }\n if (!Number.isInteger(fact) || fact < 0 || (fact > 0 && !isPowerOfTwo(fact))) {\n throw new RangeError(\"fact must be zero or a positive power of two.\");\n }\n const inclusive = fact !== 0;\n const oversamplingOrder = inclusive ? Math.log2(fact) : 0;\n const maxOrder = Math.min(MAX_SUPPORTED_ORDER, this.order + oversamplingOrder);\n const result = new RangeSet();\n const pixels = new Set();\n const stack = [];\n const healpixByOrder = new Map();\n const cosineLimits = [];\n for (const radius of radiusRad) {\n if (!Number.isFinite(radius) || radius < 0) {\n throw new RangeError(\"radiusRad values must be non-negative finite numbers.\");\n }\n }\n for (let order = 0; order <= maxOrder; order += 1) {\n const pixelRadius = maxPixelRadius(2 ** order);\n cosineLimits[order] = normals.map((_, normalIndex) => {\n const radius = radiusRad[normalIndex];\n return [\n radius + pixelRadius > Math.PI ? -1 : Math.cos(radius + pixelRadius),\n order === 0 ? Math.cos(radius) : cosineLimits[0][normalIndex][1],\n radius - pixelRadius < 0 ? 1 : Math.cos(radius - pixelRadius)\n ];\n });\n }\n for (let face = 11; face >= 0; face -= 1) {\n stack.push({ pixel: face, order: 0 });\n }\n while (stack.length > 0) {\n const current = stack.pop();\n if (!current)\n break;\n let orderHealpix = healpixByOrder.get(current.order);\n if (!orderHealpix) {\n orderHealpix = current.order === this.order ? this : new Healpix(2 ** current.order);\n healpixByOrder.set(current.order, orderHealpix);\n }\n const pixelCenter = orderHealpix.pix2vec(current.pixel);\n let zone = 3;\n for (let normalIndex = 0; normalIndex < normals.length && zone > 0; normalIndex += 1) {\n const centerDistanceCosine = pixelCenter.dot(normals[normalIndex]);\n for (let zoneIndex = 0; zoneIndex < zone; zoneIndex += 1) {\n if (centerDistanceCosine < cosineLimits[current.order][normalIndex][zoneIndex]) {\n zone = zoneIndex;\n }\n }\n }\n if (zone > 0) {\n this.collectDiscPixel(current.order, maxOrder, zone, current.pixel, inclusive, stack, pixels);\n }\n }\n for (const pixel of [...pixels].sort((a, b) => a - b)) {\n result.append(pixel);\n }\n return result;\n }\n assertPixel(pixel) {\n if (!Number.isInteger(pixel) || pixel < 0 || pixel >= this.npix) {\n throw new RangeError(\"pixel must be an integer in [0, npix).\");\n }\n }\n assertXyf(x, y, face) {\n if (!Number.isInteger(face) || face < 0 || face >= 12) {\n throw new RangeError(\"face must be an integer in [0, 11].\");\n }\n if (!Number.isInteger(x) || x < 0 || x >= this.nside) {\n throw new RangeError(\"x must be an integer in [0, nside).\");\n }\n if (!Number.isInteger(y) || y < 0 || y >= this.nside) {\n throw new RangeError(\"y must be an integer in [0, nside).\");\n }\n }\n pix2zphi(pixel) {\n const { ix, iy, face } = this.nest2xyf(pixel);\n const fact2 = 1 / (3 * this.nside * this.nside);\n const fact1 = 2 / (3 * this.nside);\n const jr = JRLL[face] * this.nside - ix - iy - 1;\n let ringPixelCount;\n let z;\n if (jr < this.nside) {\n ringPixelCount = jr;\n z = 1 - ringPixelCount * ringPixelCount * fact2;\n }\n else if (jr > 3 * this.nside) {\n ringPixelCount = 4 * this.nside - jr;\n z = ringPixelCount * ringPixelCount * fact2 - 1;\n }\n else {\n ringPixelCount = this.nside;\n z = (2 * this.nside - jr) * fact1;\n }\n const phiIndex = modulo(JPLL[face] * ringPixelCount + ix - iy, 8 * ringPixelCount);\n const phi = ringPixelCount === this.nside\n ? 0.75 * HALF_PI * phiIndex * fact1\n : (0.5 * HALF_PI * phiIndex) / ringPixelCount;\n return { z, phi: normalizePhi(phi) };\n }\n faceLocalToVec3(x, y, face) {\n const jr = JRLL[face] - x - y;\n let ringScale;\n let z;\n if (jr < 1) {\n ringScale = jr;\n z = 1 - (ringScale * ringScale) / 3;\n }\n else if (jr > 3) {\n ringScale = 4 - jr;\n z = (ringScale * ringScale) / 3 - 1;\n }\n else {\n ringScale = 1;\n z = (2 - jr) * TWO_THIRDS;\n }\n const phiIndex = modulo(JPLL[face] * ringScale + x - y, 8 * ringScale);\n const phi = ringScale <= Number.EPSILON ? 0 : (0.5 * HALF_PI * phiIndex) / ringScale;\n const sinTheta = Math.sqrt(Math.max(0, (1 - z) * (1 + z)));\n return new Vec3(sinTheta * Math.cos(phi), sinTheta * Math.sin(phi), z);\n }\n collectDiscPixel(order, maxOrder, zone, pixel, inclusive, stack, pixels) {\n if (zone === 0)\n return;\n if (order < this.order) {\n if (zone >= 3) {\n const childCount = 4 ** (this.order - order);\n for (let child = pixel * childCount; child < (pixel + 1) * childCount; child += 1) {\n pixels.add(child);\n }\n }\n else {\n pushChildren(stack, pixel, order);\n }\n return;\n }\n if (order > this.order) {\n const parentPixel = Math.floor(pixel / 4 ** (order - this.order));\n if (zone >= 2 || order >= maxOrder) {\n pixels.add(parentPixel);\n }\n else {\n pushChildren(stack, pixel, order);\n }\n return;\n }\n if (zone >= 2) {\n pixels.add(pixel);\n }\n else if (inclusive) {\n if (order < maxOrder) {\n pushChildren(stack, pixel, order);\n }\n else {\n pixels.add(pixel);\n }\n }\n }\n}\nfunction spreadBits(value) {\n let result = 0;\n for (let bit = 0; bit <= MAX_SUPPORTED_ORDER; bit += 1) {\n result += (Math.floor(value / 2 ** bit) % 2) * 2 ** (2 * bit);\n }\n return result;\n}\nfunction compactBits(value) {\n let result = 0;\n for (let bit = 0; bit <= MAX_SUPPORTED_ORDER; bit += 1) {\n result += (Math.floor(value / 2 ** (2 * bit)) % 2) * 2 ** bit;\n }\n return result;\n}\nfunction normalizePhi(phi) {\n return ((phi % TWO_PI) + TWO_PI) % TWO_PI;\n}\nfunction modulo(value, divisor) {\n return ((value % divisor) + divisor) % divisor;\n}\nfunction clamp(value, min, max) {\n return Math.min(max, Math.max(min, value));\n}\nfunction isPowerOfTwo(value) {\n return value > 0 && 2 ** Math.floor(Math.log2(value)) === value;\n}\nfunction maxPixelRadius(nside) {\n const equatorialZ = TWO_THIRDS;\n const equatorialPhi = Math.PI / (4 * nside);\n const equatorialSinTheta = Math.sqrt((1 - equatorialZ) * (1 + equatorialZ));\n const equatorialPoint = new Vec3(equatorialSinTheta * Math.cos(equatorialPhi), equatorialSinTheta * Math.sin(equatorialPhi), equatorialZ);\n const polarOffset = (1 - 1 / nside) ** 2;\n const polarZ = 1 - polarOffset / 3;\n const polarPoint = new Vec3(Math.sqrt((1 - polarZ) * (1 + polarZ)), 0, polarZ);\n return Math.acos(clamp(equatorialPoint.dot(polarPoint), -1, 1));\n}\nfunction pushChildren(stack, pixel, order) {\n for (let index = 3; index >= 0; index -= 1) {\n stack.push({ pixel: 4 * pixel + index, order: order + 1 });\n }\n}\nfunction addVec(a, b) {\n return new Vec3(a.x + b.x, a.y + b.y, a.z + b.z);\n}\nfunction subVec(a, b) {\n return new Vec3(a.x - b.x, a.y - b.y, a.z - b.z);\n}\nfunction scaleVec(vec, factor) {\n return new Vec3(vec.x * factor, vec.y * factor, vec.z * factor);\n}\nfunction crossVec(a, b) {\n return new Vec3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x);\n}\nfunction normalizeVec(vec) {\n return vec.normalize();\n}\nfunction findContainingCircle(points) {\n if (points.length < 2) {\n throw new RangeError(\"at least two points are required to find a containing circle.\");\n }\n let center = normalizeVec(addVec(points[0], points[1]));\n let cosRadius = points[0].dot(center);\n for (let index = 2; index < points.length; index += 1) {\n if (points[index].dot(center) < cosRadius) {\n ({ center, cosRadius } = findCircleThroughOnePoint(points, index));\n }\n }\n return { center, cosRadius };\n}\nfunction findCircleThroughOnePoint(points, q) {\n let center = normalizeVec(addVec(points[0], points[q]));\n let cosRadius = points[0].dot(center);\n for (let index = 1; index < q; index += 1) {\n if (points[index].dot(center) < cosRadius) {\n ({ center, cosRadius } = findCircleThroughTwoPoints(points, index, q));\n }\n }\n return { center, cosRadius };\n}\nfunction findCircleThroughTwoPoints(points, q1, q2) {\n let center = normalizeVec(addVec(points[q1], points[q2]));\n let cosRadius = points[q1].dot(center);\n for (let index = 0; index < q1; index += 1) {\n if (points[index].dot(center) < cosRadius) {\n center = normalizeVec(crossVec(subVec(points[q1], points[index]), subVec(points[q2], points[index])));\n cosRadius = points[index].dot(center);\n if (cosRadius < 0) {\n center = scaleVec(center, -1);\n cosRadius = -cosRadius;\n }\n }\n }\n return { center, cosRadius };\n}\n","export { Healpix } from \"./healpix.js\";\nexport { Hploc } from \"./hploc.js\";\nexport { Pointing } from \"./pointing.js\";\nexport { RangeSet } from \"./rangeset.js\";\nexport { Vec3 } from \"./vec3.js\";\n","// The module cache\nconst __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tconst cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tconst module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter/value functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tif(Array.isArray(definition)) {\n\t\tvar i = 0;\n\t\twhile(i < definition.length) {\n\t\t\tvar key = definition[i++];\n\t\t\tvar binding = definition[i++];\n\t\t\tif(!__webpack_require__.o(exports, key)) {\n\t\t\t\tif(binding === 0) {\n\t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, value: definition[i++] });\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: binding });\n\t\t\t\t}\n\t\t\t} else if(binding === 0) { i++; }\n\t\t}\n\t} else {\n\t\tfor(var key in definition) {\n\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t\t}\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nlet __webpack_exports__ = __webpack_require__(1229);\n",""],"names":[],"sourceRoot":""}
|